Hayoung Jeong
Hayin
Hayoung Jeong
전체 방문자
오늘
어제
  • 분류 전체보기
    • 유데미 스타터스
    • SQL

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 유데미
  • 태블로
  • 부트캠프후기
  • 유데미코리아
  • 데이터분석
  • 유데미부트캠프
  • 취업부트캠프
  • 태블로시험
  • 스타터스부트캠프
  • 데이터시각화

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Hayoung Jeong

Hayin

유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 2주차 학습 일지
유데미 스타터스

유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 2주차 학습 일지

2023. 2. 19. 19:00

이번 주는 파이썬 데이터 시각화 프로젝트 몇 가지와 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
    '유데미 스타터스' 카테고리의 다른 글
    • 유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 5주차 학습일지
    • 유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 4주차 학습 일지
    • 유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 3주차 학습 일지
    • 유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 1주차 학습 일지
    Hayoung Jeong
    Hayoung Jeong

    티스토리툴바