부산(10년) 일강수량, 월별강수량, 강수최대횟수연도
1. 필요한 모듈불러오기
import warnings
warnings.filterwarnings('ignore')
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
2. 필요한 데이터 불러오기
- 출처 : 기상자료개방포털 강우량데이터(2010~2020년)
df1 = pd.read_csv("2010_2014_rain.csv", encoding = "euc-kr")
df2 = pd.read_csv("2015_2017_rain.csv", encoding = "euc-kr")
df3 = pd.read_csv("2018_2020_rain.csv", encoding = "euc-kr")
df1
import warnings
warnings.filterwarnings('ignore')
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
- 출처 : 기상자료개방포털 강우량데이터(2010~2020년)
df1 = pd.read_csv("2010_2014_rain.csv", encoding = "euc-kr") df2 = pd.read_csv("2015_2017_rain.csv", encoding = "euc-kr") df3 = pd.read_csv("2018_2020_rain.csv", encoding = "euc-kr")
df1
df2
df3
3. 데이터 합치기
df = pd.concat([df1,df2,df3], ignore_index=True)
df
df = pd.concat([df1,df2,df3], ignore_index=True)
df
4. 통합된데이터 정보확인하기
df.shape
df.shape
df.ndim
df.isnull().sum()
df.info()
5. 데이터 전처리
1. 날짜형식교체
df["일시"] = pd.to_datetime(df["일시"])
df.info()
df["일시"] = pd.to_datetime(df["일시"])
df.info()
df.head()
2. 필요한 열만 뽑아내기
df = df[["일시","일강수량(mm)"]] df.head()
3. 날짜데이터 인덱스화 및 frequency를 D로 교체
df.shape
- 2010년 1월 1일 ~ 2010년 1월 3일, 2020년 12월 31일데이터 없으므로 임의로 추가하고 frequency를 교체해야함 시작과 끝기준은 맞춰줘야함
df.loc[0] = ['2010-01-01',''] df.loc[1275] = ['2020-12-31',''] df
df.index = df["일시"]
df = df.asfreq('D')
df.index
4. 데이터분석
- 일강수량의 결측값이 곧 비가 안내리는 것임
df.isnull().sum()
- 강우가 내렸을 경우 1, 안내렸을 경우 0으로 표현하는 열을 만듬
df["raincheck"] = np.NaN df
for i in range(len(df)): if df["일강수량(mm)"].iloc[i] > 0 : df["raincheck"].iloc[i] = 1 else : df["raincheck"].iloc[i] = 0 df
- 시각화 및 10년동안 비내린 횟수를 보자
rain=0 for i in range(len(df)) : if df["raincheck"].iloc[i] == 1: rain = rain+1 norain = len(df)-rain print("비가 내린횟수 :",rain,"번") print("비가 안내린횟수 :",norain,"번")
sns.histplot(x='raincheck', data=df)
- 0의 의미는 비가 내리지 않은 횟수와 1은 비가 내린 횟수를 의미한다.
- 결론적으로 3번중 1번은 비가 내렸다. 비가 많이 안내리는 줄 알았지만, 생각한거와는 달리 33.33%정도는 비가 내리는 것이다.
4.1 10년동안 일강수량확인
import matplotlib.dates as mdates df["일시"] = df.index a= df.plot(x = '일시', y='일강수량(mm)') a.xaxis.set_major_locator(mdates.YearLocator()) a.xaxis.set_major_formatter(mdates.DateFormatter('%Y'))
- 2011년과 2013년 사이에 많은 비가 내렸던 적이 있었다는 것을 확인할 수 있었다. 그리고 기후변화와 강수량에 대한 상관관계는 지금봐서는 보이지 않는다.
df["월별"] = df["일시"] df["월별"] = df["일시"].astype(str) df["월별"] = df["월별"].str[5:7]
df.info()
4.2 10년간 월별 강수량확인
import matplotlib.dates as mdates sns.barplot(x = '월별', y='일강수량(mm)',data=df) a.xaxis.set_major_locator(mdates.YearLocator()) a.xaxis.set_major_formatter(mdates.DateFormatter('%Y'))
df
df["누적강우횟수"] = np.NaN df["누적강우횟수"].iloc[0] = df["raincheck"].iloc[0] df
df["누적강우횟수"] = np.NaN df["누적강우횟수"].iloc[0] = df["raincheck"].iloc[0] for i in range(1, len(df)) : if df["raincheck"].iloc[i] == 1 : df["누적강우횟수"].iloc[i] =df["누적강우횟수"].iloc[i-1]+ 1 else : df["누적강우횟수"].iloc[i] = df["누적강우횟수"].iloc[i-1]
df
sns.lineplot(x = '일시', y='누적강우횟수',data=df)
4.3어떤 해에 비내린 횟수가 가장 많을까?
4.3.1for문 사용을 위한 끊어주기범위 사전확인
print(df["일시"].iloc[364]) print(df["일시"].iloc[364+365]) print(df["일시"].iloc[364+365+366]) print(df["일시"].iloc[364+365+366+365]) print(df["일시"].iloc[364+365+366+365+365]) print(df["일시"].iloc[364+365+366+365+365+365]) print(df["일시"].iloc[364+365+366+365+365+365+366]) print(df["일시"].iloc[364+365+366+365+365+365+366+365]) print(df["일시"].iloc[364+365+366+365+365+365+366+365+365]) print(df["일시"].iloc[364+365+366+365+365+365+366+365+365+365]) print(df["일시"].iloc[364+365+366+365+365+365+366+365+365+365+366]) a = int(364) b = int(364+365) c = int(364+365+366) d = int(364+365+366+365) e = int(364+365+366+365+365) f = int(364+365+366+365+365+365) g = int(364+365+366+365+365+365+366) h = int(364+365+366+365+365+365+366+365) j = int(364+365+366+365+365+365+366+365+365) k = int(364+365+366+365+365+365+366+365+365+365) l = int(364+365+366+365+365+365+366+365+365+365+366)
4.3.2for문 사용하여 월별 강우 횟수 누적하기
df["누적강우횟수"] = np.NaN df["누적강우횟수"].iloc[0] = df["raincheck"].iloc[0] #2010년 for i in range(1,a+1) : if df["raincheck"].iloc[i] == 1 : df["누적강우횟수"].iloc[i] =df["누적강우횟수"].iloc[i-1]+ 1 else : df["누적강우횟수"].iloc[i] = df["누적강우횟수"].iloc[i-1] #2011년 df["누적강우횟수"].iloc[a+1] = df["raincheck"].iloc[a+1] for i in range(a+2,b+1) : if df["raincheck"].iloc[i] == 1 : df["누적강우횟수"].iloc[i] =df["누적강우횟수"].iloc[i-1]+ 1 else : df["누적강우횟수"].iloc[i] = df["누적강우횟수"].iloc[i-1] #2012년 df["누적강우횟수"].iloc[b+1] = df["raincheck"].iloc[b+1] for i in range(b+2,c+1) : if df["raincheck"].iloc[i] == 1 : df["누적강우횟수"].iloc[i] =df["누적강우횟수"].iloc[i-1]+ 1 else : df["누적강우횟수"].iloc[i] = df["누적강우횟수"].iloc[i-1] #2013년 df["누적강우횟수"].iloc[c+1] = df["raincheck"].iloc[c+1] for i in range(c+2,d+1) : if df["raincheck"].iloc[i] == 1 : df["누적강우횟수"].iloc[i] =df["누적강우횟수"].iloc[i-1]+ 1 else : df["누적강우횟수"].iloc[i] = df["누적강우횟수"].iloc[i-1] #2014년 df["누적강우횟수"].iloc[d+1] = df["raincheck"].iloc[d+1] for i in range(d+2,e+1) : if df["raincheck"].iloc[i] == 1 : df["누적강우횟수"].iloc[i] =df["누적강우횟수"].iloc[i-1]+ 1 else : df["누적강우횟수"].iloc[i] = df["누적강우횟수"].iloc[i-1] #2015년 df["누적강우횟수"].iloc[e+1] = df["raincheck"].iloc[e+1] for i in range(e+2,f+1) : if df["raincheck"].iloc[i] == 1 : df["누적강우횟수"].iloc[i] =df["누적강우횟수"].iloc[i-1]+ 1 else : df["누적강우횟수"].iloc[i] = df["누적강우횟수"].iloc[i-1] #2016년 df["누적강우횟수"].iloc[f+1] = df["raincheck"].iloc[f+1] for i in range(f+2,g+1) : if df["raincheck"].iloc[i] == 1 : df["누적강우횟수"].iloc[i] =df["누적강우횟수"].iloc[i-1]+ 1 else : df["누적강우횟수"].iloc[i] = df["누적강우횟수"].iloc[i-1] #2017년 df["누적강우횟수"].iloc[g+1] = df["raincheck"].iloc[g+1] for i in range(g+2,h+1) : if df["raincheck"].iloc[i] == 1 : df["누적강우횟수"].iloc[i] =df["누적강우횟수"].iloc[i-1]+ 1 else : df["누적강우횟수"].iloc[i] = df["누적강우횟수"].iloc[i-1] #2018년 df["누적강우횟수"].iloc[h+1] = df["raincheck"].iloc[h+1] for i in range(h+2,j+1) : if df["raincheck"].iloc[i] == 1 : df["누적강우횟수"].iloc[i] =df["누적강우횟수"].iloc[i-1]+ 1 else : df["누적강우횟수"].iloc[i] = df["누적강우횟수"].iloc[i-1] #2019년 df["누적강우횟수"].iloc[j+1] = df["raincheck"].iloc[j+1] for i in range(j+2,k+1) : if df["raincheck"].iloc[i] == 1 : df["누적강우횟수"].iloc[i] =df["누적강우횟수"].iloc[i-1]+ 1 else : df["누적강우횟수"].iloc[i] = df["누적강우횟수"].iloc[i-1] #2020년 df["누적강우횟수"].iloc[k+1] = df["raincheck"].iloc[k+1] for i in range(k+2,l+1) : if df["raincheck"].iloc[i] == 1 : df["누적강우횟수"].iloc[i] =df["누적강우횟수"].iloc[i-1]+ 1 else : df["누적강우횟수"].iloc[i] = df["누적강우횟수"].iloc[i-1]
print(df[a:a+5]) print(df[b:b+5]) print(df[c:c+5]) print(df[d:d+5]) print(df[e:e+5]) print(df[f:f+5]) print(df[g:g+5]) print(df[h:h+5]) print(df[j:i+5]) print(df[k:j+5])
df.plot(x = "일시", y = "누적강우횟수")
- 확인을 해보니 2015년에 비가 내린 횟수가 가장 많았다.
Author And Source
이 문제에 관하여(부산(10년) 일강수량, 월별강수량, 강수최대횟수연도), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@greendatai/부산10년-일강수량-월별강수량-강수최대횟수연도저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)