이번 주는 파이썬 데이터 시각화 프로젝트 몇 가지와 SQL에 대한 내용, R의 기본 지식까지가 범위였다. 파이썬은 조금 길게 했다지만 SQL은 이틀~삼일 만에 끝내는 빡센 일정이었지만, 이전에 했던 것을 복습해볼 수 있는 좋은 기회였던 것 같다.
What I learned this week
오늘은 파이썬 마지막 프로젝트인 '상권 분석' 에 대해 내가 주제를 정하여 진행해보려고 한다.
내가 진행해볼 주제는 '전국 카페 현황' 이다.
데이터는 공공데이터개방포털 에서 소상공인시장진흥공단_상가(상권)정보를 2021년 9월 것으로 다운받았다.
1. 필요한 라이브러리 임포트
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.family']='AppleGothic'
plt.rcParams['axes.unicode_minus']=False
그래프 그릴 때 필요한 라이브러리들이랑, pyplot에서 한글이 깨지지 않도록 해주는 폰트를 다운받아준다.
제일 아래줄 코드는 마이너스 기호가 깨지는 것을 막기 위해 넣는다.
2. 데이터 불러와서 하나로 합치기
df1 = pd.read_csv('data/소상공인시장진흥공단_상가(상권)정보_강원_202109.csv')
df2 = pd.read_csv('data/소상공인시장진흥공단_상가(상권)정보_경기_202109.csv')
df3 = pd.read_csv('data/소상공인시장진흥공단_상가(상권)정보_경남_202109.csv')
df4 = pd.read_csv('data/소상공인시장진흥공단_상가(상권)정보_경북_202109.csv', low_memory=False)
df5 = pd.read_csv('data/소상공인시장진흥공단_상가(상권)정보_광주_202109.csv', low_memory=False)
df6 = pd.read_csv('data/소상공인시장진흥공단_상가(상권)정보_대구_202109.csv', low_memory=False)
df7 = pd.read_csv('data/소상공인시장진흥공단_상가(상권)정보_대전_202109.csv')
df8 = pd.read_csv('data/소상공인시장진흥공단_상가(상권)정보_부산_202109.csv')
df9 = pd.read_csv('data/소상공인시장진흥공단_상가(상권)정보_서울_202109.csv')
df10 = pd.read_csv('data/소상공인시장진흥공단_상가(상권)정보_세종_202109.csv')
df11 = pd.read_csv('data/소상공인시장진흥공단_상가(상권)정보_울산_202109.csv')
df12 = pd.read_csv('data/소상공인시장진흥공단_상가(상권)정보_인천_202109.csv')
df13 = pd.read_csv('data/소상공인시장진흥공단_상가(상권)정보_전남_202109.csv')
df14 = pd.read_csv('data/소상공인시장진흥공단_상가(상권)정보_전북_202109.csv')
df15 = pd.read_csv('data/소상공인시장진흥공단_상가(상권)정보_제주_202109.csv')
df16 = pd.read_csv('data/소상공인시장진흥공단_상가(상권)정보_충남_202109.csv')
df17 = pd.read_csv('data/소상공인시장진흥공단_상가(상권)정보_충북_202109.csv')
df = pd.concat([df1,df2,df3,df4,df5,df6,df7,df8,df9,df10,df11,df12,df13,df14,df15,df16,df17], ignore_index = True)
df
3. 데이터 확인
# 데이터 확인
df.info()
# 분석에 필요한 컬럼만 추출
df_store = df[['상호명','상권업종대분류명','상권업종중분류명','상권업종소분류명','시도명','시군구명','행정동명','법정동명','경도','위도']].copy()
데이터를 확인해보니 총 39개의 컬럼이 있다. 분석에 필요한 컬럼만 추출한다.
추출하고 확인해보니 불필요한 열들은 사라지고, 깔끔하게 정리되어 나온 것을 확인할 수 있다.
4. 결측치 확인
df_store.isnull().sum()
결측치 확인해보았는데, 상호명, 행정동명, 법정동명에 결측치가 존재
# 행정동명과 법정동명 둘 다에 결측이 있는 경우
df_store[(df_store['행정동명'].isnull()) &(df_store['법정동명'].isnull())]
확인해보니 군 단위 지역이었다. 군 단위 지역은 동이 존재하지 않으므로, 결측이 있는 것으로 판단된다.
그런데 행정동명과 법정동명의 결측치의 갯수가 다르므로 더 적은 결측이 존재하는 '법정동명' 의 결측 갯수를 시도명으로 확인해보았다 .
# 어떤 시도에 법정동명 결측치가 존재하는건지?
df_null = df_store[df_store['법정동명'].isnull()]
df_null['시도명'].value_counts()
서울특별시에는 '법정동명' 결측이 하나도 존재하지 않으므로 이후 '법정동명'을 기준으로 시각화할 때 서울시만 한정해서 해보면 좋을거 같다는 생각이 든다.
결측을 확인해보았는데 우리가 분석할 때 문제가 될만한 결측은 존재하지 않아서, 따로 처리하지 않고 넘어갔다.
5. 데이터 전처리
카페 데이터를 뽑으려고 상권업종소분류명에 커피가 들어가 있는 데이터만 뽑아서 확인했다.
df_store_seoul[df_store_seoul['상권업종소분류명'].str.contains('커피')]
아무래도 상권업종소분류명이 커피전문점/카페/다방으로 들어가 있으면 카페인 것 같아 확인해보니 역시 카페만 뽑히는 것을 알 수 있다.
df_cafe['상권업종소분류명'].unique()
그래서 아래와 같이 상권업종소분류명을 기준으로 카페 데이터만 추출해서 df_store_cafe라는 데이터프레임에 넣어주었다.
df_store_cafe = df_store_seoul[df_store_seoul['상권업종소분류명'].str.contains('커피전문점/카페/다방')]
6. 시각화
* 전국 카페 현황
시도명으로 카페 갯수를 세기 위해, value_counts() 함수를 이용하여 갯수를 세고, pyplot의 bar 그래프로 시각화해보았다.
# 전국 카페 현황
df_store_sido = df_store['시도명'].value_counts()
plt.figure(figsize = (23,8))
plt.bar(df_store_sido.index, df_store_sido.values, color ='y')
plt.title('전국 카페 현황', size = 20)
plt.show()
경기도가 면적이 크고 인구 수가 제일 많은 만큼 카페가 제일 많다는 것을 알 수 있다. 그 다음은 서울특별시였다.
* 서울시 구별 카페 현황
마찬가지로 서울특별시의 구별 카페 현황을 시각화해보았다.
df_store_seoul = df_store[df_store['시도명'] == '서울특별시']
df_store_cafe_value = df_store_cafe['시군구명'].value_counts()
plt.figure(figsize = (18,5))
plt.bar(df_store_cafe_value.index, df_store_cafe_value.values, color ='g')
plt.title('서울시 구별 카페 현황', size = 20)
plt.show()
* 서울시 법정동별 카페 현황 (서브플롯)
서울시는 법정동에 결측이 없으므로, 법정동별로 시각화를 해볼 수 있을 것 같아 시각화를 진행했다.
서브 플롯을 그려서 한쪽에는 바 그래프, 한쪽에는 파이 그래프로 시각화를 해보겠다.
fig = plt.figure(figsize = (18,5))
plt.subplot(121)
plt.bar(df_store_dong.index, df_store_dong.values, color ='y')
plt.subplot(122)
plt.pie(df_store_dong.values, labels = df_store_dong.index, autopct = '%.1f%%' )
fig.suptitle('서울시 법정동별 카페 현황 TOP 10', size = 20)
fig.tight_layout()
plt.show()
서브플롯을 그리는 방법은 여러가지 방법이 있지만 그 중에서도 나는 제일 간단한게 그리는 방법을 택했다.
성수가 카페로 유명하다 보니 성수에 제일 카페가 많을 줄 알았는데, 역삼동이 제일 많군..
이렇게 전국 카페 현황 시각화를 진행해보았다!
What I did well this week
이 부트캠프를 다니다 보니, 나라는 사람이 좀 더 부지런해지고 자신감이 생긴 것 같다.
부트캠프 자체가 기초부터 알려주는 내용이다보니 다소 기초가 부족했던 나의 비어있는 부분을 채울 수 있는 시간이었다.
그래서 이전처럼 파이썬을 잘 다루지 못해 구글링을 하나하나 해가며 찾아가는 모습이 거의 사라졌다. ㅎㅎ
물론 반복학습의 효과이기도 하지만!
앞으로
내가 지금까지 힘들게 쌓은 기초를 잊어버리지 않기 위해서는 꾸준히 해보는 것 밖에 답이 없다고 생각한다. 그래서 강사님이 다루지 않은 프로젝트들을 내 힘으로 주제를 세우고 찾아서 해보면 굉장히 좋을거 같다는 생각이 들었다.
매주 진행하지는 못하더라도 2주에 하나씩 해보는 형식으로 진행해보려고 한다.
* 유데미 큐레이션 바로가기 : https://bit.ly/3HRWeVL
* STARTERS 취업 부트캠프 공식 블로그 : https://blog.naver.com/udemy-wjtb
본 후기는 유데미-웅진씽크빅 취업 부트캠프 4기 데이터분석/시각화 학습 일지 리뷰로 작성되었습니다.
'유데미 스타터스' 카테고리의 다른 글
유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 6주차 학습일지 (0) | 2023.03.19 |
---|---|
유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 5주차 학습일지 (0) | 2023.03.12 |
유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 4주차 학습 일지 (1) | 2023.03.05 |
유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 3주차 학습 일지 (0) | 2023.02.26 |
유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 1주차 학습 일지 (0) | 2023.02.12 |