파이썬 - CCTV와 인구 상관관계(실습)
PYTHON PROGRAMMING
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb
%matplotlib inline
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... sorry~~~~')
실습 1. CCTV_in_Seoul.csv 파일을 pandas 로 읽어오세요.
CCTV_Seoul = pd.read_csv('CCTV_in_Seoul.csv')
CCTV_Seoul
기관명 | 소계 | 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 |
5 | 광진구 | 707 | 573 | 78 | 53 | 174 |
6 | 구로구 | 1561 | 1142 | 173 | 246 | 323 |
7 | 금천구 | 1015 | 674 | 51 | 269 | 354 |
8 | 노원구 | 1265 | 542 | 57 | 451 | 516 |
9 | 도봉구 | 485 | 238 | 159 | 42 | 386 |
10 | 동대문구 | 1294 | 1070 | 23 | 198 | 579 |
11 | 동작구 | 1091 | 544 | 341 | 103 | 314 |
12 | 마포구 | 574 | 314 | 118 | 169 | 379 |
13 | 서대문구 | 962 | 844 | 50 | 68 | 292 |
14 | 서초구 | 1930 | 1406 | 157 | 336 | 398 |
15 | 성동구 | 1062 | 730 | 91 | 241 | 265 |
16 | 성북구 | 1464 | 1009 | 78 | 360 | 204 |
17 | 송파구 | 618 | 529 | 21 | 68 | 463 |
18 | 양천구 | 2034 | 1843 | 142 | 30 | 467 |
19 | 영등포구 | 904 | 495 | 214 | 195 | 373 |
20 | 용산구 | 1624 | 1368 | 218 | 112 | 398 |
21 | 은평구 | 1873 | 1138 | 224 | 278 | 468 |
22 | 종로구 | 1002 | 464 | 314 | 211 | 630 |
23 | 중구 | 671 | 413 | 190 | 72 | 348 |
24 | 중랑구 | 660 | 509 | 121 | 177 | 109 |
실습 2. 컬럼 중 “기관명” 컬럼명을 “구별” 로 이름을 바꾸세요.
CCTV_Seoul.rename(columns={"기관명":"구별"},inplace=True)
CCTV_Seoul
구별 | 소계 | 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 |
5 | 광진구 | 707 | 573 | 78 | 53 | 174 |
6 | 구로구 | 1561 | 1142 | 173 | 246 | 323 |
7 | 금천구 | 1015 | 674 | 51 | 269 | 354 |
8 | 노원구 | 1265 | 542 | 57 | 451 | 516 |
9 | 도봉구 | 485 | 238 | 159 | 42 | 386 |
10 | 동대문구 | 1294 | 1070 | 23 | 198 | 579 |
11 | 동작구 | 1091 | 544 | 341 | 103 | 314 |
12 | 마포구 | 574 | 314 | 118 | 169 | 379 |
13 | 서대문구 | 962 | 844 | 50 | 68 | 292 |
14 | 서초구 | 1930 | 1406 | 157 | 336 | 398 |
15 | 성동구 | 1062 | 730 | 91 | 241 | 265 |
16 | 성북구 | 1464 | 1009 | 78 | 360 | 204 |
17 | 송파구 | 618 | 529 | 21 | 68 | 463 |
18 | 양천구 | 2034 | 1843 | 142 | 30 | 467 |
19 | 영등포구 | 904 | 495 | 214 | 195 | 373 |
20 | 용산구 | 1624 | 1368 | 218 | 112 | 398 |
21 | 은평구 | 1873 | 1138 | 224 | 278 | 468 |
22 | 종로구 | 1002 | 464 | 314 | 211 | 630 |
23 | 중구 | 671 | 413 | 190 | 72 | 348 |
24 | 중랑구 | 660 | 509 | 121 | 177 | 109 |
실습 4.population_in_Seoul.xls 파일을 읽으세요.
header 는 3번째 row 로 사용할 것입니다. 따라서 header = 2 로 셋팅하세요.
엑셀파일의 컬럼은 B, D, G, J, N 만 사용할 것입니다.
# header 는 행 시작, usecols는 열 시작
pop_Seoul = pd.read_excel('population_in_Seoul.xls',
header=2,
usecols='B, D, G, J, N')
pop_Seoul.dropna(inplace=True)
pop_Seoul
자치구 | 계 | 계.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 |
5 | 광진구 | 372164.0 | 357211.0 | 14953.0 | 42214.0 |
6 | 동대문구 | 369496.0 | 354079.0 | 15417.0 | 54173.0 |
7 | 중랑구 | 414503.0 | 409882.0 | 4621.0 | 56774.0 |
8 | 성북구 | 461260.0 | 449773.0 | 11487.0 | 64692.0 |
9 | 강북구 | 330192.0 | 326686.0 | 3506.0 | 54813.0 |
10 | 도봉구 | 348646.0 | 346629.0 | 2017.0 | 51312.0 |
11 | 노원구 | 569384.0 | 565565.0 | 3819.0 | 71941.0 |
12 | 은평구 | 494388.0 | 489943.0 | 4445.0 | 72334.0 |
13 | 서대문구 | 327163.0 | 314982.0 | 12181.0 | 48161.0 |
14 | 마포구 | 389649.0 | 378566.0 | 11083.0 | 48765.0 |
15 | 양천구 | 479978.0 | 475949.0 | 4029.0 | 52975.0 |
16 | 강서구 | 603772.0 | 597248.0 | 6524.0 | 72548.0 |
17 | 구로구 | 447874.0 | 416487.0 | 31387.0 | 56833.0 |
18 | 금천구 | 255082.0 | 236353.0 | 18729.0 | 32970.0 |
19 | 영등포구 | 402985.0 | 368072.0 | 34913.0 | 52413.0 |
20 | 동작구 | 412520.0 | 400456.0 | 12064.0 | 56013.0 |
21 | 관악구 | 525515.0 | 507203.0 | 18312.0 | 68082.0 |
22 | 서초구 | 450310.0 | 445994.0 | 4316.0 | 51733.0 |
23 | 강남구 | 570500.0 | 565550.0 | 4950.0 | 63167.0 |
24 | 송파구 | 667483.0 | 660584.0 | 6899.0 | 72506.0 |
25 | 강동구 | 453233.0 | 449019.0 | 4214.0 | 54622.0 |
실습 5-1. pop_Seoul 의 컬럼명을 모두 출력하세요.
pop_Seoul.columns
Index(['자치구', '계', '계.1', '계.2', '65세이상고령자'], dtype='object')
실습 5-2. 컬럼명을 다음처럼 바꿉니다.
0번째는 ‘구별’ , 1번째는 ‘인구수’, 2번쨰는 ‘한국인’, 3번째는 ‘외국인’, 4번째는 ‘고령자’ 로 rename
pop_Seoul.columns = ['구별','인구수','한국인','외국인','고령자']
pop_Seoul.rename(columns={'자치구':'구별','계':'인구수','계.1':'한국인','계.2':'외국인','65세이상고령자':'고령자'},inplace = True)
pop_Seoul
구별 | 인구수 | 한국인 | 외국인 | 고령자 | |
---|---|---|---|---|---|
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 |
5 | 광진구 | 372164.0 | 357211.0 | 14953.0 | 42214.0 |
6 | 동대문구 | 369496.0 | 354079.0 | 15417.0 | 54173.0 |
7 | 중랑구 | 414503.0 | 409882.0 | 4621.0 | 56774.0 |
8 | 성북구 | 461260.0 | 449773.0 | 11487.0 | 64692.0 |
9 | 강북구 | 330192.0 | 326686.0 | 3506.0 | 54813.0 |
10 | 도봉구 | 348646.0 | 346629.0 | 2017.0 | 51312.0 |
11 | 노원구 | 569384.0 | 565565.0 | 3819.0 | 71941.0 |
12 | 은평구 | 494388.0 | 489943.0 | 4445.0 | 72334.0 |
13 | 서대문구 | 327163.0 | 314982.0 | 12181.0 | 48161.0 |
14 | 마포구 | 389649.0 | 378566.0 | 11083.0 | 48765.0 |
15 | 양천구 | 479978.0 | 475949.0 | 4029.0 | 52975.0 |
16 | 강서구 | 603772.0 | 597248.0 | 6524.0 | 72548.0 |
17 | 구로구 | 447874.0 | 416487.0 | 31387.0 | 56833.0 |
18 | 금천구 | 255082.0 | 236353.0 | 18729.0 | 32970.0 |
19 | 영등포구 | 402985.0 | 368072.0 | 34913.0 | 52413.0 |
20 | 동작구 | 412520.0 | 400456.0 | 12064.0 | 56013.0 |
21 | 관악구 | 525515.0 | 507203.0 | 18312.0 | 68082.0 |
22 | 서초구 | 450310.0 | 445994.0 | 4316.0 | 51733.0 |
23 | 강남구 | 570500.0 | 565550.0 | 4950.0 | 63167.0 |
24 | 송파구 | 667483.0 | 660584.0 | 6899.0 | 72506.0 |
25 | 강동구 | 453233.0 | 449019.0 | 4214.0 | 54622.0 |
실습 6. CCTV 갯수가 가장 많은 순부터 적은 순으로 정렬한 후, 상위 20개만 화면에 보여주세요.
CCTV_Seoul.sort_values(by='소계',ascending=False).head(20)
구별 | 소계 | 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 |
6 | 구로구 | 1561 | 1142 | 173 | 246 | 323 |
4 | 관악구 | 1496 | 846 | 260 | 390 | 613 |
16 | 성북구 | 1464 | 1009 | 78 | 360 | 204 |
10 | 동대문구 | 1294 | 1070 | 23 | 198 | 579 |
8 | 노원구 | 1265 | 542 | 57 | 451 | 516 |
11 | 동작구 | 1091 | 544 | 341 | 103 | 314 |
15 | 성동구 | 1062 | 730 | 91 | 241 | 265 |
7 | 금천구 | 1015 | 674 | 51 | 269 | 354 |
22 | 종로구 | 1002 | 464 | 314 | 211 | 630 |
13 | 서대문구 | 962 | 844 | 50 | 68 | 292 |
19 | 영등포구 | 904 | 495 | 214 | 195 | 373 |
3 | 강서구 | 884 | 388 | 258 | 184 | 81 |
1 | 강동구 | 773 | 379 | 99 | 155 | 377 |
2 | 강북구 | 748 | 369 | 120 | 138 | 204 |
5 | 광진구 | 707 | 573 | 78 | 53 | 174 |
실습 7. 최근 3년간 CCTV 증가율을 계산하여, dataframe 에 ‘최근증가율’ 컬럼을 추가하세요.
증가율 계산 : (2016 + 2015 + 2014) / 2013이전 * 100
CCTV_Seoul.head(3)
구별 | 소계 | 2013년도 이전 | 2014년 | 2015년 | 2016년 | |
---|---|---|---|---|---|---|
0 | 강남구 | 2780 | 1292 | 430 | 584 | 932 |
1 | 강동구 | 773 | 379 | 99 | 155 | 377 |
2 | 강북구 | 748 | 369 | 120 | 138 | 204 |
CCTV_Seoul['최근증가율'] = CCTV_Seoul[['2014년','2015년','2016년']].sum(axis=1)/ CCTV_Seoul['2013년도 이전'] * 100
CCTV_Seoul.head(3)
구별 | 소계 | 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 |
실습 8. 최근 3년간 CCTV 증가율이 가장 높은 순으로 5개의 구를 찾으세요.
CCTV_Seoul.sort_values(by='최근증가율',ascending=False).head(5)
구별 | 소계 | 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 |
실습 9. 서울시의 인구 데이터 중, 가장 첫번째 로우(row) 는 필요 없으니, 삭제하세요.
pop_Seoul.drop(0,inplace = True)
pop_Seoul.head(5)
구별 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인비율 | 고령자비율 | |
---|---|---|---|---|---|---|---|
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 |
실습 9. 서울시의 인구 데이터 중, NaN이 있는지 확인하고, NaN이 있으면 해당 row를 삭제하세요.
pop_Seoul.isna().sum()
구별 0
인구수 0
한국인 0
외국인 0
고령자 0
dtype: int64
실습 10. ‘외국인비율’ 과 ‘고령자비율’ 두개의 컬럼을 추가하세요.
외국인비율 = 외국인 수 / 인구수 * 100
고령자비율 = 고령자 수 / 인구수 * 100
pop_Seoul.head(5)
구별 | 인구수 | 한국인 | 외국인 | 고령자 | |
---|---|---|---|---|---|
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 |
pop_Seoul['외국인비율'] = pop_Seoul['외국인']/pop_Seoul['인구수'] *100
pop_Seoul['고령자비율'] = pop_Seoul['고령자']/pop_Seoul['인구수'] *100
pop_Seoul
구별 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인비율 | 고령자비율 | |
---|---|---|---|---|---|---|---|
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 |
실습 11. 외국인 대상으로 장사를 하려 합니다. 외국인이 가장 많은 구와, 외국인비율이 가장 높은 구를 각각 5개씩 찾으세요.
pop_Seoul.sort_values(by = '외국인비율',ascending=False).head(5)
구별 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인비율 | 고령자비율 | |
---|---|---|---|---|---|---|---|
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 |
pop_Seoul.sort_values(by = '외국인',ascending=False).head(5)
구별 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인비율 | 고령자비율 | |
---|---|---|---|---|---|---|---|
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 |
실습 12. 고령자 대상 마케팅을 구상 중입니다. 고령자가 가장 많은 구와, 고령자비율이 가장 높은 구를 각각 5개씩 찾으세요.
pop_Seoul.sort_values(by = '고령자',ascending=False).head(5)
구별 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인비율 | 고령자비율 | |
---|---|---|---|---|---|---|---|
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 |
pop_Seoul.sort_values(by = '고령자비율',ascending=False).head(5)
구별 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인비율 | 고령자비율 | |
---|---|---|---|---|---|---|---|
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 |
실습 13. CCTV 데이터와 인구 데이터 합치고 분석하기
data_result = pd.merge(CCTV_Seoul, pop_Seoul, on = '구별')
data_result.head(5)
구별 | 소계 | 2013년도 이전 | 2014년 | 2015년 | 2016년 | 최근증가율 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인비율 | 고령자비율 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 강남구 | 2780 | 1292 | 430 | 584 | 932 | 1.506192 | 570500.0 | 565550.0 | 4950.0 | 63167.0 | 0.867660 | 11.072217 |
1 | 강동구 | 773 | 379 | 99 | 155 | 377 | 1.664908 | 453233.0 | 449019.0 | 4214.0 | 54622.0 | 0.929765 | 12.051638 |
2 | 강북구 | 748 | 369 | 120 | 138 | 204 | 1.252033 | 330192.0 | 326686.0 | 3506.0 | 54813.0 | 1.061806 | 16.600342 |
3 | 강서구 | 884 | 388 | 258 | 184 | 81 | 1.347938 | 603772.0 | 597248.0 | 6524.0 | 72548.0 | 1.080540 | 12.015794 |
4 | 관악구 | 1496 | 846 | 260 | 390 | 613 | 1.492908 | 525515.0 | 507203.0 | 18312.0 | 68082.0 | 3.484582 | 12.955291 |
실습 14. data_result 에서, 다음 4개의 컬럼을 모두 버려 버립니다.
‘2013년도 이전’, 2014년’, ‘2015년’, ‘2016년’
data_result.drop(['2013년도 이전','2014년','2015년','2016년'],axis=1,inplace = True)
data_result.head(5)
구별 | 소계 | 최근증가율 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인비율 | 고령자비율 | |
---|---|---|---|---|---|---|---|---|---|
0 | 강남구 | 2780 | 1.506192 | 570500.0 | 565550.0 | 4950.0 | 63167.0 | 0.867660 | 11.072217 |
1 | 강동구 | 773 | 1.664908 | 453233.0 | 449019.0 | 4214.0 | 54622.0 | 0.929765 | 12.051638 |
2 | 강북구 | 748 | 1.252033 | 330192.0 | 326686.0 | 3506.0 | 54813.0 | 1.061806 | 16.600342 |
3 | 강서구 | 884 | 1.347938 | 603772.0 | 597248.0 | 6524.0 | 72548.0 | 1.080540 | 12.015794 |
4 | 관악구 | 1496 | 1.492908 | 525515.0 | 507203.0 | 18312.0 | 68082.0 | 3.484582 | 12.955291 |
실습 15-1. dara_result 의 인덱스를, ‘구별’ 로 바꿔 줍니다.
data_result = data_result.set_index('구별')
data_result.head(5)
소계 | 최근증가율 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인비율 | 고령자비율 | |
---|---|---|---|---|---|---|---|---|
구별 | ||||||||
강남구 | 2780 | 1.506192 | 570500.0 | 565550.0 | 4950.0 | 63167.0 | 0.867660 | 11.072217 |
강동구 | 773 | 1.664908 | 453233.0 | 449019.0 | 4214.0 | 54622.0 | 0.929765 | 12.051638 |
강북구 | 748 | 1.252033 | 330192.0 | 326686.0 | 3506.0 | 54813.0 | 1.061806 | 16.600342 |
강서구 | 884 | 1.347938 | 603772.0 | 597248.0 | 6524.0 | 72548.0 | 1.080540 | 12.015794 |
관악구 | 1496 | 1.492908 | 525515.0 | 507203.0 | 18312.0 | 68082.0 | 3.484582 | 12.955291 |
실습 15-2. 이 데이터프레임을 csv 파일로 저장합니다.
파일명은, CCTV_result.csv 입니다.
data_result.to_csv('CCTV_result')
실습 16. 상관 관계 분석에 대해서 알아봅니다.
https://ko.wikipedia.org/wiki/%EC%83%81%EA%B4%80_%EB%B6%84%EC%84%9D
상관계수는 -1부터 1까지의 값을 갖는다.1일 때 완벽한 양의 상관관계가 되고, -1일 때 완벽한 음의 상관관계가 된다. 0이라면 별다른 상관관계가 없음을 의미한다.
상관계수가 0.1 이하면 관계가 없고, 0.3 이하면 약한관계 입니다
실습 17. CCTV의 갯수와 고령자 비율의 상관관계를 분석하세요.
data_result[['소계','고령자비율']].corr()
소계 | 고령자비율 | |
---|---|---|
소계 | 1.000000 | -0.280786 |
고령자비율 | -0.280786 | 1.000000 |
sb.regplot(data = data_result,x='소계',y='고령자비율')
plt.show()
실습 18. CCTV의 갯수와 외국인 비율의 상관관계를 분석하세요.
data_result[['소계','외국인비율']].corr()
소계 | 외국인비율 | |
---|---|---|
소계 | 1.000000 | -0.136074 |
외국인비율 | -0.136074 | 1.000000 |
sb.regplot(data = data_result,x='소계',y='외국인비율')
plt.show()
실습 19. CCTV의 갯수와 인구수의 상관관계를 분석하세요.
data_result[['소계','인구수']].corr()
소계 | 인구수 | |
---|---|---|
소계 | 1.000000 | 0.306342 |
인구수 | 0.306342 | 1.000000 |
sb.regplot(data = data_result,x='소계',y='인구수')
plt.show()
실습 20. 각 구의 CCTV의 갯수를 bar로 나타내세요.
pandas dataframe.plot 함수 사용
data_result.head(5)
소계 | 최근증가율 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인비율 | 고령자비율 | |
---|---|---|---|---|---|---|---|---|
구별 | ||||||||
강남구 | 2780 | 1.506192 | 570500.0 | 565550.0 | 4950.0 | 63167.0 | 0.867660 | 11.072217 |
강동구 | 773 | 1.664908 | 453233.0 | 449019.0 | 4214.0 | 54622.0 | 0.929765 | 12.051638 |
강북구 | 748 | 1.252033 | 330192.0 | 326686.0 | 3506.0 | 54813.0 | 1.061806 | 16.600342 |
강서구 | 884 | 1.347938 | 603772.0 | 597248.0 | 6524.0 | 72548.0 | 1.080540 | 12.015794 |
관악구 | 1496 | 1.492908 | 525515.0 | 507203.0 | 18312.0 | 68082.0 | 3.484582 | 12.955291 |
실습 21. 각 구의 CCTV의 갯수를, 먼저 소팅(큰순)한 후, bar로 나타내세요.
# 데이터 프레임의 plot 함수는 x축에는 인덱스 셋팅 , y축에는 컬럼의 값을 세팅한다.
data_result.plot()
plt.show()
data_result['소계'].sort_values(ascending=False).plot(kind = 'bar')
plt.show()
plt.figure(figsize =(10,8))
data_result['소계'].sort_values(ascending=False).plot(kind = 'barh')
plt.show()
# 한국인수와 고령자수를 바 차트로 표시
data_result[['한국인','고령자']].sort_values('한국인',ascending = False).plot(kind = 'bar')
plt.show()
실습 22. 인구 한명당 CCTV의 비율을 계산하고, 이를 각 구별로 CCTV비율이 얼마인지 bar로 나타내세요.
(data_result['소계'] / data_result['인구수']).sort_values(ascending=False).plot(kind = 'bar')
plt.show()
실습 23. 인구수와 CCTV갯수가 어떤 분포인지, scatter로 나타내세요.
plt.scatter(data = data_result,x='인구수',y='소계')
plt.show()
sb.regplot(data = data_result, x= '인구수',y='소계')
plt.show()
댓글남기기