Churn / eda.py
Azrieldr
inital commit
4a965b7
raw
history blame
No virus
2.66 kB
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()