본문 바로가기
공부zip./데이터사이언스

[패스트캠퍼스 국비지원교육 개발노트] 데이터분석 인강_week 3.2_(데이터 불러오기-구경하기-비교하기-시각화하기)

by 혜이블 2022. 3. 18.

3주 차 이론 공부는 끝이 났는데, 파이썬에 실제 데이터를 가져와서 분석을 해보는 시간이 있었다!

따로 기록해 놓고 싶어서 이렇게 새로운 글을 만들었다.


목차.

더보기
  1. 데이터 불러오기
    • 파일 한 번에 불러오기
    • 분석에 필요한 column 고르기
    • 불필요한 메모리 지워주기
  2. 데이터 구경하기
    • 카페만 뽑아내기
  3. 커피전문점 별 비율 비교하기(주요 브랜드 위주)
    1. 전체 커피전문점 내 주요 커피브랜드 입점 비율
    2. 서울 커피전문점 내 주요 커피브랜드 입점 비율
    3. 각 커피브랜드 별 서울 입점 비율
    4. 각 구별로 스타벅스가 얼마나 있는지 확인하기
  4. 시각화, 더 예쁘게!

 

제목은 : 공공데이터를 이용한 카페 상권분석(2020 ver.)

     > 공공데이터 포털 : www.data.go.kr 

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

www.data.go.kr

     > 업종 분류 중 '카페' 현황 조사 예정
     > 어떻게? 
          1. 전국 카페 데이터를 모두 수집한다!
          2. 지역별 or 브랜드별 점포 현황을 확인한다!
          3. 분석 결과를 시각화한다!

     > TMI
          # csv = comma separated value
          # csv 파일 엑셀에 여는 방법 -- 개발자x 일반 사용자의 경우 csv파일 엑셀에 바로 열면 깨지기 때문
             (예전에 인턴 하다가 배웠을 때랑 다름)
               (1) 엑셀 실행 → [데이터] → [텍스트]
               (2) 가져올 파일 선택 → 확인
               (3) 콤보 박스에서 적절한 코드 타입이 선택됐는지 확인
                   (UTF-8 코드 페이지 넘버 : 65001)
               (4) 원본 데이터 파일 유형 : [구분 기호로 분리됨] 선택
               (5) [기타] 선택 → ' | ' (파이프) 입력
                   3단계 텍스트로 선택
                   ㄴ 지번 코드, 건물관리번호 등 행마다 [텍스트] 선택


1. 데이터 불러오기 : 

ParserError

          # pandas 라이브러리 불러오기를 먼저 하고 데이터를 불러오는데 에러 뜸
          # ParserError란? 
             = '파일을 열어봤는데, 깨졌다'
             왜? 
             = csv 파일은 comma로 나눠졌다는 뜻인데, 파일을 엑셀에서 확인해 보니
                ' | (파이프)'로 나눠져 있었음

        temp = pd.read_csv("C:\\Users\\chuni\\Downloads\\facam_files\\data\\소상공인시장진흥공단_상가(상권)정보_서울
                   _202012.csv", sep='|', encoding='utf-8')
        temp

밑에 데이터 더 있음

 

     ㅇ 파일 한 번에 불러오기
         (같은 형식이어야 함)

한 번에 불러오기!

          # 지정된 폴더에 있는 모든 csv 파일 읽어오기 : from glob import glob 
          # csv 목록 불러오기 : file_names = glob("파일경로\\*.csv")
             ' * '으로 모든 이름 불러옴

*의 위엄

          # 모든 csv 병합하기 → 빈 DataFrame을 만들어서 넣어주기 :

        total = pd.DataFrame()
        for file_name in file_names:
            temp = pd.read_csv(file_name, sep='|', encoding='utf-8')
            total = pd.concat([total, temp])         → total+temp 합치기! 진짜 그냥 다 붙인 데이터가 됨
                                                                    problem = index도 다 독립적임(나중에 indexing을 못 씀)

        total.reset_index(inplace=True)              → index 리셋을 해줌으로 새롭게 각 데이터에 index를 줌!
        total

빨갛게 떠도 기다려주기 아직 로딩 중임 → In [*]에서 확인 가능
index란을 사실 넣어줌

 

     ㅇ 분석에 필요한 column 고르기 :

        data = total[['상호명', '지점명', '상권업종대분류명', '상권업종중분류명', '시도명', '시군구명', '행정동명']]
        data

          # total.info( ) , data.info( )를 입력해서 파일 크기 확인 가능


     ㅇ 불필요한 메모리 지워주기
             del 데이터 이름

del


2. 데이터 구경하기 : 

     ㅇ 카페만 뽑아내기

          1) 전국 커피 전문점 : 

               # 커피점/카페가 어느 분류에 있는지 찾아봐야 했다 set(data["'상권업종중분류명"])
               # 행별 index번호가 뒤죽박죽이기 때문에 다시 세팅해줘야 함
                  df_coffee.index = range(len(df_coffee))
               # 그냥 df_coffee 프린트하면 다 나오지만, 너무 많아서 .head( )를 붙여줘서 상위 5개만 보기 한 거
               # '지점명'이 있는 친구는 = 프랜차이즈 // 없으면 개인 카페

          1-1) 서울                = '카페' 중 '서울'에 위치
                ㄴ [전국 커피 전문점]과 같은데 조금 더 추가

        df_seoul_coffee = data[(data["상권업종중분류명"] == "커피점/카페") (data["시도명"] == "서울특별시")]
        df_seoul_coffee.index = range(len(df_seoul_coffee))          → 새로 indexing 해주기
        print('서울시 내 커피 전문점 점포 수 :', len(df_seoul_coffee))
        df_seoul_coffee


          2) 전국 스타벅스 : 
              ㄴ [상호명]에서 찾을 수 있음

          df_starbucks = df_coffee[df_coffee["상호명"].str.contains("스타벅스")]   → 스타벅스가 포함되어있는 란
          df_starbucks.index = range(len(df_starbucks))         → 새로 indexing 해주기
          print('전국 스타벅스 점포 수 :', len(df_starbucks))
          df_starbucks

          2-1) 서울 스타벅스 : 
                = 위에 구한 df_starbucks의 시도명 = 서울특별시

 

이젠 노가다 타임 :)
이름만 바꿔주면 됨


          3) 전국 이디야 :

          3-1) 서울 이디야 : 

          # 전국의 스타벅스(1613개), 이디야(2238개) 점포 수를 처음 보았음
             = 이디야 점포 수가 데이터상 훨씬 많다는 것을 깨달음...!
          # 근데 서울 내에는 스타벅스(509개), 이디야(474개)로 스타벅스 점포 수가 더 많음


          4) 전국 커피빈 : 

          4-1) 서울 커피빈 : 

          # 원래 스타벅스와 경쟁 카페였는데 스타벅스한테 졌음


          5) 전국 투썸 : 

          5-1) 서울 투썸 : 


          6) 전국 빽다방 : 

          6-1) 서울 빽다방 : 


          7) 전국 할리스 : 

          7-1) 서울 할리스 : 


          8) 전국 메가커피 : 

          8-1) 서울 메가커피 : 


3. 커피전문점 별 비율 비교하기 (주요 브랜드 위주) :

     [한국기업평판연구소] 2020년 1월 빅데이터 분석 결과 1~5위 커피전문점 브랜드 :
          (1) 스타벅스
          (2) 투썸플레이스
          (3) 이디야
          (4) 메가커피
          (5) 커피빈

더보기

[2. 데이터 구경하기]에서 만든 변수들 모음 : 

  • 전체 점포 :                      data
  • 전체/서울 커피전문점 :      df_coffee          / df_seoul_coffee
  • 전체/서울 스타벅스 :         df_starbucks      / df_seoul_starbucks
  • 전체/서울 이디야 :            df_ediya           / df_seoul_ediya
  • 전체/서울 커피빈 :            df_coffeebean   / df_seoul_coffeebean
  • 전체/서울 투썸플레이스 :   df_twosome      / df_seoul_twosome
  • 전체/서울 빽다방 :            df_bbaek          / df_seoul_bbaek
  • 전체/서울 할리스 :            df_hollys           / df_seoul_hollys
  • 전체/서울 메가커피 :         df_megacoffee   / df_seoul_megacoffee

 

     ㅇ 전체 커피전문점주요 커피 브랜드 입점 비율

          주요 5대 커피 브랜드별 전국 입점 비율 = 5.098%
          1. 스타벅스 : 1.419%
          2. 투썸플레이스 : 1.003%
          3. 이디야 : 1.968%
          4. 메가커피 : 0.423%
          5. 커피빈 : 0.285%

          # 비율이 되게 적어 보이는 건 당연! 
          # 우리나라 개인 카페가 매우 많음 (카페 boom 일어났을 때 특히 더 그랬으니 그럴 만도!)

     ㅇ 서울 커피전문점주요 커피 브랜드입점 비율

          1. 스타벅스 : 2.289%
          2. 이디야 : 2.131%
          3. 커피빈 : 0.859%
          4. 투썸플레이스 : 1.286%
          5. 빽다방 : 0.580%
          6. 할리스 : 0.899%
          7. 메가커피 : 0.387%

          #  근데 왜 스타벅스는 우리 뇌리에 박혔을까? (추후 정성적/인식 평가로 넘어감)

     ㅇ 각 커피 브랜드서울 입점 비율

          주요 5대 커피 브랜드별 서울 입점 비율 : 
          1. 스타벅스 : 31.556%
          2. 투썸플레이스 : 25.066%
          3. 이디야 : 21.180%
          4. 메가커피 : 17.879%
          5. 커피빈 : 58.951%

          # 커피빈은 '서울'에 몰빵 해놨다고 생각하면 됨

     ㅇ 각 구별로 스타벅스가 얼마나 있는지 확인하기

starbucks_gu = df_seoul_starbucks.groupby('시군구명')['상호명'].count().to_frame().sort_values(by='상호명', ascending=False)
starbucks_gu = starbucks_gu.reset_index()
starbucks_gu = starbucks_gu.set_index('시군구명')
starbucks_gu
ㄴ 배운건 아님...


4. 시각화, 더 예쁘게! : 

     ㅇ 시각화를 위한 라이브러리 불러오기

seaborn

          # 이건 따로 배운건 아니다..!

     ㅇ 운영체제별 글꼴 세팅

     ㅇ 주요 5대 커피 브랜드 서울 입점 비율을 시각화

barplot

     ㅇ 서울 커피전문점 내 주요 5대 커피 브랜드 입점 비율을 시각화 

 

print("to be continued...")

댓글