스타벅스입지전략(2) - 공공 데이터 수집
01. 서울시 통계 정보 : 공공 데이터 수집 및 EDA
1. 소개
이 포스트에서는 서울시 공공 데이터를 수집하고, 이를 바탕으로 데이터 탐색적 분석(EDA)을 수행한다. 특히, 서울시의 주민등록 인구 통계와 사업체 현황 통계를 수집하여 이를 분석하는 과정을 보여준다. (작년에 한 프로젝트라서 작년데이터긴 하다 ㅎㅎ;)
2. 데이터 링크
3. EDA
3-1 서울시 주민등록 인구 데이터
- 데이터를 확인해보자
1
2
3
4
import pandas as pd
sgg_pop_df = pd.read_csv('./files/report.txt', sep='\t', header=1)
sgg_pop_df
- 데이터를 불러온 후 sgg_pop_df를 출력해 데이터를 확인할 수 있다. 이 데이터에는 구별 인구 데이터가 포함되어 있으며, 추후 분석을 위해 컬럼명을 영어로 변경한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
columns = {
'시점': 'GIGAN',
'동별(1)': 'SUM',
'동별(2)': 'JACHIGU',
'소계': 'SEDAE',
'소계.1': 'GYE_1',
'남자': 'NAMJA_1',
'여자': 'YEOJA_1',
'소계.2': 'GYE_2', # 한국인
'남자.1': 'NAMJA_2',
'여자.1': 'YEOJA_2',
'소계.3': 'GYE_3', # 등록외국인
'남자.2': 'NAMJA_3',
'여자.2': 'YEOJA_3',
'소계.4': 'SEDAEDANGINGU',
'소계.5': 'N_65SEISANGGORYEONGJA'
}
sgg_pop_df.rename(columns = columns, inplace = True)
sgg_pop_df.head()
- 여기서는 각 컬럼의 의미를 파악해 적절한 영문명으로 수정한다.
1
sgg_pop_df.info()
- 결과
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 26 entries, 0 to 25
Data columns (total 15 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 GIGAN 26 non-null object
1 SUM 26 non-null object
2 JACHIGU 26 non-null object
3 SEDAE 26 non-null int64
4 GYE_1 26 non-null int64
5 NAMJA_1 26 non-null int64
6 YEOJA_1 26 non-null int64
7 GYE_2 26 non-null int64
8 NAMJA_2 26 non-null int64
9 YEOJA_2 26 non-null int64
10 GYE_3 26 non-null int64
11 NAMJA_3 26 non-null int64
12 YEOJA_3 26 non-null int64
13 SEDAEDANGINGU 26 non-null float64
14 N_65SEISANGGORYEONGJA 26 non-null int64
dtypes: float64(1), int64(11), object(3)
memory usage: 3.2+ KB
- 마지막으로 ‘소계’ 데이터를 제외하고 구별 데이터를 선택한다.
1
2
3
4
# 참고용
condition = sgg_pop_df['JACHIGU'] != '소계'
sgg_pop_df_selected = sgg_pop_df[condition]
sgg_pop_df_selected.head()
- 필요한 컬럼 명 변경한다.
1
2
3
4
5
# 데이터프레임의 칼럼명 변경
sgg_pop_df_final.columns = ['시군구명', '주민등록인구']
sgg_pop_df_final.info()
sgg_pop_df_final.head()
- 저장
1
2
sgg_pop_df_final.to_excel('./files/sgg_pop.xlsx', index=False)
3-2 서울시 사업체현황
마찬가지로 똑같은 작업을 하면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 데이터를 불러와 컬럼명을 변경한다
sgg_biz_df = pd.read_csv('./files/report1.txt', sep='\t', header=3)
columns = {
'시점': 'GIGAN',
'동별(1)': 'GIGAN',
'동별(2)': 'JACHIGU',
'동별(3)': 'DONG',
'소계': 'SAEOPCHESU_1',
'여성대표자': 'YEOSEONGDAEPYOJA',
'소계.1': 'GYE',
'남': 'NAM',
'여': 'YEO'
}
sgg_biz_df.rename(columns = columns, inplace = True)
# 시군구별 사업체 현황 데이터를 '소계' 기준으로 필터링한다
condition = sgg_biz_df['DONG'] == '소계'
sgg_biz_df_selected = sgg_biz_df[condition]
# 필요 없는 칼럼을 제거하고, 필요한 칼럼을 새롭게 지정한다
columns = ['JACHIGU', 'GYE', 'SAEOPCHESU_1']
sgg_biz_df_final = sgg_biz_df_selected[columns]
sgg_biz_df_final.columns = ['시군구명', '종사자수', '사업체수']
# 데이터프레임의 인덱스를 초기화한다
sgg_biz_df_final = sgg_biz_df_final.reset_index(drop=True)
# 엑셀 파일로 저장한다
sgg_biz_df_final.to_excel('./files/sgg_biz.xlsx', index=False)
This post is licensed under CC BY 4.0 by the author.