#!/usr/bin/env python # coding: utf-8 # In[8]: # 하기의 가설들은 95%의 신뢰수준으로, 5%의 유의수준으로 검증 #-*- coding: utf-8 -*- import pandas as pd import numpy as np import scipy.stats as stats from scipy.stats import chi2_contingency # In[50]: # 시도별 인구 데이터 확인 population = pd.read_csv('./시도별_주민등록_인구현황_20220216174115.csv', encoding='utf8') # In[51]: population = population.dropna() # In[52]: population # In[53]: # 시도별 대중교통 이용현황 확인 bus = pd.read_csv('./한국교통안전공단_대중교통 이용인원 현황_20201231.csv', encoding='cp949') # In[54]: bus # In[55]: # 인구대비 대중교통 이용률 계산 bus['이용률'] = bus['평일']/bus['인구수']*100 # In[56]: # 수도권과 비수도권 각각 대중교통 이용인원, 전체인구수 도출 cap_user = bus['평일'][0]+bus['평일'][3]+bus['평일'][8] cap_pop = bus['인구수'][0]+bus['인구수'][3]+bus['인구수'][8] ter_user = sum(bus['평일']) - cap_user ter_pop = sum(bus['인구수']) - cap_pop # In[57]: # 도출한 값으로 데이터프레임 생성 area = ['수도권', '비수도권'] user = [cap_user,ter_user] pop = [cap_pop, ter_pop] bus2 = pd.DataFrame({'user':user,'pop':pop},index=area) bus2 # In[58]: # 카이제곱검정 # 귀무가설 : 수도권과 비수도권의 대중교통 이용률에는 통계적으로 유의한 연관이 없을 것이다. # 대립가설 : 수도권과 비수도권의 대중교통 이용률에는 통계적으로 유의한 연관이 있을 것이다. stats.chi2_contingency(bus2) # In[59]: # P밸류 0.05 이하로 귀무가설 기각, 대립가설 채택. 수도권과 비수도권의 대중교통 이용률에는 통계적으로 유의한 연관이 있다. # In[60]: # 수도권과 비수도권의 빈도수 차이가 2배이상이 나므로 이중 검정을 실시 # 피셔의 정확검정으로 이중 검정 oddsratio, pvalue = stats.fisher_exact(bus2) oddsratio, pvalue # In[61]: # 검정결과 대중교통 이용률에는 통계적으로 유의한 연관이 있다. # In[62]: # 전국 기업 소재 현황 company = pd.read_csv('./전국 기업.csv', encoding='cp949') company # In[63]: # 필요한 정보로 데이터프레임 생성 index = company['시도'].unique() cnt = company['시도'].value_counts() cmpy = pd.DataFrame({'cnt':cnt},index=index) # In[64]: cmpy = cmpy.drop([cmpy.index[2],cmpy.index[18]]) cmpy # In[65]: # 수도권, 비수도권으로 나누기 cap_cp = cmpy['cnt'][0]+cmpy['cnt'][1]+cmpy['cnt'][11] ter_cp = sum(cmpy['cnt']) - cap_cp # In[66]: idx = ['수도권','비수도권'] amt = [cap_cp,ter_cp] cp_df = pd.DataFrame({'amt':amt,'pop':pop},index=idx) cp_df # In[67]: # 카이제곱검정 # 귀무가설 : 수도권과 비수도권의 기업수 차이에는 통계적으로 유의한 연관이 없을 것이다. # 대립가설 : 수도권과 비수도권의 기업수 차이에는 통계적으로 유의한 연관이 있을 것이다. stats.chi2_contingency(cp_df) # In[68]: # P밸류 0.05 이하로 귀무가설 기각, 대립가설 채택. 수도권과 비수도권의 기업수 차이에는 통계적으로 유의한 연관이 있다. # 수도권과 비수도권의 빈도수 차이가 3배 가까이 나므로 이중 검정을 실시 # 피셔의 정확검정으로 이중 검정 oddsratio, pvalue = stats.fisher_exact(cp_df) oddsratio, pvalue # In[69]: # 검정결과 기업의 소재지차이에는 통계적으로 유의한 연관이 있다. # In[70]: # 전국 의료법인 소재지 현황 hospital = pd.read_csv('./전국 의료법인.csv', encoding='cp949') hospital # In[71]: # 필요한 정보로 데이터프레임 생성 index = hospital['시도'].unique() cnt = hospital['시도'].value_counts() hspt = pd.DataFrame({'cnt':cnt},index=index) hspt # In[72]: # 수도권, 비수도권으로 나누기 cap_hp = hspt['cnt'][1]+hspt['cnt'][7]+hspt['cnt'][13] ter_hp = sum(hspt['cnt']) - cap_hp idx = ['수도권','비수도권'] amt = [cap_hp,ter_hp] hp_df = pd.DataFrame({'amt':amt,'pop':pop},index=idx) hp_df # In[73]: # 카이제곱검정 # 귀무가설 : 수도권과 비수도권의 의료법인 차이에는 통계적으로 유의한 연관이 없을 것이다. # 대립가설 : 수도권과 비수도권의 의료법인 차이에는 통계적으로 유의한 연관이 있을 것이다. stats.chi2_contingency(hp_df) # In[74]: # P밸류 0.05 이하로 귀무가설 기각, 대립가설 채택. 수도권과 비수도권의 의료법인 수 차이에는 통계적으로 유의한 연관이 있다. # 수도권과 비수도권의 빈도수 차이가 3배 가까이 나므로 이중 검정을 실시 # 피셔의 정확검정으로 이중 검정 oddsratio, pvalue = stats.fisher_exact(hp_df) oddsratio, pvalue # In[75]: # 수도권과 비수도권의 의료법인 수 차이에는 통계적으로 유의한 연관이 있다. (수도권 < 비수도권) # 의료법인 제도가 의료취약지에 병원급 의료기관 개설을 촉진하기 위해 도입 된 제도라는 점이 영향을 미쳤다고 볼 수 있다. # In[76]: hos = pd.read_csv('./전국 의료기관.csv', encoding='cp949') hos # In[130]: # 필요한 정보로 데이터프레임 생성 hos = hos[['시도','계']] hos.set_index(hos['시도'],drop=True,inplace=True) # In[78]: # 수도권, 비수도권으로 나누기 cap_hs = hos['계'][0]+hos['계'][2]+hos['계'][7] ter_hs = sum(hos['계']) - cap_hs idx = ['수도권','비수도권'] amt = [cap_hs,ter_hs] hs_df = pd.DataFrame({'amt':amt,'pop':pop},index=idx) hs_df # In[79]: # 카이제곱검정 # 귀무가설 : 수도권과 비수도권의 의료기관 차이에는 통계적으로 유의한 연관이 없을 것이다. # 대립가설 : 수도권과 비수도권의 의료기관 차이에는 통계적으로 유의한 연관이 있을 것이다. stats.chi2_contingency(hs_df) # In[80]: # P밸류 0.05 이하로 귀무가설 기각, 대립가설 채택. 수도권과 비수도권의 의료기관 수 차이에는 통계적으로 유의한 연관이 있다. # In[81]: # 전국 대규모 점포 소재 현황 bigstore = pd.read_csv('./대규모점포.csv', encoding='cp949') bigstore # In[82]: # 필요한 정보로 데이터프레임 생성 index = bigstore['시도'].unique() cnt = bigstore['시도'].value_counts() bstr = pd.DataFrame({'cnt':cnt},index=index) bstr # In[83]: # 수도권, 비수도권으로 나누기 cap_bs = bstr['cnt'][2]+bstr['cnt'][9]+bstr['cnt'][10] ter_bs = sum(bstr['cnt']) - cap_bs idx = ['수도권','비수도권'] amt = [cap_bs,ter_bs] bs_df = pd.DataFrame({'amt':amt,'pop':pop},index=idx) bs_df # In[84]: # 카이제곱검정 # 귀무가설 : 수도권과 비수도권의 대규모점포수 차이에는 통계적으로 유의한 연관이 없을 것이다. # 대립가설 : 수도권과 비수도권의 대규모점포수 차이에는 통계적으로 유의한 연관이 있을 것이다. stats.chi2_contingency(bs_df) # In[85]: # P밸류 0.05 이하로 귀무가설 기각, 대립가설 채택. 수도권과 비수도권의 대규모점포수 차이에는 통계적으로 유의한 연관이 있다. # In[86]: # 전국 주요 상권 소재 현황 store = pd.read_csv('./전국 주요 상권 현황.csv', encoding='cp949') store # In[87]: # 필요한 정보로 데이터프레임 생성 index = store['시도명'].unique() cnt = store['시도명'].value_counts() str = pd.DataFrame({'cnt':cnt},index=index) str # In[88]: # 수도권, 비수도권으로 나누기 cap_s = str['cnt'][0]+str['cnt'][11]+str['cnt'][12] ter_s = sum(str['cnt']) - cap_s idx = ['수도권','비수도권'] amt = [cap_s,ter_s] s_df = pd.DataFrame({'amt':amt,'pop':pop},index=idx) s_df # In[89]: # 카이제곱검정 # 귀무가설 : 수도권과 비수도권의 주요상권수 차이에는 통계적으로 유의한 연관이 없을 것이다. # 대립가설 : 수도권과 비수도권의 주요상권수 차이에는 통계적으로 유의한 연관이 있을 것이다. stats.chi2_contingency(s_df) # In[90]: # P밸류 0.05 이하로 귀무가설 기각, 대립가설 채택. 수도권과 비수도권의 주요상권수 차이에는 통계적으로 유의한 연관이 있다. # In[91]: # 전국 공연 행사 소재 현황 concert = pd.read_csv('./전국공연행사정보표준데이터.csv', encoding='cp949') concert # In[92]: # 필요한 정보로 데이터프레임 생성 index = concert['시도'].unique() cnt = concert['시도'].value_counts() con = pd.DataFrame({'cnt':cnt},index=index) con # In[93]: # 수도권, 비수도권으로 나누기 cap_con = con['cnt'][0]+con['cnt'][6]+con['cnt'][9] ter_con = sum(con['cnt']) - cap_con idx = ['수도권','비수도권'] amt = [cap_con,ter_con] con_df = pd.DataFrame({'amt':amt,'pop':pop},index=idx) con_df # In[94]: # 카이제곱검정 # 귀무가설 : 수도권과 비수도권의 공연행사수 차이에는 통계적으로 유의한 연관이 없을 것이다. # 대립가설 : 수도권과 비수도권의 공연행사수 차이에는 통계적으로 유의한 연관이 있을 것이다. stats.chi2_contingency(con_df) # In[95]: # P밸류 0.05 이하로 귀무가설 기각, 대립가설 채택. 수도권과 비수도권의 공연행사수 차이에는 통계적으로 유의한 연관이 있다. # In[96]: # 전국 유초중고 학교 소재 현황 school = pd.read_csv('./유초중고.csv', encoding='cp949') school # In[97]: # 필요한 정보로 데이터프레임 생성 index = school['시도'].unique() cnt = school['시도'].value_counts() sch = pd.DataFrame({'cnt':cnt},index=index) sch # In[98]: # 수도권, 비수도권으로 나누기 cap_sc = sch['cnt'][0]+sch['cnt'][3]+sch['cnt'][8] ter_sc = sum(sch['cnt']) - cap_sc idx = ['수도권','비수도권'] amt = [cap_sc,ter_sc] sc_df = pd.DataFrame({'amt':amt,'pop':pop},index=idx) sc_df # In[99]: # 카이제곱검정 # 귀무가설 : 수도권과 비수도권의 유초중고 학교 수 차이에는 통계적으로 유의한 연관이 없을 것이다. # 대립가설 : 수도권과 비수도권의 유초중고 학교 수 차이에는 통계적으로 유의한 연관이 있을 것이다. stats.chi2_contingency(sc_df) # In[100]: # 수도권과 비수도권의 빈도수 차이가 2배 가량 나므로 이중 검정을 실시 # 피셔의 정확검정으로 이중 검정 oddsratio, pvalue = stats.fisher_exact(sc_df) oddsratio, pvalue # In[101]: # P밸류 0.05이하로 수도권과 비수도권의 유초중고 학교 수 차이에는 통계적으로 유의한 연관이 있다. # In[102]: # 전국 대학교 소재 현황 college = pd.read_csv('./시도별 대학교 학교수.csv', encoding='cp949') college # In[103]: # 수도권, 비수도권으로 나누기 cap_cl = college['학교수'][0]+college['학교수'][8]+college['학교수'][3] ter_cl = sum(college['학교수']) - cap_cl idx = ['수도권','비수도권'] amt = [cap_cl,ter_cl] cl_df = pd.DataFrame({'amt':amt,'pop':pop},index=idx) cl_df # In[104]: # 카이제곱검정 # 귀무가설 : 수도권과 비수도권의 대학교 수 차이에는 통계적으로 유의한 연관이 없을 것이다. # 대립가설 : 수도권과 비수도권의 대학교수 차이에는 통계적으로 유의한 연관이 있을 것이다. stats.chi2_contingency(cl_df) # In[105]: # P밸류 0.05이하로 수도권과 비수도권의 대학교 수 차이에는 통계적으로 유의한 연관이 있다. # In[106]: # 전국 대학원 소재 현황 university = pd.read_csv('./시도별 대학원 학교수.csv', encoding='cp949') university # In[107]: # 수도권, 비수도권으로 나누기 cap_un = university['학교 수'][0]+university['학교 수'][8]+university['학교 수'][3] ter_un = sum(university['학교 수']) - cap_un idx = ['수도권','비수도권'] amt = [cap_un,ter_un] un_df = pd.DataFrame({'amt':amt,'pop':pop},index=idx) un_df # In[108]: # 카이제곱검정 # 귀무가설 : 수도권과 비수도권의 대학교 수 차이에는 통계적으로 유의한 연관이 없을 것이다. # 대립가설 : 수도권과 비수도권의 대학교수 차이에는 통계적으로 유의한 연관이 있을 것이다. stats.chi2_contingency(un_df) # In[109]: # P밸류 0.05이상으로 수도권과 비수도권의 대학교 수 차이에는 통계적으로 유의한 연관이 없다. # In[112]: # 상관계수 확인 # 각 데이터프레임의 필요한 정보를 모아 합치기 idx = ['수도권','비수도권'] bus_user = [cap_user,ter_user] comp = [cap_cp,ter_cp] hosp = [cap_hs,ter_hs] big_store = [cap_bs,ter_bs] stores = [cap_s,ter_s] cons = [cap_con,ter_con] schl = [cap_sc,ter_sc] clg = [cap_cl,ter_cl] unvs = [cap_un,ter_un] cor_df = pd.DataFrame({'bus':bus_user, 'comp':comp, 'hosp':hosp, 'bigstr':big_store, 'store':stores, 'concert':cons, 'school':schl, 'college':clg, 'university':unvs, 'pop':pop}, index=idx) cor_df # In[123]: # 스케일링 from sklearn.preprocessing import MaxAbsScaler scaler = MaxAbsScaler() scaler = scaler.fit_transform(cor_df) scaler # In[122]: cor_df.corr() # In[125]: get_ipython().run_line_magic('matplotlib', 'inline') import matplotlib.pyplot as plt import seaborn as sns # In[126]: plt.figure(figsize=(15,15)) sns.heatmap(data = cor_df.corr(), annot=True, fmt = '.2f', linewidths=.5, cmap='Blues') # In[137]: # 수도권 비수도권의 상관관계는 구체적 측정이 어려워 원래의 지역구분을 그대로 사용한 데이터프레임 불러오기 # In[141]: df = pd.read_csv('./전국현황.csv', encoding='cp949') df # In[142]: df.set_index(df['지역'],drop=True,inplace=True) # In[144]: df = df.drop('지역',axis=1) df # In[145]: df.corr() # In[149]: plt.rcParams['font.family'] = 'HYGothic-Medium' plt.figure(figsize=(15,15)) sns.heatmap(data = df.corr(), annot=True, fmt = '.2f', linewidths=.5, cmap='Blues') # In[ ]: