- SQLite 데이터베이스에서 SQL을 사용하여 데이터를 전처리하고
- Python을 활용해 필요한 데이터를 시각화하기!
✅ SQLite 활용법
✅ 파이썬에서 SQL연결, 테이블 생성하기
✅ 시각화 스킬업(plt.grid(True), plt.tight_layout())
✅pd.to_datetime으로 날짜타입으로 바꿔 그래프 정리해주기
✅ 변동성 분석(절대값으로!)
✅ `LAG(윈도우함수, 이전행을 가져옴)
✅ 자기상관성 분석(np 이용해 자기상관계수 구하기, 그래프 그리기)
장점
단점
MySQL과 비교
✅ 규모로 따지면, Oracle > MySQL > SQLite
import pandas as pd
import sqlite3. #SQLite를 사용하기 위한 파이썬 내장 라이브러리
import matplotlib.pyplot as plt
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/daily-min-temperatures.csv'
data = pd.read_csv(url)
conn = sqlite3.connect('daily_temperatures.db')
data.to_sql('temperatures', conn, if_exists = 'replace', index = False)
✅ sql 연결, 테이블 생성
conn = sqlite3.connect('daily_temperatures.db')
.to_sql
if_exists = replace
index = False
yearly_max_temp_query = """
SELECT strftime('%Y', Date) as Year,
max(Temp) as MaxTemp
FROM temperatures
GROUP BY Year
ORDER BY Year ;
"""
yearly_max_temp = pd.read_sql_query(yearly_max_temp_quaery)
✅ 파이썬에서 """사이에 SQL 쿼리문을 작성하여 전처리 가능
plt.figure(figsize = (12, 6))
plt.plot(yearly_max_temp['Year'], yearly_max_temp['MaxTemp'], marker = 'o', color = 'darkblue', linestyle = '--')
plt.title('Yearly Maximum Temperature')
plt.xlabel('Year')
plt.ylabel('Max Temperature (°C)')
plt.xticks(rotation=45)
plt.grid(True)
plt.tight_layout()
plt.show()
✅ 시각화 스킬 업
plt.grid(True) : 그리드를 표시해 포인트 위치를 잘 식별
plt.tight_layout(): 그래프 레이아웃 자동 조정, 이쁘게
monthly_avg_temp_query = """
select strftime('%Y-%m', Date) as YearMonth,
avg(Temp) as AvgTemp
from temperatures
group by YearMonth
order by YearMonth ;
"""
monthly_avg_temp = pd.read_sql_query(monthly_avg_temp_query, conn)
plt.figure(figsize=(15, 7))
plt.plot(monthly_avg_temp['YearMonth'], monthly_avg_temp['AvgTemp'], marker='o', linestyle='-', color='coral')
plt.title('Monthly Average Temperature')
plt.xlabel('Year-Month')
plt.ylabel('Average Temperature (°C)')
plt.xticks(rotation=45)
plt.grid(True)
plt.tight_layout()
plt.show()

이러면 x축 눈금이 너무 많아 보기 안좋다.
pd.to_datetime으로 시각화 수정하기
plt.figure(figsize=(15, 7))
plt.plot(pd.to_datetime(monthly_avg_temp['YearMonth']), monthly_avg_temp['AvgTemp'], marker='o', linestyle='-', color='coral')
plt.title('Monthly Average Temperature')
plt.xlabel('Year-Month')
plt.ylabel('Average Temperature (°C)')
plt.xticks(rotation=45)
plt.grid(True)
plt.tight_layout()
plt.show()

query = """
select Date,
ABS(Temp - LAG(Temp,1) over (order by Date)) as DailyChange
from temperatures
"""
daily_change = pd.read_sql_query(query, conn)
# 일별 기온 변동성 시각화
plt.figure(figsize=(14, 7))
plt.plot(pd.DataFrame(daily_change['Date']), daily_change['DailyChange'], color='blue', alpha=0.5)
plt.title('Daily Temperature Change')
plt.xlabel('Date')
plt.ylabel('Temperature Change (°C)')
plt.show()

✅ 변동성 분석 : 얼마나 변동성이 큰지 파악(절대값 사용)
✅ LAG: 이전의 행을 가져옴
import numpy as np
query = """
select Date,
Temp,
LAG(Temp, 1) over (order by Date)as PrevDayTemp
from temperatures
order by Date
"""
temp_data = pd.to_sql_query(query, conn)
temp_data.dropna(inplace = True)
temp_data['TempChange'] = temp_data['Temperature'] - temp_data['PrevDayTemp']
temp_data

correlation = np.corrcoef(temp_data['TempChange'][1:], temp_data['TempChange'][:-1])[0, 1]
print(f'1일차 기온 변화의 자기상관계수 {correlation : 2.f}')
pd.plotting.autocorrelation_plot(temp_data['Temperature'])
plt.title['Autocorrelation of Daily Temperature']
plt.show()
1일 시차 기온 변화의 자기상관 계수: -0.18

✅ 자기상관성 계수는 -1에서 1 사이
✅ 자기상관성 계수 그래프 : pd.plotting.autocorrelation_plot
✅ 첫번째와 마지막 요소 제외(인덱싱) 이유 : 이전값과 현재값의 쌍을 맞춰 데이터 포인트의 불균형을 줄이고 신뢰성을 높일 수 있음
✅[0, 1]은 상관 계수행렬의 인덱싱. 상관계수 행렬의 [i, j]위치의 값은 i번째 배열과 j번째 배열의 상관관계를 나타냄. [0,1]은 상관계수 행렬에 인덱싱하여 두 배열간의 상관계수를 추출함.