Spaces:
Sleeping
Sleeping
Upload app.py
Browse files
app.py
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import streamlit as st
|
| 2 |
+
import pandas as pd
|
| 3 |
+
import matplotlib.pyplot as plt
|
| 4 |
+
import pandas_bokeh
|
| 5 |
+
|
| 6 |
+
|
| 7 |
+
# ๊ธ ์ฐ๊ธฐ(๋งํฌ ์ฝ์
)
|
| 8 |
+
st.title('๊ฒฝํฌ๋ ์ธ๊ทผ ๊ฐ์ฑ๋น ์ข์ ๋ง์ง ๋์ด ... ๊ฑด๊ฐ์์ "๊ธ์"')
|
| 9 |
+
|
| 10 |
+
st.header('๋ํ์ ๋์ ์ ๋ ดํ๊ณ ๋ง์๋ ์์์ ์ธ๊ธฐ')
|
| 11 |
+
st.subheader('๋ถ์, ์ค์, ํ์์ ์ผ์๊น์ง ๋ค์ํ ์์ ์ธ๊ฒ ์ ๊ณต')
|
| 12 |
+
st.subheader('์ถ์ ํ์ฌ์ ํ๋ฒ๊ฑฐ-ํซ๋๊ทธ ํธ๋ํธ๋ญ๋ ๋ฑ์ฅ')
|
| 13 |
+
st.write('''๊ฒฝํฌ๋ ์ธ๊ทผ์๋ ์ต๊ทผ ๊ฐ์ฑ๋น ์ข์ ๋ง์ง๋ค์ด ์์ ๋ค์ด์๋ฉฐ ํ์๋ค ์ฌ์ด์์ ์ธ๊ธฐ๋ฅผ ๋๊ณ ์๋ค. ํ์ ๋ ๋ํ์ ์ง๊ฐ์ฌ์ ์ ๋ง๋ ์ ๋ ดํ ๊ฐ๊ฒฉ๊ณผ ๋ค์ํ๊ณ ํ๋ฆฌํฐ ๋์ ๋ฉ๋ด๋ก ์
์๋ฌธ์ด ๋๋ฉด์ ์ฑ์
์ค์ธ ๊ฒ์ด๋ค.
|
| 14 |
+
์ด์ฒ๋ผ ๊ฒฝํฌ๋ ์ฃผ๋ณ์๋ ํ์๋ค ์ฌ์ด์์ ์
์๋ฌธ์ด ์์ํ ๊ฐ์ฑ๋น ๋ง์ง๋ค์ด ๋ง๋ค. ๋ฟ๋ง ์๋๋ผ ๋ํ ์ถ์ ๋๋ฉด ๋ค์ํ [ํธ๋ํธ๋ญ](https://namu.wiki/w/%ED%91%B8%EB%93%9C%20%ED%8A%B8%EB%9F%AD)๋ค๋ ์ฐพ์์ ์ ๋ ดํ๊ณ ๋ง์๋ ๋ฉ๋ด๋ฅผ ์ ๋ณด์ด๋ฉฐ ํฐ ์ธ๊ธฐ๋ฅผ ๋๋ค.
|
| 15 |
+
์ต๊ทผ ๋ฌผ๊ฐ์์น์ผ๋ก ์ธํด ์ธ์๋น ๋ถ๋ด์ด ํฐ ๋ํ์๋ค์๊ฒ ์ด๋ฐ ๊ฐ์ฑ๋น ๋์ ๋ง์ง๊ณผ ํธ๋ํธ๋ญ์ ํ์๋ฐ์ ๋งํ๋ค.''' )
|
| 16 |
+
|
| 17 |
+
# ์ฌ์ง ์ฝ์
|
| 18 |
+
st.image('photo1.jpg', caption='์ง๋ 4์20์ผ ๊ฒฝํฌ๋ ๊ต๋ด์์ ํ์๋ค์ด ํธ๋ํธ๋ญ์์ ์์์ ๊ตฌ๋งคํ๊ณ ์๋ค')
|
| 19 |
+
|
| 20 |
+
st.image('photo2.jpg', caption='๊ฒฝํฌ๋ ๊ทผ์ฒ ๋ง์ง ์ง๋(--- ์ ๊ณต)')
|
| 21 |
+
|
| 22 |
+
st.header('์ผ ๊ฒ ๋น์ง๋ก? ๊ฑด๊ฐ์์ "์ ๋ณด์ด๋ค"')
|
| 23 |
+
st.subheader('์ ๋ ดํ๊ณ ํธ์งํ์ง๋ง ์์๊ณผ ๊ฑด๊ฐ์ ์ค์ข
')
|
| 24 |
+
st.subheader('"๋ํ๊ฐ ๋จน๊ฑฐ๋ฆฌ, ๊ฑด๊ฐ์ ๊ท ํ์ ์ก์์ผ ํ ๋"')
|
| 25 |
+
st.write('''๊ฒฝํฌ๋ ์ธ๊ทผ ๋ง์ง๋ค์ ๋ฉ๋ด๋ฅผ ์์ธํ ๋ณด๋ฉด ๊ฑด๊ฐํ ์์ฌ๋ฃ๋ ์์์ ํฌ๊ฒ ๊ณ ๋ ค๋์ง ์์ ๊ฒ ๊ฐ์ ์์ฌ์์ด ๋จ๋๋ค.
|
| 26 |
+
๋ํ๊ฐ์์ ๊ฑด๊ฐ์ ๋ํ ๊ณ ๋ฏผ๋ณด๋ค ์ธ๊ณ ๋ฐฐ๋ถ๋ฅด๊ฒ ๋จน์ ์ ์๋ ๊ณณ์ด ์ธ๊ธฐ์ธ ์ ์ ์ดํด๋๋ค. ํ์ง๋ง ํ๋ฒ์ฏค์ ์์๊ณผ ๊ฑด๊ฐ์ ์๊ฐํด๋ด์ผ ํ๋ค.
|
| 27 |
+
์ฒญ๋
๋๋ถํฐ ๊ฑด๊ฐ์์ ์ญ์ทจํ๊ณ ์ฌ๋ฐ๋ฅธ ์์ต๊ด์ ๊ฐ์ ธ์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.''' )
|
| 28 |
+
|
| 29 |
+
# ๋ฐ์ดํฐ ๋ณด์ฌ์ฃผ๊ธฐ
|
| 30 |
+
df_แแ
งแผแแ
ดแแ
ขแแ
กแบแแ
ตแธ = pd.read_excel('data_blogs.xlsx', index_col=0)
|
| 31 |
+
st.write('์ทจ์ฌํ์ ๋ค์ด๋ฒ ๋ธ๋ก๊ทธ์์ "๊ฒฝํฌ๋ ๋ง์ง"์ ๊ฒ์ํด ๊ธ 300๊ฐ๋ฅผ ์์งํ๋ค', df_แแ
งแผแแ
ดแแ
ขแแ
กแบแแ
ตแธ)
|
| 32 |
+
|
| 33 |
+
df_แแ
งแผแแ
ดแแ
ขแแ
กแบแแ
ตแธ_keyword = pd.read_excel('data_keywords.xlsx', index_col=0)
|
| 34 |
+
st.write('๋ธ๋ก๊ทธ ๊ธ์์ ๊ฐ์ฅ ๋ง์ด ์ถํํ ๋จ์ด๋ ~~~ ์ค๋ช
~~~', df_แแ
งแผแแ
ดแแ
ขแแ
กแบแแ
ตแธ_keyword)
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
|
| 38 |
+
# ์๋ํด๋ผ์ฐ๋
|
| 39 |
+
st.write('์ฃผ์ ๋จ์ด๋ค์ ์๋ํด๋ผ์ฐ๋๋ก ๋ณด์ฌ์ฃผ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค')
|
| 40 |
+
st.image('wordcloud.png')
|
| 41 |
+
|
| 42 |
+
|
| 43 |
+
|
| 44 |
+
# ์ฐ๊ฒฐ๋ง ๋ถ์
|
| 45 |
+
st.write('''์ทจ์ฌํ์ ์ฃผ์ ๋จ์ด๋ค ๊ฐ์ ๊ณต๋์ถํํ๋ ๊ด๊ณ๋ฅผ ๋ฐํ์ผ๋ก ์๋ฏธ์ฐ๊ฒฐ๋ง์ ๊ทธ๋ ค๋ณด์๋ค.
|
| 46 |
+
๋ถ์๊ฒฐ๊ณผ, ~~์ค๋ช
~~''')
|
| 47 |
+
st.image('network.png')
|
| 48 |
+
|
| 49 |
+
|
| 50 |
+
|
| 51 |
+
# ๋ฐ์ดํฐ(๊ตํต์ฌ๊ณ ) ๋ณด์ฌ์ฃผ๊ธฐ
|
| 52 |
+
df_๊ตํต์ฌ๊ณ = pd.read_excel('data_traffic_accidents.xlsx', index_col=0)
|
| 53 |
+
st.write('๋ค์ ๋ฐ์ดํฐ๋ ์ ๊ตญ์ ๊ตํต์ฌ๊ณ ๋ฅผ ์ง์ญ๋ณ๋ก ์ง๊ณํ ๊ฒ์ด๋ค', df_๊ตํต์ฌ๊ณ )
|
| 54 |
+
|
| 55 |
+
# ๊ฒ์์ด ์
๋ ฅ ๋ฐ์ ์ถ๋ ฅ
|
| 56 |
+
query = st.text_input('์ด ๊ณณ์ ์ง์ญ๋ช
(์๊ตฐ๊ตฌ๋์๋ฉด)์ ์
๋ ฅํ๋ฉด ๊ด๋ จ ๋ฐ์ดํฐ๋ง ๊ฒ์ํด ๋ณด์ฌ์ค๋๋ค', key='region1_input')
|
| 57 |
+
df_๊ตํต์ฌ๊ณ ['select1']=df_๊ตํต์ฌ๊ณ ['์ฌ๊ณ ์ง์ญ์์น๋ช
'].apply(lambda x: 1 if query in x else 0)
|
| 58 |
+
st.write('๊ฒ์ ๊ฒฐ๊ณผ:', df_๊ตํต์ฌ๊ณ [df_๊ตํต์ฌ๊ณ ['select1']==1])
|
| 59 |
+
|
| 60 |
+
# ๊ตํต์ฌ๊ณ ์ ํ๊ณผ ์ฐ๋์ ๋ฐ๋ฅธ pivot table ๋ณด์ฌ์ฃผ๊ธฐ
|
| 61 |
+
df_๊ตํต์ฌ๊ณ _pivot=df_๊ตํต์ฌ๊ณ .pivot_table(index='์ฌ๊ณ ์ ํ๊ตฌ๋ถ', columns='์ฌ๊ณ ์ฐ๋', values='์ฌ๊ณ ๊ฑด์', aggfunc='sum')
|
| 62 |
+
df_๊ตํต์ฌ๊ณ _heatmap=df_๊ตํต์ฌ๊ณ _pivot.style.background_gradient(cmap='Oranges').format("{:.2f}")
|
| 63 |
+
st.write('๋ค์ ํ๋ ๊ตํต์ฌ๊ณ ๊ฑด์๋ฅผ ์ ํ๊ณผ ์ฐ๋์ ๋ฐ๋ผ ๊ตฌ๋ถํ ๊ฒ์ด๋ค', df_๊ตํต์ฌ๊ณ _heatmap)
|
| 64 |
+
|
| 65 |
+
# ๊ฒ์์ด ์
๋ ฅ ๋ฐ์ pivot table ์ถ๋ ฅ
|
| 66 |
+
query_pivot = st.text_input('์ด ๊ณณ์ ์ง์ญ๋ช
(์๊ตฐ๊ตฌ)์ ์
๋ ฅํ๋ฉด ๊ด๋ จ ๋ฐ์ดํฐ๋ง ๊ฒ์ํด ๋ณด์ฌ์ค๋๋ค', key='region2_input')
|
| 67 |
+
df_๊ตํต์ฌ๊ณ ['select2']=df_๊ตํต์ฌ๊ณ ['์ฌ๊ณ ์ง์ญ์์น๋ช
'].apply(lambda x: 1 if query_pivot in x else 0)
|
| 68 |
+
df_๊ตํต์ฌ๊ณ _pivot_selected=df_๊ตํต์ฌ๊ณ [df_๊ตํต์ฌ๊ณ ['select2']==1].pivot_table(index='์ฌ๊ณ ์ ํ๊ตฌ๋ถ', columns='์ฌ๊ณ ์ฐ๋', values='์ฌ๊ณ ๊ฑด์', aggfunc='sum')
|
| 69 |
+
df_๊ตํต์ฌ๊ณ _heatmap_selected=df_๊ตํต์ฌ๊ณ _pivot_selected.style.background_gradient(cmap='Oranges').format("{:.2f}")
|
| 70 |
+
st.write('๊ฒ์ ๊ฒฐ๊ณผ:', df_๊ตํต์ฌ๊ณ _heatmap_selected)
|
| 71 |
+
|
| 72 |
+
# pandas_bokeh ๊ทธ๋ํ ๋ณด์ฌ์ฃผ๊ธฐ
|
| 73 |
+
st.write('์ ๊ตญ ๊ตํต์ฌ๊ณ ๋ฐ์ดํฐ์ ๋ฐ๋ฅด๋ฉด, ์ฌ๊ณ ๊ฑด์์ ์ค์์์๋ ๋ฐ์ ํ ๊ด๋ จ์ ๋งบ๊ณ ์๋ค. ~~~์ค๋ช
~~. *๊ทธ๋ํ ๋ด ์ ์ ์ปค์๋ฅผ ๋๋ฉด ์ง์ญ๋ช
์ด ๋ํ๋๋ค')
|
| 74 |
+
p_scatter = df_๊ตํต์ฌ๊ณ .plot_bokeh.scatter(
|
| 75 |
+
x="์ฌ๊ณ ๊ฑด์",
|
| 76 |
+
y="์ค์์์",
|
| 77 |
+
title="์ฌ๊ณ ๊ฑด์์ ์ค์์์",
|
| 78 |
+
size=10,
|
| 79 |
+
hovertool_string="""<h6>์์น:@{์ฌ๊ณ ์ง์ญ์์น๋ช
}</h6>"""
|
| 80 |
+
)
|
| 81 |
+
st.bokeh_chart(p_scatter, use_container_width=True)
|
| 82 |
+
|
| 83 |
+
# ์ ํํ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ถ๋ ฅ
|
| 84 |
+
option = st.selectbox('์ฐ๋๋ฅผ ์ ํํ๋ฉด ํด๋น ์๊ธฐ์ ๊ทธ๋ํ๋ฅผ ๋ณด์ฌ์ค๋๋ค',
|
| 85 |
+
(2012, 2013, 2014, 2015, 2016, 2018, 2017, 2019, 2020, 2021), key='year_input')
|
| 86 |
+
|
| 87 |
+
p_scatter_selected = df_๊ตํต์ฌ๊ณ [df_๊ตํต์ฌ๊ณ ['์ฌ๊ณ ์ฐ๋']==option].plot_bokeh.scatter(
|
| 88 |
+
x="์ฌ๊ณ ๊ฑด์",
|
| 89 |
+
y="์ค์์์",
|
| 90 |
+
title="์ฌ๊ณ ๊ฑด์์ ์ค์์์",
|
| 91 |
+
size=10,
|
| 92 |
+
hovertool_string="""<h6>์์น:@{์ฌ๊ณ ์ง์ญ์์น๋ช
}</h6>"""
|
| 93 |
+
)
|
| 94 |
+
st.write('๊ฒ์ ๊ฒฐ๊ณผ:')
|
| 95 |
+
st.bokeh_chart(p_scatter_selected, use_container_width=True)
|