SQLite3 파이썬 pandas 데이터프레임으로 불러오기

목차

    2017. 7. 31. 07:35

    이전 포스팅에서 경마 경기들을 크롤링하여 SQLITE3에 저장하였다. 이제 저장한 DB들을 분석을 위해 파이썬으로 불러오는 작업을 해 보고자 한다.

    오늘은 SQLite3에 저장한 DB를 파이썬 pandas데이터프레임으로 불러오는 작업을 해보고자 한다.


    sqlite3


    SQLite3에 DB에 접근하기 위해 sqlite3 라이브러리를 import 한다. 파이썬에서 데이터분석을 하기 위해서 pandas라는 라이브러리도 import한다. pandas는 파이썬에서 데이터 분석을 하기 위한 환경을 지원한다. pandas에 대한 자세한 내용이 긍금하다면, 아래 포스팅을 참조해보세요.
    ( 참조: python pandas의 dataframe(데이터프레임)에 대해서 알아보자 )


    
      # coding=utf-8

    import sqlite3
    import pandas as pd



    필요한 라이브러리를 import한 후에 main을 작성한다. 아래와 같이 main을 별도로 지정하는 것은 다른 파이썬 파일에서 import는 하는 경우 때문이다. 파이썬 파일을 다른 파일에서 import하는 경우 main으로 지정하지 않은 모든 코드가 실행된다. 그래서, 해당 코드에서만 실행하고 싶은 내용은 별도로 main을 지정해서 작성한다.



    
      if __name__ == "__main__":

    con = sqlite3.connect("./data/race.db")
    cur = con.cursor()



    다음 쿼리를 실행해서 필요로 하는 테이블을 불러온다. 



    
      query = cur.execute("SELECT * From total_hn_bu")
    
    



    위의 쿼리를 실행하면 칼럼명은 가져오지 않는다. 그래서 아래와 같이 query.description을 이용해서 칼럼명을 가져온다.



    
      cols = [column[0] for column in query.description]
    
    



    다음 쿼리를 실행하고, 칼럼명을 지정해서 데이터프레임을 만든다.



    
      race_result = pd.DataFrame.from_records(data=query.fetchall(), columns=cols)
    
    



    데이터를 다 가져오고 나면, DB를 닫아준다.



    
      con.close()
    
    



    중간에 SQL쿼리를 입력하는 부분을 수정해서 필요한 데이터만 가져올 수 있다. 여기서는 SQL에 대한 지식이 있으면 더 수월하게 작업할 수 있다. 예를 들면 where절을 이용해서 원하는 행만 가져올 수도 있고, 아래와 같이 max함수를 이용해서 최대값만 가져올 수도 있다.


    
      query = cur.execute("SELECT * From total_hn_bu where date>201800")
    
      query = cursor.execute("SELECT max(rcDate) From record")
    
    


    SQLite3의 SQL문에 대해서 더 자세히 알고 싶다면, SQLite홈페이지를 방문해보도록 하자.
    ( 참조: SQLite 홈페이지 방문하기 )



    오늘은 이렇게 SQLite3로 저장한 DB를 파이썬 dataframe으로 불러오는 작업에 대해서 알아보았다.  SQL쿼리를 통해 손쉽게 가져올 수 있다. SQL에 익숙하다면 파이썬으로 데이터를 불러오지 않고, SQL을 이용해서 분석할 수도 있다.
    (참조: SQLITE3 파이참에서 SQL로 사용하기 )


    이제 경마데이터를 가지고 간단한 분석을 하기 위해 데이터를 가공해보자. 이후의 데이터 가공방법이 궁금하다면, 아래 포스팅을 참조해보자.
    ( 참조: 경주 기록을 속도로 바꾸기 - pandas의 dataframe에서 문자열 다루기 )