Streamlit을 이용한 관광지 데이터 분석

Streamlit share.

streamlit share 사이트.

URL: https://share.streamlit.


프로젝트 명

우리나라의 관광지 분석을 통한 신규 관광객 유입


프로젝트 개요.

  1. 주제
  2. 주제 선정이유.
  3. 우리나라의 코로나19 방역 완화, 엔데믹과 원화 가치 급락 등의 이유로 외국인 관광객의 방한이 많아지고 있다. 우리나라의 관광지 분석을 통해 기존의 사람들이 잘 몰랐었던 숨어있는 관광지를 알려주고, 관광객이 줄어들고 있는 관광지는 새로운 마케팅을 통해 관광객을 끌어들일 수 있는 기회를 만듦.
  4. b. 장점 & 보완점
  5. 프로그램.
  6. 프로그램의 구성도
  7. 인기 TOP 10을 만들어서 해당 지역 주변의 편의시설 등을 알려주는 것을 만듦

프로젝트 주요 내용 및 기능.

  • 관광지역의 관광객들의 유입 분석기능
  • 인기 많은 관광지역 주변의 편의시설 및 맛집 추천 기능
  • 현재 위치 기반으로 가까운 관광지 추천?

개발 내용.

💡 기준연월 2019.11~2022.10 데이터 날짜 기준

  1. 서울시 주요 관광지점 입장객 방문 수 분석
[주요관광지점 입장객(2004.07 이후)_221203075929.xls](%25EC%25A3%25BC%25EC%259A%2594%25EA%25B4%2580%25EA%25B4%2591%25EC%25A7%2580%25EC%25A0%2590_%25EC%259E%2585%25EC%259E%25A5%25EA%25B0%259D(2004.07_%25EC%259D%25B4%25ED%259B%2584)_221203075929.xls)


import numpy as np
import pandas as pd

visitors = pd.read_excel('../Users/chohyunjun/Downloads/visitor.xls', thousands=',')
visitors
visitors_total = visitors.loc[visitors['내/외국인'] == '합계']
visitors_total = visitors_total.iloc[:,0:31]

import googlemaps

gmaps_key = "AIzaSyCpqSO-mFH36wjjiqUlQPJHhwYkLE9WWns"
gmaps = googlemaps.Client(key = gmaps_key)

visit_name = []

for name in visitors_total['관광지']:
    visit_name.append('서울'+ str(name))

visit_name

visit_address = []
visit_lat = []
visit_lng = []

    print(name + '-->' + tmp[0].get("formatted_address"))

visit_lat

visit_lng

visitors_total['lat'] = visit_lat
visitors_total['lng'] = visit_lng

visitors_total1 = pd.pivot_table(visitors_total, index = ['관광지'])

import folium

map = folium.Map(location=[37.5502, 126.982], zoom_start= 11)

for n in visitors_total1.index:
    folium.Marker([visitors_total1['lat'][n],
                visitors_total1['lng'][n]]).add_to(map)

map

streamlit

import urllib.request
import numpy as np
import pandas as pd
import plotly.express as px
import requests
import streamlit as st
import xmltodict
from pandas import json_normalize
from streamlit_extras.add_vertical_space import add_vertical_space
from streamlit_lottie import st_lottie
import folium
import googlemaps
from streamlit_folium import st_folium
from folium import plugins
from folium.plugins import MarkerCluster
from folium import Map, Popup, Marker, Icon, IFrame
st.set_page_config(page_title="파이썬응용 데이터분석 기말 프로젝트", layout="wide")
row0_spacer1, row0_1, row0_spacer2, row0_2, row0_spacer3 = st.columns(
    (0.1, 6, 0.2, 2, 0.1)
)
row0_1.title("파이썬응용 데이터분석 기말 프로젝트.")
with row0_2:
    add_vertical_space()
    st.markdown("###### 2017E8129 통계데이터과학과 조현준")
def visitor_area():
        st.subheader("방문자 거주지 분포.")
        st.markdown("###### 방문자 거주지 분포 시각화를 통해 경기도, 인천광역시, 강원도등 순으로 방문객 비율을 보이고 있다.")
        visitorArea = pd.read_csv('https://raw.githubusercontent.com/CHJun47/Data/main/visitor_area.csv', encoding = 'CP949')
        fig3 = px.treemap(visitorArea, path = [px.Constant('대한민국'),'광역지자체명','기초지자체명'], values = '방문자 수(합)',
                            color = '방문자 수(합)',
                            color_continuous_scale = 'GnBu')
        fig3.update_layout(margin = dict(t=50, l=25, r=25, b=25))
        st.plotly_chart(fig3, theme = "streamlit", use_container_width = True)
def visitor_seoul():
    line1_spacer1, line1_1, line1_spacer2 = st.columns((0.1, 3.2, 0.1))
    with line1_1:
        st.header("Analysis of Seoul Data.")
        st.markdown("###### 서울은 대한민국의 수도이자 많은 관광객들이 몰려 있는 곳이다. 한국을 찾는 많은 관광객들이 주로 서울을 방문하는 경우들이 많다. 서울관광지 Top10 데이터를 분석하여 관광지를 추천해주고자 한다.") 
    row3_space1, row3_1, row3_space2, row3_2, row3_space3 = st.columns(
        (0.1, 1, 0.1, 1, 0.1)
    )
    with row3_1:
        st.subheader("서울 방문자 수")
        st.markdown("###### 코로나19 유행 기간 서울 방문자 수가 급격히 줄어 들었지만, 거리두기가 풀린 뒤 서울 방문객들이 점차 증가하는 추세를 보이고 있다.")
        visitorData = pd.read_csv('https://raw.githubusercontent.com/CHJun47/Data/main/visitorData_seoul.csv', encoding='CP949')
        visitorData.columns = ["기준연월","지역명","방문자 수"]
        fig = px.line(
            visitorData,
            x = '기준연월',
            y = '방문자 수',
            color_discrete_sequence = ["lightgoldenrodyellow"]
        )
        st.plotly_chart(fig, theme = "streamlit", use_container_width = True)
    with row3_2:
        visitor_area()      
visitor_seoul()
def inflow_ouflow_chart():
    row4_spacer1, row4_1, row4_spacer2 = st.columns((0.1, 5, 0.1))
    with row4_1:
        st.subheader("유입 유출 분석")
        st.markdown("###### 서울의 유입 유출 방문객의 분석을 통해 첫 번째로 많이 나타는 경기도 유입은 86.9% ,유출은 85.5%, 두 번째는 인천광역시 유입9.9% ,유출8.2%, 세 번째는 강원도 유입1.1% ,유출3.7%를 나타내고 있음.")
        flowData = pd.read_csv("https://raw.githubusercontent.com/CHJun47/Data/main/inflow_outflow.csv", encoding = 'CP949')
        fig1 = px.parallel_categories(
            flowData,
            color = "유입 비율",
            color_continuous_scale = "GnBu"
            )
        st.plotly_chart(fig1, theme = "streamlit", use_container_width = True)
inflow_ouflow_chart()
def touristDest():
    row5_space1, row5_1, row5_space2, row5_2, row5_space3 = st.columns(
        (0.1, 1, 0.1, 1, 0.1)
    )
    with row5_1:
        st.subheader("관광소비 유형.")
        st.markdown("###### 관광소비 유형으로 1위가 식음료이다. 음식은 그 나라의 문화와 전통을 가장 잘 나타낼 수 있는 관광 자원이다.") 
        st.markdown("###### 한 지역을 대표하는 음식은 때로는 그 자체만으로도 여행의 목적이 되기도 한다.")
        st.markdown("###### 2위로 쇼핑업을 볼 수 있다. 유행하는 옷이나 우리나라를 대표하는 한복을 입고 문화를 즐기고 향유하려는 것을 볼 수 있다.")
        st.markdown("###### 나머지는 운송업, 숙박업, 여가서비스등을 볼 수 있다.")
        tourrist_dest = pd.read_csv("https://raw.githubusercontent.com/CHJun47/Data/main/tourrist_dest.csv", encoding='CP949')
        fig4 = px.treemap(tourrist_dest, path = [px.Constant('점포'),'업종대분류명','업종중분류명'], values = '중분류 소비액(합)',
                            color = '중분류 소비액(합)',
                            color_continuous_scale = "GnBu")
        fig4.update_layout(margin = dict(t=50, l=25, r=25, b=25))
        st.plotly_chart(fig4, theme = "streamlit", use_container_width = True)
    with row5_2:
        st.subheader("SNS언급량.")
        st.markdown("###### 코로나19 거리두기로 여행이나 놀러갈 수 없는 상황이였지만,")
        st.markdown("###### 거리두기가 풀리고 나서부터 SNS에서도 여행, 놀러가는 사진을 SNS에서의 언급량이 점점 증가하고있다.")
        st.markdown("###### ")
        seoul_SNS = pd.read_csv('https://raw.githubusercontent.com/CHJun47/Data/main/seoul_SNS.csv', encoding = 'CP949')
        fig5 = px.bar(
            seoul_SNS,
            x = '기준연월',
            y = '검색량(건)',
            color_discrete_sequence = ["lightgoldenrodyellow"]
        )
        st.plotly_chart(fig5, theme = "streamlit", use_container_width = True)
touristDest()
def Folium_visit():
    row6_spacer1, row6_1, row6_spacer2, row6_2, row_spacer3 = st.columns((0.1, 30, 0.1,5,0.1))
    with row6_1:
        gmaps_key = "AIzaSyCpqSO-mFH36wjjiqUlQPJHhwYkLE9WWns"
        gmaps = googlemaps.Client(key = gmaps_key)
        visitors = pd.read_csv('https://raw.githubusercontent.com/CHJun47/Data/main/visitor(2).csv', encoding='CP949')
        visitors_total = visitors.loc[visitors['내/외국인'] == '합계']
        visitors_total = visitors_total.iloc[:,0:31]
        visit_name = []
        visit_url = []
        for name in visitors.iloc[:,-1]:
            visit_url.append(name)
        
        for name in visitors_total['관광지']:
            visit_name.append('서울'+ str(name))
        visit_address = []
        visit_lat = []
        visit_lng = []
        for name in visit_name:
            tmp = gmaps.geocode(name, language='ko')
            tmp_loc = tmp[0].get("geometry")
            visit_lat.append(tmp_loc['location']['lat'])
            visit_lng.append(tmp_loc['location']['lng'])
        # food.
        food = pd.read_csv('https://raw.githubusercontent.com/CHJun47/Data/main/food(1).csv')
        food_address = []
        food_lat = []
        food_lng = []
        food_name = []
        food_info = []
        food1_info = []
        food2_info = []
        food3_info = []
        food4_info = []
        food5_info = []
        food6_info = []
        food1_name = []
        food2_name = []
        food3_name = []
        food4_name = []
        food5_name = []
        food6_name = []
        for name in food.iloc[:,1]:
            food_name.append(name)
        for add in food.iloc[:,2]:
            food_address.append(str('서울')+add)
        for name in food_address:
            tmp = gmaps.geocode(name, language='ko')
            tmp_loc = tmp[0].get("geometry")
            food_lat.append((tmp_loc['location']['lat']))
            food_lng.append(tmp_loc['location']['lng'])
        food['lat'] = food_lat
        food['lng'] = food_lng
        food1 = food[food['분류'] == '음식점기타']
        for name in food1.iloc[:,5]:
            food1_info.append(name)
        food2 = food[food['분류'] == '한식']
        for name in food2.iloc[:,5]:
            food2_info.append(name)
        food3 = food[food['분류'] == '카페/찻집']
        for name in food3.iloc[:,5]:
            food3_info.append(name)
        food4 = food[food['분류'] == '간이음식']
        for name in food4.iloc[:,5]:
            food4_info.append(name)
        food5 = food[food['분류'] == '전문음식']
        for name in food5.iloc[:,5]:
            food5_info.append(name)
        food6 = food[food['분류'] == '외국식']
        for name in food6.iloc[:,5]:
            food6_info.append(name)
        for name in food1.iloc[:,1]:
            food1_name.append(name)
        for name in food2.iloc[:,1]:
            food2_name.append(name)
        for name in food3.iloc[:,1]:
            food3_name.append(name)
        for name in food4.iloc[:,1]:
            food4_name.append(name)
        for name in food5.iloc[:,1]:
            food5_name.append(name)
        for name in food6.iloc[:,1]:
            food6_name.append(name)
        food1 = pd.pivot_table(food1, index = ['주소'])
        food2 = pd.pivot_table(food2, index = ['주소'])
        food3 = pd.pivot_table(food3, index = ['주소'])
        food4 = pd.pivot_table(food4, index = ['주소'])
        food5 = pd.pivot_table(food5, index = ['주소'])
        food6 = pd.pivot_table(food6, index = ['주소'])
        visitors_total['lat'] = visit_lat
        visitors_total['lng'] = visit_lng
        visitors_total1 = pd.pivot_table(visitors_total, index = ['관광지'])
        map = folium.Map(location=[37.566535, 126.9779692],
        tiles = "stamen Terrain",
        zoom_start= 11)
        marker_cluster = MarkerCluster().add_to(map)
        ######################### 수정.
        if st.checkbox('관광지'):
            for n in range(int(len(visitors_total1))):
                folium.Marker([visitors_total1['lat'][n],
                visitors_total1['lng'][n]],tooltip = '"'+visit_name[n]+'"').add_to(marker_cluster)
        elif st.checkbox('음식점기타'):
            for n1 in range(int(len(food1))):
                folium.Marker([food1['lat'][n1],
                food1['lng'][n1]],popup = "<a href="+'"'+food1_info[n1]+'"'+"target ="+"_blank"+">Site</a>",tooltip = '"'+food1_name[n1]+'"',icon = folium.Icon(icon = 'star', color = 'red')).add_to(marker_cluster)
        elif st.checkbox('한식'):
            for n2 in range(int(len(food2))):
                folium.Marker([food2['lat'][n2],
                food2['lng'][n2]],popup = "<a href="+'"'+food2_info[n2]+'"'+"target ="+"_blank"+">Site</a>",tooltip = '"'+food2_name[n2]+'"',icon = folium.Icon(icon = 'star', color = 'yellow')).add_to(marker_cluster)
        elif st.checkbox('카페/찻집'):
            for n3 in range(int(len(food3))):
                folium.Marker([food3['lat'][n3],
                food3['lng'][n3]],popup = "<a href="+'"'+food3_info[n3]+'"'+"target ="+"_blank"+">Site</a>",tooltip = '"'+food3_name[n3]+'"',icon = folium.Icon(icon = 'star', color = 'green')).add_to(marker_cluster)
        elif st.checkbox('간이음식'):
            for n4 in range(int(len(food4))):
                folium.Marker([food4['lat'][n4],
                food4['lng'][n4]],popup = "<a href="+'"'+food4_info[n4]+'"'+"target ="+"_blank"+">Site</a>",tooltip = '"'+food4_name[n4]+'"',icon = folium.Icon(icon = 'star', color = 'orange')).add_to(marker_cluster)
        elif st.checkbox('전문음식'):
            for n5 in range(int(len(food5))):
                folium.Marker([food5['lat'][n5],
                food5['lng'][n5]],popup = "<a href="+'"'+food5_info[n5]+'"'+"target ="+"_blank"+">Site</a>",tooltip = '"'+food5_name[n5]+'"',icon = folium.Icon(icon = 'star', color = 'lightgray')).add_to(marker_cluster)
        elif st.checkbox('외국식'):
            for n6 in range(int(len(food6))):
                folium.Marker([food6['lat'][n6],
                food6['lng'][n6]],popup = "<a href="+'"'+food6_info[n6]+'"'+"target ="+"_blank"+">Site</a>",tooltip = '"'+food6_name[n6]+'"',icon = folium.Icon(icon = 'star', color = 'lightcyan')).add_to(marker_cluster)
        
        return map
st.subheader("주변 Search 지도.")
m = Folium_visit()
output = st_folium(m, key = "map", width = 1800, height = 600)

folium

import folium

m=folium.Map(location=[37.55092, 127.0377],zoom_start=11)
m.add_child(folium.LatLngPopup()) 
#Tpo10 우리나라 관광지추천
#경복궁iframe으로 사진 띄우기-사진 경로지정해야함 
pic1 = base64.b64encode(open('C:/Users/김나영/Desktop/Gbg.jpg','rb').read()).decode()
image_tag1 = '<img src="data:image/jpeg;base64,{}">'.format(pic1)
iframe1 = folium.IFrame(image_tag1, width=500, height=500)
popup1 = folium.Popup(iframe1, max_width=650)
# 1.경복궁
folium.Marker([37.579617, 126.977041], # 마커 찍고싶은 좌표를 구해와서 원본 m에다 표시/추가
            popup=popup1, # popup: 마커 클릭시 팝업으로 상세내용 표시되는 옵션 추가
            tooltip='<i>경복궁</i>').add_to(m)# tooltip: 마우스오버시 상세내용 표시
#창경궁iframe으로 사진 띄우기
pic2 = base64.b64encode(open('C:/Users/김나영/Desktop/Cgg.jpg','rb').read()).decode()
image_tag2 = '<img src="data:image/jpeg;base64,{}">'.format(pic2)
iframe2 = folium.IFrame(image_tag2, width=500, height=500)
popup2 = folium.Popup(iframe2, max_width=650)          
# 2.창경궁
folium.Marker([37.5787708, 126.9948698],
            popup=popup2,
            tooltip='<i>창경궁</i>').add_to(m)              
#창덕궁iframe으로 사진 띄우기
pic3 = base64.b64encode(open('C:/Users/김나영/Desktop/Cdg.jpg','rb').read()).decode()
image_tag3 = '<img src="data:image/jpeg;base64,{}">'.format(pic3)
iframe3 = folium.IFrame(image_tag3, width=500, height=500)
popup3 = folium.Popup(iframe3, max_width=650)
# 3.창덕궁
folium.Marker([37.5794309, 126.9910426],
            popup=popup3,
            tooltip='<i>창덕궁</i>').add_to(m)
#덕수궁iframe으로 사진 띄우기
pic4 = base64.b64encode(open('C:/Users/김나영/Desktop/Dsg.jpg','rb').read()).decode()
image_tag4 = '<img src="data:image/jpeg;base64,{}">'.format(pic4)
iframe4 = folium.IFrame(image_tag4, width=500, height=500)
popup4 = folium.Popup(iframe4, max_width=650)
#4.덕수궁
folium.Marker([37.5658049, 126.9751461],
            popup=popup4,
            tooltip='<i>덕수궁</i>').add_to(m)
#경희궁iframe으로 사진 띄우기
pic5 = base64.b64encode(open('C:/Users/김나영/Desktop/Ghg.jpg','rb').read()).decode()
image_tag5 = '<img src="data:image/jpeg;base64,{}">'.format(pic5)
iframe5 = folium.IFrame(image_tag5, width=500, height=500)
popup5 = folium.Popup(iframe5, max_width=650)
#5.경희궁
folium.Marker([37.5712378, 126.9681688],
            popup=popup5,
            tooltip='<i>경희궁</i>').add_to(m)
#세종대왕기념관iframe으로 사진 띄우기
pic6 = base64.b64encode(open('C:/Users/김나영/Desktop/King.jpg','rb').read()).decode()
image_tag6 = '<img src="data:image/jpeg;base64,{}">'.format(pic6)
iframe6 = folium.IFrame(image_tag6, width=500, height=500)
popup6 = folium.Popup(iframe6, max_width=650)
#6.세종대왕기념관
folium.Marker([37.590783, 127.0435458],
            popup=popup6,
            tooltip='<i>세종대왕기념관</i>').add_to(m)
#서울스카이iframe으로 사진 띄우기
pic7 = base64.b64encode(open('C:/Users/김나영/Desktop/Sky.png','rb').read()).decode()
image_tag7 = '<img src="data:image/jpeg;base64,{}">'.format(pic7)
iframe7 = folium.IFrame(image_tag7, width=500, height=500)
popup7 = folium.Popup(iframe7, max_width=650)
#7.서울스카이
folium.Marker([37.5136918, 127.1037211],
            popup=popup7,
            tooltip='<i>남산타워</i>').add_to(m)
#롯데월드iframe으로 사진 띄우기
pic8 = base64.b64encode(open('C:/Users/김나영/Desktop/Lotte.jpg','rb').read()).decode()
image_tag8 = '<img src="data:image/jpeg;base64,{}">'.format(pic8)
iframe8 = folium.IFrame(image_tag8, width=500, height=500)
popup8 = folium.Popup(iframe8, max_width=650)
#8.롯데월드
folium.Marker([37.5111158, 127.098167],
            popup=popup8,
            tooltip='<i>롯데월드</i>').add_to(m)
              
#서울시립미술관iframe으로 사진 띄우기
pic9 = base64.b64encode(open('C:/Users/김나영/Desktop/SMA.jpg','rb').read()).decode()
image_tag9 = '<img src="data:image/jpeg;base64,{}">'.format(pic9)
iframe9 = folium.IFrame(image_tag9, width=500, height=500)
popup9 = folium.Popup(iframe9, max_width=650)
#9.서울시립미술관
folium.Marker([37.5640625, 126.9738125],
            popup=popup9,
            tooltip='<i>서울시립미술관</i>').add_to(m)
              
#국립중앙박물관iframe으로 사진 띄우기
pic10 = base64.b64encode(open('C:/Users/김나영/Desktop/NMK.jpg','rb').read()).decode()
image_tag10 = '<img src="data:image/jpeg;base64,{}">'.format(pic10)
iframe10 = folium.IFrame(image_tag10, width=500, height=500)
popup10 = folium.Popup(iframe10, max_width=650)
#10.국립중앙박물관
folium.Marker([37.5238506, 126.9804702],
            popup=popup10,
            tooltip='<i>국립중앙박물관</i>').add_to(m

streamlit →folium지도

import urllib.request
import numpy as np
import pandas as pd
import plotly.express as px
import requests
import streamlit as st
from streamlit_folium import st_folium
from folium.plugins import MarkerCluster
import folium
import xmltodict
import base64
from pandas import json_normalize
from streamlit_extras.add_vertical_space import add_vertical_space
from streamlit_lottie import st_lottie
st.set_page_config(page_title="파이썬응용 데이터분석 기말 프로젝트", layout="wide")
row0_spacer1, row0_1, row0_spacer2, row0_2, row0_spacer3 = st.columns(
    (0.1, 6, 0.2, 2, 0.1)
)
row0_1.title("파이썬응용 데이터분석 기말 프로젝트.")
with row0_2:
    add_vertical_space()
    st.markdown("###### 2017E8129 통계데이터과학과 조현준")
def visitor_area():
        st.subheader("방문자 거주지 분포.")
        visitorArea = pd.read_csv('https://raw.githubusercontent.com/CHJun47/Data/main/visitor_area.csv', encoding = 'CP949')
        fig3 = px.treemap(visitorArea, path = [px.Constant('대한민국'),'광역지자체명','기초지자체명'], values = '방문자 수(합)',
                            color = '방문자 수(합)',
                            color_continuous_scale = 'GnBu')
        fig3.update_layout(margin = dict(t=50, l=25, r=25, b=25))
        st.plotly_chart(fig3, theme = "streamlit", use_container_width = True)
def visitor_seoul():
    line1_spacer1, line1_1, line1_spacer2 = st.columns((0.1, 3.2, 0.1))
    with line1_1:
        st.header("Analysis of Seoul Data.")
    row3_space1, row3_1, row3_space2, row3_2, row3_space3 = st.columns(
        (0.1, 1, 0.1, 1, 0.1)
    )
    with row3_1:
        st.subheader("서울 방문자 수")
        visitorData = pd.read_csv('https://raw.githubusercontent.com/CHJun47/Data/main/visitorData_seoul.csv', encoding='CP949')
        visitorData.columns = ["기준연월","지역명","방문자 수"]
        fig = px.line(
            visitorData,
            x = '기준연월',
            y = '방문자 수',
            color_discrete_sequence = ["lightgoldenrodyellow"]
        )
        st.plotly_chart(fig, theme = "streamlit", use_container_width = True)
    with row3_2:
        visitor_area()
visitor_seoul()
def inflow_ouflow_chart():
    row4_spacer1, row4_1, row4_spacer2 = st.columns((0.1, 5, 0.1))
    with row4_1:
        st.subheader("유입 유출 분석")
        flowData = pd.read_csv("https://raw.githubusercontent.com/CHJun47/Data/main/inflow_outflow.csv", encoding = 'CP949')
        fig1 = px.parallel_categories(
            flowData,
            color = "유입 비율",
            color_continuous_scale = "GnBu"
            )
        st.plotly_chart(fig1, theme = "streamlit", use_container_width = True)
inflow_ouflow_chart()
def touristDest():
    row5_space1, row5_1, row5_space2, row5_2, row5_space3 = st.columns(
        (0.1, 1, 0.1, 1, 0.1)
    )
    with row5_1:
        st.subheader("관광소비 유형.")
        tourrist_dest = pd.read_csv("https://raw.githubusercontent.com/CHJun47/Data/main/tourrist_dest.csv", encoding='CP949')
        fig4 = px.treemap(tourrist_dest, path = [px.Constant('점포'),'업종대분류명','업종중분류명'], values = '중분류 소비액(합)',
                            color = '중분류 소비액(합)',
                            color_continuous_scale = "GnBu")
        fig4.update_layout(margin = dict(t=50, l=25, r=25, b=25))
        st.plotly_chart(fig4, theme = "streamlit", use_container_width = True)
    with row5_2:
        st.subheader("SNS언급량.")
        seoul_SNS = pd.read_csv('https://raw.githubusercontent.com/CHJun47/Data/main/seoul_SNS.csv', encoding = 'CP949')
        fig5 = px.bar(
            seoul_SNS,
            x = '기준연월',
            y = '검색량(건)',
            color_discrete_sequence = ["lightgoldenrodyellow"]
        )
        st.plotly_chart(fig5, theme = "streamlit", use_container_width = True)
touristDest()
def draw_folium_map():
    center = [39.5, -98.5]
    tiles = ["cartodbpositron", "Stamen Toner", "OpenStreetMap"]
    map = folium.Map(
        location=[center[0], center[1]],
        zoom_start=10,
        zoom_control=True,
        scrollWheelZoom=False,
        tiles=tiles[0],
    )
    folium.Marker(
        location=[39.5, -98.5],
        popup=f"A location!",
        icon=folium.Icon(color="blue", icon="star"),
    ).add_to(map)
    return map
m = draw_folium_map()
output = st_folium(m, key="map", width=650, height=600)
st.write(output)

CircleMarker — popup

import pandas as pd
import folium
from folium.plugins import FastMarkerCluster
file_url = 'http://www2.census.gov/geo/docs/maps-data/data/gazetteer/2016_Gazetteer/2016_Gaz_zcta_national.zip'
#Pandas usually infers zips are numerics, but we lose our leading zeroes so let's go with the object dtype
df = pd.read_csv(file_url, sep='\t', dtype={'GEOID' : object}) 
df.columns = df.columns.str.strip() #some column names have some padding
df = df.sample(1000)
folium_map = folium.Map(location=[38, -97],
                        zoom_start=4.4,
                        tiles='CartoDB dark_matter')
# These two lines should create FastMarkerClusters
FastMarkerCluster(data=list(zip(df['INTPTLAT'].values, df['INTPTLONG'].values))).add_to(folium_map)
folium.LayerControl().add_to(folium_map)
for index, row in df.iterrows():
    # generate the popup message that is shown on click.
    popup_text = "{}<br> ALAND: {:,}<br> AWATER: {:,}"
    popup_text = popup_text.format(
                      index,
                      row["ALAND_SQMI"],
                      row["AWATER_SQMI"]
                      )
    folium.CircleMarker(location=(row["INTPTLAT"],
                                  row["INTPTLONG"]),
                        radius= row['ALAND_SQMI']/100,
                        color="#007849",
                        popup=popup_text,
                        fill=False).add_to(folium_map)
folium_map

댓글

댓글 남기기