제로베이스 데이터 파트타임 스쿨 학습 일지 [25.05.17]

[강의 요약]

[Part 04. EDA/웹 크롤링/파이썬 프로그래밍_ Ch 05. 유가 분석] 강의 수강

클립 11~18까지 강의 수강하였음

18_실습 - 주유가격 시각화까지

🐢 100일 챌린지 🔥 : [▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰                                       ] 62/100일 (62%)

 

 

 

[클립 11~18까지 정리]

▶ 주유소 가격 분석 실습

      • 실습 목표
        • 서울시 모든 구의 주유소 가격 정보를 수집하여
        • 셀프 주유소가 정말 저렴한지 확인하기 위한 분석 진행
      • 사용할 도구
        • Selenium, pandas, matplotlib

 

 

▶ 1. 웹 구조 분석 + 자동화 설계

  • 자동화 대상
    • SIDO_NM0 : 광역시도 드롭다운 (예: 서울)
    • SIGUNGU_NM : 시/군/구 드롭다운 (예: 강남구)
    • glopopd_excel : 엑셀 다운로드 버튼

 

  • 구조적 특징
    • 주소(URL)가 바뀌지 않음 → Selenium 필수
    • 사용자가 선택을 클릭해야만 데이터가 바뀜
    • BeautifulSoup으로는 불가능한 구조

 

 

▶ 2. 셀레니움으로 지역 선택 및 엑셀 다운

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
import time

# 크롬 드라이버 실행
driver = webdriver.Chrome('./driver/chromedriver')
driver.get('https://www.opinet.co.kr/searRgSelect.do')
time.sleep(2)

# 서울 선택
sido_select = Select(driver.find_element(By.ID, 'SIDO_NM0'))
sido_select.select_by_visible_text('서울')
time.sleep(1)

# 시/군/구 목록 불러오기
gu_select = Select(driver.find_element(By.ID, 'SIGUNGU_NM'))
gu_list = [option.text for option in gu_select.options if option.get_attribute('value')]

 

반복문으로 구 선택 + 엑셀 저장

for gu in gu_list:
    gu_select = Select(driver.find_element(By.ID, 'SIGUNGU_NM'))
    gu_select.select_by_visible_text(gu)
    time.sleep(1)

    driver.find_element(By.ID, 'glopopd_excel').click()
    time.sleep(2)

반복문을 돌며 25개 구의 엑셀 파일을 모두 다운로드함

 

 

▶ 3. 다운로드 파일 정리 및 pandas 처리

다운로드된 파일 목록 가져오기

import os
import pandas as pd

folder = './data'
files = os.listdir(folder)
files = [file for file in files if file.endswith('.xls')]

 

파일들을 하나로 합치기

df_list = []
for file in files:
    data = pd.read_excel(os.path.join(folder, file), header=2)
    df_list.append(data)

df = pd.concat(df_list)

 

원하는 컬럼만 추출

df = df[['지역', '상호', '주소', '상표', '셀프여부', '휘발유']]

 

 

▶ 4. 데이터 전처리

가격 컬럼 → 숫자로 변환

df = df[df['휘발유'] != '-']
df['휘발유'] = df['휘발유'].str.replace(',', '')
df['휘발유'] = df['휘발유'].astype(float)

 

구 정보 추출

df['구'] = df['주소'].apply(lambda x: x.split()[1])

 

셀프 여부 정리

df['셀프여부'] = df['셀프여부'].map({'Y': '셀프', 'N': '일반'})

 

 

▶ 5. 데이터 시각화

Boxplot으로 비교

import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(12, 6))
sns.boxplot(x='구', y='휘발유', hue='셀프여부', data=df)
plt.xticks(rotation=90)
plt.title('서울시 구별 셀프/일반 주유소 가격 비교')
plt.show()
  • 가격 분포를 한눈에 확인 가능
  • 특정 구에서 셀프가 항상 저렴하지 않음을 확인 가능

 

 

 

[나의 생각 정리]

이 실습을 통해 웹 자동화 → 데이터 수집 → 분석 및 시각화까지 하나의 데이터 분석 프로젝트 흐름을 알 수 있었다.

 

 

[적용점]

데이터 분석에서 사용

 

 

“이 글은 제로베이스 데이터 스쿨 주 3일반 강의 자료 일부를 발췌하여 작성되었습니다.”