안녕하세요?


지난번 포스팅에서는 SQL 쿼리가 안 되어서 어떻게 애를 애를 먹었습니다만, 아무튼 그 놈의 그 ' ' 하나를 붙이지 않았다는 이유로 이렇게 애를 먹었다는 사실을 알고는 조금은 힘이 빠지기는 빠졌습니다. 그래서 늦어진 만큼 작업을 빨리 진행하도록 해 보겠습니다.



먼저 위 스크린샷에 나오는 것처럼 SELECT count(*) FROM '테이블이름' 이라는 쿼리를 사용해 보도록 합니다. 이 쿼리는 테이블 안에 있는 모든 열(row)을 읽어 들이는 역할을 합니다.



실제로 숫자가 마지막 값으로 나오는 것을 볼 수 있는데, 이게 진짜로 데이터 베이스 살의 열 갯수-모든 열의 갯수와 맞는지를 살펴봐야 합니다.



DB Browser에서 한번 확인을 해 보니까, 실제로 일치한다는 것을 확인할 수 있었습니다.



이제 위의 붉은색 박스안에 있는 것과 같은 내용의 수식을 쓰면, 제 경우에는 학습에 75%의 데이터만 쓰기 때문에, 일단 75%가 나올 수 있는 공식을 사용해 보도록 합니다.




어떻게 된 일인지 몰라도, python의 작동이 중지가 된 것을 확인해 볼 수 있었습니다.



그래서 수식을 고치기도 했고, lineEdit_3에서 나왔는 텍스트가 진짜로 문자열 형태로 처리가 되어 있기 때문에, 이런 일이 벌어진 것 이었습니다. 그래서 하는 수 없이 float()함수를 사용해서 일단 숫자로 처리하는 단계도 거쳐야 했습니다.



일단 결과값이 나오기는 했는데, 소수점이 붙은 실수로 나오는 것을 볼 수 있습니다. 적확하게는 1174번째 열에서 75%에 해당하기 때문에, 이건 손을 좀 볼 필요가 있습니다.



그래서 위 스크린샷과 같이 먼저 정수로 바꾸어 주는 함수인 int()함수를 사용하면 어떻게 반올림을 해 줄 것으로 기대를 했습니다.




결과를 확인해 보니, 반올림은 커녕, 그냥 소수점 이하의 자리를 그냥 가져다 버리는 것으로 볼 수 있었습니다. 그래서 이대로는 안되겠다는 생각이 듭니다.



그래서 위 스크린샷과 같이 어떤 파이썬의 함수가 반올림을 해주느냐 했더니, round()라는 함수가 해주는 것을 볼 수 있었습니다.



실제로 제가 유저 인터페이스 상에서 75%라는 수치를 입력해 보고나서, 한번 제대로 동작이 되는지를 확인해 보고자 합니다.



진짜로 75%에 해당을 하는 값인 1174의 값이 나오는 것을 확인할 수 있었습니다. 이렇게 하는 것으로 이제 데이터 베이스의 열에서 75%에 해당하는 열을 계산해 내는 것은 좋은데, 문제는 진짜로 데이터를 가지고 올 수 있느냐 하는 것 입니다. 이 내용의 포스팅을 다음 포스팅에서 올릴 것을 약속드리며, 이번 포스팅은 여기서 마치겠습니다.

  1. Jet 2019.06.13 20:47

    학습에 사용할 데이터 % 를 입력후 엔터를 누르게되면 퍼센트만큼의 데이터 갯수는 나오지만 그 뒤에 바로 에러가 나옵니다..
    Traceback (most recent call last):
    File "D:\stock\kiwoom\venv\lib\site-packages\pandas\io\sql.py", line 1431, in execute
    cur.execute(*args)
    sqlite3.OperationalError: no such table:
    이런 에러가 발생되는데 혹시 유의해서 봐야할것이 있나요?? 일주일째 여기 잡혀있습니다 ..ㅠㅠ 도움 부탁드리겠습니다

    • 안녕하세요?
      에러 메세지를 보니 데이터 베이스 파일에 해당하는 테이블이 없다고 나오는 에러입니다.
      이런 경우에는 진짜로 데이터 베이스 파일 안에 테이블이 없거나,
      아니면 테이블의 이름을 잘못 입력하면 이런 에러가 나옵니다.

  2. Jet 2019.06.13 22:00

    근데 종목명을 입력했을때 데이터가 있다고 나오는데 왜 학습데이터 퍼센트만 입력하면 이렇게 나오는지 알수있을까요??

    • 안녕하세요?
      제 경우에는 일단 종목코드가 들어간 부분의 위젯에 있는 텍스트를 가지고 오도록 했습니다.
      여기서 이런다면 우선 강화학습을 하는 메서드에서 이런 처리가 제대로 된건지 의심을 해야 합니다.
      혹시 위젯 이름이 저랑 다른데 그대로 쓰셨거나 하면 이럴 수 있습니다.
      그 외에 종목 코드를 숫자 그대로 가지고 와서 생기는 오류일 수 있습니다.
      이런 경우 str ( ) 함수를 처리해야 합니다.

  3. Jet 2019.06.15 16:54

    data_manager.py 에서 문제가 있는걸 찾았습니다. 소스중에 db파일을 불러오는
    chart_data = pd.read_sql(sqlCode, con, index_col = None) 에서 에러가 발생하는걸 확인하였고
    chart_data = pd.read_sql("SELECT * FROM '068400'", con, index_col=None)
    이런식으로 코드를 변경하면 오류가 발생하지 않는걸로 확인되었습니다.
    지금까지 도움주셔서 감사합니다 ㅎㅎ 다시한번 제가 연구를 해서 오류해결에 힘써보겠습니다
    포스팅하시는 글들 유익하게 잘 보고있습니다!

    • 아......이렇 수가 설마 했더니 sql 쿼리 넣는데서 에러가 난 것이였군요.
      그런데 그렇게 바꾸시면 나중에 종목을 바꿀 경우-다른 종목코드를 사용하실 경우 일일히 입력하셔야 합니다.

+ Recent posts