티스토리 뷰

데이터분석 프로젝트 : 전기차 데이터를 활용한 분석 데이터 제공

시행 목적 

전기차를 구입하려는 사용자가 필요로 하는 정보를 제공하기 위해 전기차 데이터를 수집 하고
이를 데이터 베이스로 구축한다 . 
수집된 데이터를 시각화 하여 제공할 수 있게 하고, 데이터를 분석하여 향후 전기차의 전망에 대해 예측한다. 

나의 역할

1. [크롤링] 데이터 크롤링 두가지 하기 

2. [정제] 전체차종의 보조금 데이터에서 인기차종의 데이터를 추출하여 연도별 인기차종의 보조금 합계구하기 

3. [시각화] 지역별 인기차량의 판매량 데이터를 이용한 등치지도 그래프 작성 

4. [시각화] 지역별 충전소 설치현황 데이터를 이용하여 등치 지도 그래프를 작성

필요한 데이터 

1. 타고 홈페이지에서 인기차종 (판매대수 데이터프레임: pop_car_df) 를 크롤링 하기 

2. 타고 홈페이지에서 자동차 보조금 (자동차 보조금 데이터프레임 : price_car_df) 를 크롤링하기

 

이번 글에서는 [ 1. 데이터 크롤링 두가지 중 첫번째 ]를 설명합니다.   

1. 인기차종 (pop_car_df.ipynb) : (판매대수 데이터프레임 : pop_car_df)

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import warnings

from urllib.request import urlopen
from bs4 import BeautifulSoup as soup
from collections import Counter

warnings.filterwarnings(action='ignore')
plt.rcParams['font.family']='Gulim'

 

본격적인 코드 시작 전에 import 를 위와 같이 실시하였습니다. 

그리고  타고 홈페이지에서 인기차종 페이지를 살펴봅니다 ! 

인기차종 페이지

 

F12 를 눌러서 html을 확인하면 다음과 같습니다. 

 

표가 table 로 들어가 있음을 확인 하였습니다. 

판매 연도는 위에 테이블 위에 <h5> 태그의 class가 보입니다! 이걸 활용하였습니다. 

 

target="https://tago.kr/model/order.htm" # 차량 인기순위 파악 주소 
html = urlopen(target)
bs = soup(html.read(),'html.parser')

list_cars = bs.find_all('table')

 

list_cars에 table 태그의 html을 받아왔습니다. 

실제로 list_cars를 확인해보면 아래와 같이 출력됩니다.

 

target="https://tago.kr/model/order.htm" # 차량 인기순위 파악 주소 
html = urlopen(target)
bs = soup(html.read(),'html.parser')

list_cars = bs.find_all('table')

j=0

pop_car_df=pd.DataFrame()

for list_car in list_cars:
    j=j+1
    for i in list_car.find_all('tr')[1:]:
        year = bs.find_all('h5',attrs={"class":"h5-tit"}) //h5태그에 저장된 판매년도 부분
        year_num=(year[j-1].get_text()[0:4]) #year // 판매년도 부분에서 숫자 부분만 슬라이스
        car_name=(i.find_all('td')[1].text) #차종 
        amount=(i.find_all('td')[2].text) #판매량 
        pop_car_df = pd.concat([pop_car_df,pd.DataFrame({"Car_name":[car_name],"판매량":[amount],"Year":[year_num]})])
        
pop_car_df=pop_car_df.reset_index()
pop_car_df = pop_car_df[['Year','Car_name','판매량']]# 데이터 프레임 열 순서 변경

 

테이블의 각 데이터는 <tr>을 기준으로 구분됩니다. 

두번째 for문을 tr 태그를 기준으로 반복하였습니다. 

<td>1</td>
<td>현대 아이오닉5</td>
<td>27,399</td>

 

<td>태그를 배열이라고 생각하면 0번주소에 인덱스, 1번주소에 차종, 2번주소에 판매량이 저장되어있습니다. 이걸 코드로 적용할때 다음과 같이 작성합니다. 

car_name=(i.find_all('td')[1].text)  #차종
amount=(i.find_all('td')[2].text)  #판매량

 

연도는 테이블 안에 <caption> 이 아닌 위에 <h5> 태그에 있는 년도를 가지고 왔습니다. 

year = bs.find_all('h5',attrs={"class":"h5-tit"}) //h5태그에 저장된 판매년도 부분
year_num=(year[j-1].get_text()[0:4]) #year // 판매년도 부분에서 숫자 부분만 슬라이스

year 에 h5태그 (클래스가 h5-tit인) 부분을 다 가지고 와서, 

year_num 에서 판매년도 부분만 슬라이스 해서 배열처럼 만들어 줍니다. 

년도에 2024년이 미리 추가 되어있는 부분이 있어서 제외하고 가져오도록 했습니다. 

 

위의 코드로 저장된 pop_car_df 데이터프레임은 다음과 같습니다. 

Pop_car_df

 

[링크]

Github Repository: https://github.com/notrowing/ElectricCar

 

GitHub - notrowing/ElectricCar

Contribute to notrowing/ElectricCar development by creating an account on GitHub.

github.com

 

 

 

타고 - 친환경 전기자동차 시대를 열어갑니다.

타고 - 친환경 전기자동차 시대를 열어갑니다.

tago.kr

 

«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함
최근에 올라온 글
Total
Today
Yesterday