#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()