-
Notifications
You must be signed in to change notification settings - Fork 0
/
covid19_dashboard2.py
133 lines (106 loc) · 4.99 KB
/
covid19_dashboard2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
from PIL import Image
import plotly.express as px
#Config
st.set_option('deprecation.showfileUploaderEncoding', False)
#Title
st.title("Dasbor Covid-19 di Indonesia")
st.write("Visualisasi Kasus Covid-19 di Indonesia")
image = Image.open("./data/Covid-19.jpeg")
st.image(image, use_column_width=True)
st.markdown('<style>body{background-color: lightblue;}</style>', unsafe_allow_html=True)
st.sidebar.subheader("Pengaturan Visualisasi")
uploaded_file = st.sidebar.file_uploader(label="upload file xlsx Anda", type=['xlsx'])
if uploaded_file is not None:
daily_cases = pd.read_excel(uploaded_file, sheet_name = "Kasus Aktif")
daily_cases.fillna(0,inplace=True)
daily_cases.set_index('Date',inplace=True)
for i in daily_cases.columns:
daily_cases[i] = daily_cases[i].astype(int)
statistik_harian=pd.read_excel(uploaded_file,sheet_name="Statistik Harian")
statistik_harian.fillna(0,inplace=True)
statistik_harian = pd.DataFrame({
'date': statistik_harian['Date'],
'kasus_harian': statistik_harian['Kasus harian'],
'sembuh': statistik_harian['Sembuh\n(baru)'],
'meninggal': statistik_harian['Meninggal\n(baru)'],
'jumlah_test': statistik_harian['Jumlah test/juta penduduk'],
'dosis_pertama': statistik_harian['Dosis pertama'],
'dosis_kedua': statistik_harian['Dosis kedua']})
statistik_harian.set_index('date',inplace=True)
kasus_per_provinsi=pd.read_excel(uploaded_file,sheet_name="Kasus per Provinsi")
kasus_per_provinsi = pd.DataFrame({
'provinsi': kasus_per_provinsi['Unnamed: 1'],
'kasus_aktif': kasus_per_provinsi['Unnamed: 2'],
'sembuh': kasus_per_provinsi['Unnamed: 4'],
'meninggal': kasus_per_provinsi['Unnamed: 6']
})
kasus_per_provinsi.drop(index=kasus_per_provinsi.index[0], axis=0, inplace=True)
kasus_per_provinsi.dropna(inplace=True)
kasus_per_provinsi.drop(labels=36, axis=0, inplace=True)
show_data1 = st.sidebar.checkbox("Tampilkan Data Kasus Harian")
show_data2 = st.sidebar.checkbox("Tampilkan Data Statistik Harian")
show_data3 = st.sidebar.checkbox("Tampilkan Data Kasus per Provinsi")
#selector untuk diagram
chart_select = st.sidebar.selectbox(
label='Pilih Jenis Chart',
options=["Line Chart", "Bar Plot"]
)
status_select = st.sidebar.radio("Status Pasien Covid-19", ("All", "Kasus Aktif vs Jumlah Test",
"Kasus Aktif vs Kasus Sembuh", "Kasus Meninggal"))
provinsi_select = st.sidebar.selectbox('Pilih Nama Provinsi', kasus_per_provinsi['provinsi'].unique())
provinsi_selected = kasus_per_provinsi[kasus_per_provinsi['provinsi'] == provinsi_select]
def get_total_dataframe(df):
total_dataframe = pd.DataFrame({
'status': ['kasus_aktif', 'sembuh', 'meninggal'],
'jumlah_kasus_per_provinsi': (provinsi_selected.iloc[0]['kasus_aktif'],
provinsi_selected.iloc[0]['sembuh'],
provinsi_selected.iloc[0]['meninggal'])
})
return total_dataframe
total_provinsi = get_total_dataframe(provinsi_selected)
try:
if chart_select == "Line Chart":
if status_select == "All":
statistik_harian.reset_index().plot(title="Jumlah Kasus Covid-19 di Indonesia", x='date', y=['kasus_harian', 'sembuh', 'meninggal', 'jumlah_test'], figsize=(15, 8))
st.pyplot(plt)
elif status_select == "Kasus Aktif vs Jumlah Test":
statistik_harian.reset_index().plot(title="Jumlah Kasus Covid-19 di Indonesia", x='date', y=['kasus_harian', 'jumlah_test'], figsize=(15, 8))
st.pyplot(plt)
elif status_select == "Kasus Aktif vs Kasus Sembuh":
statistik_harian.reset_index().plot(title="Jumlah Kasus Covid-19 di Indonesia", x='date', y=['kasus_harian', 'sembuh'], figsize=(15, 8))
st.pyplot(plt)
elif status_select == "Kasus Meninggal":
statistik_harian.reset_index().plot(title="Jumlah Kasus Covid-19 di Indonesia", x='date', y=['meninggal'], figsize=(15, 8))
st.pyplot(plt)
if chart_select == "Bar Plot":
category_select = st.sidebar.selectbox(
label="Pilih Kategori",
options=['Top 15 Kasus Aktif','Kasus per Provinsi', 'Vaksinasi']
)
color_plot = st.sidebar.selectbox(
label="Pilih Warna Chart",
options=['blue', 'red', 'green', 'black'])
if category_select == 'Vaksinasi':
statistik_harian.iloc[538][['dosis_pertama', 'dosis_kedua']].plot(kind='bar', title='Jumlah Dosis vaksin pertama dan kedua', figsize=(15, 8), color=color_plot)
print(statistik_harian.iloc[538])
st.pyplot(plt)
elif category_select == 'Top 15 Kasus Aktif':
daily_cases.iloc[:, 0:15].sum().sort_values(ascending=False).plot(kind="bar", title='15 Provinsi Dengan kasus Aktif terbanyak', figsize=(15, 8), color=color_plot)
plt.xlabel("Daerah Provinsi")
plt.ylabel("Jumlah Kasus Aktif")
st.pyplot(plt)
elif category_select == 'Kasus per Provinsi':
grafik_per_provinsi = px.bar(total_provinsi, x='status', y='jumlah_kasus_per_provinsi', color='status')
st.plotly_chart(grafik_per_provinsi)
if show_data1:
st.dataframe(daily_cases)
elif show_data2:
st.dataframe(statistik_harian)
elif show_data3:
st.dataframe(kasus_per_provinsi)
except Exception as e:
st.write("Silahkan Upload File Anda")
st.write(e)