Upload 6 files
Browse files- app.py +24 -0
- eda.py +62 -0
- model.py +15 -0
- negative.png +0 -0
- neutral.png +0 -0
- positive.png +0 -0
app.py
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import streamlit as st
|
| 2 |
+
import eda
|
| 3 |
+
import model
|
| 4 |
+
|
| 5 |
+
|
| 6 |
+
|
| 7 |
+
page = st.sidebar.selectbox(label='Select Page:', options=['Home Page', 'Exploration Data Analysis', 'Model Prediksi'])
|
| 8 |
+
|
| 9 |
+
if page == 'Home Page':
|
| 10 |
+
st.header('Welcome Page')
|
| 11 |
+
st.write('')
|
| 12 |
+
st.write('Project : GC - 7')
|
| 13 |
+
st.write('Nama : Muhammad Fiqih Al-ayubi')
|
| 14 |
+
st.write('Batch : HCK - 017')
|
| 15 |
+
st.write('Objectives: Program ini dibuat untuk membantu calon investor dalam melihat kondisi bisnis dan ekonomi suatu negara dengan cara membuat model machine learning yang dapat melakukan melakukan klasifikasi sentiment ekonomi berdasarkan text rangkuman atau judul berita.')
|
| 16 |
+
st.write('')
|
| 17 |
+
st.caption('Silahkan pilih menu lain di Select Box pada sebelah kiri layar anda untuk memulai!')
|
| 18 |
+
st.write('')
|
| 19 |
+
st.write('')
|
| 20 |
+
|
| 21 |
+
elif page == 'Exploration Data Analysis':
|
| 22 |
+
eda.run()
|
| 23 |
+
else:
|
| 24 |
+
model.run()
|
eda.py
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import streamlit as st
|
| 2 |
+
import pandas as pd
|
| 3 |
+
import matplotlib.pyplot as plt
|
| 4 |
+
# from phik.report import plot_correlation_matrix
|
| 5 |
+
from PIL import Image
|
| 6 |
+
|
| 7 |
+
#membuat function
|
| 8 |
+
def run():
|
| 9 |
+
st.title('Selamat datang di bagian Exploratory Data Analysis')
|
| 10 |
+
# Memanggil data csv
|
| 11 |
+
df= pd.read_csv('bank.csv')
|
| 12 |
+
|
| 13 |
+
# Menampilakn 5 data teratas
|
| 14 |
+
st.table(df.head(5))
|
| 15 |
+
|
| 16 |
+
|
| 17 |
+
# Menampilkan grafik distribusi data client berdasarkan status deposit
|
| 18 |
+
st.title('Distribusi sentiment')
|
| 19 |
+
image1 = Image.open('distribusisentimen.png')
|
| 20 |
+
st.image(image1, caption='figure 1')
|
| 21 |
+
|
| 22 |
+
# Menampilkan penjelasan
|
| 23 |
+
with st.expander('Penjelasan'):
|
| 24 |
+
st.caption('''Dari grafik distribusi di atas dapat terlihat jika dataset bersifat imbalanced dimana text bersentiment neutral sangat mendominasi populasi dataset (59 %) dibandingkan text - text bersentiment positive dan neutral. Berdasarkan presentasenya, maka dapat disimpulkan jika text bersentiment positive dan neutral memiliki drajat ketidakseimbangan moderat (https://developers.google.com/machine-learning/data-prep/construct/sampling-splitting/imbalanced-data). Hal ini sangat berbahaya bagi model karena model akan lebih banyak belajar atau memahami pola - pola kelas mayoritas (dalam hal ini text bersentimen neutral) sehingga dikhawatirkan hasil prediksinya bertendensi pada kelas tersebut. Untuk menghindari hal tersebut, kita akan melakukan class balancing pada bagian feature engineering.
|
| 25 |
+
|
| 26 |
+
Jika dilihat dari segi konteksnya (ekonomi dan bisnis), hasil di atas dapat memiliki arti adanya 2 kemungkinan kondisi pertumbuhan ekonomi di negara finlandia pada periode waktu tertentu, yaitu pertumbuhan positif atau stagnan (karena sentiment berita neutral lebih banyak). Karena jumlah presentase berita bersentimen negative sangat kecil maka dapat diasumsikan jika ***pada periode waktu data ini diambil, negara finlandia sedang berada pada 2 kemungkinan kondisi pertumbuhan ekonomi yaitu stagnan atau positive***.''')
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
# Menampilkan Presentase client yang dihubungi berdasarkan jenis pekerjaannya
|
| 31 |
+
st.title('10 kata positive teratas')
|
| 32 |
+
image2 = Image.open('positive.png')
|
| 33 |
+
st.image(image2, caption='figure 2')
|
| 34 |
+
|
| 35 |
+
# Menampilkan penjelasan
|
| 36 |
+
with st.expander('Penjelasan'):
|
| 37 |
+
st.caption('''Dari grafik di atas kita dapat bahwa saat ini kata - kata tersebut lebih memiliki makna atau arti. Artinya text preprocessing yang sudah dilakukan sebelumnya telah berhasil menghapus kata - kata yang tidak memberikan informasi signifikan (stop words).
|
| 38 |
+
|
| 39 |
+
10 Kata yang paling sering muncul pada kelas positive setelah text preprocessing adalah 'eur', 'company', 'mn' (milion), 'year', 'finnsih', 'net', 'profit', 'sale', 'million', dan 'period'. Dari seluruh kata, hanya kata profit yang pada umumnya memang memiliki tendensi positif..''')
|
| 40 |
+
|
| 41 |
+
|
| 42 |
+
|
| 43 |
+
# Menampilkan grafik Distribusi data client berdsarkan umur
|
| 44 |
+
st.title('10 kata neutral teratas')
|
| 45 |
+
image3 = Image.open('neutral.png')
|
| 46 |
+
st.image(image3, caption='figure 3')
|
| 47 |
+
|
| 48 |
+
# Menampilkan penjelasan
|
| 49 |
+
with st.expander('Penjelasan'):
|
| 50 |
+
st.caption('''Dari grafik di atas dapat terlihat jika ada beberapa kata dari 10 kata yang paling sering muncul di kelas neutral, juga muncul di 10 kata teratas kelas positive. Kata - kata tersebut adlah 'company', 'eur', 'million' dan 'finnsih'. Sementara itu, kata - kata pada grafik di atas yang sebelumnya tidak muncul pada 10 kata teratas di kelas positive adalah 'share', 'service', 'finland', 'business', 'group' dan 'market''')
|
| 51 |
+
|
| 52 |
+
|
| 53 |
+
|
| 54 |
+
# Menampilkan grafik Hubungan jenis pekerjaan dengan keputusan client dalam berinvestasi
|
| 55 |
+
st.title('10 kata negative treatas')
|
| 56 |
+
image4 = Image.open('negative.png')
|
| 57 |
+
st.image(image4, caption='figure 4')
|
| 58 |
+
|
| 59 |
+
# Menampilkan penjelasan
|
| 60 |
+
with st.expander('Penjelasan'):
|
| 61 |
+
st.caption('''Dari 10 kata teratas yang paling sering muncul pada kelas negative, tidak ada kata - kata yang secara umum memiliki tendensi negatif yang kuat (dalam konteks bisnsis). Contohnya kata - kata seperti 'decreased', 'fell', 'loss', 'warning', dll (yang sebelumnya muncul pada hasil fungsi WordCloud()) justru tidak masuk dalam 10 kata teratas pada kelas negative. Bahkan mayoritas kata - kata pada grafik di atas justru juga muncul pada 10 kata teratas kelas neutral dan positive. Hal tersebut kemungkinan terjadi karena periode ketika dataset ini diambil merupakan periode dimana negara finlandia tidak berada dalam kondisi ekonomi yang sulit, karena pada umumnya semakin sulit kondisi ekonomi suatu negara maka akan semakin banyak teks - teks berita yang mengandung kata - kata bertendensi negatif (seusai konteksnya)''')
|
| 62 |
+
|
model.py
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# import pandas as pd
|
| 2 |
+
# import numpy as np
|
| 3 |
+
# import re
|
| 4 |
+
# import json
|
| 5 |
+
# import pickle
|
| 6 |
+
# import nltk
|
| 7 |
+
# import dill
|
| 8 |
+
# import tensorflow as tf
|
| 9 |
+
# from tensorflow.keras.models import load_model
|
| 10 |
+
# from nltk.stem import WordNetLemmatizer
|
| 11 |
+
# from nltk.tokenize import word_tokenize
|
| 12 |
+
# from nltk.stem import WordNetLemmatizer
|
| 13 |
+
# from nltk.corpus import stopwords
|
| 14 |
+
# from nltk.stem import PorterStemmer
|
| 15 |
+
# from sklearn.feature_extraction.text import CountVectorizer
|
negative.png
ADDED
|
neutral.png
ADDED
|
positive.png
ADDED
|