본문 바로가기
📂 프로젝트/◾ 국비지원 1차

[1차 프로젝트] 전국 주유소 현황 분석 (1) (개발자 취업코스, 국비 지원, 데이터 다루기)

by 이 정규 2023. 2. 7.
728x90
반응형
반응형

Python 프로그래밍 기초와 데이터 수집 및 시각화 과목을 들은 후 1차 프로젝트를 진행했다. 강사님 임의로 정한 팀원들과 주제를 선정하는 과정에서 의견이 맞지 않았다. 좋은게 좋은거라 생각하고 목소리가 큰 팀원의 말대로 주유소 관련 분석을 진행하기로 결정했다. 우선 주유소 이름, 주소, 유가 정보를 데이터 수집 대상으로 정했다. 수집 방법으로는 Selenium을 이용하여 오피넷(www.opinet.co.kr)의 지역별 싼 주유소 찾기에서 지역 목록을 자동으로 바꿔가며 크롤링하기로 정했다. 프로젝트가 끝나고서 알았지만 오피넷에는 수집 대상인 데이터가 Open API로 제공되고 있었다.

chromepath="/Users/zzgr/Desktop/zzgrSandaeteuk/PROJECT01/chromedriver"


driver = webdriver.Chrome(service=Service(chromepath))

driver.get("http://www.opinet.co.kr/searRgSelect.do")
driver.get("http://www.opinet.co.kr/searRgSelect.do")

city= driver.find_element(By.XPATH,"""//*[@id="SIDO_NM0"]""")
time.sleep(1)
city_list = city.find_elements(By.TAG_NAME,"option")
city_names = []
for option in city_list:
    city_names.append(option.get_attribute("value"))
city_names.remove('')

# select = Select(city)
for i in city_names:
    city= driver.find_element(By.XPATH,"""//*[@id="SIDO_NM0"]""")
    city.send_keys(i)
    time.sleep(1)
    gu_list_raw = driver.find_element(By.XPATH,"""//*[@id="SIGUNGU_NM0"]""")
    time.sleep(1)
    gu_list = gu_list_raw.find_elements(By.TAG_NAME,"option")

    gu_names = []
    for option in gu_list:
        gu_names.append(option.get_attribute("value"))      
    gu_names.remove('')
    
    # select = Select(gu_list_raw)
    for j in gu_names:
        gu_list_raw = driver.find_element(By.XPATH,"""//*[@id="SIGUNGU_NM0"]""")
        time.sleep(3) 
        gu_list_raw.send_keys(j)
        time.sleep(3)
        xpath = """//*[@id="glopopd_excel"]"""
        driver.find_element(By.XPATH,xpath).click()
        
time.sleep(1)
driver.close()

로컬에서 데이터를 수집하다보니 시간이 매우 오래 걸렸지만 코드가 작동하는데 문제는 없었다. 수집한 데이터를 가공하기 위하여 Pandas를 이용하여 지역, 상호, 주소, 상표, 전화번호, 셀프여부, 고급휘발유, 휘발유, 경유, 실내등유를 칼럼명으로 설정하였다.

# glob을 이용해 파일명을 불러와 내용을 리스트에 담는다.
files = glob.glob("/Users/zzgr/Desktop/zzgrSandaeteuk/Datas")
file = []
for i in files:
    file.append(pd.read_excel(i))

# concat을 이용해 지역별로 분산되어 있던 데이터를 합친다.
df = pd.concat(file)

# 결측치가 있거나 같은 내용이 있는 데이터를 삭제한다.
df.reset_index(drop=True,inplace =True)
df = df.dropna()
df = df.drop_duplicates()

# 데이터프레임에 칼럼을 설정한다.
df.columns = ["지역","상호","주소","상표","전화번호","셀프여부","고급휘발유","휘발유","경유","실내등유"]

이로써 Selenium을 통해 수집한 데이터를 데이터프레임 형태로 저장했다. 다음으로는 데이터 시각화에 대한 부분을 정리하겠다.

728x90
반응형

댓글