티스토리 뷰
▶공공 데이터 상권 정보 분석하기
2016년 상권별 업종밀집 통계에 관한 데이터입니다. 다음 링크를 참고했습니다.
▷필요한 라이브러리 import
import pandas as pd
import numpy as np
import missingno as masno # 코랩이 아니라면 install 해주어야 함
import matplotlib as plt
import matplotlib.pyplot as pyplot
import seaborn as sns
▷사용할 데이터 불러오기 + encoding Error
shop_2018_06 pd.read_csv('shop_201806_01.csv', encoding='euc-kr')
+ encoding Error 해결하는 방법
encoding 관련해서 코멘트를 남기자면, 가끔 encoding 속성을 붙이지 않고 실행했을 때 encoding Error가 발생하는 경우가 있습니다.
그랬을 때 어떻게 해결해야 할까요?
우선 해당 csv파일을 우클릭해서 연결프로그램에서 메모장으로 열어줍니다.
메모장으로 열었다면 그 다음, 파일 > 다른 이름으로 저장을 눌러줍니다.
다른 이름으로 저장을 눌러주면 다음과 같은 '인코딩'이라는 부분을 확인할 수 있습니다.
이때 저는 ANSI로 되어있었기 때문에 'ms949' 혹은 'euc-kr'로 encoding 속성을 입력해주었습니다.
또 다른 방법으로는 UTF-8로 변경해주고, encoding='UTF-8'로 속성을 입력해주어도 되겠습니다.
▷데이터의 기본적인 형태 파악하기
① 데이터 shape
shop_2018_06.shape
out::::
(499328, 39)
② 데이터 head
shop_2018_06.head() # 상위 5개 행 나타내기
out::::
③ 데이터 columns
shop_2018_06_columns # 열 모두 확인하기
out::::
Index(['상가업소번호', '상호명', '지점명', '상권업종대분류코드', '상권업종대분류명', '상권업종중분류코드',
'상권업종중분류명', '상권업종소분류코드', '상권업종소분류명', '표준산업분류코드', '표준산업분류명', '시도코드',
'시도명', '시군구코드', '시군구명', '행정동코드', '행정동명', '법정동코드', '법정동명', '지번코드',
'대지구분코드', '대지구분명', '지번본번지', '지번부번지', '지번주소', '도로명코드', '도로명', '건물본번지',
'건물부번지', '건물관리번호', '건물명', '도로명주소', '구우편번호', '신우편번호', '동정보', '층정보',
'호정보', '경도', '위도'],
dtype='object')
▷필요한 칼럼의 데이터만 가져오기
view_columns = ['상호명','지점명','상권업종대분류명','상권업종중분류명','상권업종소분류명',
'시도명','시군구명','행정동명','법정동명','지번주소','도로명주소','경도','위도']
shop_2018_06[view_columns].head() # 위 칼럼들에 대한 head 정보
out::::
▷결측치 확인하기
shop_2018_06.insull().sum()
out::::
▷결측치 시각화 라이브러리 : missingno
맨 처음에 필요한 라이브러리 import 할 때, import missingno as msno 로 입력했습니다.
msno.matrix(shop_2018_06)
out::::
msno.matrix(shop_2018_06[view_columns]) # 우리가 필요한 정보들에게서만 결측치 확인
out::::
▷위도와 경도 이용해서 그래프에 표현하기
shop_2018_06.plot.scatter(x='경도', y='위도', grid=True, figsize=(12,16))
out::::
▷서울 데이터 가져오기 : str.startswith()
도로명주소에서 '서울'로 시작하는 데이터들을 가져오면 되겠습니다.
shop_seoul = shop_2018_06.loc[shop_2018_06['도로명주소'].str.startswith('서울')]
▷서울 데이터 제외하고 가져오기 : ~
~는 제외한다는 의미가 되겠습니다.
shop_except_seoul = shop_2018_06.loc[~shop_2018_06['도로명주소'].str.startswith('서울')]
▷서울 데이터 시각화
shop_seoul.plot.scatter(x='경도', y='위도', grid=True, figsize=(16,12))
out::::
▷'도로명주소'를 이용해서 '시도', '구군' 파생변수 만들기
shop_2018_06['시도'] = shop_2018_06['도로명주소'].str.split(' ', expand=True)[0]
shop_2018_06['구군'] = shop_seoul['도로명주소'].str.split(' ', expand=True)[1]
즉 ' '띄어쓰기를 기준으로 split 해서 0/1번째를 가져와서 expand=True 하겠다. 즉 바로 저장하겠다는 의미입니다.
'시도'와 '구군' 칼럼이 추가 되었기 때문에 shop_seoul 데이터를 다시 저장해주겠습니다.
shop_seoul = shop_2018_06.loc[shop_2018_06['도로명주소'].str.startswith('서울')]
▷서울 데이터에서 '구군' 별로 시각화
위에서 시각화 했던 것 처럼 shop_seoul.plot.scatter( x='경도', y='위도', hue='구군') 하게 되면 Error가 발생합니다.
plot에는 범례 속성이 없기 때문에 이번에는 seaborn 라이브러리를 사용합시다.
plt.figure(figsize=(16,12))
sns.scatterplot(data=shop_seoul, x='경도', y='위도', hue='구군')
out:::
▷서울 데이터를 '상권업종대분류명' 별로 시각화
plt.figure(figsize=(16,12))
sns.scatterplot(data=shop_seoul, x='경도', y='위도', hue='상권업종대분류명')
out::::
▷서울 데이터를 '상권업종대분류명' 에서 '학문/교육'에 관련된 정보만 시각화
shop_seoul_edu = shop_seoul.loc[shop_seoul['상권업종대분류명']=='학문/교육']
plt.figure(figsize=(16,12))
sns.scatterplot(data=shop_seoul_edu, x='경도', y='위도', hue='상권업종대분류명')
out::::
▷'학문/교육'에 속한 '상권업종중분류명' 별로 시각화
plt.figure(figsize=(16,12))
sns.scatterplot(data=shop_seoul_edu, x='경도', y='위도', hue='상권업종중분류명')
out::::
▷'학문/교육'에 속한 '상권업종중분류명' 에서 '학원-컴퓨터' 정보만 시각화
shop_seoul_edu_computer = shop_seoul[shop_seoul['상권업종중분류명']=='학원-컴퓨터']
plt.figure(figsize=(16,12))
sns.scatterplot(data=shop_seoul_edu_computer, x='경도', y='위도', hue='상호명')
out::::
▷folium 라이브러리 이용해서 '학원-컴퓨터' 정보만 시각화
import folium
data= shop_seoul_edu_computer
# 지도 위치를 데이터들의 위도와 경도의 평균으로 잡아줌
edu_map = foliium.Map(location=[data['위도'].mean(), data['경도'].mean()], zoom_start=12)
for i in data.index:
edu_name = data.loc[i, '상호명'] + '-' + data.loc[i, '도로명주소'] # 아이비씨에듀케이션 - 서울특별시 은평구 불광로 51
popup = folium.Popup(edu_name, max_width=500)
folium.Marker(location=[data.loc[i, '위도'], data.loc[i, '경도']], popup=popup).add_to(edu_map)
edu_map
out::::
여기까지 상권별 업종 밀집 통계 실습을 해보았습니다 :)
'빅데이터 인공지능 > 데이터분석' 카테고리의 다른 글
[데이터분석] ⑪ 지도 시각화 라이브러리 folium (0) | 2022.07.13 |
---|---|
[데이터분석] ⑩ 워드 클라우드(Word Cloud) (0) | 2022.07.12 |
[데이터분석] ⑨ 형태소 분석 (0) | 2022.07.11 |
[데이터분석] ⑧ 셀레니움(Selenium) (0) | 2022.07.11 |
[데이터분석] ⑦ 스크레이핑(Scraping) (0) | 2022.07.09 |
- Total
- Today
- Yesterday
- 프론트엔드
- 자바스크립트 기초
- 디프만
- 머신러닝
- TypeScript
- 파이썬
- frontend
- 리액트
- 타입스크립트
- 자바
- 리액트 훅
- rtl
- 데이터분석
- 자바스크립트
- 프론트엔드 기초
- 딥러닝
- testing
- next.js
- Python
- CSS
- 스타일 컴포넌트 styled-components
- styled-components
- react
- jest
- react-query
- 인프런
- JSP
- 프로젝트 회고
- 프론트엔드 공부
- HTML
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |