티스토리 뷰
제 4장 셀프 주유소는 정말 저렴할까¶
구성 및 블로그 진행 과정¶
4-1 Selenium 사용하기
-------------------------------------------------------
4-2 서울시 구별 주유소 가격 정보 얻기
4-3 구별 주유 가격에 대한 데이터의 정리
4-4 셀프 주유소는 정말 저렴한지 boxplot으로 확인하기
-------------------------------------------------------
4-5 서울시 구별 주유 가격 확인
4-6 서울시 주유 가격 상.하위 10개 주유소 지도에 표기하기
출처: 파이썬으로 데이터 주무르기 by 민형기
4-5 서울시 구별 주유 가격 확인하기¶
In [25]:
# 지도를 그리기 위한 모듈 import
import json
import folium
import googlemaps
import warnings
warnings.simplefilter(action='ignore', category = FutureWarning)
In [26]:
# 이제 서울시에서 가장 주유 가격이 비싼 주유소를 보겠다.
stations.sort_values(by='가격', ascending=False).head(10)
Out[26]:
In [27]:
# 서울시에서 가장 주유 가격이 싼 주유소
stations.sort_values(by='가격', ascending=True).head(10)
Out[27]:
강북구, 은평구, 강서구가 보이는데 이런 개별 데이터만 가지고 구별 정보를 이야기하기는 어렵다.
In [28]:
# pivot_table을 이용해서 구별 가격 정보로 변경하고 가격은 평균값으로 정리하자.
import numpy as np
gu_data = pd.pivot_table(stations, index=['구'], values=['가격'],
aggfunc=np.mean)
gu_data.head()
Out[28]:
In [29]:
# 서울시 구별 정보에 대해 지도로 표현하자. 평균적으로
geo_path = 'pydata/02. skorea_municipalities_geo_simple.json'
geo_str = json.load(open(geo_path, encoding='utf-8'))
map = folium.Map(location=[37.5502, 126.982], zoom_start=10.5,
tiles='Stamen Toner')
map.choropleth(geo_data = geo_str,
data = gu_data,
columns=[gu_data.index, '가격'],
fill_color='PuRd', #PuRd, YlGnBu
key_on='feature.id')
map
Out[29]:
평균적으로 중구, 용산구, 종로구, 마포구, 강남구가 주유가격이 아주 높아 보인다.
4-6 서울시 주유 가격 상하위 10개 주유소 지도에 표기하기¶
In [30]:
# 주유 가격 상위 10개 주소를 oil_price_top10 이름으로 저장한다.
oil_price_top10 = stations.sort_values(by='가격', ascending=False).head(10)
oil_price_top10
Out[30]:
In [31]:
# 역시 하위 10개에 대해서도 oil_price_bottom10에 저장한다.
oil_price_bottom10 = stations.sort_values(by='가격', ascending=True).head(10)
oil_price_bottom10
Out[31]:
In [34]:
# google maps API용 key 입력
gmap_key = '******************************'
gmaps = googlemaps.Client(key=gmap_key)
In [35]:
# 주유 가격 상위 10개 주유소에 대해 위도, 경도 정보를 읽어오자.
# 구글 맵에서 검색할 수 없다든지 하는 문제로 에러가 나는 것에 대비해 try-except
# try 구문을 실행하다가 에러나면 except 구문에서 지정된 nan값을 저장
from tqdm import tqdm_notebook
lat = []
lng = []
for n in tqdm_notebook(oil_price_top10.index):
try:
tmp_add = str(oil_price_top10['주소'][n]).split('(')[0]
tmp_map = gmaps.geocode(tmp_add)
tmp_loc = tmp_map[0].get('geometry')
lat.append(tmp_loc['location']['lat'])
lng.append(tmp_loc['location']['lng'])
except:
lat.append(np.nan)
lng.append(np.nan)
print('Here is nan !')
oil_price_top10['lat']=lat
oil_price_top10['lng']=lng
oil_price_top10
Out[35]:
In [36]:
# 동일한 방법으로 주유 가격 하위 10개 주유소에 대해 위도, 경도 정보를 읽어오자.
lat = []
lng = []
for n in tqdm_notebook(oil_price_bottom10.index):
try:
tmp_add = str(oil_price_bottom10['주소'][n]).split('(')[0]
tmp_map = gmaps.geocode(tmp_add)
tmp_loc = tmp_map[0].get('geometry')
lat.append(tmp_loc['location']['lat'])
lng.append(tmp_loc['location']['lng'])
except:
lat.append(np.nan)
lng.append(np.nan)
print('Here is nan !')
oil_price_bottom10['lat']=lat
oil_price_bottom10['lng']=lng
oil_price_bottom10
Out[36]:
In [37]:
# 위에서 혹시 nan값으로 처리된 부분이 있다면 ,
# notmul 명령을 이용해서 NaN이 아닐때만 지도에 표기하도록 한다.
map = folium.Map(location=[37.5202, 126.975], zoom_start=10.5)
for n in oil_price_top10.index:
if pd.notnull(oil_price_top10['lat'][n]):
folium.CircleMarker([oil_price_top10['lat'][n], oil_price_top10['lng'][n]],
radius=15, color='#CD3181',
fill_color='#CD3181').add_to(map)
for n in oil_price_bottom10.index:
if pd.notnull(oil_price_bottom10['lat'][n]):
folium.CircleMarker([oil_price_bottom10['lat'][n],
oil_price_bottom10['lng'][n]],
radius=15, color='#3186cc',
fill_color='#3186cc').add_to(map)
map
Out[37]:
결과를 보면 '중구', '종로구'와 같은 서울 중심에 비싼 주유소가 몰려있고, '강북', '은평', '양천'과 같은 서울 바깥방향에 저렴한 주유소가 몰려 있다는 것을 알 수 있다.기름이 부족하다면 서울 안쪽으로 들어가기 전에 미리 넣고 가는 것이 좋다는 것을 알 수 있다.
'beginner > 파이썬 분석' 카테고리의 다른 글
셀프 주유소는 정말 저렴할까?-2 (0) | 2019.07.11 |
---|---|
셀프 주유소는 정말 저렴할까? -1 (0) | 2019.07.10 |
시카고 샌드위치 맛집 분석-3 (0) | 2019.07.08 |
시카고 샌드위치 맛집 분석-2 (0) | 2019.07.08 |
시카고 샌드위치 맛집 분석 -1 (0) | 2019.07.05 |