데이터분석 직무에 코딩테스트 대비를 위한 기록
출처 : GIL`s LAB
1. 시간에 따른 미세먼지 농도 그래프 시각화
2. 시간대별 평균 미세먼지 농도 계산
3. 시점 t의 t-1, t-2, t-3, t-4의 농도를 이용하여 데이터 구성
4. 선형 회귀 모델을 학습
In [ ]:
from google.colab import drive
drive.mount('/content/drive')
Mounted at /content/drive
In [42]:
import pandas as pd
df = pd.read_csv('/content/drive/MyDrive/PM10_seoul.csv')
df.head()
Out[42]:
| date | PM-10 | |
|---|---|---|
| 0 | 2022-12-08:24 | 22.0 |
| 1 | 2022-12-08:23 | 22.0 |
| 2 | 2022-12-08:22 | 25.0 |
| 3 | 2022-12-08:21 | 23.0 |
| 4 | 2022-12-08:20 | 20.0 |
1번¶
In [43]:
# 그래프 시각화
import matplotlib
import seaborn as sns
from matplotlib import pyplot as plt
In [44]:
sns.relplot(x="date", y="PM-10", kind="line", data=df)
Out[44]:
<seaborn.axisgrid.FacetGrid at 0x78671a52e080>
In [45]:
plt.plot(range(len(df)), df['PM-10'])
plt.xlabel('date')
plt.ylabel('PM-10')
plt.show()
In [46]:
df.groupby('date')['PM-10'].mean()
Out[46]:
date
2022-12-01:01 15.0
2022-12-01:02 12.0
2022-12-01:03 14.0
2022-12-01:04 15.0
2022-12-01:05 15.0
...
2022-12-08:20 20.0
2022-12-08:21 23.0
2022-12-08:22 25.0
2022-12-08:23 22.0
2022-12-08:24 22.0
Name: PM-10, Length: 192, dtype: float64
In [47]:
#시간대별 평균 미세먼지 그룹핑
df['time']=df['date'].str.slice(-2,)
df.groupby('time')['PM-10'].mean()
Out[47]:
time
01 25.875
02 22.000
03 21.000
04 21.000
05 21.375
06 21.375
07 20.250
08 22.375
09 23.125
10 22.750
11 27.000
12 25.125
13 25.250
14 28.000
15 24.500
16 24.500
17 26.500
18 25.500
19 25.125
20 27.000
21 28.125
22 28.125
23 27.250
24 26.625
Name: PM-10, dtype: float64
In [48]:
# t시점 이전의 데이터 구성 t-1, t-2, t-3, t-4
for k in range(1,5):
df['PM-10_' + str(k)] = df['PM-10'].shift(-k)
Out[48]:
| date | PM-10 | time | PM-10_1 | PM-10_2 | PM-10_3 | PM-10_4 | |
|---|---|---|---|---|---|---|---|
| 0 | 2022-12-08:24 | 22.0 | 24 | 22.0 | 25.0 | 23.0 | 20.0 |
| 1 | 2022-12-08:23 | 22.0 | 23 | 25.0 | 23.0 | 20.0 | 22.0 |
| 2 | 2022-12-08:22 | 25.0 | 22 | 23.0 | 20.0 | 22.0 | 19.0 |
| 3 | 2022-12-08:21 | 23.0 | 21 | 20.0 | 22.0 | 19.0 | 20.0 |
| 4 | 2022-12-08:20 | 20.0 | 20 | 22.0 | 19.0 | 20.0 | 17.0 |
| ... | ... | ... | ... | ... | ... | ... | ... |
| 190 | 2022-12-01:02 | 12.0 | 02 | 15.0 | NaN | NaN | NaN |
| 191 | 2022-12-01:01 | 15.0 | 01 | NaN | NaN | NaN | NaN |
| 192 | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 193 | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 194 | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
195 rows × 7 columns
In [61]:
df.dropna(inplace=True)
df = df.drop(['date','time'], axis=1)
In [66]:
X = df.drop('PM-10', axis=1)
Y = df['PM-10']
from sklearn.linear_model import LinearRegression
model = LinearRegression().fit(X,Y)
In [68]:
model.score(X,Y)
Out[68]:
0.8224427294536858
In [69]:
model.coef_
Out[69]:
array([ 1.13476648, -0.3013629 , 0.12396585, -0.09643159])
요약 : sklearn.linear_model import LinearRegression
LinearRegression().fit(x,y)