- μ΄μ© λ°μ΄ν° μλ£
λΆμ°κ΄κ΄κ³΅μ¬_λΆμ°μ§μ μλ°λΆμΌ μ 체_20220101
- pythonκ³Ό streamlit(λ°μ΄ν° κΈ°λ° μΉ μ ν리μΌμ΄μ μ λ§λλ λꡬ) μ μ΄μ©νμ¬ νΈμ μμ€, μλλ³ λΆμ° μλ°μ μ μ‘°ν μΉμ¬μ΄νΈ κ°λ°
1. μκ°
- λΆμ° μλ°μ μ λ°μ΄ν°λ₯Ό νμ©ν κ²μ μΉ μ΄ν리μΌμ΄μ μκ°
2. μ΄ν리μΌμ΄μ κΈ°λ₯
- λ€μν νΈμμμ€ μ ν κ°λ₯
- ν μ²΄μ΄ μ΄λ κ°λ₯, μ μλλ‘ μ΄μ© κ°λ₯ λ±
- μ§λ μμμ κ²μ 쑰건μ λ§λ μλ°μ
μ νμ
- μ νν 쑰건μ λ°λΌ μ§λ μμ λ§μ»€λ‘ νμ
- μꡰꡬ λ° μλ©΄λλ³ κ²μ 쑰건 μ§μ
- μ¬μ΄λλ°μμ μꡰꡬλͺ λ° μλ©΄λλͺ μ ν κ°λ₯
- μμ
λ€μ΄λ‘λ κΈ°λ₯
- νμ¬ νν°λ§λ κ²°κ³Όλ₯Ό μμ νμΌλ‘ λ€μ΄λ‘λ
3. μ½λ λμ κ³Όμ
- λ°μ΄ν° λ‘λ λ° μ΄κΈ° μ€μ
- Plotly, Pandas, Streamlit λ±μ λΌμ΄λΈλ¬λ¦¬ μ¬μ©
- κ²μ 쑰건 μ€μ
- νΈμμμ€ λ° μ§μ μ νμ μν μ¬μ΄λλ° μ 곡
- λ°μ΄ν° νν°λ§
- μ νν 쑰건μ λ°λΌ λ°μ΄ν°λ₯Ό νν°λ§νμ¬ μ§λ λ° κ²°κ³Όμ λ°μ
- μ§λ νμ
- Folium λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ μλ°μ μ μμΉλ₯Ό μ§λ μμ νμ
- κ²°κ³Ό νμ λ° λ€μ΄λ‘λ
- νν°λ§λ κ²°κ³Όλ₯Ό νλ©΄μ νμνκ³ , λ€μ΄λ‘λ λ²νΌμΌλ‘ μμ νμΌ
pythonCopy code
# νμν λΌμ΄λΈλ¬λ¦¬ μν¬νΈ
import pandas as pd
import koreanize_matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
from IPython.display import set_matplotlib_formats
# Colabμμ μ¬μ©νλ νκΈ ν°νΈ μ€μ
plt.rc('font', family='Malgun Gothic')
plt.rc('axes', unicode_minus=False)
set_matplotlib_formats('retina')
# λ°μ΄ν° λΆλ¬μ€κΈ°
df = pd.read_csv("/content/drive/MyDrive/Colab Notebooks/BusanHotel.csv", encoding='cp949')
df1 = pd.read_csv("/content/drive/MyDrive/Colab Notebooks/koreaLibrary.csv", encoding='cp949')pythonCopy code
# νμ μλ μ΄ μμ
clean_data = df.drop(['νμ§κ³ μ λ²νΈ', 'λ²μ λμ½λ', 'νμ λμ½λ', 'λλ‘λͺ
μ½λ', 'λ±λ‘μΌμ'], axis=1)
# 'μΉ΄ν
κ³ λ¦¬λͺ
'μ΄ 'λ¬Ένκ΄κ΄/λͺ
μ'μΈ ν μ κ±°
clean_data = clean_data[clean_data['μΉ΄ν
κ³ λ¦¬λͺ
'] != 'λ¬Ένκ΄κ΄/λͺ
μ']
# 'νμ
μ¬λΆ'κ° 'Y'μΈ ν μ κ±°
clean_data = clean_data[clean_data['νμ
μ¬λΆ'] != 'Y']
# κ²°μΈ‘κ° μ²λ¦¬
clean_data['μ£Όμ°¨κ°λ₯μ¬λΆ'] = clean_data['μ£Όμ°¨κ°λ₯μ¬λΆ'].fillna('N')
clean_data['νμ₯μ€μ 무'] = clean_data['νμ₯μ€μ 무'].fillna('N')
# ... (μ΄ν μλ΅)pythonCopy code
import folium
# λ°μ΄ν°μ μλ, κ²½λ νκ· κ°μ μ€μ¬μΌλ‘ μ§λ μμ±
map = folium.Map(location=[clean_data['μλ'].mean(), clean_data['κ²½λ'].mean()], zoom_start=7)
# μ§λμ λ§μ»€ μΆκ°
for n in clean_data.index:
name = clean_data.loc[n, 'μ
체λͺ
']
address = clean_data.loc[n, 'λλ‘λͺ
']
popup = f"{name}-{address}"
location = [clean_data.loc[n, 'μλ'], clean_data.loc[n, 'κ²½λ']]
folium.Marker(
location=location,
popup=popup,
icon=folium.Icon(color='red', icon='plus', prefix='fa')
).add_to(map)
# μ§λ μΆλ ₯
mappythonCopy code
# μꡰꡬλͺ
λ³ μλ©΄λ λͺ
λΆλ₯ λ° μΆλ ₯
table = pd.pivot_table(clean_data, index=['μꡰꡬλͺ
'], values=['μλ©΄λλͺ
'], aggfunc='count')
print(table)pythonCopy code
# μμ
μ μ μ₯λ λ°μ΄ν° κ°κ³΅
adress_roadname = clean_data['λλ‘λͺ
'] + clean_data['λλ‘λͺ
μμΈ']
adress = clean_data['μλλͺ
'] + clean_data['μꡰꡬλͺ
'] + clean_data['μλ©΄λλͺ
'] + clean_data['λ²μ§']
clean_data['μΌλ°μ£Όμ'] = adress
clean_data['λλ‘λͺ
μ£Όμ'] = adress_roadname
down_data = clean_data[['μ
체λͺ
', 'μΌλ°μ£Όμ', 'λλ‘λͺ
μ£Όμ', 'μ νλ²νΈ', 'ννμ΄μ§μ£Όμ']]
down_data.fillna('', inplace=True)μ μ½λλ λ°μ΄ν°λ₯Ό λΆλ¬μ€κ³ μ μ²λ¦¬ν λ€, μ§λ μκ°νμ κ°λ¨ν λ°μ΄ν° λΆμμ μννλ©° μ΅μ’ μ μΌλ‘ Excel νμΌλ‘ μ μ₯νλ κ³Όμ μ λ΄κ³ μμ΅λλ€. μ½λμ μ£Όμκ³Ό μΆλ ₯ κ²°κ³Όλ₯Ό ν΅ν΄ κ° λ¨κ³μμ μ΄λ€ μμ μ΄ μνλκ³ μλμ§ νμΈν μ μμ΅λλ€.
pythonCopy code
# 'λ±λ‘μΌμ' μ΄ μμ
clean_data = clean_data.drop(['λ±λ‘μΌμ'], axis=1)- 'λ±λ‘μΌμ' μ΄μ μμ νλ λΆλΆμ λλ€. μ΄ μ΄μ λ°μ΄ν°μμ μ κ±°λμ΄ λ μ΄μ μ¬μ©λμ§ μκ² λ©λλ€.
pythonCopy code
# 'μΌλ°μ£Όμ'μ 'λλ‘λͺ
μ£Όμ' μ΄ μΆκ° λ° κ²°μΈ‘κ° μ²λ¦¬
adress_roadname = clean_data['λλ‘λͺ
'] + clean_data['λλ‘λͺ
μμΈ']
adress = clean_data['μλλͺ
'] + clean_data['μꡰꡬλͺ
'] + clean_data['μλ©΄λλͺ
'] + clean_data['λ²μ§']
clean_data['μΌλ°μ£Όμ'] = adress
clean_data['λλ‘λͺ
μ£Όμ'] = adress_roadname
# 'μ
체λͺ
', 'μΌλ°μ£Όμ', 'λλ‘λͺ
μ£Όμ', 'μ νλ²νΈ', 'ννμ΄μ§μ£Όμ' μ΄ μ ν
down_data = clean_data[['μ
체λͺ
', 'μΌλ°μ£Όμ', 'λλ‘λͺ
μ£Όμ', 'μ νλ²νΈ', 'ννμ΄μ§μ£Όμ']]
down_data.fillna('', inplace=True)- 'μΌλ°μ£Όμ' λ° 'λλ‘λͺ μ£Όμ' μ΄μ μλ‘ λ§λ€κ³ , κ²°μΈ‘κ°μ μ²λ¦¬νλ λΆλΆμ λλ€.
- μ΅μ’ μ μΌλ‘ 'μ 체λͺ ', 'μΌλ°μ£Όμ', 'λλ‘λͺ μ£Όμ', 'μ νλ²νΈ', 'ννμ΄μ§μ£Όμ' μ΄μ μ ννμ¬ λ°μ΄ν°νλ μμ λ§λλλ€.
μ΄ λΆλΆμμλ μ΄μ μ‘°μνμ¬ μ£Όμ κ΄λ ¨ μ 보λ₯Ό μλ‘μ΄ μ΄λ‘ μΆκ°νκ³ , νμν μ΄λ§ μ ννμ¬ μ΅μ’ λ°μ΄ν°λ₯Ό μ 리νλ μμ μ μνν©λλ€.
pythonCopy code
import plotly.graph_objects as go
import pandas as pd
import numpy as np
import streamlit as st
import yfinance as yf
import matplotlib.pyplot as plt
import folium
import openpyxl
from pyxlsb import open_workbook as open_xlsb
from io import BytesIO
from xlsxwriter import Workbook- plotly, pandas, streamlit, folium λ±μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ λ°μ΄ν° μκ°ν λ° μΉ μ ν리μΌμ΄μ κ°λ°μ νμν λͺ¨λ λ‘λ
pythonCopy code
st.title('Dynamic Busan βοΈ')
st.subheader('μνλ 쑰건μ λΆμ° μλ°μ
μλ₯Ό μ½κ² κ²μν΄λ΄μ! π', anchor=None, help=None, divider=False)- μΉ μ ν리μΌμ΄μ μ μ λͺ©κ³Ό λΆμ μ€μ
pythonCopy code
data = pd.read_csv('./BusanHotelFirst.csv')
filter_data = data- CSV νμΌμμ λΆμ° μλ°μ μ λ°μ΄ν° λ‘λ
filter_dataλ³μμ μ΄κΈ° λ°μ΄ν° μ€μ
pythonCopy code
options = st.sidebar.multiselect(
'νΈμμμ€',
['ν μ²΄μ΄ μ΄λ κ°λ₯', 'μ μλλ‘μ΄μ©κ°λ₯', 'λ¬Όν보κ΄ν¨ μ΄μ©κ°λ₯', 'μμ μ€ μ΄μ© κ°λ₯'])st.sidebar.multiselectμ μ¬μ©νμ¬ νΈμμμ€μ λν λ€μ€ μ ν κΈ°λ₯ ꡬν
pythonCopy code
if (options is not None):
for i in options:
col = options_value[i]
filter_data = filter_data[filter_data[col] == 'Y']- μ νν νΈμμμ€μ λ°λΌ λ°μ΄ν°λ₯Ό νν°λ§
pythonCopy code
map = folium.Map(location=[filter_data['μλ'].mean(), filter_data['κ²½λ'].mean()], zoom_start=10)
for n in filter_data.index:
name = filter_data.loc[n, 'μ
체λͺ
']
address = filter_data.loc[n, 'λλ‘λͺ
']
popup = folium.Popup(f'<i>{name}-{address}</i>', max_width=600, max_height=600)
location = [filter_data.loc[n, 'μλ'], filter_data.loc[n, 'κ²½λ']]
folium.Marker(
location=location,
popup=popup,
icon=folium.Icon(color='red', icon='plus', prefix='fa')
).add_to(map)- Foliumμ μ¬μ©νμ¬ μ§λλ₯Ό μμ±νκ³ , νν°λ§λ λ°μ΄ν°μ λν λ§μ»€ νμ
pythonCopy code
df_xlsx = to_excel(process_down_data(filter_data))
st.sidebar.download_button(label='π₯ Download Current Result',
data=df_xlsx,
file_name='df_test.xlsx')