4. 두 데이터 합치기
CCTV_Seoul.head(1)
|
구별 |
CCTV 수 |
2013년도 이전 |
2014년 |
2015년 |
2016년 |
최근 증가율 |
0 |
강남구 |
3238 |
1292 |
430 |
584 |
932 |
150.619195 |
pop_Seoul.head(1)
|
구별 |
인구수 |
한국인 |
외국인 |
고령자 |
외국인 비율 |
고령자 비율 |
1 |
종로구 |
164257 |
154770 |
9487 |
26182 |
5.775705 |
15.939656 |
# 둘다 구별에 대해 중복되지 않은, 25개의 같은 구를 보유하고 있으므로, how는 문제가 되지 않는다.
data_result = pd.merge(CCTV_Seoul,pop_Seoul,how='inner',on='구별')
data_result.head(3)
|
구별 |
CCTV 수 |
2013년도 이전 |
2014년 |
2015년 |
2016년 |
최근 증가율 |
인구수 |
한국인 |
외국인 |
고령자 |
외국인 비율 |
고령자 비율 |
0 |
강남구 |
3238 |
1292 |
430 |
584 |
932 |
150.619195 |
561052 |
556164 |
4888 |
65060 |
0.871220 |
11.596073 |
1 |
강동구 |
1010 |
379 |
99 |
155 |
377 |
166.490765 |
440359 |
436223 |
4136 |
56161 |
0.939234 |
12.753458 |
2 |
강북구 |
831 |
369 |
120 |
138 |
204 |
125.203252 |
328002 |
324479 |
3523 |
56530 |
1.074079 |
17.234651 |
data_result.tail(3)
|
구별 |
인구수_x |
2015년 |
2016년 |
최근 증가율 |
인구수_y |
한국인 |
외국인 |
고령자 |
외국인 비율 |
고령자 비율 |
22 |
종로구 |
1619 |
211 |
630 |
248.922414 |
164257 |
154770 |
9487 |
26182 |
5.775705 |
15.939656 |
23 |
중구 |
1023 |
72 |
348 |
147.699758 |
134593 |
125709 |
8884 |
21384 |
6.600640 |
15.887899 |
24 |
중랑구 |
916 |
177 |
109 |
79.960707 |
412780 |
408226 |
4554 |
59262 |
1.103251 |
14.356800 |
data_result.columns.unique()
Index(['구별', 'CCTV 수', '2013년도 이전', '2014년', '2015년', '2016년', '최근 증가율', '인구수',
'한국인', '외국인', '고령자', '외국인 비율', '고령자 비율'],
dtype='object')
년도별 데이터 컬럼 삭제
del data_result['2013년도 이전']
del data_result['2014년']
data_result.drop(['2015년','2016년'],axis=1,inplace=True)
data_result.head()
|
구별 |
CCTV 수 |
최근 증가율 |
인구수 |
한국인 |
외국인 |
고령자 |
외국인 비율 |
고령자 비율 |
0 |
강남구 |
3238 |
150.619195 |
561052 |
556164 |
4888 |
65060 |
0.871220 |
11.596073 |
1 |
강동구 |
1010 |
166.490765 |
440359 |
436223 |
4136 |
56161 |
0.939234 |
12.753458 |
2 |
강북구 |
831 |
125.203252 |
328002 |
324479 |
3523 |
56530 |
1.074079 |
17.234651 |
3 |
강서구 |
911 |
134.793814 |
608255 |
601691 |
6564 |
76032 |
1.079153 |
12.500021 |
4 |
관악구 |
2109 |
149.290780 |
520929 |
503297 |
17632 |
70046 |
3.384722 |
13.446362 |
인덱스 변경
- set_index()
- 선택한 컬럼을 데이터 프레임의 인덱스로 지정
data_result.set_index("구별",inplace=True)
data_result.head()
|
CCTV 수 |
최근 증가율 |
인구수 |
한국인 |
외국인 |
고령자 |
외국인 비율 |
고령자 비율 |
구별 |
|
|
|
|
|
|
|
|
강남구 |
3238 |
150.619195 |
561052 |
556164 |
4888 |
65060 |
0.871220 |
11.596073 |
강동구 |
1010 |
166.490765 |
440359 |
436223 |
4136 |
56161 |
0.939234 |
12.753458 |
강북구 |
831 |
125.203252 |
328002 |
324479 |
3523 |
56530 |
1.074079 |
17.234651 |
강서구 |
911 |
134.793814 |
608255 |
601691 |
6564 |
76032 |
1.079153 |
12.500021 |
관악구 |
2109 |
149.290780 |
520929 |
503297 |
17632 |
70046 |
3.384722 |
13.446362 |
상관계수
- corr()
- correlation의 약자이다.
- 상관계수가 0.2 이상의 데이터를 비교
data_result.corr()
|
CCTV 수 |
최근 증가율 |
인구수 |
한국인 |
외국인 |
고령자 |
외국인 비율 |
고령자 비율 |
CCTV 수 |
1.000000 |
-0.264378 |
0.232555 |
0.227852 |
0.030421 |
0.163905 |
-0.045956 |
-0.267841 |
최근 증가율 |
-0.264378 |
1.000000 |
-0.097165 |
-0.086341 |
-0.156421 |
-0.072251 |
-0.047102 |
0.190396 |
인구수 |
0.232555 |
-0.097165 |
1.000000 |
0.998151 |
-0.167243 |
0.936737 |
-0.601076 |
-0.637414 |
한국인 |
0.227852 |
-0.086341 |
0.998151 |
1.000000 |
-0.226853 |
0.936155 |
-0.645463 |
-0.628360 |
외국인 |
0.030421 |
-0.156421 |
-0.167243 |
-0.226853 |
1.000000 |
-0.175318 |
0.838612 |
-0.021147 |
고령자 |
0.163905 |
-0.072251 |
0.936737 |
0.936155 |
-0.175318 |
1.000000 |
-0.620300 |
-0.348840 |
외국인 비율 |
-0.045956 |
-0.047102 |
-0.601076 |
-0.645463 |
0.838612 |
-0.620300 |
1.000000 |
0.242816 |
고령자 비율 |
-0.267841 |
0.190396 |
-0.637414 |
-0.628360 |
-0.021147 |
-0.348840 |
0.242816 |
1.000000 |
# 데이터 타입을 확인 후 상관계수를 비교한다.
# object 타입이 있는 경우에는 corr 비교가 안되기 때문에
data_result.info()
<class 'pandas.core.frame.DataFrame'>
Index: 25 entries, 강남구 to 중랑구
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 CCTV 수 25 non-null int64
1 최근 증가율 25 non-null float64
2 인구수 25 non-null int64
3 한국인 25 non-null int64
4 외국인 25 non-null int64
5 고령자 25 non-null int64
6 외국인 비율 25 non-null float64
7 고령자 비율 25 non-null float64
dtypes: float64(3), int64(5)
memory usage: 1.8+ KB
data_result['CCTV비율'] = data_result['CCTV 수']/data_result['인구수'] *100
data_result.head()
|
CCTV 수 |
최근 증가율 |
인구수 |
한국인 |
외국인 |
고령자 |
외국인 비율 |
고령자 비율 |
CCTV비율 |
구별 |
|
|
|
|
|
|
|
|
|
강남구 |
3238 |
150.619195 |
561052 |
556164 |
4888 |
65060 |
0.871220 |
11.596073 |
0.577130 |
강동구 |
1010 |
166.490765 |
440359 |
436223 |
4136 |
56161 |
0.939234 |
12.753458 |
0.229358 |
강북구 |
831 |
125.203252 |
328002 |
324479 |
3523 |
56530 |
1.074079 |
17.234651 |
0.253352 |
강서구 |
911 |
134.793814 |
608255 |
601691 |
6564 |
76032 |
1.079153 |
12.500021 |
0.149773 |
관악구 |
2109 |
149.290780 |
520929 |
503297 |
17632 |
70046 |
3.384722 |
13.446362 |
0.404854 |
data_result.sort_values(by='CCTV비율',ascending=False).head()
|
CCTV 수 |
최근 증가율 |
인구수 |
한국인 |
외국인 |
고령자 |
외국인 비율 |
고령자 비율 |
CCTV비율 |
구별 |
|
|
|
|
|
|
|
|
|
종로구 |
1619 |
248.922414 |
164257 |
154770 |
9487 |
26182 |
5.775705 |
15.939656 |
0.985651 |
용산구 |
2096 |
53.216374 |
244444 |
229161 |
15283 |
36882 |
6.252148 |
15.088118 |
0.857456 |
중구 |
1023 |
147.699758 |
134593 |
125709 |
8884 |
21384 |
6.600640 |
15.887899 |
0.760069 |
강남구 |
3238 |
150.619195 |
561052 |
556164 |
4888 |
65060 |
0.871220 |
11.596073 |
0.577130 |
금천구 |
1348 |
100.000000 |
253491 |
235154 |
18337 |
34170 |
7.233787 |
13.479769 |
0.531774 |