https://colab.research.google.com/drive/141g4nouddDz6QjwbRltYWF-MXl_m_J5u#scrollTo=qrvL3OCyckCe
import pandas as pd
import numpy as np
2010년 1월부터 2019년 8월까지 총 116개 엑셀파일 통합하기(전처리 과정 포함)
#create_kto_data 함수 생성
def kto_data(yy, mm):
#불러올 엑셀 파일 경로 지정
filepath = '/content/drive/MyDrive/입국자/kto{}{}.xlsx'.format(yy, mm)
#엑셀 파일 불러오기
#1번 컬럼을 header로 보냄
#가장 아래쪽 4개의 통계를 skip함
#???
df = pd.read_excel(file_path, header = 1, skipfooter = 4, usecols = 'A:G')
#'년월' 컬럼 추가
df['년월'] = '{}-{}'.format(yy, mm)
#'국적' 컬럼에서 대륙 데이터 제거
del_list = ['아시아주', '구주', '구주 기타']
#대륙정보 미포함 조건
condition = (df['국적'].isin(del_list) == False)
#대륙정보 제거
df_country = df[condition].reset_index(drop = True)
#대륙별로 볼 것이기 때문에 '대륙' 컬럼을 따로 추가
continents = ['아시아']25 + ['아메리카']5 + ['유럽']22 + ['오세아니아']2 + ['아프리카']3 + ['기타대륙']1 + ['교포']*1
df_country['대륙'] = continents
#대통령 컬럼 추가
if (2008 <= int(yy) and int(yy) < 2013 ) :
df_country['대통령'] = "이명박"
elif (2013 <= int(yy) and int(yy) < 2017 ) :
df_country['대통령'] = "박근혜 "
else :
df_country['대통령'] = "문재인 "
#결과 출력
return(df_country)
#담아줄 빈 프레임생성
kto_data_df = pd.DataFrame()
#2010년부터 2021년까지 이중 for문
for yy in range(2010, 2021):
for mm in range(1, 13):
try:
# zfill : 2자리 수로 맞추기
# 1의 경우 01로 맞춰주는 것
temp = kto_data(str(yy), str(mm).zfill(2))
#???
kto_data_df = pd.concat([kto_data_df, temp], ignore_index=True)
except:
# 2020년은 5월까지만 있으니까 아마도 여기서 Pass
pass
#2010년부터 2021년까지 이중 for문
for yy in range(2010, 2021):
for mm in range(1, 13):
#zfill : 2자리 수로 맞추기
#1의 경우 01로 맞춰주는 것
temp = kto_data(str(yy), str(mm).zfill(2))
#???
kto_data_df = pd.concat([kto_data_df, temp], ignore_index=True)
#2020년은 5월까지만 있으니까 아마도 여기서 Pass
pass
import matplotlib.pyplot as plt
from datetime import datetime
#year 컬럼 추가
kto_data_df['year'] = kto_data_df['년월'].str.slice(0,4)
kto_data_df[:10]
#데이터 정리
#필요 데이터
#국적, 계, 년월, 대륙, 대통령, year
kto_data_df_trim = kto_data_df.iloc[ :,[0, 6, 7, 8, 9, 10]]
kto_data_df_trim
pip install openpyxl
disease_data_1 = pd.read_excel('/content/drive/MyDrive/입국자/conta2009.xlsx', engine='openpyxl')
disease_data_2 = pd.read_excel('/content/drive/MyDrive/입국자/conta2020.xlsx', engine='openpyxl')
#데이터 역치 하는 법
disease_data_1 = disease_data_1.T
disease_data_2 = disease_data_2.T
#데이터 값으로 있는 인덱스[1]을 칼럼으로 올리기
disease_data_1 = disease_data_1.rename(columns = disease_data_1.iloc[1])
disease_data_2 = disease_data_2.rename(columns = disease_data_2.iloc[1])
#인덱스 2개 지우기
disease_data_1 = disease_data_1.drop(disease_data_1.index[0])
disease_data_1 = disease_data_1.drop(disease_data_1.index[0])
disease_data_1
disease_data_2 = disease_data_2.drop(disease_data_2.index[0])
disease_data_2 = disease_data_2.drop(disease_data_2.index[0])
disease_data_2
disease_data_1 = disease_data_1[["지카바이러스감염증", "중동호흡기증후군", "신종인플루엔자"]]
disease_data_2 = disease_data_2[["중동호흡기증후군", "신종인플루엔자", "신종감염병증후군","지카바이러스 감염증"]]
#지카바이러스가 칼럼 이름이 달라 합치기 전에 하나로 묶어주었다.
disease_data_2 = disease_data_2.rename(columns={"지카바이러스 감염증":"지카바이러스감염증"},inplace=True)
disease_data_2
#두 데이터 합하기
disease_data = pd.concat([disease_data_1, disease_data_2])
disease_data
#결측치는 모두 0으로 대체
disease_data = disease_data.fillna(0)
disease_data
#문자열을 "0"으로 만들어주기
disease_data['중동호흡기증후군'] =np.where(disease_data['중동호흡기증후군'] == '-', '0', disease_data['중동호흡기증후군'] )
disease_data['중동호흡기증후군']
disease_data['지카바이러스감염증'] =np.where(disease_data['지카바이러스감염증'] == '-', '0', disease_data['지카바이러스감염증'] )
disease_data['지카바이러스감염증']
disease_data['신종인플루엔자'] =np.where(disease_data['신종인플루엔자'] == '-', '0', disease_data['신종인플루엔자'] )
disease_data['신종인플루엔자']
#데이터 타입 바꾸기
disease_data['지카바이러스감염증'] = disease_data['지카바이러스감염증'].astype(float)
disease_data['중동호흡기증후군'] = disease_data['중동호흡기증후군'].astype(float)
disease_data['신종인플루엔자'] = disease_data['신종인플루엔자'].astype(float)
#index에 있는 년월을 '년월'컬럼으로 추가하기
disease_data['년월'] = disease_data.index
disease_data
#map을 사용 결측값 만들기
disease_data['년월'] = disease_data['년월']disease_data['년월'].map(len) != 4]
disease_data
#년월 컬럼을 날짜 형식으로
disease_data['년월'] = pd.to_datetime(disease_data['년월'])
disease_data = disease_data.query('"2010-01" <= 년월 <= "2020-05"')
#월만 보이게 잘라주기
disease_data['년월'] = disease_data['년월'].astype(str)
disease_data['년월'] = disease_data['년월'].str.slice(0, 7)
disease_data
#DataFrame 만들기
combined_data = pd.DataFrame()
#merge(가로)로 외래객,감염병 "년월"로 묶어주기
combined_data = pd.merge(kto_data_df_trim, disease_data, left_on = '년월', right_on = '년월', how = 'inner')
combined_data
#(1)신종감염병증후군
import seaborn as sns
import matplotlib.pyplot as plt
plt.plot(combined_data['년월'], combined_data['신종감염병증후군'], color='gray', linestyle='-') ## 선 그래프 출력
plt.xticks(["2010-01", "2011-01", "2012-01", "2013-01", "2014-01", "2015-01", "2016-01", "2017-01", "2018-01", "2019-01", "2020-01"])
merged_data.년월 = merged_data.년월.astype(str)
fig, ax1 = plt.subplots(figsize=(20,15))
ax2=ax1.twinx()
sns.barplot(x='년월', y='계', data=merged_data,color = 'pink', ax=ax1)
sns.lineplot(x='년월',y='지카바이러스감염증', data=merged_data,marker='d', ax=ax2)
sns.lineplot(x='년월',y='신종인플루엔자', data=merged_data,marker='d', ax=ax2)
sns.lineplot(x='년월',y='중동호흡기증후군', data=merged_data,marker='d', ax=ax2)
sns.lineplot(x='년월',y='신종감염병증후군', data=merged_data,marker='d', ax=ax2)
plt.show()