-
Python 데이터분석 기초 45 - 관광정보 자료로 상관관계 분석(예제)Python 데이터 분석 2022. 11. 10. 15:35
# data.go.kr 제공 관광정보 자료로 상관관계 분석 # 미국, 중국, 일본 관광객이 국내 유료관광지(5대 궁) 방문관련 import json import pandas as pd import numpy as np import matplotlib.pyplot as plt plt.rc('font', family = 'malgun gothic') # 그래프 작성용 함수 def makeGraph(tour_table, all_table, tourPoint): # 계산할 관광지명에 해당하는 자료만 뽑아 외국인 관광객 자료와 합치기 tour = tour_table[tour_table['resNm'] == tourPoint] # print(tour) # resNm ForNum # yyyymm # 201101 창덕궁 14137 # 201102 창덕궁 18114 merge_table = pd.merge(tour, all_table, left_index = True, right_index = True) print(merge_table) # resNm ForNum china japan usa # yyyymm # 201101 창덕궁 14137 91252 209184 43065 # 201102 창덕궁 18114 140571 230362 41077 # 상관계수를 구하고 3개국 선포도 시각화 fig = plt.figure() fig.suptitle(tourPoint + '상관관계 분석') plt.subplot(1,3,1) plt.xlabel('중국인 입국자 수') plt.ylabel('중국인 입장객 수') lamb1 = lambda p:merge_table['china'].corr(merge_table['ForNum']) r1 = lamb1(merge_table) # print('r1 : ', r1) plt.title('r={:.5f}'.format(r1)) plt.scatter(merge_table['china'], merge_table['ForNum'], alpha=0.8, s=6, c='red') # 여기서 alpha는 투명도이다. plt.subplot(1,3,2) plt.xlabel('일본인 입국자 수') plt.ylabel('일본인 입장객 수') lamb2 = lambda p:merge_table['japan'].corr(merge_table['ForNum']) r2 = lamb2(merge_table) # print('r2 : ', r2) plt.title('r={:.5f}'.format(r2)) plt.scatter(merge_table['japan'], merge_table['ForNum'], alpha=0.8, s=6, c='green') # 여기서 alpha는 투명도이다. plt.subplot(1,3,3) plt.xlabel('미국인 입국자 수') plt.ylabel('미국인 입장객 수') lamb3 = lambda p:merge_table['usa'].corr(merge_table['ForNum']) r3 = lamb3(merge_table) # print('r3 : ', r3) plt.title('r={:.5f}'.format(r3)) plt.scatter(merge_table['usa'], merge_table['ForNum'], alpha=0.8, s=6, c='blue') # 여기서 alpha는 투명도이다. plt.tight_layout() # plot 사이의 공간을 자동 조절 plt.show() return [tourPoint, r1, r2, r3] def goGo(): # json 자료를 읽어 DataFrame에 담기 fname = '서울특별시_관광지입장정보_2011_2016.json' jsonTP = json.loads(open(fname, mode = 'r', encoding = 'utf-8').read()) # json decoding str -> dict # print(jsonTP) tour_table = pd.DataFrame(jsonTP, columns =('yyyymm', 'resNm', 'ForNum')) # 년월, 관광지명, 입장객수 tour_table = tour_table.set_index('yyyymm') print(tour_table) # resNm ForNum # yyyymm # 201101 창덕궁 14137 resNm = tour_table.resNm.unique() # print('resNm(관광지명) :', resNm) print('resNm(관광지명) :', resNm[:5]) # 중국인 관광객 정보를 읽어 DataFrame에 담기 cdf = "중국인방문객.json" jdata = json.loads(open(cdf, mode = 'r', encoding = 'utf-8').read()) # print(jdata) china_table = pd.DataFrame(jdata, columns =('yyyymm', 'visit_cnt')) china_table = china_table.rename(columns = {'visit_cnt' : 'china'}) china_table = china_table.set_index('yyyymm') # print(china_table) # china # yyyymm # 201101 91252 # 201102 140571 # 일본인 관광객 정보를 읽어 DataFrame에 담기 jdf = "일본인방문객.json" jdata = json.loads(open(jdf, mode = 'r', encoding = 'utf-8').read()) # print(jdata) japan_table = pd.DataFrame(jdata, columns =('yyyymm', 'visit_cnt')) japan_table = japan_table.rename(columns = {'visit_cnt' : 'japan'}) japan_table = japan_table.set_index('yyyymm') # 미국인 관광객 정보를 읽어 DataFrame에 담기 udf = "미국인방문객.json" jdata = json.loads(open(udf, mode = 'r', encoding = 'utf-8').read()) # print(jdata) usa_table = pd.DataFrame(jdata, columns =('yyyymm', 'visit_cnt')) usa_table = usa_table.rename(columns = {'visit_cnt' : 'usa'}) usa_table = usa_table.set_index('yyyymm') # 중국, 일본, 미국 DataFrame merge all_table = pd.merge(left = china_table, right = japan_table, left_index = True, right_index = True) all_table = pd.merge(all_table, usa_table, left_index = True, right_index = True) # print(all_table[:3], ' ', len(all_table)) r_list=[] for tourPoint in resNm[:5]: r_list.append(makeGraph(tour_table, all_table, tourPoint)) r_df =pd.DataFrame(r_list, columns=('고궁명', '중국', '일본', '미국')) r_df=r_df.set_index('고궁명') print(r_df) print('고궁명별 3개국 상관계수로 시각화') #r_df를 이용해서 막대그래프 그리기 r_df.plot(kind='bar', rot=60) plt.show() if __name__ == '__main__': goGo() <console> resNm ForNum yyyymm 201101 창덕궁 14137 201101 운현궁 0 201101 경복궁 40224 201101 창경궁 697 201101 종묘 6837 ... ... ... 201609 국립중앙박물관 12218 201609 덕수궁 25843 201609 서대문자연사박물관 0 201609 트릭아이미술관 13677 201609 헌릉ㆍ인릉 17 [894 rows x 2 columns] resNm(관광지명) : ['창덕궁' '운현궁' '경복궁' '창경궁' '종묘'] resNm ForNum china japan usa yyyymm 201101 창덕궁 14137 91252 209184 43065 201102 창덕궁 18114 140571 230362 41077 201103 창덕궁 28749 141457 306126 54610 201104 창덕궁 33551 147680 239075 59616 201105 창덕궁 33678 154066 241695 59780 ... ... ... ... ... ... 201605 창덕궁 52772 618083 188420 70891 201606 창덕궁 44328 315095 101206 62550 201607 창덕궁 41816 255632 81748 62627 201608 창덕궁 40729 513275 148632 63522 201609 창덕궁 43682 591242 157313 63793 [69 rows x 5 columns] resNm ForNum china japan usa yyyymm 201101 운현궁 0 91252 209184 43065 201102 운현궁 0 140571 230362 41077 201103 운현궁 0 141457 306126 54610 201104 운현궁 0 147680 239075 59616 201105 운현궁 0 154066 241695 59780 201106 운현궁 0 150119 231718 64412 201107 운현궁 0 195188 227541 59443 201108 운현궁 0 241987 262157 56377 201109 운현궁 0 176196 267886 56304 201110 운현궁 0 181428 302570 63956 201111 운현궁 0 136152 274889 49082 201112 운현궁 0 119061 229806 45167 201201 운현궁 1093 113927 196301 44152 201202 운현궁 1130 157019 221318 43500 201203 운현궁 1602 163261 268355 54135 201204 운현궁 2439 153875 220142 58220 201205 운현궁 2631 152347 234626 61077 201206 운현궁 1856 179508 254872 61208 201207 운현궁 1916 244573 275317 60522 201208 운현궁 1999 276299 325927 57817 201209 운현궁 3209 231462 321231 56103 201210 운현궁 2457 214681 340172 65158 201211 운현궁 1082 174164 331721 51094 201212 운현궁 546 159080 299069 48517 resNm ForNum china japan usa yyyymm 201101 경복궁 40224 91252 209184 43065 201102 경복궁 44906 140571 230362 41077 201103 경복궁 73166 141457 306126 54610 201104 경복궁 89972 147680 239075 59616 201105 경복궁 80539 154066 241695 59780 ... ... ... ... ... ... 201605 경복궁 303498 618083 188420 70891 201606 경복궁 276101 315095 101206 62550 201607 경복궁 352717 255632 81748 62627 201608 경복궁 283115 513275 148632 63522 201609 경복궁 211357 591242 157313 63793 [69 rows x 5 columns] resNm ForNum china japan usa yyyymm 201101 창경궁 697 91252 209184 43065 201102 창경궁 914 140571 230362 41077 201103 창경궁 1664 141457 306126 54610 201104 창경궁 1687 147680 239075 59616 201105 창경궁 1872 154066 241695 59780 ... ... ... ... ... ... 201605 창경궁 5519 618083 188420 70891 201606 창경궁 3364 315095 101206 62550 201607 창경궁 3931 255632 81748 62627 201608 창경궁 3270 513275 148632 63522 201609 창경궁 5496 591242 157313 63793 [69 rows x 5 columns] resNm ForNum china japan usa yyyymm 201101 종묘 6837 91252 209184 43065 201102 종묘 8534 140571 230362 41077 201103 종묘 13186 141457 306126 54610 201104 종묘 13436 147680 239075 59616 201105 종묘 15798 154066 241695 59780 ... ... ... ... ... ... 201605 종묘 10762 618083 188420 70891 201606 종묘 5564 315095 101206 62550 201607 종묘 6164 255632 81748 62627 201608 종묘 6094 513275 148632 63522 201609 종묘 8185 591242 157313 63793 [69 rows x 5 columns] 중국 일본 미국 고궁명 창덕궁 -0.058791 0.277444 0.402816 운현궁 0.445945 0.302615 0.281258 경복궁 0.525673 -0.435228 0.425137 창경궁 0.451233 -0.164586 0.624540 종묘 -0.583422 0.529870 -0.121127 고궁명별 3개국 상관계수로 시각화
상관관계를 활용하여 관광지 성향을 알 수 있다.
'Python 데이터 분석' 카테고리의 다른 글
Python 데이터분석 기초 47 - 회귀분석(선형회귀분석) 방법[linregress] (0) 2022.11.15 Python 데이터분석 기초 46 - 회귀분석(선형회귀분석) 방법[make_regression, LinearRegression, ols] (1) 2022.11.10 Python 데이터분석 기초 44 - 공분산 / 상관계수 예제 (0) 2022.11.10 Python 데이터분석 기초 43 - Python(공분산 / 상관계수) (0) 2022.11.10 Python 데이터분석 기초 42 - 머신 런닝이란? (0) 2022.11.10