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()