부동산 - 스타벅스 매장 데이터와 지도
파이썬 X 스타벅스 매장 데이터와 지도¶
- requests 위치 데이터 가져오기
- json_normalize(): JSON 데이터 DataFrame으로 전환
- folium 을 사용하여 지도에 위치 표시
2018 FinanceData.KR fb.com/financedata¶
스타벅스 + 부동산 투자?¶
- https://goo.gl/PEhtz7 스타벅스, 벅세권
- https://goo.gl/TIM2Mw 부동산 시장까지 사로잡은 스타벅스
In [1]:
import requests
import json
import pandas as pd
from pandas.io.json import json_normalize
In [2]:
data = {
'ins_lat':'37.56682', # 지정한 위도와 경도에서 가까운 순으로 나열
'ins_lng':'126.97865',
'p_sido_cd':'01', # 01=서울시, 08=경기 ... 16=제주
'p_gugun_cd':'', # 세부지역 (지정하지 않으면 시/도 전체)
'in_biz_cd':'',
'set_date':'',
'iend':'1000',
}
url = 'https://www.istarbucks.co.kr/store/getStore.do'
r = requests.post(url, data=data)
r.text[:1000] # 수신된 데이터의 앞부분만 확인
Out[2]:
데이터는 JSON으로 수신되며, 형태는 다음과 같다.
{
"list": [
{
// ... 중략 ...
"s_code": "1311",
"s_name": "방화DT",
"tel": "02-2664-3480",
"fax": "02-2664-3481",
"sido_code": "01",
"sido_name": "서울",
"gugun_code": "0103",
"gugun_name": "강서구",
"addr": "서울특별시 강서구 방화동 293-4",
"park_info": null,
"new_state": null,
"theme_state": "T17@T16@T09@T20@T01@T05@T08@T04",
// ... 중략 ...
"lat": "37.574339",
"lot": "126.816415",
"t22": 0
},
{
// ... 중략 ...
"s_code": "1267",
"s_name": "마곡나루역",
"tel": "02-3662-3504",
"fax": "02-3662-3505",
"sido_code": "01",
"sido_name": "서울",
"gugun_code": "0103",
"gugun_name": "강서구",
"addr": "서울특별시 강서구 마곡동 759-3 보타닉파크타워Ⅰ105,203,204호",
"park_info": null,
"new_state": null,
"theme_state": "T08@T05@T04@T17@T16@P80@T20",
// ... 중략 ...
"lat": "37.56813",
"lot": "126.82614",
"t22": 0
},
]
}
JSON to DataFrame¶
json_normalize() 를 사용하여 JSON 데이터를 DataFrame로 전환
In [3]:
jo = json.loads(r.text)
df = json_normalize(jo, 'list')
In [4]:
# 행(row)수, 서울 457개 매장
len(df)
Out[4]:
In [5]:
# 컬럼수 111개
df.columns
Out[5]:
In [6]:
# 주요한 컬럼 몇 가지 선택
df = df[['s_name', 'lat', 'lot', 'sido_name', 'gugun_name', 'doro_address', 'tel']]
df.head(20)
Out[6]:
위도 경도 데이터 타입 변환¶
In [7]:
df.dtypes
Out[7]:
lat, lot타입으로 전환 (str→float)¶
In [8]:
df['lat'] = df['lat'].astype(float)
df['lot'] = df['lot'].astype(float)
In [9]:
df.dtypes
Out[9]:
특정 지점¶
In [10]:
df[df['s_name'] == '시청'] # 시청점
Out[10]:
스타벅스 시청점의 위도(lat)와 경도(lot)는 각각 37.56629, 126.979808
folium¶
https://github.com/python-visualization/folium
파이썬 지리정보 시각화 모듈 (문서: https://folium.readthedocs.io )
In [11]:
import folium
# 서울 시청
map_osm = folium.Map(location=(37.56629, 126.979808))
map_osm
Out[11]:
지도를 상하좌우로 움직이거나 확대/축소 할 수 있다
In [12]:
# 확대 지정 (zoom_start)
map_osm = folium.Map(location=(37.56629, 126.979808), zoom_start=17)
map_osm
Out[12]:
In [13]:
# 지도 tiles 지정
map_osm = folium.Map(location=(37.56629, 126.979808), zoom_start=17, tiles='Stamen Toner')
map_osm
Out[13]:
In [14]:
시청_좌표=(37.56629, 126.979808)
map_osm = folium.Map(location=시청_좌표, zoom_start=17)
folium.Marker(시청_좌표, popup='시청').add_to(map_osm)
map_osm
Out[14]:
서울 스타벅스 전 지점¶
In [15]:
map_osm = folium.Map(location=시청_좌표, zoom_start=11)
for ix, row in df.iterrows():
location = (row['lat'], row['lot'])
folium.Marker(location, popup=row['s_name']).add_to(map_osm)
map_osm
Out[15]:
제주도 스타벅스 매장 지도¶
In [16]:
import requests
import json
import pandas as pd
from pandas.io.json import json_normalize
한라산_좌표 = (33.361666, 126.529166)
data = {
'ins_lat': '33.4996213', # 제주 시청의 좌표
'ins_lng': '126.5311884',
'p_sido_cd':'16', # 01=서울시, 08=경기 ... 16=제주
'p_gugun_cd':'', # 세부지역 (지정하지 않으면 시/도 전체)
'in_biz_cd':'',
'set_date':'',
'iend':'1000',
}
url = 'https://www.istarbucks.co.kr/store/getStore.do'
r = requests.post(url, data=data)
df = json_normalize(json.loads(r.text), 'list')
map_osm = folium.Map(location=한라산_좌표, zoom_start=10)
for ix, row in df.iterrows():
location = (row['lat'], row['lot'])
folium.Marker(location, popup=row['s_name']).add_to(map_osm)
map_osm
Out[16]:
In [17]:
df[['s_name', 'gugun_name', 'doro_address', 'tel']]
Out[17]:
요약¶
- requests.post() 데이터 가져오기
- json_normalize(): JSON 데이터 DataFrame으로 전환
- folium 을 사용하여 지도에 위치 표시
댓글
Comments powered by Disqus