- 부산의 식당 공공데이터를 불러온 뒤, 사이트별 평점데이터와 합쳤다.
(망고플레이트, 카카오, 구글, 네이버, 트립어드바이저)
- Forium을 통해 시각화하였다. 마커를 클릭하면 식당의 사이트별 평점을 한눈에 볼 수 있다.
import pandas as pd
busan = pd.read_csv('소상공인시장진흥공단_상가(상권)정보_부산_202112.csv')
busan.rename(columns={'상호명':'title'}, inplace=True)
print(busan.shape)
busan.head()
(141878, 39)
|
상가업소번호 |
title |
지점명 |
상권업종대분류코드 |
상권업종대분류명 |
상권업종중분류코드 |
상권업종중분류명 |
상권업종소분류코드 |
상권업종소분류명 |
표준산업분류코드 |
... |
건물관리번호 |
건물명 |
도로명주소 |
구우편번호 |
신우편번호 |
동정보 |
층정보 |
호정보 |
경도 |
위도 |
0 |
23206623 |
미광장 |
NaN |
O |
숙박 |
O02 |
모텔/여관/여인숙 |
O02A01 |
모텔/여관/여인숙 |
I55112 |
... |
2611012600100250001004473 |
NaN |
부산광역시 중구 보수대로44번길 5 |
600074 |
48974.0 |
NaN |
NaN |
NaN |
129.023668 |
35.100979 |
1 |
20418637 |
BHC치킨 |
동래점 |
Q |
음식 |
Q05 |
닭/오리요리 |
Q05A08 |
후라이드/양념치킨 |
I56193 |
... |
2626010500101850000016529 |
NaN |
부산광역시 동래구 동래로147번길 18 |
607020 |
47802.0 |
NaN |
NaN |
NaN |
129.087156 |
35.205267 |
2 |
24659633 |
스텔라 |
NaN |
D |
소매 |
D05 |
의복의류 |
D05A01 |
일반의류 |
G47416 |
... |
2650010500101480004001694 |
비치아파트 |
부산광역시 수영구 광안해변로 100 |
613751 |
48305.0 |
NaN |
NaN |
NaN |
129.115397 |
35.143770 |
3 |
17174094 |
도란도란 |
NaN |
Q |
음식 |
Q01 |
한식 |
Q01A01 |
한식/백반/한정식 |
I56111 |
... |
2623011100101740004050547 |
NaN |
부산광역시 부산진구 가야대로482번길 29-3 |
614813 |
47327.0 |
NaN |
NaN |
NaN |
129.024938 |
35.151645 |
4 |
21683903 |
럭키사진관 |
NaN |
F |
생활서비스 |
F06 |
사진 |
F06A01 |
사진관 |
M73301 |
... |
2638010200103250030010858 |
NaN |
부산광역시 사하구 낙동대로 395 |
604830 |
49411.0 |
NaN |
1 |
NaN |
128.974794 |
35.102905 |
5 rows × 39 columns
mango = pd.read_csv('중복가게.csv').drop('Unnamed: 0', axis=1)
print(mango.shape)
mango.head()
(379, 4)
|
userId |
title |
rating |
type |
0 |
mango |
비비비당 |
4.485213 |
카페 디저트 차 우전 녹차 특 말차 복분자 냉 오미자차 |
1 |
kakao |
비비비당 |
3.661010 |
카페 디저트 차 우전 녹차 특 말차 복분자 냉 오미자차 |
2 |
naver |
비비비당 |
4.465512 |
카페 디저트 차 우전 녹차 특 말차 복분자 냉 오미자차 |
3 |
mango |
신발원 |
4.452742 |
딤섬 만두 |
4 |
kakao |
신발원 |
3.850168 |
딤섬 만두 |
ratings_stores = pd.merge(busan, mango, on='title')
print(ratings_stores.shape)
ratings_stores.head()
(384, 42)
|
상가업소번호 |
title |
지점명 |
상권업종대분류코드 |
상권업종대분류명 |
상권업종중분류코드 |
상권업종중분류명 |
상권업종소분류코드 |
상권업종소분류명 |
표준산업분류코드 |
... |
구우편번호 |
신우편번호 |
동정보 |
층정보 |
호정보 |
경도 |
위도 |
userId |
rating |
type |
0 |
28490295 |
모모스커피 |
NaN |
Q |
음식 |
Q12 |
커피점/카페 |
Q12A01 |
커피전문점/카페/다방 |
I56220 |
... |
609320 |
46311.0 |
NaN |
1 |
NaN |
129.086376 |
35.219218 |
mango |
4.020862 |
카페 디저트 |
1 |
28490295 |
모모스커피 |
NaN |
Q |
음식 |
Q12 |
커피점/카페 |
Q12A01 |
커피전문점/카페/다방 |
I56220 |
... |
609320 |
46311.0 |
NaN |
1 |
NaN |
129.086376 |
35.219218 |
kakao |
4.099568 |
카페 디저트 |
2 |
28504927 |
백설대학 |
NaN |
Q |
음식 |
Q04 |
분식 |
Q04A01 |
라면김밥분식 |
I56194 |
... |
606080 |
49102.0 |
NaN |
NaN |
NaN |
129.070072 |
35.079008 |
mango |
4.040333 |
한식 |
3 |
28504927 |
백설대학 |
NaN |
Q |
음식 |
Q04 |
분식 |
Q04A01 |
라면김밥분식 |
I56194 |
... |
606080 |
49102.0 |
NaN |
NaN |
NaN |
129.070072 |
35.079008 |
kakao |
3.179077 |
한식 |
4 |
28504927 |
백설대학 |
NaN |
Q |
음식 |
Q04 |
분식 |
Q04A01 |
라면김밥분식 |
I56194 |
... |
606080 |
49102.0 |
NaN |
NaN |
NaN |
129.070072 |
35.079008 |
naver |
4.448316 |
한식 |
5 rows × 42 columns
ratings_stores = ratings_stores[['title','위도','경도','상권업종소분류명','userId','rating']]
ratings_stores = ratings_stores.drop_duplicates(['userId','title']).reset_index(drop=True)
ratings_stores.rating = ratings_stores.rating.round(2)
print(ratings_stores.shape)
ratings_stores.head()
(228, 6)
|
title |
위도 |
경도 |
상권업종소분류명 |
userId |
rating |
0 |
모모스커피 |
35.219218 |
129.086376 |
커피전문점/카페/다방 |
mango |
4.02 |
1 |
모모스커피 |
35.219218 |
129.086376 |
커피전문점/카페/다방 |
kakao |
4.10 |
2 |
백설대학 |
35.079008 |
129.070072 |
라면김밥분식 |
mango |
4.04 |
3 |
백설대학 |
35.079008 |
129.070072 |
라면김밥분식 |
kakao |
3.18 |
4 |
백설대학 |
35.079008 |
129.070072 |
라면김밥분식 |
naver |
4.45 |
ratings_stores['user_rating'] = ratings_stores[['userId','rating']].apply(lambda row: ' : '.join(row.values.astype(str)), axis=1)
print(ratings_stores.shape)
ratings_stores.head()
(228, 7)
|
title |
위도 |
경도 |
상권업종소분류명 |
userId |
rating |
user_rating |
0 |
모모스커피 |
35.219218 |
129.086376 |
커피전문점/카페/다방 |
mango |
4.02 |
mango : 4.02 |
1 |
모모스커피 |
35.219218 |
129.086376 |
커피전문점/카페/다방 |
kakao |
4.10 |
kakao : 4.1 |
2 |
백설대학 |
35.079008 |
129.070072 |
라면김밥분식 |
mango |
4.04 |
mango : 4.04 |
3 |
백설대학 |
35.079008 |
129.070072 |
라면김밥분식 |
kakao |
3.18 |
kakao : 3.18 |
4 |
백설대학 |
35.079008 |
129.070072 |
라면김밥분식 |
naver |
4.45 |
naver : 4.45 |
ratings_stores = ratings_stores.groupby(['title','위도','경도','상권업종소분류명',])['user_rating'].apply(' / '.join).reset_index()
print(ratings_stores.shape)
ratings_stores.head()
(89, 5)
|
title |
위도 |
경도 |
상권업종소분류명 |
user_rating |
0 |
1984나폴리 |
35.304089 |
129.112414 |
커피전문점/카페/다방 |
mango : 4.03 / kakao : 3.56 |
1 |
거대곰탕 |
35.153023 |
129.059626 |
설렁탕집 |
mango : 4.07 / kakao : 3.98 / naver : 4.47 |
2 |
겐짱카레 |
35.100763 |
129.029007 |
음식점-일식 |
mango : 3.91 / kakao : 4.38 |
3 |
고래사 |
35.162510 |
129.159503 |
식료품점 |
mango : 4.01 / kakao : 3.7 |
4 |
고옥 |
35.310151 |
129.260781 |
한식/백반/한정식 |
mango : 4.33 / kakao : 3.67 / google : 4.1... |
import folium
m = folium.Map(location = [35.16067972581369, 129.12464303902127],
zoom_start = 11,
width=1000,
height=700)
for lat, long, store, category, point in zip(ratings_stores['위도'],
ratings_stores['경도'],
ratings_stores['title'],
ratings_stores['상권업종소분류명'],
ratings_stores['user_rating']):
iframe = folium.IFrame("<h2><b>" + store + "</h2></b>"+ "<b>음식 종류</b>" + "<br>" + category + "<br>" + "<br>" + "<b>사이트별 평점</b>" + "<br>" + point)
popup = folium.Popup(iframe,
min_width=300,
max_width=300)
folium.Marker(location = [lat, long],
tooltip=store,
popup=popup,
icon=folium.Icon('red', icon='star')
).add_to(m)
m

- 마커를 클릭하면 식당의 음식종류와 사이트별 평점을 한눈에 볼 수 있다.