#install.packages("dplyr")
#install.packages("ggplot2")
#install.packages("ggthemes")
#install.packages("stringr")
#install.packages("tidyr")

library(dplyr)
library(ggplot2)
library(ggthemes)
library(stringr)
library(tidyr)
getwd()
## [1] "/Users/Naver/study"
setwd("/Users/Naver/study")
data <- read.csv("example_population_f.csv", fileEncoding="euc-kr")
data <- tbl_dt(data)
## Loading required namespace: data.table

목표 : 성비 데이터의 분포를 살펴보고, 이상치(Outlier)가 측정되는 city 리스트를 추출하자.

summary(data)
##        X              Provinces       City       Population     
##  Min.   :  2.0   경기도    :51   동구   :  6   Min.   :  10304  
##  1st Qu.: 72.5   경상북도  :25   중구   :  6   1st Qu.:  63302  
##  Median :143.0   서울특별시:25   남구   :  5   Median : 184992  
##  Mean   :142.3   경상남도  :23   서구   :  5   Mean   : 232765  
##  3rd Qu.:212.5   전라남도  :22   북구   :  4   3rd Qu.: 341550  
##  Max.   :281.0   강원도    :18   강서구 :  2   Max.   :1177851  
##                  (Other)   :99   (Other):235                    
##    Households       PersInHou          Male            Female      
##  Min.   :  5365   Min.   :1.860   Min.   :  5518   Min.   :  4786  
##  1st Qu.: 28784   1st Qu.:2.170   1st Qu.: 31671   1st Qu.: 32096  
##  Median : 74214   Median :2.370   Median : 93176   Median : 91925  
##  Mean   : 93816   Mean   :2.367   Mean   :116427   Mean   :116338  
##  3rd Qu.:132086   3rd Qu.:2.555   3rd Qu.:169483   3rd Qu.:169181  
##  Max.   :457894   Max.   :2.910   Max.   :592971   Max.   :584880  
##                                                                    
##     SexRatio    
##  Min.   :0.900  
##  1st Qu.:0.970  
##  Median :1.000  
##  Mean   :1.007  
##  3rd Qu.:1.030  
##  Max.   :1.290  
## 
g <- ggplot(data, aes(SexRatio)) + theme_bw()
g + geom_histogram(bins = 50, fill = "steelblue", position="identity") + 
        ggtitle("전국 지역별 성비 분포") +
        geom_vline(aes(xintercept=mean(SexRatio)), color="blue", linetype="dashed", size=1) +
        geom_vline(aes(xintercept=median(SexRatio)), color="red", linetype="dashed", size=1)

data_sex <- data %>% select(Provinces, City, Male, Female, Population) %>%
        gather(sex, count, -Provinces, -City, -Population) %>%
        mutate(prop = count/Population) %>%
        print
## Source: local data table [526 x 6]
## 
##     Provinces      City Population   sex  count      prop
##        (fctr)    (fctr)      (int) (chr)  (int)     (dbl)
## 1  서울특별시   종로구      155695  Male  76962 0.4943126
## 2  서울특별시     중구      126817  Male  63292 0.4990814
## 3  서울특별시   용산구      235186  Male 114119 0.4852287
## 4  서울특별시   성동구      298145  Male 148265 0.4972916
## 5  서울특별시   광진구      362197  Male 177946 0.4912962
## 6  서울특별시 동대문구      362604  Male 181825 0.5014423
## 7  서울특별시   중랑구      417976  Male 208657 0.4992081
## 8  서울특별시   성북구      464176  Male 227676 0.4904950
## 9  서울특별시   강북구      333523  Male 164304 0.4926317
## 10 서울특별시   도봉구      353284  Male 174075 0.4927339
## ..        ...       ...        ...   ...    ...       ...
data %>% summarise(mean = mean(SexRatio),
                   median = median(SexRatio),
                   var = var(SexRatio),
                   sd = sd(SexRatio))
## Source: local data table [1 x 4]
## 
##       mean median         var         sd
##      (dbl)  (dbl)       (dbl)      (dbl)
## 1 1.006882      1 0.002675738 0.05172754
range(data$SexRatio)
## [1] 0.90 1.29
summary(data$SexRatio)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.900   0.970   1.000   1.007   1.030   1.290
quantile(data$SexRatio)
##   0%  25%  50%  75% 100% 
## 0.90 0.97 1.00 1.03 1.29
ggplot(data, aes(factor(1), SexRatio)) + geom_boxplot() + theme_bw() +
        ggtitle("전국 지역별 성비 분포")

distIQR <- IQR(data$SexRatio, na.rm=T)
distIQR
## [1] 0.06
posIQR <- quantile(data$SexRatio, probs=c(0.25, 0.75), na.rm=T)
posIQR
##  25%  75% 
## 0.97 1.03
downWhisker <- posIQR[[1]] - distIQR*1.5 
upWhisker <- posIQR[[2]] + distIQR*1.5
downWhisker; upWhisker
## [1] 0.88
## [1] 1.12
outlier <- data %>%
        filter(SexRatio < downWhisker | SexRatio > upWhisker) %>%
        select(Provinces, City, Population, SexRatio) %>%
        arrange(desc(SexRatio)) %>%
        print
## Source: local data table [8 x 4]
## 
##    Provinces    City Population SexRatio
##       (fctr)  (fctr)      (int)    (dbl)
## 1 인천광역시 옹진군       20825     1.29
## 2     강원도 화천군       26790     1.27
## 3     강원도 인제군       33352     1.19
## 4     강원도 양구군       24283     1.17
## 5     강원도 고성군       30066     1.15
## 6   경상북도 울릉군       10304     1.15
## 7 울산광역시   동구      174903     1.13
## 8     강원도 철원군       49122     1.13

추가

data_sex_prov <- data %>% group_by(Provinces) %>%
        summarise(mean = mean(SexRatio)) %>%
        print
## Source: local data table [16 x 2]
## 
##         Provinces      mean
##            (fctr)     (dbl)
## 1      서울특별시 0.9736000
## 2      부산광역시 0.9812500
## 3      대구광역시 0.9912500
## 4      인천광역시 1.0430000
## 5      광주광역시 0.9820000
## 6      대전광역시 1.0060000
## 7      울산광역시 1.0700000
## 8          경기도 1.0149020
## 9          강원도 1.0683333
## 10       충청북도 1.0220000
## 11       충청남도 1.0200000
## 12       전라북도 0.9881250
## 13       전라남도 0.9881818
## 14       경상북도 1.0016000
## 15       경상남도 0.9934783
## 16 제주특별자치도 1.0100000
g <- ggplot(data_sex_prov, aes(Provinces, mean)) + theme_bw()
g + geom_bar(stat = "identity", fill = "steelblue") 

#last_plot() + geom_errorbar()