-
[2월 3주차-2/18(4)]📊 월별 외국인 관광객 데이터 전처리 및 통합 분석Why Not SW CAMP 5기/수업 기록 2025. 2. 19. 10:23
한국관광데이터랩에서 제공하는 2010년 1월부터 2020년 5월까지의 외국인 관광객 데이터를 수집하고, 전처리하여 하나의 파일로 통합하는 과정을 소개한다. 🚀
1️⃣ 데이터 파일 확인 🧐
우선, 하나의 데이터를 불러와서 구조를 확인해보자.
import pandas as pd # 2019년 1월 데이터 불러오기 kto_201901 = pd.read_excel('./data/kto_201901.xlsx', header=1, usecols='A:G', skipfooter=4) # 데이터 확인 kto_201901.head()
📌 데이터 예시
국적 관광 상용 공용 유학/연수 기타 계 0 아시아주 765082 10837 1423 14087 125521 916950 1 일본 198805 2233 127 785 4576 206526 2 대만 86393 74 22 180 1285 87954
2️⃣ 데이터 전처리 필요 사항 ✨
데이터를 분석하기 위해 다음과 같은 전처리가 필요하다.
✅ 기준년월 칼럼 추가 → 연도와 월 구분을 위한 기준년월 컬럼 추가
✅ 불필요한 행 제거 → '아시아주', '미주' 등 대륙별 총합 데이터 제거
✅ 대륙 칼럼 추가 → 국가별 데이터를 대륙별로 구분
✅ 관광객 비율 칼럼 추가 → 각 나라의 관광객 비율 계산
✅ 전체 관광객 대비 비율 추가 → 전체 관광객 중 특정 국가 곽광객 비율 계산
3️⃣ 데이터 전처리 함수 생성 🛠
위 과정을 자동화하기 위해 월별 데이터를 불러와 전처리하는 함수를 만든다.
def create_kto_data(yy, mm): file_path = './data/kto_{}{}.xlsx'.format(yy, mm) # 엑셀 파일 읽기 df = pd.read_excel(file_path, header=1, skipfooter=4, usecols='A:G') # 기준년월 칼럼 추가 df['기준년월'] = '{}-{}'.format(yy, mm) # 불필요한 대륙별 총합 데이터 제거 후 인덱스 재설정 ignore_list = ['아시아주', '미주', '구주', '대양주', '아프리카주', '기타대륙', '교포소계'] df_country = df[~df['국적'].isin(ignore_list)].reset_index(drop=True) # 대륙 컬럼 추가 continents = ['아시아']*25 + ['아메리카']*5 + ['유럽']*23 + ['오세아니아']*3 + ['아프리카']*2 + ['기타대륙'] + ['교포'] df_country['대륙'] = continents # 관광객 비율(%) 추가 df_country['관광객비율(%)'] = round(df_country['관광'] / df_country['계'] * 100, 1) # 전체 관광객 대비 비율(%) 추가 total_tourist = df_country['관광'].sum() df_country['전체비율(%)'] = round(df_country['관광'] / total_tourist * 100, 1) return df_country
✅ 이제 함수 하나로 데이터를 깔끔하게 정리할 수 있다!
4️⃣ 함수 실행 및 결과 확인 ✅
kto_test = create_kto_data(2018, 12) kto_test.head()
📌 결과 데이터 예시
국적 관광 상용 공용 유학/연수 기타 계 기준년월 대륙 관광객비율(%) 전체비율(%) 0 일본 252461 1698 161 608 3593 258521 2018-12 아시아 97.7 22.7 1 대만 85697 71 22 266 1252 87308 2018-12 아시아 98.2 7.7 2 홍콩 58355 41 3 208 939 59546 2018-12 아시아 98.0 5.2 3 마카오 6766 0 1 20 36 6823 2018-12 아시아 99.2 0.6 4 태국 47242 42 302 58 6382 54026 2018-12 아시아 87.4 4.2
✅ 불필요한 데이터가 제거되고, 대륙, 관광객비율(%), 전체비율(%) 칼럼이 추가된 것을 확인할 수 있다!
5️⃣ 2010~2020년 5월까지 데이터 통합 📂
이제 2010년 1월부터 2020년 5월까지의 모든 데이터를 하나의 파일로 통합해보자.
df = pd.DataFrame() # 2010년 1월 ~ 2020년 5월 데이터 병합 for yy in range(2010, 2021): for mm in range(1, 13): try: temp = create_kto_data(str(yy), str(mm).zfill(2)) df = pd.concat([df, temp], ignore_index=True) except: pass # 최종 데이터 저장 df.to_excel('./files/kto_total.xlsx', index=False)
✅ 모든 파일을 순차적으로 불러와 하나의 엑셀 파일(kto_total.xlsx)로 저장 완료!
📌 코드 설명
- str(mm).zfill(2): 월(MM)을 두 자리 숫자로 변환 (1 → '01')
- try-except: 특정 월의 데이터가 없을 경우 오류 발생 방지
6️⃣국가별 데이터 저장 하기
cntry_list = df['국적'].unique() for cntry in cntry_list: # 국적으로 필터링 df_filtered = df[df['국적'] == cntry] # 파일명 생성 file_name = f'./files/[국적별 관광객 데이터] {cntry}.xlsx' # 저장 df_filtered.to_excel(file_name, index=False)
7️⃣국내 외국인 관광객 중 상위 5개 국가를 각각 시계열
import pandas as pd import matplotlib.pyplot as plt from matplotlib import font_manager, rc import platform # 운영체제에 맞는 기본 폰트 설정 if platform.system() == 'Darwin': rc('font', family = 'AppleGothic') elif platform.system() == 'Windows': path = 'c:/Windows/Fonts/malgun.ttf' font_name = font_manager.FontProperties(fname=path).get_name() rc('font', family=font_name) else: print("sorry") df = pd.read_excel('./files/kto_total.xlsx') cntry_list = ['중국', '일본', '대만', '미국', '홍콩'] for cntry in cntry_list: df_filter = df[(df['국적'] == cntry)] # 2. 시계열: plot() plt.figure(figsize=(12,4)) plt.plot(df_filter['기준년월'], df_filter['관광']) plt.suptitle(f'상위 5개 국가 관광객 시계열', fontsize=15) plt.title(f'{cntry}인 관광객 시계열', fontsize=11) plt.xlabel('기준년월',fontsize=14) plt.ylabel('관광객 수', fontsize=14) plt.xticks(['2010-01','2011-01','2012-01','2013-01','2014-01','2015-01', '2016-01','2017-01','2018-01','2019-01','2020-01']) plt.show()
7️⃣중국인 관광객 히트맵 🔥import seaborn as sns # 기준년월을 년도와 월로 분리 df['년도'] = df['기준년월'].str[:4] df['월'] = df['기준년월'].str[5:] # 중국인 관광객 데이터 추출 df_filter = df[df['국적'] == '중국'] # 피벗 테이블 생성 df_pivot = df_filter.pivot_table(index='년도', columns='월', values='관광') plt.figure(figsize=(12, 4)) sns.heatmap(df_pivot, annot=True, fmt='.0f', cmap='rocket_r') plt.suptitle('중국인 관광객 히트맵', fontsize=15) plt.title('년 월에 따른 관광객 수', fontsize=11) plt.xlabel('월', fontsize=14) plt.ylabel('년', fontsize=14) plt.show()
🎯 최종 정리 📌
✅ 월별 외국인 관광객 데이터를 수집 및 전처리
✅ 불필요한 데이터 제거 및 기준년월, 대륙, 비율 칼럼 추가
✅ 2010년 1월부터 2020년 5월까지 데이터를 통합하여 Excel 파일로 저장이제 시계열 그래프와 히트맵을 활용해 관광객 데이터의 변화를 쉽게 분석할 수 있다! 🚀
'Why Not SW CAMP 5기 > 수업 기록' 카테고리의 다른 글
[2월 3주차-2/20(1)]다나와 무선청소기 데이터 분석 및 시각화 🧹📊 (0) 2025.02.20 [2월 3주차-2/19]왜 우리 동네에는 스타벅스가 없을까? (0) 2025.02.20 [2월 3주차-2/18(3)]📊 YouTube 채널 랭킹 크롤링 및 데이터 분석 (0) 2025.02.18 [2월 3주차-2/18(2)]MelOn, Bugs, Genie 크롤링 후 Excel 파일로 저장 및 통합 🎵 (1) 2025.02.18 [2월 3주차-2/18(1)]웹 스크래핑과 Selenium을 활용한 크롤링 가이드 🚀 (1) 2025.02.18