티스토리 뷰

셀프 주유소는 정말 저렴할까 - 복사본

제 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]:
Oil_store 주소 가격 셀프 상표
304 서남주유소 서울 중구 통일로 30 (봉래동1가) 2229.0 N SK에너지 중구
303 장충주유소 서울 중구 장충단로 202 (장충동1가) 2162.0 N SK에너지 중구
302 SC(주) 역전주유소 서울특별시 중구 퇴계로 15 (남대문로5가) 2145.0 N GS칼텍스 중구
496 뉴서울(강남) 서울 강남구 언주로 716 (논현동) 2140.0 N SK에너지 강남구
149 삼선주유소 서울 성북구 창경궁로 324 2135.0 N S-OIL 성북구
301 약수주유소 서울 중구 다산로 173 (신당동) 2093.0 N GS칼텍스 중구
300 필동주유소 서울특별시 중구 퇴계로 196 (필동2가) 2089.0 N GS칼텍스 중구
290 (주)대양씨앤씨 사직주유소 서울 종로구 사직로 65 (사직동) 2078.0 N GS칼텍스 종로구
299 (주)중앙에너비스 퇴계로지점 서울 중구 퇴계로 228 (필동2가) 2078.0 N SK에너지 중구
292 경복궁주유소 서울 종로구 율곡로 6 (중학동) 2078.0 N GS칼텍스 종로구
In [27]:
# 서울시에서 가장 주유 가격이 싼 주유소
stations.sort_values(by='가격', ascending=True).head(10)
Out[27]:
Oil_store 주소 가격 셀프 상표
239 (주)석산에너지 서울 강북구 삼양로 316 (수유동) 1412.0 N 현대오일뱅크 강북구
268 (주)명연에너지 수색훼미리주유소 서울 은평구 수색로 236 (수색동) 1414.0 Y 현대오일뱅크 은평구
267 타이거주유소 서울 은평구 수색로 188 (증산동) 1414.0 Y SK에너지 은평구
322 화곡역주유소 서울특별시 강서구 강서로 154 (화곡동) 1419.0 Y 알뜰주유소 강서구
321 뉴신정주유소 서울특별시 강서구 곰달래로39길 10 (화곡동) 1419.0 N 알뜰주유소 강서구
323 화곡현대주유소 서울 강서구 강서로 151 (화곡동) 1428.0 Y SK에너지 강서구
128 원천주유소 서울특별시 성북구 돌곶이로 142 (장위동) 1428.0 N 알뜰주유소 성북구
240 북서울고속주유소 서울특별시 강북구 삼양로 410 (수유동) 1429.0 Y S-OIL 강북구
182 현대주유소 서울 양천구 남부순환로 372 (신월동) 1429.0 Y S-OIL 양천구
305 우림주유소 서울 중랑구 용마산로 487 (망우동) 1434.0 Y GS칼텍스 중랑구

강북구, 은평구, 강서구가 보이는데 이런 개별 데이터만 가지고 구별 정보를 이야기하기는 어렵다.

In [28]:
# pivot_table을 이용해서 구별 가격 정보로 변경하고 가격은 평균값으로 정리하자.
import numpy as np
gu_data = pd.pivot_table(stations, index=['구'], values=['가격'],
                        aggfunc=np.mean)
gu_data.head()
Out[28]:
가격
강남구 1732.725000
강동구 1585.125000
강북구 1470.153846
강서구 1498.117647
관악구 1543.312500
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]:
Oil_store 주소 가격 셀프 상표
304 서남주유소 서울 중구 통일로 30 (봉래동1가) 2229.0 N SK에너지 중구
303 장충주유소 서울 중구 장충단로 202 (장충동1가) 2162.0 N SK에너지 중구
302 SC(주) 역전주유소 서울특별시 중구 퇴계로 15 (남대문로5가) 2145.0 N GS칼텍스 중구
496 뉴서울(강남) 서울 강남구 언주로 716 (논현동) 2140.0 N SK에너지 강남구
149 삼선주유소 서울 성북구 창경궁로 324 2135.0 N S-OIL 성북구
301 약수주유소 서울 중구 다산로 173 (신당동) 2093.0 N GS칼텍스 중구
300 필동주유소 서울특별시 중구 퇴계로 196 (필동2가) 2089.0 N GS칼텍스 중구
290 (주)대양씨앤씨 사직주유소 서울 종로구 사직로 65 (사직동) 2078.0 N GS칼텍스 종로구
299 (주)중앙에너비스 퇴계로지점 서울 중구 퇴계로 228 (필동2가) 2078.0 N SK에너지 중구
292 경복궁주유소 서울 종로구 율곡로 6 (중학동) 2078.0 N GS칼텍스 종로구
In [31]:
# 역시 하위 10개에 대해서도 oil_price_bottom10에 저장한다.
oil_price_bottom10 = stations.sort_values(by='가격', ascending=True).head(10)
oil_price_bottom10
Out[31]:
Oil_store 주소 가격 셀프 상표
239 (주)석산에너지 서울 강북구 삼양로 316 (수유동) 1412.0 N 현대오일뱅크 강북구
268 (주)명연에너지 수색훼미리주유소 서울 은평구 수색로 236 (수색동) 1414.0 Y 현대오일뱅크 은평구
267 타이거주유소 서울 은평구 수색로 188 (증산동) 1414.0 Y SK에너지 은평구
322 화곡역주유소 서울특별시 강서구 강서로 154 (화곡동) 1419.0 Y 알뜰주유소 강서구
321 뉴신정주유소 서울특별시 강서구 곰달래로39길 10 (화곡동) 1419.0 N 알뜰주유소 강서구
323 화곡현대주유소 서울 강서구 강서로 151 (화곡동) 1428.0 Y SK에너지 강서구
128 원천주유소 서울특별시 성북구 돌곶이로 142 (장위동) 1428.0 N 알뜰주유소 성북구
240 북서울고속주유소 서울특별시 강북구 삼양로 410 (수유동) 1429.0 Y S-OIL 강북구
182 현대주유소 서울 양천구 남부순환로 372 (신월동) 1429.0 Y S-OIL 양천구
305 우림주유소 서울 중랑구 용마산로 487 (망우동) 1434.0 Y GS칼텍스 중랑구
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]:
Oil_store 주소 가격 셀프 상표 lat lng
304 서남주유소 서울 중구 통일로 30 (봉래동1가) 2229.0 N SK에너지 중구 37.558348 126.972090
303 장충주유소 서울 중구 장충단로 202 (장충동1가) 2162.0 N SK에너지 중구 37.562719 127.007010
302 SC(주) 역전주유소 서울특별시 중구 퇴계로 15 (남대문로5가) 2145.0 N GS칼텍스 중구 37.557001 126.974495
496 뉴서울(강남) 서울 강남구 언주로 716 (논현동) 2140.0 N SK에너지 강남구 37.517636 127.035756
149 삼선주유소 서울 성북구 창경궁로 324 2135.0 N S-OIL 성북구 37.587908 127.005575
301 약수주유소 서울 중구 다산로 173 (신당동) 2093.0 N GS칼텍스 중구 37.559009 127.012663
300 필동주유소 서울특별시 중구 퇴계로 196 (필동2가) 2089.0 N GS칼텍스 중구 37.560850 126.993653
290 (주)대양씨앤씨 사직주유소 서울 종로구 사직로 65 (사직동) 2078.0 N GS칼텍스 종로구 37.574464 126.966618
299 (주)중앙에너비스 퇴계로지점 서울 중구 퇴계로 228 (필동2가) 2078.0 N SK에너지 중구 37.561648 126.997142
292 경복궁주유소 서울 종로구 율곡로 6 (중학동) 2078.0 N GS칼텍스 종로구 37.575416 126.980132
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]:
Oil_store 주소 가격 셀프 상표 lat lng
239 (주)석산에너지 서울 강북구 삼양로 316 (수유동) 1412.0 N 현대오일뱅크 강북구 37.631582 127.017939
268 (주)명연에너지 수색훼미리주유소 서울 은평구 수색로 236 (수색동) 1414.0 Y 현대오일뱅크 은평구 37.581122 126.897774
267 타이거주유소 서울 은평구 수색로 188 (증산동) 1414.0 Y SK에너지 은평구 37.578424 126.902050
322 화곡역주유소 서울특별시 강서구 강서로 154 (화곡동) 1419.0 Y 알뜰주유소 강서구 37.540657 126.841506
321 뉴신정주유소 서울특별시 강서구 곰달래로39길 10 (화곡동) 1419.0 N 알뜰주유소 강서구 37.531820 126.855564
323 화곡현대주유소 서울 강서구 강서로 151 (화곡동) 1428.0 Y SK에너지 강서구 37.540197 126.841141
128 원천주유소 서울특별시 성북구 돌곶이로 142 (장위동) 1428.0 N 알뜰주유소 성북구 37.614921 127.052752
240 북서울고속주유소 서울특별시 강북구 삼양로 410 (수유동) 1429.0 Y S-OIL 강북구 37.640155 127.017203
182 현대주유소 서울 양천구 남부순환로 372 (신월동) 1429.0 Y S-OIL 양천구 37.533811 126.829240
305 우림주유소 서울 중랑구 용마산로 487 (망우동) 1434.0 Y GS칼텍스 중랑구 37.594621 127.099297
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]:

결과를 보면 '중구', '종로구'와 같은 서울 중심에 비싼 주유소가 몰려있고, '강북', '은평', '양천'과 같은 서울 바깥방향에 저렴한 주유소가 몰려 있다는 것을 알 수 있다.기름이 부족하다면 서울 안쪽으로 들어가기 전에 미리 넣고 가는 것이 좋다는 것을 알 수 있다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/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
글 보관함