import streamlit as st import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import plotly.express as px import PIL as Image def run(): #Title st.title("Online Retail Customer Churn Prediction") #sub-header st.subheader("EDA untuk Analisis Dataset Customer Churn") df = pd.read_csv("online_retail_customer_churn.csv") st.dataframe(df) #make barplot st.write("## Target Churn") fig = plt.figure(figsize=(16,5)) sns.countplot(x='Target_Churn',data=df,palette="pastel") st.pyplot(fig) st.write("dari keseluruhan data, churn didapati bahwa 526 customer memilih churn dan 474 customer tidak churn, dari visualisasi diatas didapati data yang cukup balance") st.write("#### Total Data Based on Customer Spend and Income") totalofcluster = pd.DataFrame({'Annual_Income': [(df['Annual_Income'].mean()*1000)], 'Total_Spend': [(df['Total_Spend'].mean())], }, index=['Customer Spend and Income']) st.bar_chart(totalofcluster) st.write("rata-rata total spend dari tiap customer sangat sedikit dibandingkan annual incomenya") st.write("## Histogram of Data") fig = plt.figure(figsize=(16,5)) pilihan = st.selectbox("Pilih Kolom: ",('Age','Average_Transaction_Amount','Total_Spend','Last_Purchase_Days_Ago')) sns.histplot(x=pilihan,data=df,bins=30,kde=True,palette="pastel") st.pyplot(fig) st.write("### Histogram ",pilihan) if pilihan == "Age": st.write("persebaran data based on umur cukup normal") elif pilihan == "Average_Transaction_Amount": st.write("persebaran rata-rata total transaksi customer sangat beragam namun tetap normal") elif pilihan == "Total_Spend": st.write("persebaran data based on total spend juga terlihat cukup normal") else : st.write("persebaran data terkait hari terakhir pembelanjaan customer normal") st.write("## Pie of Data") pilihan = st.selectbox("Pilih Kolom: ", ('Gender', 'Num_of_Returns', 'Num_of_Support_Contacts', 'Satisfaction_Score', 'Email_Opt_In', 'Promotion_Response')) fig, ax = plt.subplots() df[pilihan].value_counts().plot.pie(autopct='%1.1f%%', startangle=90, ax=ax) ax.set_ylabel('') # Remove the y-label which is the column name st.pyplot(fig) st.write("### Pie ", pilihan) if pilihan == "Gender": st.write("pada data, gender terdapat 3 kategori dimana paling besar female di 34% dari total data, disusul male 33%, dan 32% untuk other. Other disini mencerminkan customer yang memilih untuk tidak memberikan informasi gendernya") elif pilihan == "Num_of_Returns": st.write("90 % dari customer pernah melakukan return") elif pilihan == "Num_of_Support_Contacts": st.write("32% Customer tidak pernah bermasalah dalam pembelanjaannya, 35% customer pernah menghubungi customer sekali kemudian permasalahannya dapat teratasi langsung, dan 32% customer permasalahannya tidak bisa diselesaikan dengan sekali menghubungi Support Contact") elif pilihan == "Satisfaction_Score": st.write("hanya 18% customer yang menilai retail sangat baik dan 20% customer menilai retail sangat buruk") elif pilihan == "Email_Opt_In": st.write("53% customer telah memberikan emailnya") else: st.write(''' Respon promosi menjadi 3 kategori ordinal: - Responded adalah customer yang merespon promosi, customer tipe ini adalah customer yang menerima promosi dengan baik - Ignored adalah customer yang tidak mempedulikan promosi yang diberikan, customer tipe ini adalah customer yang mengabaikan promosi namun juga tidak berhenti berlangganan - Unsubscribed adalah customer yang memilih untuk berhenti berlangganan disebabkan promosi yang diberikan, customer tipe ini adalah customer yang alih-alih menerima promosi, customer ini memilih untuk berhenti berlangganan Berdasarkan respon promosi, 36% berhenti berlangganan, 34% merespon dengan baik, dan 30% mengabaikan ''') st.write("## Correlation Heatmap") plt.figure(figsize=(10, 6)) st.set_option('deprecation.showPyplotGlobalUse', False) sns.heatmap(df.select_dtypes(exclude='object').corr(), annot=True, cmap='viridis', cbar=True) plt.title('Correlation Heatmap') plt.xlabel('Features') plt.ylabel('Features') st.pyplot() st.write("Korelasi dari tiap-tiap kolom juga dicek korelasinya, didapati untuk korelasi antara target yaitu Target_Churn dengan kolom lain ada yang berkorelasi negatif dan juga positif") if __name__ == '__main__': run()