-
[Data Science] 공공데이터 활용해 프랜차이즈 분석하기Data Science 2020. 6. 6. 22:59반응형
공공데이터 포털에서 다운받은 데이터로 배스킨라빈스와 던킨도너츠가 서로 근처에 입점해있는지
또한 서울 어느지역에 많이 입점해있는지 원하는 데이터를 추출하여 지도에 직접 표시해 알아보자!!!!
사용한 데이터셋 https://www.data.go.kr/dataset/15012005/fileData.do
필요한 라이브러리 및 한글 폰트 세팅
#라이브러리 import import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt # 폰트 설정 #폰트 선명하게 from IPython.display import set_matplotlib_formats set_matplotlib_formats("retina") #한글 깨짐 설정 plt.rc("font", family="Malgun Gothic" ) # - 깨짐 설정 plt.rc("axes", unicode_minus=False) plt.title("한글폰트 설정") plt.plot([-1,-6,1,2,3,4])
공공데이터 포털에서 다운받은 데이터를 불러오자!!!
# 데이터 불러오기 df = pd.read_csv("data/상가업소정보_201912_01.csv", sep="|") df.shape
데이터에 존재하는 결측값 비율 확인하기
# 결측값 비율 보기 df.isnull().mean().plot.barh(figsize=(7,8))
총 39개의 컬럼중에 호정도, 층 정보, 동정보, 건물부 번지, 지점명등 결측 값이 많은 컬럼들을 확인할 수 있다.
이제 이 컬럼들중 필요 없는 컬럼들은 제거해보자
# 사용하지않을 컬럼 제거하기 columns = ['상호명','상권업종대분류명','상권업종중분류명','상권업종소분류명' ,'시도명','시군구명','행정동명','법정동명','도로명주소','경도','위도'] df = df[columns].copy() df.shape
필요없는 컬럼들의 제거하니 11개의 컬럼이 남았고 하단의 사진처럼 메모리 사용량도 상당히 줄었다.
이제 이 데이터셋에서 서울의 데이터만 가져와보자 df_seoul에 담아보자.
#서울데이터만 가져오기 df_seoul = df[df["시도명"] =="서울특별시"].copy() print(df_seoul.shape) df_seoul.head()
이제 배스킨라빈스와 던킨도너츠의 입점 위치를 분석해보자
상호명에 Dunkin이나 BaskinRobbins 등 영문 대소문자가 같이 들어갈 경우가 있으니 영문은 모두 소문자로 변경하여 "상호명_소문자"로 새로운 컬럼을 만들어 할당해 주자.
# 영문자는 전부 소문자로 바꿔준다. df_seoul["상호명_소문자"] = df_seoul["상호명"].str.lower()
이제 던킨도너츠와 베스킨라빈스의 데이터만 추출해 df_db라는 변수에 담아보자
# 던킨도너츠와 베스킨라빈스 데이터만 추출하기 df_db = df_seoul[df_seoul["상호명_소문자"].str.contains( "던킨|dunkin|baskinrobbins|베스킨라빈스|배스킨라빈스")].copy()
데이터를 확인해보면 어떤곳은 베스킨라빈스 또 어떠한 곳은 영문으로 baskinrobbins로 저장되어있다.
이러한 데이터를 이제 "브랜드명" 이라는 컬럼을 만들어 베스킨라빈스면 베스킨라빈스 던킨도너츠면 던킨도너츠로 데이터를 통일시켜주자.
# 브랜드명이라는 컬럼을 만들어 데이터 통일시켜주기 df_db.loc[df_db["상호명_소문자"].str.contains("baskinrobbins|베스킨라빈스|배스킨라빈스") ,"브랜드명"]="베스킨라빈스" df_db[["상호명","브랜드명"]]
# 던킨도너츠 데이터를 넣어주자. df_db["브랜드명"] =df_db["브랜드명"].fillna("던킨도너츠") df_db["브랜드명"]
베스킨라빈스 와 던킨도너츠의 데이터가 잘 모아졌는지 확인해보자.
# 데이터가 잘 모아졌는지 확인 df_db["상권업종대분류명"].value_counts()
분명히 위에서 df_db에 베스킨라빈스와 던킨도너츠의 데이터만 담았는데
상권업종대분류명이 생활서비스, 소매인 데이터가 존재한다.
어떠한 데이터인지 확인해보자.
#소매, 생활서비스 데이터 확인하기 df_db[df_db["상권업종대분류명"].isin(["소매","생활서비스"])]
위 데이터는 제거하도록 하자.
# 소매, 생활서비스 데이터 제거 df_db = df_db[~df_db["상권업종대분류명"].isin(["소매","생활서비스"])]
전처리를 끝낸 df_db로 이제 분석을 시작해보자.
# 서울의 베스킨라빈스와 던킨도너츠의 매장수 비교 df_db["브랜드명"].value_counts().plot.bar() print(df_db["브랜드명"].value_counts())
위 데이터에서 확인할수있듯이 서울에는 던킨도너츠보다 베스킨라빈스의 매장수가 더 많다.
좀더 들어가 각 지역구마다 베스킨라빈스와 던킨도너츠 매장의수를 그래프로 확인해보자.
# 각 시군구별 베스킨라빈스와 던킨도너츠 매장수를 그래프로 확인하기. plt.figure(figsize=(15,4)) g= sns.countplot(data=df_db , x="시군구명" , hue="브랜드명")
다음은 scatterplot으로 경도와 위도 데이터를 활용해 위치를 찍어보자.
sns.scatterplot(data=df_db , x="경도" , y="위도" , hue="브랜드명")
다음은 folium을 활용하여 지도에 각 매장의 위치를 표시해보자.
import folium # 지도 중심을 지정하기위해 위도와 경도의 평균값 구하자 lat = df_db["위도"].mean() long = df_db["경도"].mean() # 지도의 중간점 세팅 m = folium.Map([lat,long]) # 베스킨라빈스는 파란색 , 던킨도너츠는 빨간색으로 # 지도에 표시하자. for i in df_db.index: sub_lat = df_db.loc[i,"위도"] sub_long = df_db.loc[i,"경도"] sub_title = df_db.loc[i,"상호명"] + "-" + df_db.loc[i,"도로명주소"] icon_color = "blue" if df_db.loc[i,"브랜드명"] =="던킨도너츠": icon_color ="red" folium.Marker( [ sub_lat, sub_long], popup=f'<i>{sub_title}</i>', icon= folium.Icon(color=icon_color), tooltip=sub_title).add_to(m) m
반응형'Data Science' 카테고리의 다른 글
[인프런 - 파이썬 머신러닝 완벽 가이드]머신러닝 classification(분류) 성능 지표 - 정밀도(Precision)과 재현율(Recall) (0) 2020.06.09 [인프런 - 파이썬 머신러닝 완벽 가이드] 머신러닝 classification(분류) 성능 지표 - 정확도 Accuracy , 오차 행렬 (Confusion Matrix) (0) 2020.06.09 [인프런 - 파이썬 머신러닝 완벽 가이드] 데이터 전처리 (데이터 인코딩과 스케일링) (0) 2020.06.08 [인프런 - 파이썬 머신러닝 완벽 가이드] 교차 검증 (0) 2020.06.08 [인프런 - 파이썬 머신러닝 완벽 가이드] iris 품종 예측하기 (0) 2020.06.07