시작-데이터프레임불러오기

# 인코딩 문제를 해결하는 두가지 방법
## 1 csv파일 인코딩을 ANSI로 저장
df1=read.csv('https://github.com/lhmlhm1111/Data_GongHak/raw/master/%EC%A0%84%EC%B2%98%EB%A6%AC/%EC%86%8C%EB%93%9D%EB%B0%98%EC%98%81%EC%B5%9C%EC%A2%85.csv',header=T, sep=',')

## 2 readAny 패키지 활용

library (devtools)
## Loading required package: usethis
# 패키지를 로드합니다.
install_github("plgrmr/readAny", force = TRUE)
## Downloading GitHub repo plgrmr/readAny@master
## cli (1.1.0 -> 2.0.0) [CRAN]
## Installing 1 packages: cli
## Installing package into 'C:/Users/bookair/Documents/R/win-library/3.6'
## (as 'lib' is unspecified)
## 
##   There is a binary version available but the source version is later:
##     binary source needs_compilation
## cli  1.1.0  2.0.0             FALSE
## installing the source package 'cli'
##   
  
  
   checking for file 'C:\Users\bookair\AppData\Local\Temp\RtmpqgpHJR\remotes260869541af2\plgrmr-readAny-8aaddb7/DESCRIPTION' ...
  
   checking for file 'C:\Users\bookair\AppData\Local\Temp\RtmpqgpHJR\remotes260869541af2\plgrmr-readAny-8aaddb7/DESCRIPTION' ... 
  
√  checking for file 'C:\Users\bookair\AppData\Local\Temp\RtmpqgpHJR\remotes260869541af2\plgrmr-readAny-8aaddb7/DESCRIPTION' (556ms)
## 
  
  
  
-  preparing 'readAny':
##    checking DESCRIPTION meta-information ...
  
   checking DESCRIPTION meta-information ... 
  
√  checking DESCRIPTION meta-information
## 
  
  
  
-  checking for LF line-endings in source and make files and shell scripts
## 
  
-  checking for empty or unneeded directories
## 
  
  
  
-  building 'readAny_0.1.0.tar.gz'
## 
  
   
## 
## Installing package into 'C:/Users/bookair/Documents/R/win-library/3.6'
## (as 'lib' is unspecified)
library(readAny)
## Loading required package: readr
df2= read.any('https://github.com/lhmlhm1111/Data_GongHak/raw/master/%EC%A0%84%EC%B2%98%EB%A6%AC/%EC%86%8C%EB%93%9D%EB%B0%98%EC%98%81%EC%B5%9C%EC%A2%85.csv', header=T, sep=',')

데이터프레임 선형모델, 분산 분석, 각 독립변수 유의수준 유의성 검정

attach (df1)
names (df1)
##  [1] "year"                  "읍면동명"              "자치구"               
##  [4] "선거인수"              "새누리당"              "더불어민주당"         
##  [7] "국민의당"              "독거노인수"            "유년부양비"           
## [10] "노년부양비"            "노령화지수"            "사업체수"             
## [13] "종사자수"              "사업체.창업률"         "기초수급자인원수"     
## [16] "보육시설"              "금융기관"              "사업체.평균연령"      
## [19] "장애등급별.장애인현황" "인구"                  "면적"                 
## [22] "인구밀도"              "소득"
model3 <- aov(새누리당~독거노인수+유년부양비+노년부양비+노령화지수+사업체수+종사자수+사업체.창업률+기초수급자인원수+보육시설+금융기관+사업체.평균연령+인구+면적+인구밀도+ 소득)
summary(model3)
##                   Df    Sum Sq   Mean Sq F value   Pr(>F)    
## 독거노인수         1 2.302e+08 230185894 120.861  < 2e-16 ***
## 유년부양비         1 8.248e+08 824836682 433.086  < 2e-16 ***
## 노년부양비         1 2.637e+08 263678415 138.446  < 2e-16 ***
## 노령화지수         1 2.340e+06   2339973   1.229 0.267997    
## 사업체수           1 9.321e+07  93210115  48.941 5.43e-12 ***
## 종사자수           1 4.871e+06   4871389   2.558 0.110135    
## 사업체.창업률      1 2.533e+05    253293   0.133 0.715442    
## 기초수급자인원수   1 4.721e+07  47207560  24.787 7.79e-07 ***
## 보육시설           1 4.582e+07  45819850  24.058 1.12e-06 ***
## 금융기관           1 1.117e+08 111723182  58.661 5.21e-14 ***
## 사업체.평균연령    1 6.360e+05    635956   0.334 0.563521    
## 인구               1 7.214e+08 721383036 378.767  < 2e-16 ***
## 면적               1 1.341e+07  13405649   7.039 0.008129 ** 
## 인구밀도           1 3.369e+07  33687732  17.688 2.89e-05 ***
## 소득               1 2.893e+07  28932542  15.191 0.000105 ***
## Residuals        831 1.583e+09   1904558                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  model4 <-lm(새누리당~독거노인수+유년부양비+노년부양비+노령화지수+사업체수+종사자수+사업체.창업률+기초수급자인원수+보육시설+금융기관+사업체.평균연령+인구+면적+인구밀도+ 소득)
summary(model4)
## 
## Call:
## lm(formula = 새누리당 ~ 독거노인수 + 유년부양비 + 노년부양비 + 
##     노령화지수 + 사업체수 + 종사자수 + 사업체.창업률 + 기초수급자인원수 + 
##     보육시설 + 금융기관 + 사업체.평균연령 + 인구 + 면적 + 인구밀도 + 
##     소득)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -9008.0  -433.0   148.9   695.5  4213.1 
## 
## Coefficients:
##                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)       8.693e+02  7.176e+02   1.211 0.226064    
## 독거노인수       -6.170e-01  2.473e-01  -2.495 0.012788 *  
## 유년부양비        3.503e+01  2.173e+01   1.612 0.107257    
## 노년부양비        3.770e+01  2.651e+01   1.422 0.155352    
## 노령화지수       -5.812e+00  2.674e+00  -2.173 0.030061 *  
## 사업체수         -2.511e-02  5.320e-02  -0.472 0.637008    
## 종사자수         -1.857e-02  7.987e-03  -2.325 0.020300 *  
## 사업체.창업률    -5.099e+01  2.065e+01  -2.470 0.013716 *  
## 기초수급자인원수  2.630e-01  1.178e-01   2.232 0.025873 *  
## 보육시설         -9.484e-01  2.432e-01  -3.899 0.000104 ***
## 금융기관          6.458e+01  1.302e+01   4.959 8.59e-07 ***
## 사업체.평균연령  -2.697e+00  3.812e+01  -0.071 0.943621    
## 인구              1.959e-01  1.039e-02  18.865  < 2e-16 ***
## 면적             -2.927e+01  4.214e+01  -0.695 0.487557    
## 인구밀도         -2.294e-02  5.198e-03  -4.412 1.16e-05 ***
## 소득              2.353e-04  6.038e-05   3.898 0.000105 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1380 on 831 degrees of freedom
## Multiple R-squared:  0.6048, Adjusted R-squared:  0.5977 
## F-statistic: 84.79 on 15 and 831 DF,  p-value: < 2.2e-16

변수 중요도 파악, 변수선택

library(reticulate)
use_python("/usr/bin/python3") # Change accordingly to your Python version
matplotlib <- import("matplotlib")
matplotlib$use("Agg", force = TRUE)

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error

#원본 데이터 호출 (깃허브에 저장된 데이터 파일 호출)
df4 = pd.read_csv('https://github.com/lhmlhm1111/Data_GongHak/raw/master/11-22totaldata.txt', encoding='utf-8', sep=',')

#학습 데이터 생성
train1 = df4.drop(df4.index[:250],axis=0)
train1.x = train1.drop(['year','읍면동명','자치구','새누리당','더불어민주당','국민의당'],axis=1)
## C:\Users\bookair\ANACON~1\python.exe:1: UserWarning: Pandas doesn't allow columns to be created via a new attribute name - see https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access
train1.y = train1['새누리당']

#테스트 데이터 생성
test1 = df4.drop(df4.index[250:],axis=0)
test1.x = test1.drop(['year','읍면동명','자치구','새누리당','더불어민주당','국민의당'],axis=1)
test1.y = test1['새누리당']


## 랜덤포레스트 회귀 모델 생성&적용
rf1 = RandomForestRegressor()

rf1.fit(train1.x,train1.y)
## RandomForestRegressor(bootstrap=True, criterion='mse', max_depth=None,
##                       max_features='auto', max_leaf_nodes=None,
##                       min_impurity_decrease=0.0, min_impurity_split=None,
##                       min_samples_leaf=1, min_samples_split=2,
##                       min_weight_fraction_leaf=0.0, n_estimators=10,
##                       n_jobs=None, oob_score=False, random_state=None,
##                       verbose=0, warm_start=False)
## 
## C:\Users\bookair\ANACON~1\lib\site-packages\sklearn\ensemble\forest.py:245: FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22.
##   "10 in version 0.20 to 100 in 0.22.", FutureWarning)
predicted = rf1.predict(test1.x)
rf1.feature_importances_
## array([0.11489897, 0.01354322, 0.07242079, 0.01851679, 0.04484111,
##        0.00752623, 0.00944355, 0.01907715, 0.02688265, 0.03231178,
##        0.03102147, 0.01850907, 0.02121904, 0.46441726, 0.03513181,
##        0.02269932, 0.04753978])
import PyQt5
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.pyplot import figure
#가공할 데이터 호출
data = pd.read_csv('https://github.com/lhmlhm1111/Data_GongHak/raw/master/11-22totaldata.txt',encoding='UTF-8',sep=',')

#데이터 가공 : 변수 선별 (제외할 변수)
df3 = data.drop(['year','읍면동명','자치구','선거인수','인구'],axis=1)
#상관계수 분포 지도 (Heat Map) 작성
plt.rc('font', family='batang')

fig = plt.figure(figsize=[20,20])

ax=sns.heatmap(df3.corr(),annot=True,square=True)
plt.title('변수 간 상관관계')
plt.show()

# 모델 적용

시각화