
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
def main get()
# 페이지 접근
url = "https://www.opinet.co.kr/searRgSelect.do"
driver = webdriver.Chrome()
driver.get(url)
# 3초간 머무르기
time.sleep(3)
# 팝업창으로 전환
driver.switch_to_window(driver.window_handles[-1])
# 창닫기
driver.close()
time.sleep(3)
# 메인 창으로 전환
driver.switch_to_window(driver.window_handles[-1])
# 접근 url 다시 요청
driver.get(url)
main get()
url = "https://www.opinet.co.kr/searRgSelect.do"
driver = webdriver.Chrome()
driver.get(url)

sido_list_raw = driver.find_element(By.ID, "SIDO_NM0")
sido_list_raw.text
# 하위 option 태그 가져오기
sido_list = sido_list_raw.find_elements(By.TAG_NAME, "option")
len(sido_list), sido_list[17].text
# 리스트에 도시 이름만 담기
sido_name = []
for option in sido_list:
sido_name.append(option.get_attribute("value"))
sido_name
gu_list_raw = driver.find_element(By.ID, "SIGUNGU_NM0")
gu_list = gu_list_raw.find_elements(By.TAG_NAME, "option")
gu_names = [option.get_attribute("value") for option in gu_list]
gu_names = gu_names[1:]
gu_names[:5], len(gu_names)
1) driver.find_element(By.CSS_SELECTOR, "#templ_list0 > div:nth-child(7) > div > a > span").click()
2) driver.find_element(By.XPATH, '//*[@id="templ_list0"]/div[7]/div/a/span').click()
3) element_get_excel = driver.find_element(By.CSS_SELECTOR, "#templ_list0 > div:nth-child(7) > div > a > span")
element_get_excel.click()
import time
from tqdm import tqdm_notebook
for gu in tqdm_notebook(gu_names):
element = driver.find_element(By.ID, "SIGUNGU_NM0")
element.send_keys(gu)
time.sleep(3)
element_get_excel = driver.find_element(By.XPATH, '//*[@id="templ_list0"]/div[7]/div/a/span').click()
time.sleep(3)
import pandas as pd
from glob import glob
glob("../data/지역_*.xls")
# 파일명 저장
station_files = glob("../data/지역_*.xls")
# 하나만 읽기
tmp = pd.read_excel(station_files[0], header=2)
# 모든 파일 읽기
tmp_raw = []
for file_name in station_files:
tmp = pd.read_excel(file_name, header=2)
tmp_raw.append(tmp)
tmp_raw
# concat 사용해서 붙이기
station_raw = pd.concat(tmp_raw)
데이터 확인 후 필요한 데이터만 정렬하기
# 구 이름만 뽑기 for eachAddress in stations["주소"]: print(eachAddress.split()[1])
가격 정보 없는 데이터 없애기
# 가격 정보가 있는 주유소만 사용 stations = stations[stations["가격"] != "-"] stations.tail() # object -> flaot 변경 stations["가격"] = stations["가격"].astype("float") # 인덱스 재정렬 stations.reset_index(inplace=True) stations.tail() # 인덱스 삭제 del stations["index"]
주유 가격 정보 시각화
import
import matplotlib.pyplot as plt import koreanize_matplotlib import seaborn as sns import platform %matplotlib inline from matplotlib import font_manager, rc font_path = "C:/Windows/Fonts/malgun.ttf" font = font_manager.FontProperties(fname = font_path).get_name() rc('font', family = font)# boxplot(feat. pandas)
# boxplot(feat. seaborn)
# boxplot (feat. seaborn)
지도 시각화
import
- import warnings : 오류 문구 무시하기
import json import folium import numpy as np import warnings warnings.simplefilter(action="ignore", category=FutureWarning)각 구마다 평균 가격 지도 시각화
# 피봇하기 gu_data = pd.pivot_table(data=stations, index="구", values="가격", aggfunc=np.mean) # 지도 시각화 geo_path = "../data/02. skorea_municipalities_geo_simple.json" geo_str = json.load(open(geo_path, encoding="utf-8")) my_map = folium.Map(location=[37.5502, 126.982], zoom_start=10.5, tiles="OpenStreetMap") my_map folium.Choropleth( geo_data = geo_str, data = gu_data, columns = [gu_data.index, "가격"], key_on="feature.id", fill_color="PuRd" ).add_to(my_map) my_map
“이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.”