perpus / app.py
veridetta's picture
rname
c0be56b
import streamlit as st
import pandas as pd
from pomegranate import DiscreteDistribution, HiddenMarkovModel
import matplotlib.pyplot as plt
import hmmlearn.hmm as hmm
import numpy as np
kolom = None
# Membuat form input untuk file csv tahun sebelumnya
file_sebelumnya = st.file_uploader("Upload file csv tahun sebelumnya", type="csv")
# Membuat tombol untuk menampilkan data awal 10 dari file csv tahun sebelumnya
if file_sebelumnya:
df_sebelumnya = pd.read_csv(file_sebelumnya)
if st.button("Tampilkan data awal 10 dari file csv tahun sebelumnya"):
st.write("Data awal 10 dari file csv tahun sebelumnya:")
st.write(df_sebelumnya.head(10))
# Membuat form input untuk file csv tahun sekarang
file_sekarang = st.file_uploader("Upload file csv tahun sekarang", type="csv")
# Membuat tombol untuk menampilkan data awal 10 dari file csv tahun sekarang
if file_sekarang:
df_sekarang = pd.read_csv(file_sekarang)
if st.button("Tampilkan data awal 10 dari file csv tahun sekarang"):
st.write("Data awal 10 dari file csv tahun sekarang:")
st.write(df_sekarang.head(10))
# Membuat form input untuk memilih kolom yang akan dicari kata kunci
if file_sebelumnya and file_sekarang:
kolom = st.selectbox("Pilih kolom yang akan dicari kata kunci", df_sebelumnya.columns)
# Membuat form input untuk memasukkan kata kunci
if kolom!= None:
keyword = st.text_input("Masukkan kata kunci")
# Membuat tombol untuk menampilkan jumlah keyword yang cocok
if file_sebelumnya and file_sekarang and kolom and keyword:
if st.button("Tampilkan jumlah keyword"):
# Menghitung jumlah kemunculan kata kunci pada file csv tahun sebelumnya
jumlah_sebelumnya = df_sebelumnya[kolom].str.contains(keyword, case=False).sum()
# Menghitung jumlah kemunculan kata kunci pada file csv tahun sekarang
jumlah_sekarang = df_sekarang[kolom].str.contains(keyword, case=False).sum()
# Menampilkan hasil
st.write(f"Jumlah keyword '{keyword}' pada file csv tahun sebelumnya: {jumlah_sebelumnya}")
st.write(f"Jumlah keyword '{keyword}' pada file csv tahun sekarang: {jumlah_sekarang}")
if file_sebelumnya and file_sekarang and kolom and keyword:
if st.button("Prediksi data untuk tahun berikutnya"):
# Membaca data tahun sebelumnya dan tahun sekarang
data = pd.concat([df_sebelumnya[kolom], df_sekarang[kolom]], ignore_index=True)
#data_bersih = pd.concat([df_sebelumnya, df_sekarang],ignore_index=True)
#st.write(data_bersih.head(10))
# Menghitung frekuensi kemunculan setiap kata pada data
freq = {}
for d in data:
d_str = str(d)
for w in d_str.split():
freq[w] = freq.get(w, 0) + 1
# Membuat model HMM
states = list(freq.keys())
# Menghitung total jumlah baris pada tabel yang cocok dengan keyword
total_data_sebelumnya = df_sebelumnya[kolom].str.contains(keyword, case=False).sum()
total_data_sekarang = df_sekarang[kolom].str.contains(keyword, case=False).sum()
# Membuat tabel dengan no, keyword, total judul yang cocok, dan total data yang cocok
no = []
keyword_list = []
tb_data_sebelumnya = []
tb_data_sekarang = []
total_data = []
for i, s in enumerate(states):
if keyword in s:
no.append(i+1)
keyword_list.append(s)
tb_data_sebelumnya.append(sum(df_sebelumnya[kolom].str.contains(s, case=False).dropna()))
tb_data_sekarang.append( sum(df_sekarang[kolom].str.contains(s, case=False).dropna()))
#total_data.append(total_data_sebelumnya + total_data_sekarang)
total_data.append(sum(df_sebelumnya[kolom].str.contains(s, case=False).dropna()) + sum(df_sekarang[kolom].str.contains(s, case=False).dropna()))
df = pd.DataFrame({"no": range(1, len(keyword_list)+1), "keyword": keyword_list, "data tahun sebelumnya": tb_data_sebelumnya, "data tahun sekarang": tb_data_sekarang, "total data": total_data})
# tambahkan kolom total data
df.loc[len(df)] = ['', 'Total', sum(df['data tahun sebelumnya']), sum(df['data tahun sekarang']),sum(df['total data'])]
st.write(df)
X = df[['data tahun sebelumnya', 'data tahun sekarang', 'total data']].to_numpy()
# Inisialisasi Model HMM
n_components = min(1, len(df))
st.write(n_components)
model = hmm.GaussianHMM(n_components=n_components, covariance_type="diag", n_iter=160)
# Mengatur nilai awal transisi antar-states
model.transmat_ = np.ones((n_components, n_components)) / n_components
# Melatih Model HMM
model.fit(X)
# Normalisasi matriks transisi
model.transmat_ = model.transmat_ / model.transmat_.sum(axis=1)[:, np.newaxis]
# Prediksi Peminjaman Buku Tahun Berikutnya
next_year_data = np.array([[200, 300, 500]])
predicted_data = []
for i in range(next_year_data.shape[1]):
next_month_data = next_year_data[:, i].reshape(-1, 1)
predicted_state = model.predict(next_month_data)
predicted_data.append(model.means_[predicted_state][0][0])
#st.write(predicted_data)
# Membuat grafik prediksi menggunakan HMM
plt.figure(figsize=(12, 6))
plt.title("Grafik prediksi menggunakan HMM")
plt.xlabel("Tahun")
plt.ylabel("Jumlah data yang cocok")
plt.xticks([0, 1, 2], ["Tahun Sebelumnya", "Tahun Sekarang", "Tahun Berikutnya"])
plt.bar([0, 1, 2], [total_data_sebelumnya, total_data_sekarang, predicted_data[2]])
plt.show()
st.set_option('deprecation.showPyplotGlobalUse', False)
# Menampilkan grafik
st.pyplot()
st.write(f"Pinjaman buku untuk tahun berikutnya dari keyword: '{keyword}' adalah '{predicted_data[2]}'")