I can run my python coding using streamlit on local computer with streamlit run file.py (screenshoot included)
but error when i deploy it to streamlit cloud. There is 1 xls file as dataset (i’ve linked my streamlit.io to my github → GitHub - bosimanurung/datasampah2021 ), the coding.py and xlsx file is in there
The screenshoot error when i deploy:
or i copy paste here:
ImportError: This app has encountered an error. The original error message is redacted to prevent data leaks. Full error details have been recorded in the logs (if you’re on Streamlit Cloud, click on ‘Manage app’ in the lower right of your app).
Traceback:
File "/home/adminuser/venv/lib/python3.9/site-packages/streamlit/runtime/scriptrunner/script_runner.py", line 534, in _run_script
exec(code, module.__dict__)File "/mount/src/datasampah2021/streamlit_app.py", line 12, in <module>
datasampah = load_data()File "/mount/src/datasampah2021/streamlit_app.py", line 8, in load_data
data = pd.read_excel('datasumbersampah.xlsx')File "/home/adminuser/venv/lib/python3.9/site-packages/pandas/io/excel/_base.py", line 504, in read_excel
io = ExcelFile(File "/home/adminuser/venv/lib/python3.9/site-packages/pandas/io/excel/_base.py", line 1580, in __init__
self._reader = self._engines[engine](File "/home/adminuser/venv/lib/python3.9/site-packages/pandas/io/excel/_openpyxl.py", line 552, in __init__
import_optional_dependency("openpyxl")File "/home/adminuser/venv/lib/python3.9/site-packages/pandas/compat/_optional.py", line 135, in import_optional_dependency
raise ImportError(msg)
My coding.py is (name streamlit_app.py on github):
import pandas as pd
import streamlit as st
st.set_page_config(layout=“wide”)
def load_data():
# Load your dataset here, replace ‘your_dataset.csv’ with your actual dataset file
data = pd.read_excel(‘datasumbersampah.xlsx’)
return data
Load the dataset
datasampah = load_data()
#baca data
#datasampah = pd.read_excel(“D:/Streamlit_bstry/datasumbersampah.xlsx”)
#print(datasampah)
#membuat field baru (Total)
datasampah[‘total’]=datasampah[‘rumahtangga’]+datasampah[‘perkantoran’]+datasampah[‘pasar’]+datasampah[‘perniagaan’]
+datasampah[‘fasilitaspublik’]+datasampah[‘kawasan’]+datasampah[‘lainnya’]
#print(datasampah)
#mau diBreakDown/diFilter by province
attributProvince = datasampah[‘provinsi’].unique().tolist()
#print(attributProvince)
row1_left, row1_middle, row1_right = st.columns((0.1, 3, 0.1))
with row1_middle:
st.title(‘Jumlah Sampah Provinsi Berdasarkan Sumber Sampah Tahun 2021’)
st.subheader(‘Streamli App by [Bosi] (https://bosimanurung.com)’)
st.markdown(‘Sampah merupakan masalah yang dihadapi hampir seluruh Negara di dunia. Tidak hanya di Negara negara berkembang, tetapi juga di
negara - negara maju, sampah selalu menjadi masalah. Rata-rata setiap harinya kota-kota besar di Indonesia menghasilkan puluhan ton sampah.
Pada dashboard berikut akan ditampilkan jumlah sampah (dalam satuan Ton) pada tiap provinsi di Indonesia berdasarkan sumber sampah.’)
st.markdown(‘Data yang digunakan bersumber dari https://sipsn.menlhk.go.id/sipsn/public/data/sumber’)
sidebar
st.sidebar.markdown(“Isikan parameter berikut :”)
provinsiygdipilih = st.sidebar.selectbox(‘Pilih Provinsi’, attributProvince)
#print(provinsiygdipilih)
datasampahprovinsi = datasampah.loc[datasampah[‘provinsi’] == provinsiygdipilih].reset_index(drop = True)
#print(datasampahprovinsi)
row2_left, row2_middle, row2_right = st.columns((.1, 3, .1))
with row2_middle:
st.subheader(‘Data yang digunakan’)
st.dataframe(datasampahprovinsi)
sektorsumbersampah = [‘rumahtangga’, ‘perkantoran’, ‘pasar’, ‘perniagaan’, ‘fasilitaspublik’, ‘kawasan’, ‘lainnya’]
#datasampahrumahtangga = datasampahprovinsi[‘rumahtangga’].sum()
#print(datasampahrumahtangga)
#bikin dataframe baru
jumlahsampah = pd.DataFrame(columns=[‘provinsi’, ‘jumlahsampah’, ‘kategorisampah’])
for sektor in sektorsumbersampah:
jumlah = datasampahprovinsi.groupby([‘provinsi’]).agg(jumlahsampah = (sektor, pd.Series.sum))
jumlah[‘kategorisampah’] = 'Sampah ’ + sektor.capitalize()
jumlah = jumlah.reset_index()
jumlahsampah = pd.concat([jumlahsampah, jumlah])
jumlahsampah = jumlahsampah.reset_index(drop=True)
#print(jumlahsampah)
#function tampilkan chart (visualisasi data)
import numpy as np
import matplotlib.pyplot as plt
def plotBar(data, x, y, color):
#Definisikan kolom yang akan di plot
x, y = data, data[y]
#Buat 1 Fugure and 1 subplot
fig, ax = plt.subplots()
#Bersihkan terlebih dahulu axes
ax.clear()
#Atur warna
color = plt.get_cmap(color)(np.linspace(0.25, 0.85, len(data)))
#Atur ukuran figure
fig.set_size_inches(10, 6)
#Plot data
ax.barh(x, y, color = color)
#Beri label pada sumbu (labelpad = memberi jarak label terhadap grafik)
ax.set_xlabel(xlabel = 'Jumlah Sampah (Ton)', labelpad = 12)
#Memberi anotasi pada grafik
j = 0
for i in plt.gca().patches:
ax.text(i.get_width()+.5, i.get_y()+.4, str(round(y[j],2)), fontsize = 8, color='black')
j = j + 1
#Hapus garis pada frame bagian kanan dan atas (atau dapat disesuaikan kebutuhan)
frame = ['right', 'top']
for i in frame:
ax.spines[i].set_visible(False)
return fig, ax
jumlahsampah = jumlahsampah.sort_values(by = [‘jumlahsampah’])
jumlahsampah = jumlahsampah.reset_index(drop=True)
fig1, ax1 = plotBar(data=jumlahsampah, x=‘kategorisampah’, y=‘jumlahsampah’, color=‘Purples’)
#-> di Spyder muncul di atas kanan, bagian plot
#plt.show() → for VSCode, not for Spyder
#tampilkan plot grafik di streamlit
row3_left, row3_middle, row3_right = st.columns((0.1, 3, 0.1))
with row3_middle:
st.subheader(‘Jumlah Sampah Provinsi {} Tiap Sektor’.format(provinsiygdipilih))
st.markdown(‘Berikut Ditampilkan Hasil Visualisasi Dari Data Sampah Provinsi Tersebut:’)
st.pyplot(fig1)
Please help me. This is my first time to deploy it so everyone can see the dashboard from anywhere