본문 바로가기
개발일지/selenium, BeautifulSoup, requests

selenium 오일 데이터 스크래핑 후 시각화 2 (numpy, seaborn, matplotlib)

by 다니엘의 개발 이야기 2022. 7. 6.
320x100

이건 아직 익숙해지지 않았고, 전체적으로 서서히 익숙해지는 중이다.

 

참고자료가 되는

stations의 모태가 되는 csv는 이전 1을 통해서 만들 수 있을것이지만

json 파일을 첨부하긴 어려우니, 그건 본인 스스로 구해보았으면 좋겠고, 그래야 지도상의 시각화가 작동이 될것이다.

 

# 한글 변환 코드 (중요)

import matplotlib.pyplot as plt
import seaborn as sns
import platform
from matplotlib import font_manager, rc

get_ipython().run_line_magic('matplotlib', 'inline')
# %matplotlib inline

path = 'C:/Windows/Fonts/malgun.ttf'

if platform.system() == 'Darwin':
    rc('font', family='Arial Unicode MS')
elif platform.system() == 'Windows':
    font_name = font_manager.Fontproperties(fname=path).get_name()
    rc('font', family=font_name)
else:
    print('Unknown system sorry')

 

# 휘발유 boxplot(feat.seaborn)

plt.figure(figsize=(12,8))
sns.boxplot(x='is_self', y='gasoline', data=stations, palette='Set1')
plt.grid(True)

 

# 휘발유 브랜드 별 비교
# boxflot(feat. seaborn)

plt.figure(figsize=(12,8))
sns.boxenplot(x='brand', y='gasoline', hue='is_self', data=stations, palette='Set1')
plt.grid(True)
plt.show();

 

# 휘발유 구별 비교
# boxplot(feat. seaborn)

plt.figure(figsize=(16,10))
sns.boxplot(x='gu', y='gasoline', data=stations, palette='Set1')
plt.grid(True)
plt.show()

 

# 셀프, 비셀프 경유 가격비교

plt.figure(figsize=(14,8))
sns.boxplot(x = 'is_self', y= 'diesel', data=stations, palette='Set1')
plt.grid(True)
plt.show

 

# brand 별 diesel 가격 비교
plt.figure(figsize=(14,8))
sns.boxplot(x = 'brand', y = 'diesel', data=stations, palette='Set2')
plt.grid(True)
plt.show()

 

plt.figure(figsize=(16,10))
sns.boxplot(x = 'gu', y= 'diesel', data=stations, palette='Set3')
plt.grid(True)
plt.show();


import json
import folium

 

# 가장 비싼 주유소 10개

# 기존 데이터프레임에서 가지고 있는 컬럼 그대로 가져와서 컬럼값이 꼬여보인다.
# stations[['gu', 'name', 'is_self', 'gasoline']].sort_values(by='gasoline', ascending=False)

# 데이터프레임에서 끌어온 이후에 인덱스넘버를 재설정해주는거라서 깔끔하게 정리된다.
stations[['gu', 'name', 'is_self', 'gasoline']].sort_values(by='gasoline', ascending=True).head(10).reset_index(drop=True)

 

# 지도 시각화용 데이터프레임

import numpy as np

gu_data = pd.pivot_table(data=stations, index='gu', values='gasoline', aggfunc=np.mean)
gu_data.head()

 

geo_path = './02. skorea_municipalities_geo_simple.json'
geo_str = json.load(open(geo_path, encoding='utf-8'))

 

m = folium.Map(location=[37.5502, 126.982], zoom_start=10.5)
m.choropleth(
    geo_data = geo_str,
    data = gu_data,
    columns = [gu_data.index, 'gasoline'],
    key_on = 'feature.id',
    fill_color = 'PuRd'    
)

m
300x250