티스토리 뷰

반응형

데어터 불러오기

import pandas as pd
df_1911=pd.read_csv('./시각화/19111920.csv',encoding='cp949')
df_1921=pd.read_csv('./시각화/19211930.csv',encoding='cp949')
df_1931=pd.read_csv('./시각화/1931.csv',encoding='cp949')
df_1941=pd.read_csv('./시각화/1941.csv',encoding='cp949')
df_1951=pd.read_csv('./시각화/1951.csv',encoding='cp949')
df_1961=pd.read_csv('./시각화/1961.csv',encoding='cp949')
df_1971=pd.read_csv('./시각화/1971.csv',encoding='cp949')
df_1981=pd.read_csv('./시각화/1981.csv',encoding='cp949')
df_1991=pd.read_csv('./시각화/1991.csv',encoding='cp949')
df_2001=pd.read_csv('./시각화/2000.csv',encoding='cp949')
df_2011=pd.read_csv('./시각화/2011.csv',encoding='cp949')

 

df_1911.tail()

 

 

데이터 합치기

pd,concat([데이터프레임 리스트], axis=0) 행 방향으로 연결

->아래에 이어붙임

pd,concat([데이터프레임 리스트], axis=1) 열 방향으로 연결

-> 오른쪽에 이어붙임

ignore_index=True 인덱스 재지정

df=pd.concat([df_1911,df_1921,df_1931,df_1941,df_1951,df_1961,df_1971,df_1981,df_1991,df_2001,df_2011])

 

 

전처리하기

df.dtypes

지점            int64
지점명          object
일시           object
평균기온(°C)    float64
최저기온(°C)    float64
최고기온(°C)    float64
dtype: object

 

시간을 datetime으로 바꿔준다

df['일시']=pd.to_datetime(df['일시'])

 

print(df['일시'].unique())
print(df['일시'].nunique())
print(df['일시'].dt.year.nunique())

['1911-10-04T00:00:00.000000000' '1911-10-09T00:00:00.000000000'
 '1911-10-16T00:00:00.000000000' ... '2020-12-29T00:00:00.000000000'
 '2020-12-30T00:00:00.000000000' '2020-12-31T00:00:00.000000000']
40178
110

 

총 110년이 있다.

 

 

서울시 데이터만 분석하기

df_seoul=df[df['지점명']=='서울'].copy()
df_seoul.head()
#결측치분석
#데이터프레임.isnull().sum()

df_seoul.isnull()

지점 지점명 일시 평균기온(°C) 최저기온(°C) 최고기온(°C)
3299 False False False False False False
3300 False False False False False False
3301 False False False False False False
3302 False False False False False False
3303 False False False False False False

 

False는 결측치가 없는 것, True는 결측치가 있는 것

 

df_seoul.isnull().sum()

지점          0
지점명         0
일시          0
평균기온(°C)    0
최저기온(°C)    2
최고기온(°C)    3
dtype: int64

 

최저기온과 최고기온을 처리한다.

 

결측치제거

df_seoul[(df_seoul['최저기온(°C)'].isnull() | df_seoul['최고기온(°C)'].isnull())]
df_seoul=df_seoul.dropna()

 

연도별 데이터 개수 확인

df_seoul['일시'].dt.year.value_counts()

2020    366
1964    366
1992    366
1988    366
1944    366
       ... 
2017    364
1973    364
1967    364
1950    243
1953     31
Name: 일시, Length: 108, dtype: int64

 

길이가 108인것이 보인다. 한국전쟁시기의 데이터가 빠졌다.

 

평균기온 분석

df_seoul.groupby(df_seoul['일시'].dt.year)['평균기온(°C)'].mean()

일시
1911    10.654795
1912    10.123770
1913    10.086027
1914    12.029041
1915    10.898356
          ...    
2016    13.592896
2017    13.077747
2018    13.002466
2019    13.598904
2020    13.271858
Name: 평균기온(°C), Length: 108, dtype: float64

 

import matplotlib.pyplot as plt
plt.figure(figsize=(15,5))
plt.plot(df_mean,'.')
plt.xticks(range(1911,2021,2),rotation=90)
plt.show()

 

이상치제거

df_mean.drop(index=[1950,1953],inplace=True)
plt.rcParams['font.family']='Malgun Gothic'
plt.rcParams['axes.unicode_minus']=False
plt.plot(df_mean,'g.-')
plt.title('서울시 연 평균기온의 변화',size=15)
plt.show()

 

 

 

서울시 연간 최저기온 변화

df_seoul_min=df_seoul.groupby(df_seoul['일시'].dt.year)['최저기온(°C)'].min()
plt.plot(df_seoul_min,'b.-')
plt.title('서울시 연 최저기온의 변화',size=15)
plt.show()

 

최고기온 시각화

df_seoul_max=df_seoul.groupby(df_seoul['일시'].dt.year)['최고기온(°C)'].max()
df_seoul_max.drop(index=[1950,1953],inplace=True)
plt.plot(df_seoul_max,'r.-')
plt.title('서울시 연 최고 기온 변화',size=15)
plt.show()

 

fig=plt.figure(figsize=(15,5))
plt.subplot(131)
plt.plot(df_mean,'g.-')
plt.title('서울시 연 평균기온의 변화',size=15)
plt.xlabel('연도')
plt.ylabel('평균기온')
plt.grid(ls=':')
plt.plot()
plt.subplot(132)
plt.plot(df_seoul_min,'b.-')
plt.title('서울시 연 최저기온의 변화',size=15)
plt.xlabel('연도')
plt.ylabel('최저기온')
plt.grid(ls=':')
plt.subplot(133)
plt.plot(df_seoul_max,'r.-')
plt.title('서울시 연 최고 기온 변화',size=15)
plt.xlabel('연도')
plt.ylabel('최고기온')
plt.grid(ls=':')

#전체 서식 바꾸기
fig.suptitle('서울시 기온 변화',size=20,fontweight='bold')
fig.tight_layout()
plt.show()

plt.figure(figsize=(15,7))
plt.plot(df_mean,'g.-',label='평균기온')
plt.plot(df_seoul_min,'b.-',label='최저기온')
plt.plot(df_seoul_max,'r.-',label='최고기온')
plt.xticks(range(1910,2021,5))
plt.yticks(range(-25,42,5))
plt.grid(ls=':')
plt.legend(loc=(0,1.01),ncol=3,fontsize=12,edgecolor='k')

#수평선 그리기
plt.axhline(df_mean.min(),color='gray',ls='--')
plt.axhline(df_mean.max(),color='gray',ls='--')

plt.axhline(df_seoul_min.min(),color='gray',ls='--')
plt.axhline(df_seoul_min.max(),color='gray',ls='--')

plt.axhline(df_seoul_max.min(),color='gray',ls='--')
plt.axhline(df_seoul_max.max(),color='gray',ls='--')

plt.show()

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함
반응형