본문 바로가기

Programming/Tip&Informaion

[DataScience] DB SQL과 연동하기

DB에 있는 데이터를 가지고 활용하여 분석하는 방법을 소개하겠습니다. 물론 DB에 있는 데이터들을 csv 파일로 저장해서 사용할 수 있지만, 그런 것보다는 DB에 있는 데이터를 직접 불러오는 게 더 효율적이기 때문입니다. 또한, csv 파일이너무 클 경우 대부분의 데이터 핸들링을 DB에서 진행한 후 결과만 가져 온다면 메모리 면에서 훨씬 효율적일 것이라고 예상합니다.

 

저는 간단히 진행할 것이기에 sqlite 를 활용해보겠습니다.

우선 sqlite 관련 라이브러리를 설치합니다.

!pip install pysqlite3

라이브러리를 불러옵시다.

import sqlite3
import pandas as pd

DB 연결

conn = sqlite3.connect('example.db')

cursor 등록

*cursor는 SQL 명령문을 실행시킬 수 있는 객체라고 생각하면 될 것 같습니다.

c = conn.cursor()

명령문 실행법

c.execute("SQL명령문")

*일반적인 SQL 명령문 예시
CREATE TABLE test (id text, name text, etc text)
INSERT INTO test VALUES ('1', 'myname', 'test')

*인자 넘겨줄 때 주의사항
python의 %s / % 를 사용하면 SQL Injection의 위험이 있으니, SQL의 ? 문법 사용
t = ('1',)
ex) 'SELECT * FROM test WHERE id=?', t

*그 외 명령문 활용

purchases = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
             ('2006-04-05', 'BUY', 'MSFT', 1000, 72.00),
             ('2006-04-06', 'SELL', 'IBM', 500, 53.00),
            ]
c.executemany('INSERT INTO test VALUES (?,?,?,?,?)', purchases)

for row in c.execute('SELECT * FROM test ORDER BY price'):
        print(row)

테이블이 생성되어 있고, 데이터도 들어가 있다고 가정하고 진행하겠습니다.

sql 결과를 dataframe으로 불러오기

df = pd.read_sql_query('SELECT * FROM test ORDER BY price',conn)
df

 

그래프를 그려보겠습니다.

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(df['qty'],df['price'], label='line')
ax.set_xlabel('qty')
ax.set_ylabel('price')
ax.set_title('Test Plot')
ax.legend()

 

추가로, Matplotlib figure의 요소들에 대한 그림 첨부합니다.

 

 

 

 

참고:

https://docs.python.org/ko/3/library/sqlite3.html

https://matplotlib.org/tutorials/introductory/usage.html#sphx-glr-tutorials-introductory-usage-py