File size: 2,662 Bytes
4a965b7 |
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 |
import streamlit as st
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import plotly.express as px
from PIL import Image
st.set_page_config(
page_title= 'Prediksi Churn Pelanggan',
layout='wide',
initial_sidebar_state='expanded'
)
def run():
image = Image.open('image.png')
resized_image = image.resize((605, 212))
st.image(resized_image, caption='Churn')
st.title('Prediksi Churn Pelanggan')
df = pd.read_csv('https://raw.githubusercontent.com/Azrieldr/latihan/master/churn.csv')
st.dataframe(df)
data=df.dropna()
#menggroupkan churn berdasarkan membership
churnMember =data.groupby('membership_category')['churn_risk_score'].mean()*100
# buat dictionary untuk mapping nama index yang baru
new_index = {}
for index in churnMember.index:
new_index[index] = index.replace('Membership', '')
# rename index dengan dictionary new_index
churnMember = churnMember.rename(index=new_index)
churnMember = churnMember.sort_values()
# plot bar chart
plt.bar(churnMember.index, churnMember.values, color='#89cff0')
# tambahkan judul dan label sumbu
plt.title('Rata-Rata Churn Risk Score per Kategori Membership')
plt.xlabel('Kategori Membership')
plt.ylabel('Rata-Rata Churn Risk Score (%)')
# simpan plot ke dalam variabel fig
fig = plt.gcf()
# tampilkan plot pada Streamlit
st.pyplot(fig)
# menggroupkan churn berdasarkan Complaint
churnCom = data.groupby('past_complaint')['churn_risk_score'].mean()*100
# plot bar chart
fig, ax = plt.subplots()
ax.bar(churnCom.index, churnCom.values, color='#89cff0')
# tambahkan judul dan label sumbu
ax.set_title('Rata-Rata Churn Risk Score berdasarkan pernahnya complaint')
ax.set_xlabel('Past Complaint')
ax.set_ylabel('Rata-Rata Churn Risk Score (%)')
# menampilkan plot pada Streamlit
st.pyplot(fig)
# membuat dataframe copy dari dataframe awal
df1 = data.copy()
# mengelompokkan data pada kolom AGE menjadi 10 kelompok
df1['group'] = pd.cut(df1['age'], bins=8)
# menghitung nilai rata-rata pada kolom LUNG_CANCER untuk setiap kelompok
result = df1.groupby('group')['churn_risk_score'].mean()*100
# plot hasilnya menggunakan seaborn dengan barplot berwarna pink
sns.set_style('whitegrid')
ax = sns.barplot(x=result.index, y=result, color='pink')
ax.set(xlabel='AGE Group', ylabel='churn risk score (YES)')
# mengatur font size pada axis x
ax.tick_params(axis='x', labelsize=7.5)
# menampilkan plot pada streamlit
st.pyplot(plt)
if __name__== '__main__':
run() |