목차
데이터 흝어보기
- CCTV 데이터와 인구 통계를 가져와 필요한 데이터로 정제하겠습니다.
import pandas as pd
import numpy as np
CCTV_Seoul = pd.read_csv('../data/01. Seoul_CCTV.csv', encoding = 'utf-8')
CCTV_Seoul.head()
기관명 | 소계 | 2013년도 이전 | 2014년 | 2015년 | 2016년 | |
---|---|---|---|---|---|---|
0 | 강남구 | 3238 | 1292 | 430 | 584 | 932 |
1 | 강동구 | 1010 | 379 | 99 | 155 | 377 |
2 | 강북구 | 831 | 369 | 120 | 138 | 204 |
3 | 강서구 | 911 | 388 | 258 | 184 | 81 |
4 | 관악구 | 2109 | 846 | 260 | 390 | 613 |
CCTV_Seoul.tail()
기관명 | 소계 | 2013년도 이전 | 2014년 | 2015년 | 2016년 | |
---|---|---|---|---|---|---|
20 | 용산구 | 2096 | 1368 | 218 | 112 | 398 |
21 | 은평구 | 2108 | 1138 | 224 | 278 | 468 |
22 | 종로구 | 1619 | 464 | 314 | 211 | 630 |
23 | 중구 | 1023 | 413 | 190 | 72 | 348 |
24 | 중랑구 | 916 | 509 | 121 | 177 | 109 |
CCTV_Seoul['최근 증가율'] = (
(CCTV_Seoul['2014년']+CCTV_Seoul['2015년']+CCTV_Seoul['2016년'])/CCTV_Seoul['2013년도 이전'] *100
)
CCTV_Seoul.sort_values(by='최근 증가율', ascending = False).head()
기관명 | 소계 | 2013년도 이전 | 2014년 | 2015년 | 2016년 | 최근 증가율 | |
---|---|---|---|---|---|---|---|
22 | 종로구 | 1619 | 464 | 314 | 211 | 630 | 248.922414 |
9 | 도봉구 | 825 | 238 | 159 | 42 | 386 | 246.638655 |
12 | 마포구 | 980 | 314 | 118 | 169 | 379 | 212.101911 |
8 | 노원구 | 1566 | 542 | 57 | 451 | 516 | 188.929889 |
1 | 강동구 | 1010 | 379 | 99 | 155 | 377 | 166.490765 |
# header을 통해 위에 두줄 제거할 수 있었다.
# usecols을 통해 필요한 열만 가져올 수 있었다.
# drop을 통해 행을 제거할 수 있는데, 인덱스로 접근할때는 대괄호를 쳐주어야한다.
pop_Seoul = pd.read_excel('../data/01. Seoul_Population.xls',header=2,usecols="B,D,G,J,N")
pop_Seoul.drop([0],axis=0, inplace=True)
pop_Seoul.head()
자치구 | 계 | 계.1 | 계.2 | 65세이상고령자 | |
---|---|---|---|---|---|
1 | 종로구 | 164257 | 154770 | 9487 | 26182 |
2 | 중구 | 134593 | 125709 | 8884 | 21384 |
3 | 용산구 | 244444 | 229161 | 15283 | 36882 |
4 | 성동구 | 312711 | 304808 | 7903 | 41273 |
5 | 광진구 | 372298 | 357703 | 14595 | 43953 |
# 인덱스로 접근할 때는 다음과 같이 columns[숫자] 형태로 접근한다.
# rename 쓸 때 앞에 인수 columns = 안넣어주면 반영 안된다.
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()
구별 | 인구수 | 한국인 | 외국인 | 고령자 | |
---|---|---|---|---|---|
1 | 종로구 | 164257 | 154770 | 9487 | 26182 |
2 | 중구 | 134593 | 125709 | 8884 | 21384 |
3 | 용산구 | 244444 | 229161 | 15283 | 36882 |
4 | 성동구 | 312711 | 304808 | 7903 | 41273 |
5 | 광진구 | 372298 | 357703 | 14595 | 43953 |
pop_Seoul.tail()
구별 | 인구수 | 한국인 | 외국인 | 고령자 | |
---|---|---|---|---|---|
21 | 관악구 | 520929 | 503297 | 17632 | 70046 |
22 | 서초구 | 445401 | 441102 | 4299 | 53205 |
23 | 강남구 | 561052 | 556164 | 4888 | 65060 |
24 | 송파구 | 671173 | 664496 | 6677 | 76582 |
25 | 강동구 | 440359 | 436223 | 4136 | 56161 |
pop_Seoul['외국인 비율'] = (pop_Seoul['외국인']/pop_Seoul['인구수'] *100)
pop_Seoul['고령자 비율'] = (pop_Seoul['고령자']/pop_Seoul['인구수'] *100)
pop_Seoul.sort_values(by='외국인 비율', ascending=False).head()
구별 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인 비율 | 고령자 비율 | |
---|---|---|---|---|---|---|---|
19 | 영등포구 | 402024 | 368550 | 33474 | 53981 | 8.326369 | 13.427308 |
18 | 금천구 | 253491 | 235154 | 18337 | 34170 | 7.233787 | 13.479769 |
17 | 구로구 | 441559 | 410742 | 30817 | 58794 | 6.979135 | 13.315095 |
2 | 중구 | 134593 | 125709 | 8884 | 21384 | 6.600640 | 15.887899 |
3 | 용산구 | 244444 | 229161 | 15283 | 36882 | 6.252148 | 15.088118 |
pop_Seoul.sort_values(by='고령자 비율', ascending=False).head()
구별 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인 비율 | 고령자 비율 | |
---|---|---|---|---|---|---|---|
9 | 강북구 | 328002 | 324479 | 3523 | 56530 | 1.074079 | 17.234651 |
1 | 종로구 | 164257 | 154770 | 9487 | 26182 | 5.775705 | 15.939656 |
2 | 중구 | 134593 | 125709 | 8884 | 21384 | 6.600640 | 15.887899 |
10 | 도봉구 | 346234 | 344166 | 2068 | 53488 | 0.597284 | 15.448512 |
6 | 동대문구 | 366011 | 350647 | 15364 | 55718 | 4.197688 | 15.223040 |
- 데이터가 너무 많은거 같으니 어떠한 요소들이 있는지만 대충 봅시다.
pop_Seoul["구별"].unique()
array(['종로구', '중구', '용산구', '성동구', '광진구', '동대문구', '중랑구', '성북구', '강북구',
'도봉구', '노원구', '은평구', '서대문구', '마포구', '양천구', '강서구', '구로구', '금천구',
'영등포구', '동작구', '관악구', '서초구', '강남구', '송파구', '강동구'], dtype=object)
len(pop_Seoul["구별"].unique())
25
CCTV_Seoul["기관명"].unique()
array(['강남구', '강동구', '강북구', '강서구', '관악구', '광진구', '구로구', '금천구', '노원구',
'도봉구', '동대문구', '동작구', '마포구', '서대문구', '서초구', '성동구', '성북구', '송파구',
'양천구', '영등포구', '용산구', '은평구', '종로구', '중구', '중랑구'], dtype=object)
len(CCTV_Seoul["기관명"].unique())
25
'DS_Study > 서울시 CCTV 현황' 카테고리의 다른 글
[DS_study] CCTV, 인구통계 데이터 합치기 (0) | 2022.05.29 |
---|---|
[DS_study] pandas 데이터 합치기 (0) | 2022.05.29 |
[DS_study] pandas dataframe 조건식, 칼럼 추가, 수정, isin(), 제거, 함수 적용 (0) | 2022.05.25 |
[DS_study] pandas dataframe 정렬, 선택, 조회 (0) | 2022.05.25 |
[DS_study] pandas 기초, DataFrame 선언 및 정보 탐색 (0) | 2022.05.25 |
데이터 흝어보기
- CCTV 데이터와 인구 통계를 가져와 필요한 데이터로 정제하겠습니다.
import pandas as pd
import numpy as np
CCTV_Seoul = pd.read_csv('../data/01. Seoul_CCTV.csv', encoding = 'utf-8')
CCTV_Seoul.head()
기관명 | 소계 | 2013년도 이전 | 2014년 | 2015년 | 2016년 | |
---|---|---|---|---|---|---|
0 | 강남구 | 3238 | 1292 | 430 | 584 | 932 |
1 | 강동구 | 1010 | 379 | 99 | 155 | 377 |
2 | 강북구 | 831 | 369 | 120 | 138 | 204 |
3 | 강서구 | 911 | 388 | 258 | 184 | 81 |
4 | 관악구 | 2109 | 846 | 260 | 390 | 613 |
CCTV_Seoul.tail()
기관명 | 소계 | 2013년도 이전 | 2014년 | 2015년 | 2016년 | |
---|---|---|---|---|---|---|
20 | 용산구 | 2096 | 1368 | 218 | 112 | 398 |
21 | 은평구 | 2108 | 1138 | 224 | 278 | 468 |
22 | 종로구 | 1619 | 464 | 314 | 211 | 630 |
23 | 중구 | 1023 | 413 | 190 | 72 | 348 |
24 | 중랑구 | 916 | 509 | 121 | 177 | 109 |
CCTV_Seoul['최근 증가율'] = (
(CCTV_Seoul['2014년']+CCTV_Seoul['2015년']+CCTV_Seoul['2016년'])/CCTV_Seoul['2013년도 이전'] *100
)
CCTV_Seoul.sort_values(by='최근 증가율', ascending = False).head()
기관명 | 소계 | 2013년도 이전 | 2014년 | 2015년 | 2016년 | 최근 증가율 | |
---|---|---|---|---|---|---|---|
22 | 종로구 | 1619 | 464 | 314 | 211 | 630 | 248.922414 |
9 | 도봉구 | 825 | 238 | 159 | 42 | 386 | 246.638655 |
12 | 마포구 | 980 | 314 | 118 | 169 | 379 | 212.101911 |
8 | 노원구 | 1566 | 542 | 57 | 451 | 516 | 188.929889 |
1 | 강동구 | 1010 | 379 | 99 | 155 | 377 | 166.490765 |
# header을 통해 위에 두줄 제거할 수 있었다.
# usecols을 통해 필요한 열만 가져올 수 있었다.
# drop을 통해 행을 제거할 수 있는데, 인덱스로 접근할때는 대괄호를 쳐주어야한다.
pop_Seoul = pd.read_excel('../data/01. Seoul_Population.xls',header=2,usecols="B,D,G,J,N")
pop_Seoul.drop([0],axis=0, inplace=True)
pop_Seoul.head()
자치구 | 계 | 계.1 | 계.2 | 65세이상고령자 | |
---|---|---|---|---|---|
1 | 종로구 | 164257 | 154770 | 9487 | 26182 |
2 | 중구 | 134593 | 125709 | 8884 | 21384 |
3 | 용산구 | 244444 | 229161 | 15283 | 36882 |
4 | 성동구 | 312711 | 304808 | 7903 | 41273 |
5 | 광진구 | 372298 | 357703 | 14595 | 43953 |
# 인덱스로 접근할 때는 다음과 같이 columns[숫자] 형태로 접근한다.
# rename 쓸 때 앞에 인수 columns = 안넣어주면 반영 안된다.
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()
구별 | 인구수 | 한국인 | 외국인 | 고령자 | |
---|---|---|---|---|---|
1 | 종로구 | 164257 | 154770 | 9487 | 26182 |
2 | 중구 | 134593 | 125709 | 8884 | 21384 |
3 | 용산구 | 244444 | 229161 | 15283 | 36882 |
4 | 성동구 | 312711 | 304808 | 7903 | 41273 |
5 | 광진구 | 372298 | 357703 | 14595 | 43953 |
pop_Seoul.tail()
구별 | 인구수 | 한국인 | 외국인 | 고령자 | |
---|---|---|---|---|---|
21 | 관악구 | 520929 | 503297 | 17632 | 70046 |
22 | 서초구 | 445401 | 441102 | 4299 | 53205 |
23 | 강남구 | 561052 | 556164 | 4888 | 65060 |
24 | 송파구 | 671173 | 664496 | 6677 | 76582 |
25 | 강동구 | 440359 | 436223 | 4136 | 56161 |
pop_Seoul['외국인 비율'] = (pop_Seoul['외국인']/pop_Seoul['인구수'] *100)
pop_Seoul['고령자 비율'] = (pop_Seoul['고령자']/pop_Seoul['인구수'] *100)
pop_Seoul.sort_values(by='외국인 비율', ascending=False).head()
구별 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인 비율 | 고령자 비율 | |
---|---|---|---|---|---|---|---|
19 | 영등포구 | 402024 | 368550 | 33474 | 53981 | 8.326369 | 13.427308 |
18 | 금천구 | 253491 | 235154 | 18337 | 34170 | 7.233787 | 13.479769 |
17 | 구로구 | 441559 | 410742 | 30817 | 58794 | 6.979135 | 13.315095 |
2 | 중구 | 134593 | 125709 | 8884 | 21384 | 6.600640 | 15.887899 |
3 | 용산구 | 244444 | 229161 | 15283 | 36882 | 6.252148 | 15.088118 |
pop_Seoul.sort_values(by='고령자 비율', ascending=False).head()
구별 | 인구수 | 한국인 | 외국인 | 고령자 | 외국인 비율 | 고령자 비율 | |
---|---|---|---|---|---|---|---|
9 | 강북구 | 328002 | 324479 | 3523 | 56530 | 1.074079 | 17.234651 |
1 | 종로구 | 164257 | 154770 | 9487 | 26182 | 5.775705 | 15.939656 |
2 | 중구 | 134593 | 125709 | 8884 | 21384 | 6.600640 | 15.887899 |
10 | 도봉구 | 346234 | 344166 | 2068 | 53488 | 0.597284 | 15.448512 |
6 | 동대문구 | 366011 | 350647 | 15364 | 55718 | 4.197688 | 15.223040 |
- 데이터가 너무 많은거 같으니 어떠한 요소들이 있는지만 대충 봅시다.
pop_Seoul["구별"].unique()
array(['종로구', '중구', '용산구', '성동구', '광진구', '동대문구', '중랑구', '성북구', '강북구',
'도봉구', '노원구', '은평구', '서대문구', '마포구', '양천구', '강서구', '구로구', '금천구',
'영등포구', '동작구', '관악구', '서초구', '강남구', '송파구', '강동구'], dtype=object)
len(pop_Seoul["구별"].unique())
25
CCTV_Seoul["기관명"].unique()
array(['강남구', '강동구', '강북구', '강서구', '관악구', '광진구', '구로구', '금천구', '노원구',
'도봉구', '동대문구', '동작구', '마포구', '서대문구', '서초구', '성동구', '성북구', '송파구',
'양천구', '영등포구', '용산구', '은평구', '종로구', '중구', '중랑구'], dtype=object)
len(CCTV_Seoul["기관명"].unique())
25
'DS_Study > 서울시 CCTV 현황' 카테고리의 다른 글
[DS_study] CCTV, 인구통계 데이터 합치기 (0) | 2022.05.29 |
---|---|
[DS_study] pandas 데이터 합치기 (0) | 2022.05.29 |
[DS_study] pandas dataframe 조건식, 칼럼 추가, 수정, isin(), 제거, 함수 적용 (0) | 2022.05.25 |
[DS_study] pandas dataframe 정렬, 선택, 조회 (0) | 2022.05.25 |
[DS_study] pandas 기초, DataFrame 선언 및 정보 탐색 (0) | 2022.05.25 |