boot camp day8

HIROYOSHI·2022년 2월 9일
0

2022/2/9

miniprojct 1

첫 미니프로젝트로 춘천시의 기온 데이터를 분석을 해봤습니다. 데이터는 기상청에서 제공하는 데이터를 사용했고 또 다른 무료 데이터를 받아올 수 있는 사이트들도 함께 알아왔습니다.
기상청
행정안전부
공공데이터 포털
AI, hub
춘천시의 기온 데이터를 분석하기 위해 기상청에서 데이터를 받아왔으며

file_path = "/content/drive/MyDrive/ta_20220209102529.csv"
ch = pd.read_csv(file_path,sep=",", encoding="cp949")
ch

위와같이 받아온 데이터를 pandas를 이용하여 읽어옵니다.
이후 기온이 가장 높았던 날과 가장 낮아던 날을 구해보았습니다.

print("춘천시의 최고기온",list(ch[ ch['최고기온(℃)'].max() == ch['최고기온(℃)' ]]["최고기온(℃)"])[0])
print("춘천시의 최저기온",list(ch[ ch['최저기온(℃)'].min() == ch['최저기온(℃)' ]]["최저기온(℃)"])[0])

위와같이 list와 인덱싱, pandas dataframe의 기능을 응용하여 답을 도출할 수 있었고 깔끔하게 (온도)와 같은 식으로 출력되게 하는 것이 가장 어려운 일이었습니다.

다음으로는 일별 최고온도만을 리스트로 만들어보았습니다.

a = list(ch['최고기온(℃)'])
print(a)

이 문제 또한 예쁘게 출력되게 하기위해 노력을 많이했습니다.

plot

이번에는 위 자료를 이용하여 시각화를 해볼 것 입니다.
일별 최고기온을 그래프로 그려볼 것입니다.

chigh = ch['최고기온(℃)']
plt.plot(chigh,'b')

chugh는 춘천 최고기온을 말하고 그것을 dataframe으로 만들어 matplotlib를 이용하여 그래프를 그리는 코드입니다.

boxplot

월별 최고기온만을 뽑아서 boxplot를 만듭니다.

ch['월'] = pd.to_datetime(ch['날짜']).dt.month
group = dict(list(ch.groupby(by='월')))
months = [group[i]['최고기온(℃)'] for i in range(1,13)]
plt.boxplot(months)
plt.show()

여기서는 months가 가장 어려웠습니다. ch.groupby가 keyword였습니다.

춘천의 날씨분석의 마지막으로는 자신의 생일에 날씨를 분석하는 것으로 마무리했습니다.

data=ch
data["date"] = pd.DatetimeIndex(data["날짜"]).strftime("%m%d")

plt.figure(figsize=(10, 5))

plt.plot(data.loc[data["date"] == "1112"]["최고기온(℃)"], 'r', label="최고기온")
plt.plot(data.loc[data["date"] == "1112"]["최저기온(℃)"], 'b', label="최저기온")

plt.xticks( data.loc[data["date"] == "1112"].index, labels = range(2000,2023))

plt.title("내 생일의 년도별 최고 기온과 최저 기온")
plt.xlabel("년도")
plt.ylabel("기온")

plt.legend()

plt.show()

자신의 매년 자신의 생일에 최고기온과 최저기온을 뽑아내어 그래프를 그려봤습니다. 이것을 만들 때는 pd.DatetimeIndex와 .strftime을 사용하는 것이 가장 중요하게 작용했던 것 같습니다.

miniproject 2

미니 프로젝트 2에서는 춘천시에 사는 인구의 구조를 분석해보았습니다.

input

dong=input("동이름: ")

a=list(ch[ch['행정구역'].str.contains(dong)].iloc[0][3:])
plt.plot(a)
plt.xticks(np.arange(0,101,10))

이번에는 특별히 input을 받아서 dong에 저장하고 그 저장한 문자열을 이용하여 데이터를 분류하고 분석을 해보았습니다. 원래에 하던 방식에 input을 적용시키는 것 뿐인데도 그래프를 그리는데 자율성이 높아져서 되게 편하다고 느껴졌었습니다.

남,여 분류

위에 데이터와 다르게 다음에 분석했던 데이터는 남/녀가 따로 정리돼있는 데이터였습니다.

df_sex = pd.read_csv('/content/202201_202201_연령별인구현황_월간 (2).csv', thousands=',', encoding='CP949')
print(df_sex.columns)
del(df_sex['2022년01월_남_거주자_총인구수'])
del(df_sex['2022년01월_남_거주자_연령구간인구수'])
del(df_sex['2022년01월_여_거주자_총인구수'])
del(df_sex['2022년01월_여_거주자_연령구간인구수'])

m = df_sex.T[df_sex.T.index.str.contains('남')]
w = df_sex.T[df_sex.T.index.str.contains('여')]

ages = [df_sex.T.index[i][11:] for i in range(0,101)]
plt.plot(ages ,m[0], label='남성')
plt.plot(ages, w[0], label='여성')
plt.legend()
plt.title('남/녀 인구분포')
plt.show()

그래서 위와같이 입력을 받고 필요없는 dataframe을 지우고 Transposition을 이용하여 m과 w를 만들어서 남/녀 인구분포를 시각화 할 수 있었습니다.

profile
KNU COMPUTER ENGINEERING

0개의 댓글