Development Project

[ 2021 NIPA AI - 기본 ] 3. 공공데이터를 활용한 파이썬 데이터분석 프로젝트 - 4. 유가 데이터를 활용한 주유소 시장 분석 본문

AI/Edu

[ 2021 NIPA AI - 기본 ] 3. 공공데이터를 활용한 파이썬 데이터분석 프로젝트 - 4. 유가 데이터를 활용한 주유소 시장 분석

나를 위한 시간 2021. 12. 16. 20:04

// gg...

 

=> 주유소별로 7일치씩 쌓여있는 데이터를 요약하여 주유소별로 1개의 행이 되도록 각 년도 데이터를 가공

=> 이 데이터를 통해 지난 4년동안 몇개의 주유소가 개업 및 폐업 했는지 분석

=> 브랜드별 가격경쟁력 및 지난 4년간 시장 점유율 변화를 분석

=> 주유소별 가격 편차가 어느정도 되는지 알아보고, 지역별로도 유의미한 차이가 있는지 분석

데이터 출처 : https://www.data.go.kr/data/15044628/fileData.do

 

한국석유공사_제품별 주유소 판매가격_일간_20210113

전국 주유소 판매가격의 산술 평균

www.data.go.kr

 

[Project 1] 유가 데이터를 활용한 주유소 시장분석

  1.  데이터 Cleansing 및 Feature Engineering
    1. 18년 데이터 기준 데이터 점검 및 Cleansing
      • import 및 초기설정
        • import numpy as np 
          import pandas as pd 
          import seaborn as sns
          sns.set_style('darkgrid')
          import matplotlib.pyplot as plt
          import matplotlib.font_manager as fm
          
          font_dirs = ['/usr/share/fonts/truetype/nanum', ]
          font_files = fm.findSystemFonts(fontpaths=font_dirs)
          for font_file in font_files:
              fm.fontManager.addfont(font_file)
          
          plt.rcParams['font.family'] = 'NanumBarunGothic'
          plt.rcParams['axes.unicode_minus']=False
      • 불러오기 [ read_csv("경로") ]
        • f18 = pd.read_csv(f'./data/과거_판매가격(주유소)_2018.csv')
      • 정보 출력 [ .head() ]
        • f18.head()
      • 열 제거 [ .drop(index) ]
        • # 0번 row 제거
          f18 = f18.drop(0) 
          f18.head()
           
      • null값 판단
        • # 변수별 null값 확인 결과 null 없음
          f18.isna().sum()
      • 결과 확인
        • # include='all': 카테고리형 변수도 정보 제공
          f18.describe(include='all')

          - - - - - - - = describe 점검 포인트 = - - - - - - -
          ① 기간이 수치로 인식되고 있음
          ② unique 지역 개수가 229이어서 너무 많음
          ③ 휘발유 min이 0임
          ④ unique 상표 개수가 9개이므로 적절함
          ⑤ unique 셀프여부 개수가 2개이며, 셀프여부는 각각 절반정도 비중을 차지함
          ⑥ unique 번호가 11673개이며 최대 7개까지 기록

        • 수정
          1. 기간이 수치로 인식되고 있음 => 기간을 datetime 형태로 변환
            • f18['기간'] = f18['기간'].apply(lambda x:pd.to_datetime(str(int(x))))
          2. unique 지역 개수가 229이어서 너무 많음 => 지역 변수 중 첫 지역 구분만 컬럼 형성
            • region_len = f18['지역'].apply(lambda x: len(x.split())) 
              print(f"min: {min(region_len)},max: {max(region_len)}")
            • f18['지역2'] = f18['지역'].apply(lambda x:x.split()[0])
              import collections
              collections.Counter(f18['지역2'])
          3. 휘발유 min이 0임 == 0인 열을 확인 후 제거
            • # 휘발유값 0인 ROW 확인
              f18.loc[f18['휘발유']==0].head(10)
            • f18.loc[f18['번호']=='A0010629']
Comments