[강의 요약]
[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일반 강의 자료 일부를 발췌하여 작성되었습니다.”
'제로베이스 데이터 취업 파트타임 > 100일 챌린지_일일 학습 일지' 카테고리의 다른 글
제로베이스 데이터 파트타임 스쿨 학습 일지 [25.05.19] (0) | 2025.05.19 |
---|---|
제로베이스 데이터 파트타임 스쿨 학습 일지 [25.05.18] (0) | 2025.05.18 |
제로베이스 데이터 파트타임 스쿨 학습 일지 [25.05.16] (3) | 2025.05.16 |
제로베이스 데이터 파트타임 스쿨 학습 일지 [25.05.15] (1) | 2025.05.15 |
제로베이스 데이터 파트타임 스쿨 학습 일지 [25.05.14] (0) | 2025.05.14 |