R

[R] 데이터 개념 이해하기 (2-2)

빵으니 2020. 7. 8. 18:19
Chap02-2

데이터 개념 이해하기

예제로 이해하기

hflights 패키지 - 20만건 이상의 데이터 예제 패키지

In [1]:
# 패키지 설치
install.packages('hflights')
package 'hflights' successfully unpacked and MD5 sums checked

The downloaded binary packages are in
	C:\Users\205\AppData\Local\Temp\RtmpgfiuHx\downloaded_packages
In [2]:
# 공통 패키지 로드 (그림 그려주는 곳)
library(ggplot2)
Warning message:
"package 'ggplot2' was built under R version 3.6.3"
In [3]:
library(hflights)

str() : 구조 살펴보기

In [4]:
str(hflights)
'data.frame':	227496 obs. of  21 variables:
 $ Year             : int  2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 ...
 $ Month            : int  1 1 1 1 1 1 1 1 1 1 ...
 $ DayofMonth       : int  1 2 3 4 5 6 7 8 9 10 ...
 $ DayOfWeek        : int  6 7 1 2 3 4 5 6 7 1 ...
 $ DepTime          : int  1400 1401 1352 1403 1405 1359 1359 1355 1443 1443 ...
 $ ArrTime          : int  1500 1501 1502 1513 1507 1503 1509 1454 1554 1553 ...
 $ UniqueCarrier    : chr  "AA" "AA" "AA" "AA" ...
 $ FlightNum        : int  428 428 428 428 428 428 428 428 428 428 ...
 $ TailNum          : chr  "N576AA" "N557AA" "N541AA" "N403AA" ...
 $ ActualElapsedTime: int  60 60 70 70 62 64 70 59 71 70 ...
 $ AirTime          : int  40 45 48 39 44 45 43 40 41 45 ...
 $ ArrDelay         : int  -10 -9 -8 3 -3 -7 -1 -16 44 43 ...
 $ DepDelay         : int  0 1 -8 3 5 -1 -1 -5 43 43 ...
 $ Origin           : chr  "IAH" "IAH" "IAH" "IAH" ...
 $ Dest             : chr  "DFW" "DFW" "DFW" "DFW" ...
 $ Distance         : int  224 224 224 224 224 224 224 224 224 224 ...
 $ TaxiIn           : int  7 6 5 9 9 6 12 7 8 6 ...
 $ TaxiOut          : int  13 9 17 22 9 13 15 12 22 19 ...
 $ Cancelled        : int  0 0 0 0 0 0 0 0 0 0 ...
 $ CancellationCode : chr  "" "" "" "" ...
 $ Diverted         : int  0 0 0 0 0 0 0 0 0 0 ...

head 앞 부분 일부 확인

In [5]:
head(hflights)
YearMonthDayofMonthDayOfWeekDepTimeArrTimeUniqueCarrierFlightNumTailNumActualElapsedTime...ArrDelayDepDelayOriginDestDistanceTaxiInTaxiOutCancelledCancellationCodeDiverted
54242011 1 1 6 1400 1500 AA 428 N576AA60 ... -10 0 IAH DFW 224 7 13 0 0
54252011 1 2 7 1401 1501 AA 428 N557AA60 ... -9 1 IAH DFW 224 6 9 0 0
54262011 1 3 1 1352 1502 AA 428 N541AA70 ... -8 -8 IAH DFW 224 5 17 0 0
54272011 1 4 2 1403 1513 AA 428 N403AA70 ... 3 3 IAH DFW 224 9 22 0 0
54282011 1 5 3 1405 1507 AA 428 N492AA62 ... -3 5 IAH DFW 224 9 9 0 0
54292011 1 6 4 1359 1503 AA 428 N262AA64 ... -7 -1 IAH DFW 224 6 13 0 0

table() : 특정 변수 확인

In [6]:
dest_table <- table(hflights$Dest)
dest_table
 ABQ  AEX  AGS  AMA  ANC  ASE  ATL  AUS  AVL  BFL  BHM  BKG  BNA  BOS  BPT  BRO 
2812  724    1 1297  125  125 7886 5022  350  504 2736  110 3481 1752    3 1692 
 BTR  BWI  CAE  CHS  CID  CLE  CLT  CMH  COS  CRP  CRW  CVG  DAL  DAY  DCA  DEN 
1762 2551  561 1200  410 2140 4735 1348 1657 4813  357 1535 9820  451 2699 5920 
 DFW  DSM  DTW  ECP  EGE  ELP  EWR  FLL  GJT  GPT  GRK  GRR  GSO  GSP  GUC  HDN 
6653  647 2601  729  110 3036 4314 2462  403 1618   42  677  630 1123   86  110 
 HNL  HOB  HRL  HSV  IAD  ICT  IND  JAN  JAX  JFK  LAS  LAX  LBB  LCH  LEX  LFT 
 402  309 3983  923 1980 1517 1750 2011 2135  695 4082 6064 1333  364  584 2313 
 LGA  LIT  LRD  MAF  MCI  MCO  MDW  MEM  MFE  MIA  MKE  MLU  MOB  MSP  MSY  MTJ 
2730 1579 1188 2306 3174 3687 2094 2399 1128 2463 1588  292 1674 2010 6823  164 
 OAK  OKC  OMA  ONT  ORD  ORF  PBI  PDX  PHL  PHX  PIT  PNS  PSP  RDU  RIC  RNO 
 690 3170 2044  952 5748  717 1253 1235 2367 5096 1664 1539  106 1740  900  243 
 RSW  SAN  SAT  SAV  SDF  SEA  SFO  SHV  SJC  SJU  SLC  SMF  SNA  STL  TPA  TUL 
 948 2936 4893  863 1279 2615 2818  787  885  391 2033 1014 1661 2509 3085 2924 
 TUS  TYS  VPS  XNA 
1565 1210  880 1172 

length() : 벡터나 리스트 등 갯수 확인 함수

In [7]:
# 명목형 변수 갯수 확인
length(dest_table)
116

range() : 가장 큰 값, 작은 값

In [8]:
# 범위 살펴보기
range(dest_table)
  1. 1
  2. 9820
In [9]:
# 가장 큰 값, 작은 값의 이름 찾기
dest_table[dest_table == 1] # 오거스타 리저널 공항
dest_table[dest_table == 9820] # 댈러스 공항
AGS: 1
DAL: 9820
In [10]:
# 5000 넘는 공항
dest_table_5000 <- dest_table[dest_table > 5000]
dest_table_5000
 ATL  AUS  DAL  DEN  DFW  LAX  MSY  ORD  PHX 
7886 5022 9820 5920 6653 6064 6823 5748 5096 

barplot() : 막대그래프 그리기

In [11]:
barplot(dest_table_5000)

대장암 환자 자료 분석

  • 보건의료 빅데이터 개방 시스템
  • http://opendata.hira.or.kr
  • 어느 연령대에서 대장암이 많이 발생하는 지 조사
In [12]:
# 데이터 로드
df <- read.csv('R-ggagi-data/example_cancer.csv')
In [13]:
# 구조파악
str(df)
'data.frame':	18310 obs. of  8 variables:
 $ age            : int  75 52 67 62 70 76 55 72 64 71 ...
 $ sex            : Factor w/ 2 levels "남","여": 1 2 2 1 1 2 1 1 1 1 ...
 $ height         : Factor w/ 485 levels "100","130","130.2",..: 252 408 182 262 352 352 467 165 172 232 ...
 $ weight         : Factor w/ 638 levels "100","101","101.1",..: 333 446 349 263 343 563 463 243 363 248 ...
 $ dateOfoperation: Factor w/ 351 levels "2011-01-02","2011-01-03",..: 165 134 146 164 154 160 164 147 219 192 ...
 $ cancerStaging  : Factor w/ 5 levels "I","II","III",..: 1 4 3 1 2 3 2 3 1 2 ...
 $ hospitalization: int  48 17 10 11 10 10 12 18 15 35 ...
 $ diseaseCode    : Factor w/ 13 levels "C18","C180","C181",..: 9 9 9 9 4 11 9 4 13 11 ...
In [14]:
head(df, 3)
agesexheightweightdateOfoperationcancerStaginghospitalizationdiseaseCode
75 161 64 2011-06-22I 48 C187
52 176.6 75.3 2011-05-19IV 17 C187
67 154 65.6 2011-05-31III 10 C187
In [15]:
# 연령대별 도수 - 연속형 변수, 구간(계급) 나누기 (10대/20대...)
# cut()
age_table <- table(cut(df$age, breaks=(0:11)*10))
age_table
   (0,10]   (10,20]   (20,30]   (30,40]   (40,50]   (50,60]   (60,70]   (70,80] 
        0         3        77       482      1917      4558      5679      4598 
  (80,90]  (90,100] (100,110] 
      962        33         1 
In [16]:
# 변수 이름 변경 - rownames()
rownames(age_table) <- c('1s','10s','20s','30s','40s','50s','60s','70s','80s','90s','100s')
age_table
  1s  10s  20s  30s  40s  50s  60s  70s  80s  90s 100s 
   0    3   77  482 1917 4558 5679 4598  962   33    1 
In [17]:
# 시각화 1
barplot(age_table)
In [18]:
# 시각화 2
library(ggplot2)
library(ggthemes)
Warning message:
"package 'ggthemes' was built under R version 3.6.3"
In [19]:
ggplot(data=df, aes(x=age))+
    geom_freqpoly(binwidth=10, size=1.4, colour='orange')+
    theme_wsj()

전국 커피숍 폐업/영업 상황 살펴보기

In [20]:
# 데이터 로드
df <- read.csv('R-ggagi-data/example_coffee.csv', head=T, stringsAsFactors = T)
In [21]:
# 데이터 구조 파악
str(df)
'data.frame':	46832 obs. of  23 variables:
 $ number              : int  1 2 3 4 5 6 7 8 9 10 ...
 $ companyName         : Factor w/ 36991 levels "-10","#11(Sharp eleven)",..: 2 4 5 6 7 8 9 10 11 12 ...
 $ adress              : Factor w/ 45197 levels "","강원도 강릉시 강동면 안인진리 3-5번지 통일공원 G동 2층 ",..: 32695 45012 14332 25672 35262 44619 44059 16795 4038 16983 ...
 $ adressBystreet      : Factor w/ 38866 levels "","강원도 강릉시 가작로 13, 1층 (교동)",..: 28058 38633 12180 22436 1 38386 37843 14490 3373 14482 ...
 $ dateOflicensing     : int  20080917 20101124 20130902 20121108 20020911 20130822 20140605 20111209 20130315 20110908 ...
 $ stateOfbusiness     : Factor w/ 2 levels "운영중","폐업 등": 1 1 1 1 2 1 1 1 1 1 ...
 $ dateOfclosure       : int  NA NA NA NA 20071105 NA NA NA NA NA ...
 $ startdateOfcessation: logi  NA NA NA NA NA NA ...
 $ duedateOfcessation  : logi  NA NA NA NA NA NA ...
 $ dateOfreOpen        : logi  NA NA NA NA NA NA ...
 $ areaOfsite          : logi  NA NA NA NA NA NA ...
 $ zip                 : logi  NA NA NA NA NA NA ...
 $ waterwork           : Factor w/ 5 levels "","간이상수도",..: 4 4 4 4 4 4 4 4 4 4 ...
 $ numOfmenWorker      : int  NA NA NA NA 0 NA NA NA NA NA ...
 $ yearOfStart         : int  2008 2010 2013 2012 2002 2013 2014 2011 2013 2011 ...
 $ multipleUse         : Factor w/ 3 levels "","N","Y": 2 2 2 2 2 2 2 2 2 2 ...
 $ grade               : Factor w/ 8 levels "","갑","관리",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ sizeOfsite          : num  20.8 212.7 20 64.2 11.4 ...
 $ numOfwomenWorker    : int  NA NA NA NA 0 NA NA NA NA NA ...
 $ vicintyOfsite       : Factor w/ 8 levels "","결혼예식장주변",..: 1 1 4 1 1 1 1 3 1 3 ...
 $ sanitaryName        : Factor w/ 2 levels "","휴게음식점": 2 2 2 2 2 2 2 2 2 2 ...
 $ businessCondition   : Factor w/ 2 levels "","커피숍": 2 2 2 2 2 2 2 2 2 2 ...
 $ totalOfworker       : int  NA NA NA NA 0 NA NA NA NA NA ...
In [22]:
# 불필요한 변수 제거 -subset() 조건 걸 수 있음
df <- subset(df, select = c (-adressBystreet, -dateOfclosure, 
                             -startdateOfcessation, -duedateOfcessation, 
                             -dateOfreOpen, -zip))
str(df)
'data.frame':	46832 obs. of  17 variables:
 $ number           : int  1 2 3 4 5 6 7 8 9 10 ...
 $ companyName      : Factor w/ 36991 levels "-10","#11(Sharp eleven)",..: 2 4 5 6 7 8 9 10 11 12 ...
 $ adress           : Factor w/ 45197 levels "","강원도 강릉시 강동면 안인진리 3-5번지 통일공원 G동 2층 ",..: 32695 45012 14332 25672 35262 44619 44059 16795 4038 16983 ...
 $ dateOflicensing  : int  20080917 20101124 20130902 20121108 20020911 20130822 20140605 20111209 20130315 20110908 ...
 $ stateOfbusiness  : Factor w/ 2 levels "운영중","폐업 등": 1 1 1 1 2 1 1 1 1 1 ...
 $ areaOfsite       : logi  NA NA NA NA NA NA ...
 $ waterwork        : Factor w/ 5 levels "","간이상수도",..: 4 4 4 4 4 4 4 4 4 4 ...
 $ numOfmenWorker   : int  NA NA NA NA 0 NA NA NA NA NA ...
 $ yearOfStart      : int  2008 2010 2013 2012 2002 2013 2014 2011 2013 2011 ...
 $ multipleUse      : Factor w/ 3 levels "","N","Y": 2 2 2 2 2 2 2 2 2 2 ...
 $ grade            : Factor w/ 8 levels "","갑","관리",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ sizeOfsite       : num  20.8 212.7 20 64.2 11.4 ...
 $ numOfwomenWorker : int  NA NA NA NA 0 NA NA NA NA NA ...
 $ vicintyOfsite    : Factor w/ 8 levels "","결혼예식장주변",..: 1 1 4 1 1 1 1 3 1 3 ...
 $ sanitaryName     : Factor w/ 2 levels "","휴게음식점": 2 2 2 2 2 2 2 2 2 2 ...
 $ businessCondition: Factor w/ 2 levels "","커피숍": 2 2 2 2 2 2 2 2 2 2 ...
 $ totalOfworker    : int  NA NA NA NA 0 NA NA NA NA NA ...
In [23]:
# 최초 커피숍 찾기
range(df$yearOfStart)
range(df$yearOfStart, na.rm=T) # 결측치 제거
subset(df, subset=(yearOfStart==1964))
  1. <NA>
  2. <NA>
  1. 1964
  2. 2015
numbercompanyNameadressdateOflicensingstateOfbusinessareaOfsitewaterworknumOfmenWorkeryearOfStartmultipleUsegradesizeOfsitenumOfwomenWorkervicintyOfsitesanitaryNamebusinessConditiontotalOfworker
2303523035 엠에스커피 경기도 수원시 팔달구 매산로1가 16-5번지 19641125 폐업 등 NA 상수도전용 0 1964 N 0 0 기타 휴게음식점 커피숍 0
4629046290 홀릭 부산광역시 중구 남포동4가 4-4번지 (2층) 19640929 폐업 등 NA 0 1964 N 기타 0 0 기타 휴게음식점 커피숍 0
In [24]:
# 현재 운영중인 가장 오래된 커피숍 찾기 - subset()
df_filter <- subset(df,subset=(stateOfbusiness == '운영중'))
range(df_filter$yearOfstart, na.rm=T) # 결측치 제거
subset(df_filter, subset=(yearOfStart==1967))
Warning message in min(x, na.rm = na.rm):
"min에 전달되는 인자들 중 누락이 있어 Inf를 반환합니다"Warning message in max(x, na.rm = na.rm):
"max에 전달되는 인자들 중 누락이 있어 -Inf를 반환합니다"
  1. Inf
  2. -Inf
numbercompanyNameadressdateOflicensingstateOfbusinessareaOfsitewaterworknumOfmenWorkeryearOfStartmultipleUsegradesizeOfsitenumOfwomenWorkervicintyOfsitesanitaryNamebusinessConditiontotalOfworker
2410824108 왕관 커피숍 서울특별시 종로구 종로5가 182-3번지 (1층) 19671013 운영중 NA 상수도전용 0 1967 N 76.02 1 기타 휴게음식점 커피숍 1
4493444934 학커피숍 인천광역시 중구 경동 219번지 19670414 운영중 NA 0 1967 N 59.13 0 휴게음식점 커피숍 0
In [25]:
# 해마다 오픈하는 커피숍 갯수 찾기
table(df$yearOfStart)
1964 1966 1967 1968 1969 1970 1971 1972 1974 1975 1976 1979 1980 1981 1982 1983 
   2    2    3    1    2    4    6    3    1    2    5    4    9    8   12    9 
1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 
  11   18   21   21   26   23   25   28   37   50   48   48   41   54   54   46 
2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 
  89  183  398  799  648  654  863 1233 1579 2489 4172 5942 6315 7270 9905 3650 
In [26]:
# 데이터 시각화
# 2000년부터 성장, 2010년부터는 급성장
qplot(data=df, yearOfStart, geon='bar')
Warning message:
"Ignoring unknown parameters: geon"`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Warning message:
"Removed 19 rows containing non-finite values (stat_bin)."
In [27]:
# 분할표 작성 (변수 2개) -운영중 /폐업
stat_table <- table(df$stateOfbusiness, df$yearOfStart)
stat_table
         
          1964 1966 1967 1968 1969 1970 1971 1972 1974 1975 1976 1979 1980 1981
  운영중     0    0    2    0    0    2    4    2    1    1    1    2    3    6
  폐업 등    2    2    1    1    2    2    2    1    0    1    4    2    6    2
         
          1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995
  운영중     2    3    4    5    5    6   11    5    7    7    3   14   14   13
  폐업 등   10    6    7   13   16   15   15   18   18   21   34   36   34   35
         
          1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009
  운영중    14   21   25   23   26   76  105  163  180  204  314  496  729 1229
  폐업 등   27   33   29   23   63  107  293  636  468  450  549  737  850 1260
         
          2010 2011 2012 2013 2014 2015
  운영중  2503 3961 4642 6045 9125 3564
  폐업 등 1669 1981 1673 1225  780   86
In [28]:
# 조건으로 특정 칼럼값 찾기 - which(), 행조건 rownames 열조건 colnames
which(colnames(stat_table)==1993)  # 조건에 맞는 컬럼의 위치
which.max(colnames(stat_table))   # 가장 큰 값
26
48
In [29]:
stat_table_col_26_93 <- stat_table[,c(26:48)]  # 행은 다 가져와, 열은 26~48까지
stat_table_col_26_93
         
          1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006
  운영중    14   14   13   14   21   25   23   26   76  105  163  180  204  314
  폐업 등   36   34   35   27   33   29   23   63  107  293  636  468  450  549
         
          2007 2008 2009 2010 2011 2012 2013 2014 2015
  운영중   496  729 1229 2503 3961 4642 6045 9125 3564
  폐업 등  737  850 1260 1669 1981 1673 1225  780   86
In [30]:
# 비율 계산
# margin=2 열 기준
stat_prop_table <- prop.table(stat_table_col_26_93, margin=2)
stat_prop_table
         
                1993       1994       1995       1996       1997       1998
  운영중  0.28000000 0.29166667 0.27083333 0.34146341 0.38888889 0.46296296
  폐업 등 0.72000000 0.70833333 0.72916667 0.65853659 0.61111111 0.53703704
         
                1999       2000       2001       2002       2003       2004
  운영중  0.50000000 0.29213483 0.41530055 0.26381910 0.20400501 0.27777778
  폐업 등 0.50000000 0.70786517 0.58469945 0.73618090 0.79599499 0.72222222
         
                2005       2006       2007       2008       2009       2010
  운영중  0.31192661 0.36384705 0.40227088 0.46168461 0.49377260 0.59995206
  폐업 등 0.68807339 0.63615295 0.59772912 0.53831539 0.50622740 0.40004794
         
                2011       2012       2013       2014       2015
  운영중  0.66661057 0.73507522 0.83149931 0.92125189 0.97643836
  폐업 등 0.33338943 0.26492478 0.16850069 0.07874811 0.02356164
In [31]:
# 데이터 프레임 구성
input1 <- stat_table_col_26_93
input2 <- stat_prop_table
In [32]:
# df_bind <- data.frame(colnames(input1))
# df_bind <- data.frame(colnames(input1),input1[1,])
# df_bind <- data.frame(colnames(input1),input1[1,],input1[2,])
# df_bind <- data.frame(colnames(input1),input1[1,],input1[2,],input2[1,])

df_bind <- data.frame(colnames(input1),input1[1,],input1[2,],input2[1,],input2[2,])
df_bind
colnames.input1.input1.1...input1.2...input2.1...input2.2...
19931993 14 36 0.2800000 0.72000000
19941994 14 34 0.2916667 0.70833333
19951995 13 35 0.2708333 0.72916667
19961996 14 27 0.3414634 0.65853659
19971997 21 33 0.3888889 0.61111111
19981998 25 29 0.4629630 0.53703704
19991999 23 23 0.5000000 0.50000000
20002000 26 63 0.2921348 0.70786517
20012001 76 107 0.4153005 0.58469945
20022002 105 293 0.2638191 0.73618090
20032003 163 636 0.2040050 0.79599499
20042004 180 468 0.2777778 0.72222222
20052005 204 450 0.3119266 0.68807339
20062006 314 549 0.3638470 0.63615295
20072007 496 737 0.4022709 0.59772912
20082008 729 850 0.4616846 0.53831539
20092009 1229 1260 0.4937726 0.50622740
20102010 2503 1669 0.5999521 0.40004794
20112011 3961 1981 0.6666106 0.33338943
20122012 4642 1673 0.7350752 0.26492478
20132013 6045 1225 0.8314993 0.16850069
20142014 9125 780 0.9212519 0.07874811
20152015 3564 86 0.9764384 0.02356164
In [33]:
# 행 열 이름 정리
# 행 이름 삭제
rownames(df_bind) <- NULL
colnames(df_bind) <- c('Year','Open','Close','POpen','PClose')
df_bind
YearOpenClosePOpenPClose
1993 14 36 0.2800000 0.72000000
1994 14 34 0.2916667 0.70833333
1995 13 35 0.2708333 0.72916667
1996 14 27 0.3414634 0.65853659
1997 21 33 0.3888889 0.61111111
1998 25 29 0.4629630 0.53703704
1999 23 23 0.5000000 0.50000000
2000 26 63 0.2921348 0.70786517
2001 76 107 0.4153005 0.58469945
2002 105 293 0.2638191 0.73618090
2003 163 636 0.2040050 0.79599499
2004 180 468 0.2777778 0.72222222
2005 204 450 0.3119266 0.68807339
2006 314 549 0.3638470 0.63615295
2007 496 737 0.4022709 0.59772912
2008 729 850 0.4616846 0.53831539
2009 1229 1260 0.4937726 0.50622740
2010 2503 1669 0.5999521 0.40004794
2011 3961 1981 0.6666106 0.33338943
2012 4642 1673 0.7350752 0.26492478
2013 6045 1225 0.8314993 0.16850069
2014 9125 780 0.9212519 0.07874811
2015 3564 86 0.9764384 0.02356164
In [34]:
# 시각화 - line graph
# aes 축 설정
ggplot(df_bind, aes(x=Year, y=Close, group=1)) + 
    geom_line(colour='steelblue1', size=1) + 
    geom_point(colour='steelblue', size=3) + 
    geom_line(aes(y=Open), colour='tomato2', size=1) +
    geom_point(aes(y=Open), colour='red', size=3) + 
    theme_bw()

전국 커피숍 규모 파악하기

In [35]:
# 데이터 로드
df <- read.csv('R-ggagi-data/example_coffee.csv', header=T, stringsAsFactors = T)
In [36]:
# 규모 데이터 별도 저장
size <- df$sizeOfsite
In [37]:
# 자료 특성 파악
summary(size)
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max.     NA's 
    0.00    28.12    50.00    75.53    93.75 24075.00       19 
In [38]:
# 아웃라이어(이상치)삭제 - 평균과 크게 다른 값
size[size > 10000] <- NA
size[size == 0] <- NA
In [39]:
# NA(결측치) 값 제거 - complete.cases() NA값 False 리턴
size <- size[complete.cases(size)]
In [40]:
summary(size)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   0.25   30.00   51.92   77.23   95.30 1406.38 
In [41]:
# 20단위 계급 생성
degree_size <- table(cut(size, breaks=(0:72)*20))
degree_size
             (0,20]             (20,40]             (40,60]             (60,80] 
               6026               11303                8293                5283 
           (80,100]           (100,120]           (120,140]           (140,160] 
               4239                2246                1751                1297 
          (160,180]           (180,200]           (200,220]           (220,240] 
                959                 882                 568                 512 
          (240,260]           (260,280]           (280,300]           (300,320] 
                394                 331                 347                 179 
          (320,340]           (340,360]           (360,380]           (380,400] 
                191                 112                 105                  94 
          (400,420]           (420,440]           (440,460]           (460,480] 
                 81                  60                  42                  34 
          (480,500]           (500,520]           (520,540]           (540,560] 
                 32                  18                  16                  14 
          (560,580]           (580,600]           (600,620]           (620,640] 
                 12                   9                   9                   5 
          (640,660]           (660,680]           (680,700]           (700,720] 
                  4                   4                   0                   1 
          (720,740]           (740,760]           (760,780]           (780,800] 
                  1                   2                   4                   1 
          (800,820]           (820,840]           (840,860]           (860,880] 
                  1                   1                   0                   0 
          (880,900]           (900,920]           (920,940]           (940,960] 
                  0                   2                   1                   0 
          (960,980]         (980,1e+03]    (1e+03,1.02e+03] (1.02e+03,1.04e+03] 
                  0                   1                   0                   0 
(1.04e+03,1.06e+03] (1.06e+03,1.08e+03]  (1.08e+03,1.1e+03]  (1.1e+03,1.12e+03] 
                  2                   0                   0                   0 
(1.12e+03,1.14e+03] (1.14e+03,1.16e+03] (1.16e+03,1.18e+03]  (1.18e+03,1.2e+03] 
                  0                   0                   0                   0 
 (1.2e+03,1.22e+03] (1.22e+03,1.24e+03] (1.24e+03,1.26e+03] (1.26e+03,1.28e+03] 
                  1                   0                   0                   0 
 (1.28e+03,1.3e+03]  (1.3e+03,1.32e+03] (1.32e+03,1.34e+03] (1.34e+03,1.36e+03] 
                  0                   0                   0                   0 
(1.36e+03,1.38e+03]  (1.38e+03,1.4e+03]  (1.4e+03,1.42e+03] (1.42e+03,1.44e+03] 
                  0                   0                   1                   0 
In [42]:
# 시각화 - 30~40(10평) 제일 많음
library(ggplot2)
library(ggthemes)
In [43]:
ggplot(data=df, aes(x=sizeOfsite))+
    geom_freqpoly(binwidth=10, size=1.2, colour='orange')+
    scale_x_continuous(limits = c(0,300), breaks = seq(0,300,20)) + 
    theme_wsj()
Warning message:
"Removed 1060 rows containing non-finite values (stat_bin)."Warning message:
"Removed 2 row(s) containing missing values (geom_path)."

전국 인구조사 자료 정리하기

  • 통계청 작성 전국 인구조사 데이터
  • 시별 도별 인구수
In [44]:
# data 불러오기
# 인구수에 "," 가 있어 문자열로 불러오기 stringdAsFactors = F ( factor 형이 아니라 문자열로!)
df <- read.csv('R-ggagi-data/example_population.csv', stringsAsFactors = F)
In [45]:
# 자료 요약 살펴보기
str(df)
'data.frame':	281 obs. of  7 variables:
 $ City      : chr  "서울특별시  (1100000000)" "서울특별시 종로구 (1111000000)" "서울특별시 중구 (1114000000)" "서울특별시 용산구 (1117000000)" ...
 $ Population: chr  "10,078,850" "155,695" "126,817" "235,186" ...
 $ Households: chr  "4,197,478" "72,882" "59,614" "108,138" ...
 $ PersInHou : num  2.4 2.14 2.13 2.17 2.35 2.28 2.26 2.36 2.41 2.36 ...
 $ Male      : chr  "4,962,774" "76,962" "63,292" "114,119" ...
 $ Female    : chr  "5,116,076" "78,733" "63,525" "121,067" ...
 $ SexRatio  : num  0.97 0.98 1 0.94 0.99 0.97 1.01 1 0.96 0.97 ...
In [46]:
# 자료 값 확인 - head()
head(df)
CityPopulationHouseholdsPersInHouMaleFemaleSexRatio
서울특별시 (1100000000) 10,078,850 4,197,478 2.40 4,962,774 5,116,076 0.97
서울특별시 종로구 (1111000000)155,695 72,882 2.14 76,962 78,733 0.98
서울특별시 중구 (1114000000) 126,817 59,614 2.13 63,292 63,525 1.00
서울특별시 용산구 (1117000000)235,186 108,138 2.17 114,119 121,067 0.94
서울특별시 성동구 (1120000000)298,145 126,915 2.35 148,265 149,880 0.99
서울특별시 광진구 (1121500000)362,197 158,769 2.28 177,946 184,251 0.97
In [47]:
# 데이터 정제
# 서울특별시 종로구 (1111000000) -> 서울특별시 종로구 형태로 만들기
# 문자열 분리 - str_split_fixed()
install.packages('stringr')
package 'stringr' successfully unpacked and MD5 sums checked

The downloaded binary packages are in
	C:\Users\205\AppData\Local\Temp\Rtmp0gcyZ0\downloaded_packages
In [48]:
library('stringr')
Warning message:
"package 'stringr' was built under R version 3.6.3"
In [49]:
df[,1]
  1. '서울특별시 (1100000000)'
  2. '서울특별시 종로구 (1111000000)'
  3. '서울특별시 중구 (1114000000)'
  4. '서울특별시 용산구 (1117000000)'
  5. '서울특별시 성동구 (1120000000)'
  6. '서울특별시 광진구 (1121500000)'
  7. '서울특별시 동대문구 (1123000000)'
  8. '서울특별시 중랑구 (1126000000)'
  9. '서울특별시 성북구 (1129000000)'
  10. '서울특별시 강북구 (1130500000)'
  11. '서울특별시 도봉구 (1132000000)'
  12. '서울특별시 노원구 (1135000000)'
  13. '서울특별시 은평구 (1138000000)'
  14. '서울특별시 서대문구 (1141000000)'
  15. '서울특별시 마포구 (1144000000)'
  16. '서울특별시 양천구 (1147000000)'
  17. '서울특별시 강서구 (1150000000)'
  18. '서울특별시 구로구 (1153000000)'
  19. '서울특별시 금천구 (1154500000)'
  20. '서울특별시 영등포구 (1156000000)'
  21. '서울특별시 동작구 (1159000000)'
  22. '서울특별시 관악구 (1162000000)'
  23. '서울특별시 서초구 (1165000000)'
  24. '서울특별시 강남구 (1168000000)'
  25. '서울특별시 송파구 (1171000000)'
  26. '서울특별시 강동구 (1174000000)'
  27. '부산광역시 (2600000000)'
  28. '부산광역시 중구 (2611000000)'
  29. '부산광역시 서구 (2614000000)'
  30. '부산광역시 동구 (2617000000)'
  31. '부산광역시 영도구 (2620000000)'
  32. '부산광역시 부산진구 (2623000000)'
  33. '부산광역시 동래구 (2626000000)'
  34. '부산광역시 남구 (2629000000)'
  35. '부산광역시 북구 (2632000000)'
  36. '부산광역시 해운대구 (2635000000)'
  37. '부산광역시 사하구 (2638000000)'
  38. '부산광역시 금정구 (2641000000)'
  39. '부산광역시 강서구 (2644000000)'
  40. '부산광역시 연제구 (2647000000)'
  41. '부산광역시 수영구 (2650000000)'
  42. '부산광역시 사상구 (2653000000)'
  43. '부산광역시 기장군 (2671000000)'
  44. '대구광역시 (2700000000)'
  45. '대구광역시 중구 (2711000000)'
  46. '대구광역시 동구 (2714000000)'
  47. '대구광역시 서구 (2717000000)'
  48. '대구광역시 남구 (2720000000)'
  49. '대구광역시 북구 (2723000000)'
  50. '대구광역시 수성구 (2726000000)'
  51. '대구광역시 달서구 (2729000000)'
  52. '대구광역시 달성군 (2771000000)'
  53. '인천광역시 (2800000000)'
  54. '인천광역시 중구 (2811000000)'
  55. '인천광역시 동구 (2814000000)'
  56. '인천광역시 남구 (2817000000)'
  57. '인천광역시 연수구 (2818500000)'
  58. '인천광역시 남동구 (2820000000)'
  59. '인천광역시 부평구 (2823700000)'
  60. '인천광역시 계양구 (2824500000)'
  61. '인천광역시 서구 (2826000000)'
  62. '인천광역시 강화군 (2871000000)'
  63. '인천광역시 옹진군 (2872000000)'
  64. '광주광역시 (2900000000)'
  65. '광주광역시 동구 (2911000000)'
  66. '광주광역시 서구 (2914000000)'
  67. '광주광역시 남구 (2915500000)'
  68. '광주광역시 북구 (2917000000)'
  69. '광주광역시 광산구 (2920000000)'
  70. '대전광역시 (3000000000)'
  71. '대전광역시 동구 (3011000000)'
  72. '대전광역시 중구 (3014000000)'
  73. '대전광역시 서구 (3017000000)'
  74. '대전광역시 유성구 (3020000000)'
  75. '대전광역시 대덕구 (3023000000)'
  76. '울산광역시 (3100000000)'
  77. '울산광역시 중구 (3111000000)'
  78. '울산광역시 남구 (3114000000)'
  79. '울산광역시 동구 (3117000000)'
  80. '울산광역시 북구 (3120000000)'
  81. '울산광역시 울주군 (3171000000)'
  82. '세종특별자치시 (3600000000)'
  83. '세종특별자치시 (3611000000)'
  84. '경기도 (4100000000)'
  85. '경기도 수원시 (4111000000)'
  86. '경기도 수원시 장안구 (4111100000)'
  87. '경기도 수원시 권선구 (4111300000)'
  88. '경기도 수원시 팔달구 (4111500000)'
  89. '경기도 수원시 영통구 (4111700000)'
  90. '경기도 성남시 (4113000000)'
  91. '경기도 성남시 수정구 (4113100000)'
  92. '경기도 성남시 중원구 (4113300000)'
  93. '경기도 성남시 분당구 (4113500000)'
  94. '경기도 의정부시 (4115000000)'
  95. '경기도 안양시 (4117000000)'
  96. '경기도 안양시 만안구 (4117100000)'
  97. '경기도 안양시 동안구 (4117300000)'
  98. '경기도 부천시 (4119000000)'
  99. '경기도 부천시 원미구 (4119500000)'
  100. '경기도 부천시 소사구 (4119700000)'
  101. '경기도 부천시 오정구 (4119900000)'
  102. '경기도 광명시 (4121000000)'
  103. '경기도 평택시 (4122000000)'
  104. '경기도 동두천시 (4125000000)'
  105. '경기도 안산시 (4127000000)'
  106. '경기도 안산시 상록구 (4127100000)'
  107. '경기도 안산시 단원구 (4127300000)'
  108. '경기도 고양시 (4128000000)'
  109. '경기도 고양시 덕양구 (4128100000)'
  110. '경기도 고양시 일산동구 (4128500000)'
  111. '경기도 고양시 일산서구 (4128700000)'
  112. '경기도 과천시 (4129000000)'
  113. '경기도 구리시 (4131000000)'
  114. '경기도 남양주시 (4136000000)'
  115. '경기도 오산시 (4137000000)'
  116. '경기도 시흥시 (4139000000)'
  117. '경기도 군포시 (4141000000)'
  118. '경기도 의왕시 (4143000000)'
  119. '경기도 하남시 (4145000000)'
  120. '경기도 용인시 (4146000000)'
  121. '경기도 용인시 처인구 (4146100000)'
  122. '경기도 용인시 기흥구 (4146300000)'
  123. '경기도 용인시 수지구 (4146500000)'
  124. '경기도 파주시 (4148000000)'
  125. '경기도 이천시 (4150000000)'
  126. '경기도 안성시 (4155000000)'
  127. '경기도 김포시 (4157000000)'
  128. '경기도 화성시 (4159000000)'
  129. '경기도 광주시 (4161000000)'
  130. '경기도 양주시 (4163000000)'
  131. '경기도 포천시 (4165000000)'
  132. '경기도 여주시 (4167000000)'
  133. '경기도 연천군 (4180000000)'
  134. '경기도 가평군 (4182000000)'
  135. '경기도 양평군 (4183000000)'
  136. '강원도 (4200000000)'
  137. '강원도 춘천시 (4211000000)'
  138. '강원도 원주시 (4213000000)'
  139. '강원도 강릉시 (4215000000)'
  140. '강원도 동해시 (4217000000)'
  141. '강원도 태백시 (4219000000)'
  142. '강원도 속초시 (4221000000)'
  143. '강원도 삼척시 (4223000000)'
  144. '강원도 홍천군 (4272000000)'
  145. '강원도 횡성군 (4273000000)'
  146. '강원도 영월군 (4275000000)'
  147. '강원도 평창군 (4276000000)'
  148. '강원도 정선군 (4277000000)'
  149. '강원도 철원군 (4278000000)'
  150. '강원도 화천군 (4279000000)'
  151. '강원도 양구군 (4280000000)'
  152. '강원도 인제군 (4281000000)'
  153. '강원도 고성군 (4282000000)'
  154. '강원도 양양군 (4283000000)'
  155. '충청북도 (4300000000)'
  156. '충청북도 청주시 (4311000000)'
  157. '충청북도 청주시 상당구 (4311100000)'
  158. '충청북도 청주시 서원구 (4311200000)'
  159. '충청북도 청주시 흥덕구 (4311300000)'
  160. '충청북도 청주시 청원구 (4311400000)'
  161. '충청북도 충주시 (4313000000)'
  162. '충청북도 제천시 (4315000000)'
  163. '충청북도 보은군 (4372000000)'
  164. '충청북도 옥천군 (4373000000)'
  165. '충청북도 영동군 (4374000000)'
  166. '충청북도 증평군 (4374500000)'
  167. '충청북도 진천군 (4375000000)'
  168. '충청북도 괴산군 (4376000000)'
  169. '충청북도 음성군 (4377000000)'
  170. '충청북도 단양군 (4380000000)'
  171. '충청남도 (4400000000)'
  172. '충청남도 천안시 (4413000000)'
  173. '충청남도 천안시 동남구 (4413100000)'
  174. '충청남도 천안시 서북구 (4413300000)'
  175. '충청남도 공주시 (4415000000)'
  176. '충청남도 보령시 (4418000000)'
  177. '충청남도 아산시 (4420000000)'
  178. '충청남도 서산시 (4421000000)'
  179. '충청남도 논산시 (4423000000)'
  180. '충청남도 계룡시 (4425000000)'
  181. '충청남도 당진시 (4427000000)'
  182. '충청남도 금산군 (4471000000)'
  183. '충청남도 부여군 (4476000000)'
  184. '충청남도 서천군 (4477000000)'
  185. '충청남도 청양군 (4479000000)'
  186. '충청남도 홍성군 (4480000000)'
  187. '충청남도 예산군 (4481000000)'
  188. '충청남도 태안군 (4482500000)'
  189. '전라북도 (4500000000)'
  190. '전라북도 전주시 (4511000000)'
  191. '전라북도 전주시 완산구 (4511100000)'
  192. '전라북도 전주시 덕진구 (4511300000)'
  193. '전라북도 군산시 (4513000000)'
  194. '전라북도 익산시 (4514000000)'
  195. '전라북도 정읍시 (4518000000)'
  196. '전라북도 남원시 (4519000000)'
  197. '전라북도 김제시 (4521000000)'
  198. '전라북도 완주군 (4571000000)'
  199. '전라북도 진안군 (4572000000)'
  200. '전라북도 무주군 (4573000000)'
  201. '전라북도 장수군 (4574000000)'
  202. '전라북도 임실군 (4575000000)'
  203. '전라북도 순창군 (4577000000)'
  204. '전라북도 고창군 (4579000000)'
  205. '전라북도 부안군 (4580000000)'
  206. '전라남도 (4600000000)'
  207. '전라남도 목포시 (4611000000)'
  208. '전라남도 여수시 (4613000000)'
  209. '전라남도 순천시 (4615000000)'
  210. '전라남도 나주시 (4617000000)'
  211. '전라남도 광양시 (4623000000)'
  212. '전라남도 담양군 (4671000000)'
  213. '전라남도 곡성군 (4672000000)'
  214. '전라남도 구례군 (4673000000)'
  215. '전라남도 고흥군 (4677000000)'
  216. '전라남도 보성군 (4678000000)'
  217. '전라남도 화순군 (4679000000)'
  218. '전라남도 장흥군 (4680000000)'
  219. '전라남도 강진군 (4681000000)'
  220. '전라남도 해남군 (4682000000)'
  221. '전라남도 영암군 (4683000000)'
  222. '전라남도 무안군 (4684000000)'
  223. '전라남도 함평군 (4686000000)'
  224. '전라남도 영광군 (4687000000)'
  225. '전라남도 장성군 (4688000000)'
  226. '전라남도 완도군 (4689000000)'
  227. '전라남도 진도군 (4690000000)'
  228. '전라남도 신안군 (4691000000)'
  229. '경상북도 (4700000000)'
  230. '경상북도 포항시 (4711000000)'
  231. '경상북도 포항시 남구 (4711100000)'
  232. '경상북도 포항시 북구 (4711300000)'
  233. '경상북도 경주시 (4713000000)'
  234. '경상북도 김천시 (4715000000)'
  235. '경상북도 안동시 (4717000000)'
  236. '경상북도 구미시 (4719000000)'
  237. '경상북도 영주시 (4721000000)'
  238. '경상북도 영천시 (4723000000)'
  239. '경상북도 상주시 (4725000000)'
  240. '경상북도 문경시 (4728000000)'
  241. '경상북도 경산시 (4729000000)'
  242. '경상북도 군위군 (4772000000)'
  243. '경상북도 의성군 (4773000000)'
  244. '경상북도 청송군 (4775000000)'
  245. '경상북도 영양군 (4776000000)'
  246. '경상북도 영덕군 (4777000000)'
  247. '경상북도 청도군 (4782000000)'
  248. '경상북도 고령군 (4783000000)'
  249. '경상북도 성주군 (4784000000)'
  250. '경상북도 칠곡군 (4785000000)'
  251. '경상북도 예천군 (4790000000)'
  252. '경상북도 봉화군 (4792000000)'
  253. '경상북도 울진군 (4793000000)'
  254. '경상북도 울릉군 (4794000000)'
  255. '경상남도 (4800000000)'
  256. '경상남도 창원시 (4812000000)'
  257. '경상남도 창원시 의창구 (4812100000)'
  258. '경상남도 창원시 성산구 (4812300000)'
  259. '경상남도 창원시 마산합포구 (4812500000)'
  260. '경상남도 창원시 마산회원구 (4812700000)'
  261. '경상남도 창원시 진해구 (4812900000)'
  262. '경상남도 진주시 (4817000000)'
  263. '경상남도 통영시 (4822000000)'
  264. '경상남도 사천시 (4824000000)'
  265. '경상남도 김해시 (4825000000)'
  266. '경상남도 밀양시 (4827000000)'
  267. '경상남도 거제시 (4831000000)'
  268. '경상남도 양산시 (4833000000)'
  269. '경상남도 의령군 (4872000000)'
  270. '경상남도 함안군 (4873000000)'
  271. '경상남도 창녕군 (4874000000)'
  272. '경상남도 고성군 (4882000000)'
  273. '경상남도 남해군 (4884000000)'
  274. '경상남도 하동군 (4885000000)'
  275. '경상남도 산청군 (4886000000)'
  276. '경상남도 함양군 (4887000000)'
  277. '경상남도 거창군 (4888000000)'
  278. '경상남도 합천군 (4889000000)'
  279. '제주특별자치도 (5000000000)'
  280. '제주특별자치도 제주시 (5011000000)'
  281. '제주특별자치도 서귀포시 (5013000000)'
In [50]:
# ( 기준으로 2개 분리
temp <- str_split_fixed(df[,1], '\\(', 2)
head(temp)
서울특별시 1100000000)
서울특별시 종로구 1111000000)
서울특별시 중구 1114000000)
서울특별시 용산구 1117000000)
서울특별시 성동구 1120000000)
서울특별시 광진구 1121500000)
In [51]:
# 공백 기준으로 시, 구 분리 -> 분리해야 더 다양한 분석 가능
new_city <- str_split_fixed(temp[,1], ' ', 2)
head(new_city)
서울특별시
서울특별시종로구
서울특별시중구
서울특별시용산구
서울특별시성동구
서울특별시광진구
In [52]:
# 변수명 변경
colnames(new_city) <- c('Provinces', 'City')
head(new_city)
ProvincesCity
서울특별시
서울특별시종로구
서울특별시중구
서울특별시용산구
서울특별시성동구
서울특별시광진구
In [53]:
# 새로운 dataframe 생성
df_new <- data.frame(new_city, df[,c(2:7)])  # 아까 분리했던거 포함해서 생성
df_new[df_new$Provinces == '세종특별자치시',]
ProvincesCityPopulationHouseholdsPersInHouMaleFemaleSexRatio
82세종특별자치시 185,212 72,733 2.55 93,058 92,154 1.01
83세종특별자치시 185,212 72,733 2.55 93,058 92,154 1.01
In [54]:
# City 공백 -> NA
df_new[df_new == " "] <- NA
head(df_new)

df_new[df_new$Provinces == '세종특별자치시',]
ProvincesCityPopulationHouseholdsPersInHouMaleFemaleSexRatio
서울특별시NA 10,078,8504,197,478 2.40 4,962,774 5,116,076 0.97
서울특별시종로구 155,695 72,882 2.14 76,962 78,733 0.98
서울특별시중구 126,817 59,614 2.13 63,292 63,525 1.00
서울특별시용산구 235,186 108,138 2.17 114,119 121,067 0.94
서울특별시성동구 298,145 126,915 2.35 148,265 149,880 0.99
서울특별시광진구 362,197 158,769 2.28 177,946 184,251 0.97
ProvincesCityPopulationHouseholdsPersInHouMaleFemaleSexRatio
82세종특별자치시NA 185,212 72,733 2.55 93,058 92,154 1.01
83세종특별자치시NA 185,212 72,733 2.55 93,058 92,154 1.01
In [55]:
# NA 행 삭제 - complete.cases() NA 가 있는 행 = FALSE
df_new2 <- df_new[complete.cases(df_new),]
head(df_new2)
df_new2[df_new2$Provinces == '세종특별자치시',]
ProvincesCityPopulationHouseholdsPersInHouMaleFemaleSexRatio
2서울특별시종로구 155,695 72,882 2.14 76,962 78,733 0.98
3서울특별시중구 126,817 59,614 2.13 63,292 63,525 1.00
4서울특별시용산구 235,186 108,138 2.17 114,119 121,067 0.94
5서울특별시성동구 298,145 126,915 2.35 148,265 149,880 0.99
6서울특별시광진구 362,197 158,769 2.28 177,946 184,251 0.97
7서울특별시동대문구 362,604 160,110 2.26 181,825 180,779 1.01
ProvincesCityPopulationHouseholdsPersInHouMaleFemaleSexRatio
In [56]:
head(complete.cases(df_new))
  1. FALSE
  2. TRUE
  3. TRUE
  4. TRUE
  5. TRUE
  6. TRUE
In [57]:
# is.na() - NA 가 있는 값 TRUE 반환
head(is.na(df_new))
ProvincesCityPopulationHouseholdsPersInHouMaleFemaleSexRatio
FALSE TRUEFALSEFALSEFALSEFALSEFALSEFALSE
FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
In [58]:
# NA가 있는 행 불러오기
df_new3 <- df_new[is.na(df_new$City),]
df_new3
ProvincesCityPopulationHouseholdsPersInHouMaleFemaleSexRatio
1서울특별시 NA 10,078,850 4,197,478 2.40 4,962,774 5,116,076 0.97
27부산광역시 NA 3,517,491 1,430,441 2.46 1,737,975 1,779,516 0.98
44대구광역시 NA 2,491,137 977,714 2.55 1,239,275 1,251,862 0.99
53인천광역시 NA 2,914,271 1,145,232 2.54 1,464,320 1,449,951 1.01
64광주광역시 NA 1,476,974 577,941 2.56 731,808 745,166 0.98
70대전광역시 NA 1,525,656 595,216 2.56 763,262 762,394 1.00
76울산광역시 NA 1,169,768 447,229 2.62 602,945 566,823 1.06
82세종특별자치시NA 185,212 72,733 2.55 93,058 92,154 1.01
83세종특별자치시NA 185,212 72,733 2.55 93,058 92,154 1.01
84경기도 NA 12,432,063 4,829,521 2.57 6,256,986 6,175,077 1.01
136강원도 NA 1,547,166 680,373 2.27 780,487 766,679 1.02
155충청북도 NA 1,582,181 664,186 2.38 797,908 784,273 1.02
171충청남도 NA 2,068,444 878,544 2.35 1,049,546 1,018,898 1.03
189전라북도 NA 1,869,668 778,350 2.40 930,224 939,444 0.99
206전라남도 NA 1,902,638 827,264 2.30 950,693 951,945 1.00
229경상북도 NA 2,697,791 1,160,150 2.33 1,354,618 1,343,173 1.01
255경상남도 NA 3,356,540 1,356,430 2.47 1,690,798 1,665,742 1.02
279제주특별자치도NA 615,250 251,478 2.45 308,627 306,623 1.01
In [59]:
df_new4 <- df_new[!complete.cases(df_new),]
head(df_new4)
ProvincesCityPopulationHouseholdsPersInHouMaleFemaleSexRatio
1서울특별시NA 10,078,8504,197,478 2.40 4,962,774 5,116,076 0.97
27부산광역시NA 3,517,491 1,430,441 2.46 1,737,975 1,779,516 0.98
44대구광역시NA 2,491,137 977,714 2.55 1,239,275 1,251,862 0.99
53인천광역시NA 2,914,271 1,145,232 2.54 1,464,320 1,449,951 1.01
64광주광역시NA 1,476,974 577,941 2.56 731,808 745,166 0.98
70대전광역시NA 1,525,656 595,216 2.56 763,262 762,394 1.00
In [60]:
# 인구수 변수 "," 처리하고 수치형으로 변환
str(df_new2)
'data.frame':	263 obs. of  8 variables:
 $ Provinces : Factor w/ 17 levels "강원도","경기도",..: 9 9 9 9 9 9 9 9 9 9 ...
 $ City      : Factor w/ 241 levels " ","가평군 ",..: 188 189 158 105 32 65 190 106 6 63 ...
 $ Population: chr  "155,695" "126,817" "235,186" "298,145" ...
 $ Households: chr  "72,882" "59,614" "108,138" "126,915" ...
 $ PersInHou : num  2.14 2.13 2.17 2.35 2.28 2.26 2.36 2.41 2.36 2.57 ...
 $ Male      : chr  "76,962" "63,292" "114,119" "148,265" ...
 $ Female    : chr  "78,733" "63,525" "121,067" "149,880" ...
 $ SexRatio  : num  0.98 1 0.94 0.99 0.97 1.01 1 0.96 0.97 0.97 ...

sapply() : 데이터 프레임 여러 변수에 함수 명령어 동시 적용

  • 결과는 벡터 또는 행렬
  • 참고 ) lapply() : 데이터 프레임 여러 변수에 함수 명령어 동시 적용 (결과는 리스트)
In [61]:
for(i in 3:8){
    df_new2[,i] <- sapply(df_new2[,i], function(x) gsub(',', '', x))
    df_new2[,i] <- as.numeric(df_new2[,i])
}
df_fin <- df_new2
In [62]:
df_fin
ProvincesCityPopulationHouseholdsPersInHouMaleFemaleSexRatio
2서울특별시종로구 155695 72882 2.14 76962 78733 0.98
3서울특별시중구 126817 59614 2.13 63292 63525 1.00
4서울특별시용산구 235186 108138 2.17 114119 121067 0.94
5서울특별시성동구 298145 126915 2.35 148265 149880 0.99
6서울특별시광진구 362197 158769 2.28 177946 184251 0.97
7서울특별시동대문구 362604 160110 2.26 181825 180779 1.01
8서울특별시중랑구 417976 177077 2.36 208657 209319 1.00
9서울특별시성북구 464176 192670 2.41 227676 236500 0.96
10서울특별시강북구 333523 141325 2.36 164304 169219 0.97
11서울특별시도봉구 353284 137260 2.57 174075 179209 0.97
12서울특별시노원구 579324 220403 2.63 282601 296723 0.95
13서울특별시은평구 499399 203159 2.46 244160 255239 0.96
14서울특별시서대문구 307843 134004 2.30 149921 157922 0.95
15서울특별시마포구 389937 171691 2.27 187989 201948 0.93
16서울특별시양천구 485800 179315 2.71 240817 244983 0.98
17서울특별시강서구 588559 236939 2.48 287809 300750 0.96
18서울특별시구로구 425288 172797 2.46 212482 212806 1.00
19서울특별시금천구 238367 104331 2.28 121752 116615 1.04
20서울특별시영등포구 381647 168314 2.27 190907 190740 1.00
21서울특별시동작구 406536 172464 2.36 199601 206935 0.96
22서울특별시관악구 512921 249481 2.06 259364 253557 1.02
23서울특별시서초구 447076 172770 2.59 215100 231976 0.93
24서울특별시강남구 575912 237198 2.43 276091 299821 0.92
25서울특별시송파구 664804 257528 2.58 324817 339987 0.96
26서울특별시강동구 465834 182324 2.55 232242 233592 0.99
28부산광역시중구 46519 23454 1.98 22832 23687 0.96
29부산광역시서구 117028 53304 2.20 57586 59442 0.97
30부산광역시동구 93456 43726 2.14 46344 47112 0.98
31부산광역시영도구 130825 56561 2.31 64962 65863 0.99
32부산광역시부산진구 386303 165875 2.33 189294 197009 0.96
...........................
250경상북도 칠곡군 121846 52596 2.32 63129 58717 1.08
251경상북도 예천군 44893 21428 2.10 22018 22875 0.96
252경상북도 봉화군 33821 16316 2.07 16798 17023 0.99
253경상북도 울진군 51972 24776 2.10 25828 26144 0.99
254경상북도 울릉군 10304 5365 1.92 5518 4786 1.15
256경상남도 창원시 1072222 414432 2.59 544949 527273 1.03
257경상남도 창원시 의창구 258719 100745 2.57 132077 126642 1.04
258경상남도 창원시 성산구 237307 84309 2.81 121567 115740 1.05
259경상남도 창원시 마산합포구 181700 75269 2.41 90604 91096 0.99
260경상남도 창원시 마산회원구 212270 83276 2.55 107525 104745 1.03
261경상남도 창원시 진해구 182226 70833 2.57 93176 89050 1.05
262경상남도 진주시 342724 136758 2.51 169678 173046 0.98
263경상남도 통영시 139298 58759 2.37 70543 68755 1.03
264경상남도 사천시 116082 50336 2.31 58211 57871 1.01
265경상남도 김해시 527380 196179 2.69 266364 261016 1.02
266경상남도 밀양시 107679 48666 2.21 52713 54966 0.96
267경상남도 거제시 252823 100073 2.53 133497 119326 1.12
268경상남도 양산시 296521 115235 2.57 149300 147221 1.01
269경상남도 의령군 28791 14449 1.99 13845 14946 0.93
270경상남도 함안군 69256 30798 2.25 34958 34298 1.02
271경상남도 창녕군 63534 30093 2.11 31372 32162 0.98
272경상남도 고성군 55563 25870 2.15 27848 27715 1.00
273경상남도 남해군 46238 22259 2.08 22105 24133 0.92
274경상남도 하동군 50068 23392 2.14 24713 25355 0.97
275경상남도 산청군 36122 17985 2.01 17630 18492 0.95
276경상남도 함양군 40314 19229 2.10 19259 21055 0.91
277경상남도 거창군 63069 27724 2.27 30582 32487 0.94
278경상남도 합천군 48856 24193 2.02 23231 25625 0.91
280제주특별자치도 제주시 454673 182709 2.49 227549 227124 1.00
281제주특별자치도 서귀포시 160577 68769 2.34 81078 79499 1.02

tapply(적용할 변수, 그룹지을 변수, 적용할 함수) : 그룹별로 동일한 함수 적용

In [63]:
# tapply(height, sex, mean) : 성별별로 키값, 평균
# 도 (첫번 째 변수)별 인구수 합계
sum_pop <- tapply(df_fin$Population, df_fin$Provinces, sum)
sum_pop
강원도
1547166
경기도
18723822
경상남도
4428762
경상북도
3215695
광주광역시
1476974
대구광역시
2491137
대전광역시
1525656
부산광역시
3517491
서울특별시
10078850
세종특별자치시
<NA>
울산광역시
1169768
인천광역시
2914271
전라남도
1902638
전라북도
2523806
제주특별자치도
615250
충청남도
2671383
충청북도
2414568
In [64]:
# level 값이 남아있어 나온 세종특별자치시 삭제
df_fin[,1] <- factor(df_fin[,1]) # 값이 없는 level 삭제 됨

sum_pop <- tapply(df_fin$Population, df_fin$Provinces, sum)
sum_pop
강원도
1547166
경기도
18723822
경상남도
4428762
경상북도
3215695
광주광역시
1476974
대구광역시
2491137
대전광역시
1525656
부산광역시
3517491
서울특별시
10078850
울산광역시
1169768
인천광역시
2914271
전라남도
1902638
전라북도
2523806
제주특별자치도
615250
충청남도
2671383
충청북도
2414568

시각화 - ggplot()

In [65]:
library('ggplot2')
library('ggthemes')
In [66]:
ggplot(df_fin, aes(x=Provinces, y=Population, fill=Provinces)) +
geom_bar(stat='identity') + 
theme_wsj()

csv로 저장하기

In [67]:
write.csv(df_fin, 'example_population_f.csv')
In [ ]: