데이터 분석
9. 상권별 업종 밀집 통계 프로젝트
HJ76
2023. 6. 14. 17:23
상권별 업종 밀집 통계 프로젝트
사용할 라이브러리 import
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# seaborn: matplotlib 기반으로 만들어진 시각화 라이브러리
import seaborn as sns
한글폰트 설치 및 등록
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
plt.rc("font", family="NanumBarunGothic")
사용할 데이터셋
shop = pd.read_csv("/content/drive/MyDrive/데이터분석/shop_201806_01 (1).csv")
shop
모든 컬럼을 확인하기 위해 max_columns 40으로 변경
pd.set_option("display.max_columns", 40)
info()로 데이터셋의 간략한 정보 확인
shop.info()
컬럼 리스트 확인
shop.columns
필요한 컬럼들만 view_columns 리스트에 담기
view_columns = ['상호명', '지점명', '상권업종대분류명', '상권업종중분류명', '상권업종소분류명', '시도명', '시군구명',
'행정동명', '법정동명', '지번주소', '도로명', '도로명주소', '경도', '위도']
view_columns 리스트에 있는 컬럼들만 재할당
shop = shop[view_columns]
shop.head()
결측치 확인
shop.isnull().sum()
위치를 기준으로 산점도 그래프 그리기
# plot.scatter() 메소드드를 사용하여 x축은 경도컬럼, y축은 위도컬럼을 기준으로 산점도 그래프 그리기
shop.plot.scatter(x="경도", y="위도", grid=True, figsize=(6,8))
서울에 있는 상권업종 분류
# shop_seoul에 shop의 '도로명주소' 컬럼이 '서울'로 시작되는 행만 담기
shop_seoul = shop.loc[shop["도로명주소"].str.startswith("서울")]
shop_seoul
서울을 제외한 나머지 상권업종 분류
# ~연산자를 붙여서 도로명주소가 '서울'로 시작하지 않는 행만 shop_except_seoul에 담기
shop_except_seoul = shop.loc[~shop["도로명주소"].str.startswith("서울")]
shop_except_seoul
서울에 있는 상권업종 산점도 그래프 그리기
shop_seoul.plot.scatter(x="경도", y="위도", grid=True, figsize=(10,8))
서울을 제외한 나머지 상권업종 산점도 그래프 그리기
shop_except_seoul.plot.scatter(x="경도", y="위도", grid=True, figsize=(10,8))
서울을 제외한 나머지 상권업종 산점도 그래프 그리기
# 크기를 가로14, 세로10으로 설정
plt.figure(figsize=(14, 10))
# 사용할 데이터 프레임은 shop_seoul
# x축은 '경도'컬럼, y축은 '위도' 컬럼으로 설정하고
# '시군구명'컬럼에 따라 색상 구분하여 표기
sns.scatterplot(data=shop_seoul, x="경도", y="위도", hue="시군구명")
상권업종대분류명의 종류 확인
shop_seoul["상권업종대분류명"].value_counts()
상권업종대분류명이 '학문/교육'인 데이터 분류
shop_seoul_edu = shop_seoul[shop_seoul["상권업종대분류명"] == "학문/교육"]
shop_seoul_edu의 행, 열 개수 확인
shop_seoul_edu.shape # (27717, 14)
'학문/교육' 의 산점도 그래프 그리기
# 크기를 가로14, 세로10으로 설정
plt.figure(figsize=(14, 10))
# 사용할 데이터 프레임은 shop_seoul_edu
# x축은 '경도'컬럼, y축은 '위도' 컬럼으로 설정
# '상권업종중분류명'컬럼에 따라 색상 구분하여 표기
sns.scatterplot(data=shop_seoul_edu, x="경도", y="위도", hue="상권업종중분류명")
상권업종중분류명이 '학원-컴퓨터'인 데이터 분류
shop_seoul_edu_com = shop_seoul_edu[shop_seoul_edu["상권업종중분류명"] == "학원-컴퓨터"]
shop_seoul_edu_com
shop_seoul_edu_com의 행, 열 개수 확인
shop_seoul_edu_com.shape # (215, 14)
'학원-컴퓨터' 의 산점도 그래프 그리기
# 크기를 가로14, 세로10으로 설정
plt.figure(figsize=(14, 10))
# 사용할 데이터 프레임은 shop_seoul_edu_com
# x축은 '경도'컬럼, y축은 '위도' 컬럼으로 설정
# '상권업종소분류명'컬럼에 따라 색상 구분하여 표기
sns.scatterplot(data=shop_seoul_edu_com, x="경도", y="위도", hue="상권업종소분류명")
folium으로 shop_seoul_edu_com의 컴퓨터학원 데이터 출력하기
folium install, import
!pip install folium
import folium
지도 출력
# shop_seoul_edu_com의 위도, 경도 평균 값으로 지도 설정
map = folium.Map(location=[shop_seoul_edu_com["위도"].mean(), shop_seoul_edu_com["경도"].mean()], zoom_start=12)
# 인덱스를 기준으로 반복
for i in shop_seoul_edu_com.index:
# 해당 인덱스의 '상호명 - 도로명주소' 문자열 edu_name에 담기
edu_name = shop_seoul_edu_com.loc[i, "상호명"] + " - " + shop_seoul_edu_com.loc[i, "도로명주소"]
# 팝업 객체 생성
popup = folium.Popup(edu_name, max_width=500)
# 해당 인덱스의 위도, 경도 location으로 등록, 팝업객체 등록
folium.Marker(location = [shop_seoul_edu_com.loc[i,"위도"], shop_seoul_edu_com.loc[i, "경도"]], popup=popup).add_to(map)
map
상권업종중분류명이 "커피점/카페" 인 데이터 중 "구군"이 "강남구"인 데이터만 지도에 표기
상권업종중분류명이 '커피점/카페'인 데이터 분류
shop_cafe = shop.loc[shop['상권업종중분류명'] == "커피점/카페"]
시군구명이 '강남구'인 데이터 분류
shop_cafe_gangnam = shop_cafe.loc[shop_cafe['시군구명'] == "강남구"]
지도 출력
# shop_cafe_gangnam의 위도, 경도 평균 값으로 지도 설정
map = folium.Map(location=[shop_cafe_gangnam["위도"].mean(), shop_cafe_gangnam["경도"].mean()], zoom_start=14)
# 인덱스를 기준으로 반복
for i in shop_cafe_gangnam.index:
# 해당 인덱스의 '상호명 - 도로명주소' 문자열 cafe_name에 담기
cafe_name = shop_cafe_gangnam.loc[i, "상호명"] + " - " + shop_cafe_gangnam.loc[i, "도로명주소"]
# 팝업 객체 생성
popup = folium.Popup(cafe_name, max_width=500)
# 해당 인덱스의 위도, 경도 location으로 등록, 팝업객체 등록
folium.Marker(location=[shop_cafe_gangnam.loc[i,"위도"], shop_cafe_gangnam.loc[i, "경도"]], popup=popup).add_to(map)
map