StockGenius / app.py
GarGerry's picture
Update app.py
c6afb83 verified
import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
import io
def main():
st.title("Financial Budget Planner 💰")
st.write("Kelola keuanganmu dengan lebih baik!")
# Input pemasukan
income = st.number_input("Masukkan total pemasukan bulanan (Rp)", min_value=0, step=100000)
# Input pengeluaran
st.subheader("Pengeluaran Bulanan")
categories = ["Makanan", "Transportasi", "Hiburan", "Tagihan", "Tabungan", "Lainnya"]
expenses = {}
for category in categories:
expenses[category] = st.number_input(f"{category} (Rp)", min_value=0, step=50000)
# Sisa saldo
remaining_balance = income - sum(expenses.values())
st.subheader("Ringkasan Keuangan")
st.write(f"Total Pengeluaran: Rp {sum(expenses.values()):,}")
st.write(f"Sisa Saldo: Rp {remaining_balance:,}")
# Visualisasi data
if sum(expenses.values()) > 0:
df = pd.DataFrame(expenses.items(), columns=["Kategori", "Jumlah"])
fig, ax = plt.subplots()
ax.pie(df["Jumlah"], labels=df["Kategori"], autopct='%1.1f%%', startangle=90, colors=["#ff9999", "#66b3ff", "#99ff99", "#ffcc99", "#c2c2f0", "#ffb3e6"])
ax.axis('equal')
st.pyplot(fig)
# Rekomendasi tabungan
if income > 0:
save_percentage = 20 if income > 5000000 else 10
recommended_savings = income * save_percentage / 100
st.write(f"💡 Rekomendasi: Sisihkan sekitar **{save_percentage}%** dari pemasukan untuk tabungan: Rp {recommended_savings:,}")
# Notifikasi jika over budget
if remaining_balance < 0:
st.warning("⚠️ Pengeluaran lebih besar dari pemasukan! Pertimbangkan untuk mengurangi pengeluaran.")
# Unduh laporan sebagai CSV
if st.button("Unduh Laporan CSV"):
df = pd.DataFrame(expenses.items(), columns=["Kategori", "Jumlah"])
df.loc[len(df.index)] = ["Total Pengeluaran", sum(expenses.values())]
df.loc[len(df.index)] = ["Pemasukan", income]
df.loc[len(df.index)] = ["Sisa Saldo", remaining_balance]
csv = df.to_csv(index=False).encode("utf-8")
st.download_button("Download CSV", csv, "laporan_keuangan.csv", "text/csv")
if __name__ == "__main__":
main()