부산(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

df2

df3

3. 데이터 합치기

df = pd.concat([df1,df2,df3], ignore_index=True)
df

4. 통합된데이터 정보확인하기

df.shape

df.ndim

df.isnull().sum()

df.info()

5. 데이터 전처리

1. 날짜형식교체

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년에 비가 내린 횟수가 가장 많았다.

좋은 웹페이지 즐겨찾기