데이터 분석

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