서울시 구별 CCTV 현황 분석하기¶
In [1]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
In [2]:
#다운로드 받은 01. CCTV_in_Seoul.csv 파일을 읽으세요. encoding='utf-8' 로 읽으세요.
CCTV_Seoul = pd.read_csv('../data/01. CCTV_in_Seoul.csv', encoding='utf-8')
CCTV_Seoul.head()
Out[2]:
기관명 | 소계 | 2013년도 이전 | 2014년 | 2015년 | 2016년 | |
---|---|---|---|---|---|---|
0 | 강남구 | 2780 | 1292 | 430 | 584 | 932 |
1 | 강동구 | 773 | 379 | 99 | 155 | 377 |
2 | 강북구 | 748 | 369 | 120 | 138 | 204 |
3 | 강서구 | 884 | 388 | 258 | 184 | 81 |
4 | 관악구 | 1496 | 846 | 260 | 390 | 613 |
In [3]:
# 컬럼 정보를 읽으세요.
CCTV_Seoul.columns
Out[3]:
Index(['기관명', '소계', '2013년도 이전', '2014년', '2015년', '2016년'], dtype='object')
In [4]:
CCTV_Seoul.columns[0]
Out[4]:
'기관명'
In [5]:
#CCTV_Seoul.columns[0] 번째 정보를 '구별' 이라는 이름으로 바꾸세요.
CCTV_Seoul.rename(columns={CCTV_Seoul.columns[0] : '구별'}, inplace=True)
CCTV_Seoul.head()
Out[5]:
구별 | 소계 | 2013년도 이전 | 2014년 | 2015년 | 2016년 | |
---|---|---|---|---|---|---|
0 | 강남구 | 2780 | 1292 | 430 | 584 | 932 |
1 | 강동구 | 773 | 379 | 99 | 155 | 377 |
2 | 강북구 | 748 | 369 | 120 | 138 | 204 |
3 | 강서구 | 884 | 388 | 258 | 184 | 81 |
4 | 관악구 | 1496 | 846 | 260 | 390 | 613 |
2-2. 엑셀파일 읽기 - 서울시 인구현황¶
In [6]:
# 01. population_in_Seoul.xls 엑셀 파일을 읽으세요.
pop_Seoul = pd.read_excel('../data/01. population_in_Seoul.xls')
pop_Seoul.head()
Out[6]:
기간 | 자치구 | 세대 | 인구 | 인구.1 | 인구.2 | 인구.3 | 인구.4 | 인구.5 | 인구.6 | 인구.7 | 인구.8 | 세대당인구 | 65세이상고령자 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 기간 | 자치구 | 세대 | 합계 | 합계 | 합계 | 한국인 | 한국인 | 한국인 | 등록외국인 | 등록외국인 | 등록외국인 | 세대당인구 | 65세이상고령자 |
1 | 기간 | 자치구 | 세대 | 계 | 남자 | 여자 | 계 | 남자 | 여자 | 계 | 남자 | 여자 | 세대당인구 | 65세이상고령자 |
2 | 2017.1/4 | 합계 | 4202888 | 10197604 | 5000005 | 5197599 | 9926968 | 4871560 | 5055408 | 270636 | 128445 | 142191 | 2.36 | 1321458 |
3 | 2017.1/4 | 종로구 | 72654 | 162820 | 79675 | 83145 | 153589 | 75611 | 77978 | 9231 | 4064 | 5167 | 2.11 | 25425 |
4 | 2017.1/4 | 중구 | 59481 | 133240 | 65790 | 67450 | 124312 | 61656 | 62656 | 8928 | 4134 | 4794 | 2.09 | 20764 |
In [7]:
# 01. population_in_Seoul.xls 서울의 인구수에 대한 파일을 읽으세요.
# usecols = 'B, D, G, J, N' 옵션을 사용하여 해당 컬럼만 읽어 들이세요.
pop_Seoul = pd.read_excel('../data/01. population_in_Seoul.xls',
header = 2,
usecols = 'B, D, G, J, N')
pop_Seoul.head()
Out[7]:
자치구 | 계 | 계.1 | 계.2 | 65세이상고령자 | |
---|---|---|---|---|---|
0 | 합계 | 10197604.0 | 9926968.0 | 270636.0 | 1321458.0 |
1 | 종로구 | 162820.0 | 153589.0 | 9231.0 | 25425.0 |
2 | 중구 | 133240.0 | 124312.0 | 8928.0 | 20764.0 |
3 | 용산구 | 244203.0 | 229456.0 | 14747.0 | 36231.0 |
4 | 성동구 | 311244.0 | 303380.0 | 7864.0 | 39997.0 |
In [8]:
# 각컬럼명을 '구별' '인구수', '한국인', '외국인', '고령자' 로 바꾸세요.
pop_Seoul.rename(columns={pop_Seoul.columns[0] : '구별',
pop_Seoul.columns[1] : '인구수',
pop_Seoul.columns[2] : '한국인',
pop_Seoul.columns[3] : '외국인',
pop_Seoul.columns[4] : '고령자'}, inplace=True)
pop_Seoul.head()
Out[8]:
구별 | 인구수 | 한국인 | 외국인 | 고령자 | |
---|---|---|---|---|---|
0 | 합계 | 10197604.0 | 9926968.0 | 270636.0 | 1321458.0 |
1 | 종로구 | 162820.0 | 153589.0 | 9231.0 | 25425.0 |
2 | 중구 | 133240.0 | 124312.0 | 8928.0 | 20764.0 |
3 | 용산구 | 244203.0 | 229456.0 | 14747.0 | 36231.0 |
4 | 성동구 | 311244.0 | 303380.0 | 7864.0 | 39997.0 |
3. CCTV 데이터 파악하기¶
In [9]:
CCTV_Seoul.head()
Out[9]:
구별 | 소계 | 2013년도 이전 | 2014년 | 2015년 | 2016년 | |
---|---|---|---|---|---|---|
0 | 강남구 | 2780 | 1292 | 430 | 584 | 932 |
1 | 강동구 | 773 | 379 | 99 | 155 | 377 |
2 | 강북구 | 748 | 369 | 120 | 138 | 204 |
3 | 강서구 | 884 | 388 | 258 | 184 | 81 |
4 | 관악구 | 1496 | 846 | 260 | 390 | 613 |
In [10]:
#'소계'로 오름차순 정렬하여 앞에서부터 5개만 보여주세요.
CCTV_Seoul.sort_values(by='소계', ascending=True).head(5)
Out[10]:
구별 | 소계 | 2013년도 이전 | 2014년 | 2015년 | 2016년 | |
---|---|---|---|---|---|---|
9 | 도봉구 | 485 | 238 | 159 | 42 | 386 |
12 | 마포구 | 574 | 314 | 118 | 169 | 379 |
17 | 송파구 | 618 | 529 | 21 | 68 | 463 |
24 | 중랑구 | 660 | 509 | 121 | 177 | 109 |
23 | 중구 | 671 | 413 | 190 | 72 | 348 |
In [11]:
#'소계'로 내림차순 정렬하여 앞에서부터 5개만 보여주세요.
CCTV_Seoul.sort_values(by='소계', ascending=False).head(5)
Out[11]:
구별 | 소계 | 2013년도 이전 | 2014년 | 2015년 | 2016년 | |
---|---|---|---|---|---|---|
0 | 강남구 | 2780 | 1292 | 430 | 584 | 932 |
18 | 양천구 | 2034 | 1843 | 142 | 30 | 467 |
14 | 서초구 | 1930 | 1406 | 157 | 336 | 398 |
21 | 은평구 | 1873 | 1138 | 224 | 278 | 468 |
20 | 용산구 | 1624 | 1368 | 218 | 112 | 398 |
In [12]:
# '최근증가율' 컬럼에 (2016년도컬럼 + 2015년도컬럼 + 2014년도컬럼 )/ 2013년도 이전 * 100 으로 계산하여 채우세요.
CCTV_Seoul['최근증가율'] = (CCTV_Seoul['2016년'] + CCTV_Seoul['2015년'] + \
CCTV_Seoul['2014년']) / CCTV_Seoul['2013년도 이전'] * 100
# 최근증가율 컬럼으로 내림차순 정렬하여 앞에서부터 5개만 보여주세요.
CCTV_Seoul.sort_values(by='최근증가율', ascending=False).head(5)
Out[12]:
구별 | 소계 | 2013년도 이전 | 2014년 | 2015년 | 2016년 | 최근증가율 | |
---|---|---|---|---|---|---|---|
22 | 종로구 | 1002 | 464 | 314 | 211 | 630 | 248.922414 |
9 | 도봉구 | 485 | 238 | 159 | 42 | 386 | 246.638655 |
12 | 마포구 | 574 | 314 | 118 | 169 | 379 | 212.101911 |
8 | 노원구 | 1265 | 542 | 57 | 451 | 516 | 188.929889 |
1 | 강동구 | 773 | 379 | 99 | 155 | 377 | 166.490765 |
5. 서울시 인구 데이터 파악하기¶
In [13]:
pop_Seoul.head()
Out[13]:
구별 | 인구수 | 한국인 | 외국인 | 고령자 | |
---|---|---|---|---|---|
0 | 합계 | 10197604.0 | 9926968.0 | 270636.0 | 1321458.0 |
1 | 종로구 | 162820.0 | 153589.0 | 9231.0 | 25425.0 |
2 | 중구 | 133240.0 | 124312.0 | 8928.0 | 20764.0 |
3 | 용산구 | 244203.0 | 229456.0 | 14747.0 | 36231.0 |
4 | 성동구 | 311244.0 | 303380.0 | 7864.0 | 39997.0 |
In [14]:
# 위의 데이터중 첫번째 행을 지우세요. 합계정보는 필요없습니다.
pop_Seoul.drop([0],axis=0, inplace=True)
pop_Seoul.head()
Out[14]:
구별 | 인구수 | 한국인 | 외국인 | 고령자 | |
---|---|---|---|---|---|
1 | 종로구 | 162820.0 | 153589.0 | 9231.0 | 25425.0 |
2 | 중구 | 133240.0 | 124312.0 | 8928.0 | 20764.0 |
3 | 용산구 | 244203.0 | 229456.0 | 14747.0 | 36231.0 |
4 | 성동구 | 311244.0 | 303380.0 | 7864.0 | 39997.0 |
5 | 광진구 | 372164.0 | 357211.0 | 14953.0 | 42214.0 |
In [15]:
# '구별' 정보에서 unique() 함수를 사용하여 유니크한 값만 뽑으세요.
pop_Seoul['구별'].unique()
Out[15]:
array(['종로구', '중구', '용산구', '성동구', '광진구', '동대문구', '중랑구', '성북구', '강북구', '도봉구', '노원구', '은평구', '서대문구', '마포구', '양천구', '강서구', '구로구', '금천구', '영등포구', '동작구', '관악구', '서초구', '강남구', '송파구', '강동구', nan], dtype=object)
In [16]:
#pop_Seoul에 '구별' 정보가 null 인지 체크하세요. isnull() 함수 사용
pop_Seoul[pop_Seoul['구별'].isnull()]
Out[16]:
구별 | 인구수 | 한국인 | 외국인 | 고령자 | |
---|---|---|---|---|---|
26 | NaN | NaN | NaN | NaN | NaN |
In [17]:
# 위에서 찾은 26번째 행을 지우세요.
pop_Seoul.drop([26], inplace=True)
pop_Seoul.head()
Out[17]:
구별 | 인구수 | 한국인 | 외국인 | 고령자 | |
---|---|---|---|---|---|
1 | 종로구 | 162820.0 | 153589.0 | 9231.0 | 25425.0 |
2 | 중구 | 133240.0 | 124312.0 | 8928.0 | 20764.0 |
3 | 용산구 | 244203.0 | 229456.0 | 14747.0 | 36231.0 |
4 | 성동구 | 311244.0 | 303380.0 | 7864.0 | 39997.0 |
5 | 광진구 | 372164.0 | 357211.0 | 14953.0 | 42214.0 |
In [18]:
# '고령자비율' 컬럼 = 고령자컬럼 / 인구수 컬럼 * 100
# '외국인비율' 컬럼 = 외국인컬럼 / 인구수 컬럼 * 100
pop_Seoul['외국인비율'] = pop_Seoul['외국인'] / pop_Seoul['인구수'] * 100
pop_Seoul['고령자비율'] = pop_Seoul['고령자'] / pop_Seoul['인구수'] * 100
pop_Seoul.head()
Out[18]:
구별 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인비율 | 고령자비율 | |
---|---|---|---|---|---|---|---|
1 | 종로구 | 162820.0 | 153589.0 | 9231.0 | 25425.0 | 5.669451 | 15.615404 |
2 | 중구 | 133240.0 | 124312.0 | 8928.0 | 20764.0 | 6.700690 | 15.583909 |
3 | 용산구 | 244203.0 | 229456.0 | 14747.0 | 36231.0 | 6.038828 | 14.836427 |
4 | 성동구 | 311244.0 | 303380.0 | 7864.0 | 39997.0 | 2.526635 | 12.850689 |
5 | 광진구 | 372164.0 | 357211.0 | 14953.0 | 42214.0 | 4.017852 | 11.342849 |
In [19]:
# '인구수'로 내림차순 정렬하여 앞에서부터 5개만 보여주세요.
pop_Seoul.sort_values(by='인구수', ascending=False).head(5)
Out[19]:
구별 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인비율 | 고령자비율 | |
---|---|---|---|---|---|---|---|
24 | 송파구 | 667483.0 | 660584.0 | 6899.0 | 72506.0 | 1.033584 | 10.862599 |
16 | 강서구 | 603772.0 | 597248.0 | 6524.0 | 72548.0 | 1.080540 | 12.015794 |
23 | 강남구 | 570500.0 | 565550.0 | 4950.0 | 63167.0 | 0.867660 | 11.072217 |
11 | 노원구 | 569384.0 | 565565.0 | 3819.0 | 71941.0 | 0.670725 | 12.634883 |
21 | 관악구 | 525515.0 | 507203.0 | 18312.0 | 68082.0 | 3.484582 | 12.955291 |
In [20]:
# '외국인' 으로 내림차순 정렬하여 앞에서부터 5개만 보여주세요.
pop_Seoul.sort_values(by='외국인', ascending=False).head(5)
Out[20]:
구별 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인비율 | 고령자비율 | |
---|---|---|---|---|---|---|---|
19 | 영등포구 | 402985.0 | 368072.0 | 34913.0 | 52413.0 | 8.663598 | 13.006191 |
17 | 구로구 | 447874.0 | 416487.0 | 31387.0 | 56833.0 | 7.007998 | 12.689506 |
18 | 금천구 | 255082.0 | 236353.0 | 18729.0 | 32970.0 | 7.342345 | 12.925255 |
21 | 관악구 | 525515.0 | 507203.0 | 18312.0 | 68082.0 | 3.484582 | 12.955291 |
6 | 동대문구 | 369496.0 | 354079.0 | 15417.0 | 54173.0 | 4.172440 | 14.661322 |
In [21]:
# '외국인비율' 로 내림차순 정렬하여 5개만 보여주세요.
pop_Seoul.sort_values(by='외국인비율', ascending=False).head(5)
Out[21]:
구별 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인비율 | 고령자비율 | |
---|---|---|---|---|---|---|---|
19 | 영등포구 | 402985.0 | 368072.0 | 34913.0 | 52413.0 | 8.663598 | 13.006191 |
18 | 금천구 | 255082.0 | 236353.0 | 18729.0 | 32970.0 | 7.342345 | 12.925255 |
17 | 구로구 | 447874.0 | 416487.0 | 31387.0 | 56833.0 | 7.007998 | 12.689506 |
2 | 중구 | 133240.0 | 124312.0 | 8928.0 | 20764.0 | 6.700690 | 15.583909 |
3 | 용산구 | 244203.0 | 229456.0 | 14747.0 | 36231.0 | 6.038828 | 14.836427 |
In [22]:
# '고령자' 로 내림차순 정렬하여 앞에서 부터 5개만 보여주세요.
pop_Seoul.sort_values(by='고령자', ascending=False).head(5)
Out[22]:
구별 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인비율 | 고령자비율 | |
---|---|---|---|---|---|---|---|
16 | 강서구 | 603772.0 | 597248.0 | 6524.0 | 72548.0 | 1.080540 | 12.015794 |
24 | 송파구 | 667483.0 | 660584.0 | 6899.0 | 72506.0 | 1.033584 | 10.862599 |
12 | 은평구 | 494388.0 | 489943.0 | 4445.0 | 72334.0 | 0.899091 | 14.631019 |
11 | 노원구 | 569384.0 | 565565.0 | 3819.0 | 71941.0 | 0.670725 | 12.634883 |
21 | 관악구 | 525515.0 | 507203.0 | 18312.0 | 68082.0 | 3.484582 | 12.955291 |
In [23]:
#고령자비율 컬럼으로 내림차순 정렬하여 5개만 보여주세요.
pop_Seoul.sort_values(by='고령자비율', ascending=False).head(5)
Out[23]:
구별 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인비율 | 고령자비율 | |
---|---|---|---|---|---|---|---|
9 | 강북구 | 330192.0 | 326686.0 | 3506.0 | 54813.0 | 1.061806 | 16.600342 |
1 | 종로구 | 162820.0 | 153589.0 | 9231.0 | 25425.0 | 5.669451 | 15.615404 |
2 | 중구 | 133240.0 | 124312.0 | 8928.0 | 20764.0 | 6.700690 | 15.583909 |
3 | 용산구 | 244203.0 | 229456.0 | 14747.0 | 36231.0 | 6.038828 | 14.836427 |
13 | 서대문구 | 327163.0 | 314982.0 | 12181.0 | 48161.0 | 3.723221 | 14.720797 |
6. CCTV 데이터와 인구 데이터 합치고 분석하기¶
In [24]:
CCTV_Seoul
Out[24]:
구별 | 소계 | 2013년도 이전 | 2014년 | 2015년 | 2016년 | 최근증가율 | |
---|---|---|---|---|---|---|---|
0 | 강남구 | 2780 | 1292 | 430 | 584 | 932 | 150.619195 |
1 | 강동구 | 773 | 379 | 99 | 155 | 377 | 166.490765 |
2 | 강북구 | 748 | 369 | 120 | 138 | 204 | 125.203252 |
3 | 강서구 | 884 | 388 | 258 | 184 | 81 | 134.793814 |
4 | 관악구 | 1496 | 846 | 260 | 390 | 613 | 149.290780 |
5 | 광진구 | 707 | 573 | 78 | 53 | 174 | 53.228621 |
6 | 구로구 | 1561 | 1142 | 173 | 246 | 323 | 64.973730 |
7 | 금천구 | 1015 | 674 | 51 | 269 | 354 | 100.000000 |
8 | 노원구 | 1265 | 542 | 57 | 451 | 516 | 188.929889 |
9 | 도봉구 | 485 | 238 | 159 | 42 | 386 | 246.638655 |
10 | 동대문구 | 1294 | 1070 | 23 | 198 | 579 | 74.766355 |
11 | 동작구 | 1091 | 544 | 341 | 103 | 314 | 139.338235 |
12 | 마포구 | 574 | 314 | 118 | 169 | 379 | 212.101911 |
13 | 서대문구 | 962 | 844 | 50 | 68 | 292 | 48.578199 |
14 | 서초구 | 1930 | 1406 | 157 | 336 | 398 | 63.371266 |
15 | 성동구 | 1062 | 730 | 91 | 241 | 265 | 81.780822 |
16 | 성북구 | 1464 | 1009 | 78 | 360 | 204 | 63.627354 |
17 | 송파구 | 618 | 529 | 21 | 68 | 463 | 104.347826 |
18 | 양천구 | 2034 | 1843 | 142 | 30 | 467 | 34.671731 |
19 | 영등포구 | 904 | 495 | 214 | 195 | 373 | 157.979798 |
20 | 용산구 | 1624 | 1368 | 218 | 112 | 398 | 53.216374 |
21 | 은평구 | 1873 | 1138 | 224 | 278 | 468 | 85.237258 |
22 | 종로구 | 1002 | 464 | 314 | 211 | 630 | 248.922414 |
23 | 중구 | 671 | 413 | 190 | 72 | 348 | 147.699758 |
24 | 중랑구 | 660 | 509 | 121 | 177 | 109 | 79.960707 |
In [25]:
pop_Seoul
Out[25]:
구별 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인비율 | 고령자비율 | |
---|---|---|---|---|---|---|---|
1 | 종로구 | 162820.0 | 153589.0 | 9231.0 | 25425.0 | 5.669451 | 15.615404 |
2 | 중구 | 133240.0 | 124312.0 | 8928.0 | 20764.0 | 6.700690 | 15.583909 |
3 | 용산구 | 244203.0 | 229456.0 | 14747.0 | 36231.0 | 6.038828 | 14.836427 |
4 | 성동구 | 311244.0 | 303380.0 | 7864.0 | 39997.0 | 2.526635 | 12.850689 |
5 | 광진구 | 372164.0 | 357211.0 | 14953.0 | 42214.0 | 4.017852 | 11.342849 |
6 | 동대문구 | 369496.0 | 354079.0 | 15417.0 | 54173.0 | 4.172440 | 14.661322 |
7 | 중랑구 | 414503.0 | 409882.0 | 4621.0 | 56774.0 | 1.114829 | 13.696885 |
8 | 성북구 | 461260.0 | 449773.0 | 11487.0 | 64692.0 | 2.490353 | 14.025062 |
9 | 강북구 | 330192.0 | 326686.0 | 3506.0 | 54813.0 | 1.061806 | 16.600342 |
10 | 도봉구 | 348646.0 | 346629.0 | 2017.0 | 51312.0 | 0.578524 | 14.717507 |
11 | 노원구 | 569384.0 | 565565.0 | 3819.0 | 71941.0 | 0.670725 | 12.634883 |
12 | 은평구 | 494388.0 | 489943.0 | 4445.0 | 72334.0 | 0.899091 | 14.631019 |
13 | 서대문구 | 327163.0 | 314982.0 | 12181.0 | 48161.0 | 3.723221 | 14.720797 |
14 | 마포구 | 389649.0 | 378566.0 | 11083.0 | 48765.0 | 2.844355 | 12.515110 |
15 | 양천구 | 479978.0 | 475949.0 | 4029.0 | 52975.0 | 0.839413 | 11.036964 |
16 | 강서구 | 603772.0 | 597248.0 | 6524.0 | 72548.0 | 1.080540 | 12.015794 |
17 | 구로구 | 447874.0 | 416487.0 | 31387.0 | 56833.0 | 7.007998 | 12.689506 |
18 | 금천구 | 255082.0 | 236353.0 | 18729.0 | 32970.0 | 7.342345 | 12.925255 |
19 | 영등포구 | 402985.0 | 368072.0 | 34913.0 | 52413.0 | 8.663598 | 13.006191 |
20 | 동작구 | 412520.0 | 400456.0 | 12064.0 | 56013.0 | 2.924464 | 13.578251 |
21 | 관악구 | 525515.0 | 507203.0 | 18312.0 | 68082.0 | 3.484582 | 12.955291 |
22 | 서초구 | 450310.0 | 445994.0 | 4316.0 | 51733.0 | 0.958451 | 11.488308 |
23 | 강남구 | 570500.0 | 565550.0 | 4950.0 | 63167.0 | 0.867660 | 11.072217 |
24 | 송파구 | 667483.0 | 660584.0 | 6899.0 | 72506.0 | 1.033584 | 10.862599 |
25 | 강동구 | 453233.0 | 449019.0 | 4214.0 | 54622.0 | 0.929765 | 12.051638 |
In [26]:
# CCTV_Seoul 데이터프레임과 pop_Seoul 데이터 프레임을 '구별' 정보로 merge 하세요.
data_result = pd.merge(CCTV_Seoul, pop_Seoul, on='구별')
data_result.head()
Out[26]:
구별 | 소계 | 2013년도 이전 | 2014년 | 2015년 | 2016년 | 최근증가율 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인비율 | 고령자비율 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 강남구 | 2780 | 1292 | 430 | 584 | 932 | 150.619195 | 570500.0 | 565550.0 | 4950.0 | 63167.0 | 0.867660 | 11.072217 |
1 | 강동구 | 773 | 379 | 99 | 155 | 377 | 166.490765 | 453233.0 | 449019.0 | 4214.0 | 54622.0 | 0.929765 | 12.051638 |
2 | 강북구 | 748 | 369 | 120 | 138 | 204 | 125.203252 | 330192.0 | 326686.0 | 3506.0 | 54813.0 | 1.061806 | 16.600342 |
3 | 강서구 | 884 | 388 | 258 | 184 | 81 | 134.793814 | 603772.0 | 597248.0 | 6524.0 | 72548.0 | 1.080540 | 12.015794 |
4 | 관악구 | 1496 | 846 | 260 | 390 | 613 | 149.290780 | 525515.0 | 507203.0 | 18312.0 | 68082.0 | 3.484582 | 12.955291 |
In [27]:
#불필요한 컬럼을 지우세요. '2013년도 이전', '2014년','2015년','2016년' 컬럼
'''
del data_result['2013년도 이전']
del data_result['2014년']
del data_result['2015년']
del data_result['2016년']
'''
data_result.drop(['2013년도 이전', '2014년','2015년','2016년'], axis=1, inplace=True)
data_result.head()
Out[27]:
구별 | 소계 | 최근증가율 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인비율 | 고령자비율 | |
---|---|---|---|---|---|---|---|---|---|
0 | 강남구 | 2780 | 150.619195 | 570500.0 | 565550.0 | 4950.0 | 63167.0 | 0.867660 | 11.072217 |
1 | 강동구 | 773 | 166.490765 | 453233.0 | 449019.0 | 4214.0 | 54622.0 | 0.929765 | 12.051638 |
2 | 강북구 | 748 | 125.203252 | 330192.0 | 326686.0 | 3506.0 | 54813.0 | 1.061806 | 16.600342 |
3 | 강서구 | 884 | 134.793814 | 603772.0 | 597248.0 | 6524.0 | 72548.0 | 1.080540 | 12.015794 |
4 | 관악구 | 1496 | 149.290780 | 525515.0 | 507203.0 | 18312.0 | 68082.0 | 3.484582 | 12.955291 |
In [28]:
# '구별' 정보를 index로 설정하세요. set_index() 함수를 사용하여, inplace=true 옵션을 주세요.
data_result.set_index('구별', inplace=True)
data_result.head(2)
Out[28]:
소계 | 최근증가율 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인비율 | 고령자비율 | |
---|---|---|---|---|---|---|---|---|
구별 | ||||||||
강남구 | 2780 | 150.619195 | 570500.0 | 565550.0 | 4950.0 | 63167.0 | 0.867660 | 11.072217 |
강동구 | 773 | 166.490765 | 453233.0 | 449019.0 | 4214.0 | 54622.0 | 0.929765 | 12.051638 |
In [29]:
#data_result 데이터의 '소계' 로 내림차순 정렬하여 앞에서부터 5개만 보여주세요.
data_result.sort_values(by='소계', ascending=False).head(5)
Out[29]:
소계 | 최근증가율 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인비율 | 고령자비율 | |
---|---|---|---|---|---|---|---|---|
구별 | ||||||||
강남구 | 2780 | 150.619195 | 570500.0 | 565550.0 | 4950.0 | 63167.0 | 0.867660 | 11.072217 |
양천구 | 2034 | 34.671731 | 479978.0 | 475949.0 | 4029.0 | 52975.0 | 0.839413 | 11.036964 |
서초구 | 1930 | 63.371266 | 450310.0 | 445994.0 | 4316.0 | 51733.0 | 0.958451 | 11.488308 |
은평구 | 1873 | 85.237258 | 494388.0 | 489943.0 | 4445.0 | 72334.0 | 0.899091 | 14.631019 |
용산구 | 1624 | 53.216374 | 244203.0 | 229456.0 | 14747.0 | 36231.0 | 6.038828 | 14.836427 |
In [30]:
#data_result 데이터의 '인구수'로 내림차순 정렬하여 앞에서부터 5개만 보여주세요.
data_result.sort_values(by='인구수', ascending=False).head(5)
Out[30]:
소계 | 최근증가율 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인비율 | 고령자비율 | |
---|---|---|---|---|---|---|---|---|
구별 | ||||||||
송파구 | 618 | 104.347826 | 667483.0 | 660584.0 | 6899.0 | 72506.0 | 1.033584 | 10.862599 |
강서구 | 884 | 134.793814 | 603772.0 | 597248.0 | 6524.0 | 72548.0 | 1.080540 | 12.015794 |
강남구 | 2780 | 150.619195 | 570500.0 | 565550.0 | 4950.0 | 63167.0 | 0.867660 | 11.072217 |
노원구 | 1265 | 188.929889 | 569384.0 | 565565.0 | 3819.0 | 71941.0 | 0.670725 | 12.634883 |
관악구 | 1496 | 149.290780 | 525515.0 | 507203.0 | 18312.0 | 68082.0 | 3.484582 | 12.955291 |
7. CCTV와 인구현황 그래프로 분석하기¶
In [31]:
# 그래프를 출력할때 한글 깨짐을 방지하기위한 코드이다.
import platform
from matplotlib import font_manager, rc
plt.rcParams['axes.unicode_minus'] = False
if platform.system() == 'Darwin':
rc('font', family='AppleGothic')
elif platform.system() == 'Windows':
path = "c:/Windows/Fonts/malgun.ttf"
font_name = font_manager.FontProperties(fname=path).get_name()
rc('font', family=font_name)
else:
print('Unknown system!!')
In [32]:
data_result.head()
Out[32]:
소계 | 최근증가율 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인비율 | 고령자비율 | |
---|---|---|---|---|---|---|---|---|
구별 | ||||||||
강남구 | 2780 | 150.619195 | 570500.0 | 565550.0 | 4950.0 | 63167.0 | 0.867660 | 11.072217 |
강동구 | 773 | 166.490765 | 453233.0 | 449019.0 | 4214.0 | 54622.0 | 0.929765 | 12.051638 |
강북구 | 748 | 125.203252 | 330192.0 | 326686.0 | 3506.0 | 54813.0 | 1.061806 | 16.600342 |
강서구 | 884 | 134.793814 | 603772.0 | 597248.0 | 6524.0 | 72548.0 | 1.080540 | 12.015794 |
관악구 | 1496 | 149.290780 | 525515.0 | 507203.0 | 18312.0 | 68082.0 | 3.484582 | 12.955291 |
In [33]:
# data_result의 '소계'를 plot하세요. figsize=(10,10), 색은 신경쓰지 말것
data_result['소계'].plot(figsize=(10,10))
Out[33]:
<AxesSubplot:xlabel='구별'>
In [39]:
# data_result의 '소계' 정보를 이용하여 정렬한후 barh 를 이용한 그래프를 그리세요.
data_result['소계'].sort_values().plot(kind='bar')
plt.show()
In [37]:
# data_result의 'CCTV비율' 컬럼 = 소계 컬럼 / 인구수 * 100 으로 연산
data_result['CCTV비율']=data_result['소계']/(data_result['인구수']*100)
data_result
# 'CCTV비율' 로 정렬하여 barh 그래프를 그리세요.
data_result['CCTV비율'].plot(kind = 'barh')
plt.show()
In [36]:
# scatter 함수로 data_result의 '인구수'와 '소계' 로 ploting 하세요.
# xlable : 인구수, ylabel CCTV, figsize=(6,6)
plt.figure(figsize=(6,6))
plt.scatter(data_result['인구수'],data_result['소계'])
plt.xlabel('인구수')
plt.ylabel('CCTV')
plt.show()
'workSpace > PYTHON' 카테고리의 다른 글
[Pandas] 판다스 기초 상식 및 함수 정리 4 - pivot_table (0) | 2021.01.14 |
---|---|
[Pandas] 판다스 기초 상식 및 함수 정리 3 - groupby (0) | 2021.01.14 |
[Pandas] 판다스 기초 상식 정리 및 함수 응용 1 - 서울시 기간별 시간평균 대기환경 정보 데이터 분석 (0) | 2021.01.13 |
[Pandas] 판다스 기초 상식 및 함수 정리 2 - concat, merge (0) | 2021.01.13 |
[Pandas] 판다스 기초 상식 및 함수 정리 1 - Series, DF 기본함수 (2) | 2021.01.12 |