LiJell's 성장기

__12.data.analyzing_Starbucks_data_preprocessing (스타벅스 2편) 본문

Bigdata/Web Crawling

__12.data.analyzing_Starbucks_data_preprocessing (스타벅스 2편)

All_is_LiJell 2022. 1. 20. 22:45
반응형
 

__11.data_analyzing_Starbucks_crawling (스타벅스 1편)

스타벅스 2편 전처리: https://lime-jelly.tistory.com/52 스타벅스 3편 시각화: https://lime-jelly.tistory.com/53 __12.data.analyzing_Starbucks_data_preprocessing (스타벅스 2편) 스타벅스 크롤링 1편: htt..

lime-jelly.tistory.com

 

__13.data.analyzing_Starbucks_data_visualizing

스타벅스 1편 크롤링: https://lime-jelly.tistory.com/51 스타벅스 2편 전처리: https://lime-jelly.tistory.com/52 13. Starbucks data visualizing (스타벅스 데이터 비주얼라이징) 13.1 스타벅스 매장분포 시..

lime-jelly.tistory.com

12. Starbucks data preprocessing (스타벅스 데이터 전처리)

서울 열린데이터 광장 OPEN API 서비스 종료에 따라 직접 다운로드 하기

12.1. 서울열린데이터광장 공공데이터 수집 및 정리

import requests
import pandas as pd

12.1.1 서울시 구별 주민등록인구통계 데이터 가져오기

sgg_pop_df = pd.read_csv('./files/report.txt', sep='\t', header=2)
columns = {
    '기간': 'GIGAN',
    '자치구': 'JACHIGU',
    '계': 'GYE_1',
    '계.1': 'GYE_2',
    '계.2': 'GYE_3',
    '남자': 'NAMJA_1',
    '남자.1': 'NAMJA_2',
    '남자.2': 'NAMJA_3',
    '여자': 'YEOJA_1',
    '여자.1': 'YEOJA_2',
    '여자.2': 'YEOJA_3',
    '세대': 'SEDAE',
    '세대당인구': 'SEDAEDANGINGU',
    '65세이상고령자': 'N_65SEISANGGORYEONGJA'
}
sgg_pop_df.rename(columns = columns, inplace = True) # inplace안해주면 다시 넣어야함
sgg_pop_df.info()
'''
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 26 entries, 0 to 25
Data columns (total 14 columns):
 #   Column                 Non-Null Count  Dtype  
---  ------                 --------------  -----  
 0   GIGAN                  26 non-null     object 
 1   JACHIGU                26 non-null     object 
 2   SEDAE                  26 non-null     object 
 3   GYE_1                  26 non-null     object 
 4   NAMJA_1                26 non-null     object 
 5   YEOJA_1                26 non-null     object 
 6   GYE_2                  26 non-null     object 
 7   NAMJA_2                26 non-null     object 
 8   YEOJA_2                26 non-null     object 
 9   GYE_3                  26 non-null     object 
 10  NAMJA_3                26 non-null     object 
 11  YEOJA_3                26 non-null     object 
 12  SEDAEDANGINGU          26 non-null     float64
 13  N_65SEISANGGORYEONGJA  26 non-null     object 
dtypes: float64(1), object(13)
memory usage: 3.0+ KB
'''

12.1.1.1. 필요없는 데이터 제거

condition = sgg_pop_df['JACHIGU'] != '합계'
sgg_pop_df_selected = sgg_pop_df[condition]
sgg_pop_df_selected.head()

12.1.1.2 분석에 필요한 칼럼 선택

sgg_pop_df_final = sgg_pop_df_select[['JACHIGU', 'GYE_1']]
sgg_pop_df_final.columns = ['시군구명','주민등록인구'] # columns의 개수가 같아야 함
sgg_pop_df_final.head()
'''
    시군구명    주민등록인구
1    종로구    159,842
2    중구    135,321
3    용산구    244,953
4    성동구    302,695
5    광진구    361,923
'''
# 저장
sgg_pop_df_final.to_excel('./files/sgg_pop.xlsx', index = False)

12.1.2. 서울시 동별 사업체현황 통계 데이터 가져와서 가공하기

  • 위와 같은 방법으로 데이터를 가져와 가공 저장
a_df = pd.read_csv('./files/report2.txt', header = 2, sep = '\t')
a_df
condition1 = a_df['동'] == '소계'
a1_df = a_df[condition1]
a1_df[['자치구','계','사업체수']]
a11_df = a1_df[['자치구','계','사업체수']]
a11_df.columns = ['시군구명', '종사자수','사업체수']

sgg_biz_df_final = a11_df
sgg_biz_df_final.reset_index(drop = True , inplace = True)
sgg_biz_df_final

sgg_biz_df_final.to_excel('./files/sgg_biz.xlsx', index = False)

12.2. 서울시 스타벅스 매장 목록, 인구, 사업체 데이터에 시군구명, 시군구코드 추가

12.2.1. 가공 및 저장

import pandas as pd
seoul_starbucks = pd.read_excel('./files/seoul_starbucks_list.xlsx', header=0)
seoul_starbucks.head()

sgg_names = []
for address in seoul_starbucks['주소']:
    sgg = address.split()[1]
    sgg_names.append(sgg)


seoul_starbucks['시군구명'] = sgg_names
seoul_starbucks.head()
'''
    매장명    위도    경도    매장타입    주소    전화번호    시군구명
0    역삼아레나빌딩    37.501087    127.043069    general    서울특별시 강남구 언주로 425 (역삼동)    1522-3232    강남구
1    논현역사거리    37.510178    127.022223    general    서울특별시 강남구 강남대로 538 (논현동)    1522-3232    강남구
2    신사역성일빌딩    37.514132    127.020563    general    서울특별시 강남구 강남대로 584 (논현동)    1522-3232    강남구
3    국기원사거리    37.499517    127.031495    general    서울특별시 강남구 테헤란로 125 (역삼동)    1522-3232    강남구
4    대치재경빌딩R    37.494668    127.062583    reserve    서울특별시 강남구 남부순환로 2947 (대치동)    1522-3232    강남구
'''

seoul_starbucks.to_excel('./files/seoul_starbucks_list.xlsx', index=False)

12.3. 분석 데이터 만들기

  • 시군구 목록, 스타벅스 매장 목록 데이터 불러오기
seoul_sgg = pd.read_excel('./files/seoul_sgg_list.xlsx')
seoul_starbucks = pd.read_excel('./files/seoul_starbucks_list.xlsx')
  • 시군구별 스타벅스 매장 수 세기
starbucks_sgg_count = seoul_starbucks.pivot_table(
                                                index = '시군구명', 
                                                values='매장명', 
                                                aggfunc='count'
                                                )
# reindex
starbucks_sgg_count = starbucks_sgg_count.reset_index(drop = False).rename(columns = {'매장명':'스타벅스_매장수'})

12.4. 데이터 병합

seoul_sgg_pop = pd.read_excel('./files/sgg_pop.xlsx')
seoul_sgg_pop.head()
'''
    시군구명    주민등록인구
0    종로구    159,842
1    중구    135,321
2    용산구    244,953
3    성동구    302,695
4    광진구    361,923
'''
seoul_sgg= pd.read_excel('./files/seoul_sgg_list.xlsx')
seoul_sgg.head()
'''
    시군구코드    시군구명    위도    경도
0    11320    도봉구    37.665861    127.031767
1    11380    은평구    37.617612    126.922700
2    11230    동대문구    37.583801    127.050700
3    11590    동작구    37.496504    126.944307
4    11545    금천구    37.460097    126.900155
'''
  • 병합하기
seoul_sgg = pd.merge(seoul_sgg, seoul_sgg_pop, how = 'left', on ='시군구명')
seoul_sgg.head()
'''
    시군구코드    시군구명    위도    경도    주민등록인구
0    11320    도봉구    37.665861    127.031767    329,300
1    11380    은평구    37.617612    126.922700    485,842
2    11230    동대문구    37.583801    127.050700    358,679
3    11590    동작구    37.496504    126.944307    404,617
4    11545    금천구    37.460097    126.900155    249,641
'''
seoul_sgg_biz = pd.read_excel('./files/sgg_biz.xlsx')
seoul_sgg = pd.merge(seoul_sgg, seoul_sgg_biz, how = 'left', on = '시군구명')
seoul_sgg.head()
'''
    시군구코드    시군구명    위도    경도    주민등록인구    종사자수    사업체수
0    11320    도봉구    37.665861    127.031767    329,300    74,314    18,894
1    11380    은평구    37.617612    126.922700    485,842    90,049    24,873
2    11230    동대문구    37.583801    127.050700    358,679    140,748    31,878
3    11590    동작구    37.496504    126.944307    404,617    112,564    19,916
4    11545    금천구    37.460097    126.900155    249,641    234,012    32,472
'''
  • 저장
seoul_sgg.to_excel('./files/seoul_sgg.xlsx', index = False)

스타벅스 맵: https://lime-jelly.tistory.com/53

반응형
Comments