R/Data Analysis

[R] RStudio를 이용한 서대문구 주민등록인구수 데이터분석

달의요정루나 2022. 3. 6. 01:28

#1. 데이터수집

> population=read.csv('C:/Users/g_julian5383/Downloads/서울특별시 서대문구_주민등록 인구수_20210831.csv')

#주제: 서대문구 주민등록수 분석하기, 전체인구에서 해당 성별과 나이의 인구수에 따른 비율 조사하고 예측하기

> population

             동명 세대수      남        여   남.19세이상.   .19세이상.   .65세이상.   .65세이상.

1 충현동         10302   9883  10624            8735              9435            1464             1902

2 천연동          7758   8143   9030             6922              7813            1285             1899

3 북아현동       7266   7722   8408             6566              7239              927             1313

4 신촌동         13824  8684   10943            7990            10255              890             1191

5 연희동         18621  16943 18313           15111            16508            2507             3386

6 홍제제1동     10401  11211 12660            9679            11091            1927             2604

7 홍제제2동      5790   6509   7285             5651             6489            1104             1592

8 홍제제3동      7076   7474   7959             6626             7185            1523             2114

9 홍은제1동      9650   10981 11762            9500           10301            1949             2570

10 홍은제2동    12323  12870 13792           11322          12299            2169             2969

11 남가좌제15703    7475   8060             5749            6346              910            1209

12 남가좌제213295  14393 15385           12052          13013            2048             2777

13 북가좌제16900    8764   9386             7155            7880            1278             1655

14 북가좌제214612  15501  16312          13659          14593            2745             3520

 

#2. 탐색

> library("dplyr") #dplyr패키지를 작동한다.

> str(population) #population의 구조를 조사해서 혹시 계산하려는 값에 chr형식이 있는지 검사한다. 만약 int가 아닌 chr형식이 있으면 계산에서 오류가 난다.

'data.frame': 14 obs. of 8 variables:

$ 동명 : chr "충현동 " "천연동 " "북아현동 " "신촌동 " ...

$ 세대수 : int 10302 7758 7266 13824 18621 10401 5790 7076 9650 12323 ...

$ : int 9883 8143 7722 8684 16943 11211 6509 7474 10981 12870 ...

$ : int 10624 9030 8408 10943 18313 12660 7285 7959 11762 13792 ...

$ .19세이상.: int 8735 6922 6566 7990 15111 9679 5651 6626 9500 11322 ...

$ .19세이상.: int 9435 7813 7239 10255 16508 11091 6489 7185 10301 12299 ...

$ .65세이상.: int 1464 1285 927 890 2507 1927 1104 1523 1949 2169 ...

$ .65세이상.: int 1902 1899 1313 1191 3386 2604 1592 2114 2570 2969 ...

> table(is.na(population)) #결측값이 있는지 검사한다. FALSE만 떴기 때문에 결측값은 없다.

FALSE

112

 

> View(population) #View를 통해서 데이터 셋을 출력한다.

#3. 전처리및 가공

> population$전체인구<-round(population$+population$)

# population에 전체인구열을 만들기

> clean_population=population[,c(1,5,6,7,8,9)]

#데이터 분석을 위해서 분석을 원하는 열만 뽑아낸다. 전체인구에 따른 해당 나이와 성별의 비율을 분석하려고 했기에 동명(1), .19세이상.(5), .19세이상.(6), .65세이상.(7), .65세이상.(8), 전체인구(9)”를 뽑아낸다.

> clean_population #population에서 추출해서 만들 데이터로 clean_population을 만들어낸다.

                    동명 남.19세이상. .19세이상. .65세이상. .65세이상. 전체인구

1 충현동                        8735           9435          1464           1902     20507

2 천연동                        6922           7813          1285           1899     17173

3 북아현동                     6566           7239            927           1313     16130

4 신촌동                        7990         10255            890           1191     19627

5 연희동                      15111         16508           2507           3386     35256

6 홍제제1동                   9679         11091           1927           2604     23871

7 홍제제2동                   5651          6489           1104            1592     13794

8 홍제제3동                   6626          7185           1523            2114     15433

9 홍은제1동                   9500        10301           1949            2570     22743

10 홍은제2동                11322        12299           2169            2969     26662

11 남가좌제1동               5749         6346             910            1209     15535

12 남가좌제2동             12052        13013           2048            2777     29778

13 북가좌제1동               7155         7880           1278            1655     18150

14 북가좌제2동             13659        14593           2745            3520     31813

 

> str(clean_population) #구조를 확인해서 계산하려는 값이 chr형식이 있는지 확인한다.

'data.frame': 14 obs. of 6 variables:

$ 동명 : chr "충현동 " "천연동 " "북아현동 " "신촌동 " ...

$ .19세이상.: int 8735 6922 6566 7990 15111 9679 5651 6626 9500 11322 ...

$ .19세이상.: int 9435 7813 7239 10255 16508 11091 6489 7185 10301 12299 ...

$ .65세이상.: int 1464 1285 927 890 2507 1927 1104 1523 1949 2169 ...

$ .65세이상.: int 1902 1899 1313 1191 3386 2604 1592 2114 2570 2969 ...

$ 전체인구 : num 20507 17173 16130 19627 35256 ...

 

> View(clean_population) #clean_population표를 출력한다.

> clean_population$.19세비율.<-round(clean_population$.19세이상./clean_population$전체인구*1,digit=2)

> clean_population$.19세비율.<-round(clean_population$.19세이상./clean_population$전체인구*1,digit=2)

> clean_population$.65세비율.<-round(clean_population$.65세이상./clean_population$전체인구*1,digit=2)

> clean_population$.65세비율.<-round(clean_population$.65세이상./clean_population$전체인구*1,digit=2)

# 해당 성별과 나이별에 따른 비율을 만든다. 비율은 (,나이인구수/전체인구)*1을 해서 소수점 비율을 만들어낸다. 또한 반올림을 할 수 있도록 round를 사용한다.

 

#비율을 생성하고 난 뒤의 표

 

#4. 분석

> summary(clean_population)

동명 .19세이상. .19세이상. .65세이상. .65세이상. 전체인구 .19세비율. .19세비율. .65세비율. .65세비율.
Length:14 Min. : 5651 Min. : 6346 Min. : 890 Min. :1191 Min. :13794 Min. :0.3700 Min. :0.4100 Min. :0.05000 Min. :0.060
Class :character 1st Qu.: 6700 1st Qu.: 7382 1st Qu.:1148 1st Qu.:1608 1st Qu.:16391 1st Qu.:0.4025 1st Qu.:0.4500 1st Qu.:0.07000 1st Qu.:0.090
Mode :character Median : 8362 Median : 9845 Median :1494 Median :2008 Median :20067 Median :0.4100 Median :0.4600 Median :0.07000 Median :0.105

Mean : 9051 Mean :10032 Mean :1623 Mean :2193 Mean :21891 Mean :0.4114 Mean :0.4571 Mean :0.07429 Mean :0.100

3rd Qu.:10911 3rd Qu.:11997 3rd Qu.:2023 3rd Qu.:2734 3rd Qu.:25964 3rd Qu.:0.4275 3rd Qu.:0.4675 3rd Qu.:0.08000 3rd Qu.:0.110

Max. :15111 Max. :16508 Max. :2745 Max. :3520 Max. :35256 Max. :0.4300 Max. :0.5200 Max. :0.10000 Max. :0.140

#Summary명령어로 각 데이터 마다 최대,최솟값 등의 데이터들을 알아본다.

 

#5. 예측모델

# 해당 비율과 전체인구를 통해서 2019년에 해당 인구가 서대문구에 얼마나 있는지 예측한다.

> m_1=lm(.19세비율.~전체인구,data=clean_population) #선형모델 lm사용

> m_1

Call:

lm(formula = .19세비율. ~ 전체인구, data = clean_population)

 

Coefficients:

(Intercept) 전체인구

3.869e-01 1.121e-06

 

> coef(m_1) #회귀 계수

(Intercept) 전체인구

3.868823e-01 1.121302e-06

 

> deviance(m_1) #잔차 제곱합

[1] 0.003228563

 

> m_2=lm(.19세비율.~전체인구,data=clean_population)

> m_2

 

Call:

lm(formula = .19세비율. ~ 전체인구, data = clean_population)

 

Coefficients:

(Intercept) 전체인구

4.490e-01 3.737e-07

 

> coef(m_2)

(Intercept) 전체인구

4.489615e-01 3.737335e-07

 

> deviance(m_2)

[1] 0.007803189

 

> m_3=lm(.65세비율.~전체인구,data=clean_population)

> m_3

 

Call:

lm(formula = .65세비율. ~ 전체인구, data = clean_population)

 

Coefficients:

(Intercept) 전체인구

6.781e-02 2.957e-07

 

> coef(m_3)

(Intercept) 전체인구

6.781151e-02 2.957492e-07

 

> deviance(m_3)

[1] 0.002291178

 

> m_4=lm(.65세비율.~전체인구,data=clean_population)

> m_4

 

Call:

lm(formula = .65세비율. ~ 전체인구, data = clean_population)

 

Coefficients:

(Intercept) 전체인구

9.952e-02 2.216e-08

 

> coef(m_4)

(Intercept) 전체인구

9.951501e-02 2.215514e-08

 

> deviance(m_4)

[1] 0.00519971

 

csv 파일 출처: 공공데이터포털

서울특별시 서대문구_주민등록 인구수_20210831.csv
0.00MB
코드문.R
0.00MB

'R > Data Analysis' 카테고리의 다른 글

[R] 데이터 소스를 구할 수 있는 사이트 추천  (0) 2023.06.13