File size: 4,391 Bytes
5012af1 93e42c9 |
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 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
import streamlit as st
import preprocessor,helper
import matplotlib.pyplot as plt
st.markdown(
"<h1 style='text-align: center;'>Chat Analysis Space</h1>",
unsafe_allow_html=True
)
st.sidebar.title("Whatsapp Chat Analyzer")
uploaded_file = st.sidebar.file_uploader("Choose a file")
if uploaded_file is not None:
bytes_data = uploaded_file.getvalue()
data = bytes_data.decode("utf-8")
df = preprocessor.preprocess(data)
#fetch uniquw users
user_list = df["user"].unique().tolist()
if "group_notification" in user_list:
user_list.remove("group_notification")
user_list.sort()
user_list.insert(0, "Overall")
# user_list=df["user"].unique().tolist()
# user_list.remove("group_notification")
# user_list.sort()
# user_list.insert(0,"Overall")
selected_user=st.sidebar.selectbox("Show Analysis wrt",user_list)
if st.sidebar.button("Show Analysis"):
num_messages,words, num_media_messages,links=helper.fetch_stats(selected_user,df)
st.title("Top Statistics")
col1, col2, col3, col4 = st.columns(4)
with col1:
st.header("Total Message")
st.title(num_messages)
with col2:
st.header("Total Words")
st.title(words)
with col3:
st.header("Media Shared")
st.title(num_media_messages)
with col4:
st.header("Links Shared")
st.title(links)
if selected_user=="overall":
col1,col2=st.beta_columns(2)
# monthly timeline
st.title("Monthly Timeline")
timeline = helper.monthly_timeline(selected_user,df)
fig,ax = plt.subplots()
ax.plot(timeline['time'], timeline['message'],color='green')
plt.xticks(rotation='vertical')
st.pyplot(fig)
# daily timeline
st.title("Daily Timeline")
daily_timeline = helper.daily_timeline(selected_user, df)
fig, ax = plt.subplots()
ax.plot(daily_timeline['only_date'], daily_timeline['message'], color='black')
plt.xticks(rotation='vertical')
st.pyplot(fig)
# activity map
st.title('Activity Map')
col1,col2 = st.columns(2)
with col1:
st.header("Most busy day")
busy_day = helper.week_activity_map(selected_user,df)
fig,ax = plt.subplots()
ax.bar(busy_day.index,busy_day.values,color='purple')
plt.xticks(rotation='vertical')
st.pyplot(fig)
with col2:
st.header("Most busy month")
busy_month = helper.month_activity_map(selected_user, df)
fig, ax = plt.subplots()
ax.bar(busy_month.index, busy_month.values,color='orange')
plt.xticks(rotation='vertical')
st.pyplot(fig)
# finding the busiest users in the group(Group level)
if selected_user == 'Overall':
st.title('Most Busy Users')
x, new_df = helper.most_busy_users(df)
fig, ax = plt.subplots()
col1, col2 = st.columns(2)
with col1:
ax.bar(x.index, x.values, color='red')
#ax.set_xlabel('Users')
#ax.set_ylabel('Message Count')
#ax.set_title('Top 5 Most Active Users')
plt.xticks(rotation='vertical')
st.pyplot(fig)
with col2:
st.dataframe(new_df)
# WordCloud
st.title("Wordcloud")
df_wc = helper.create_wordcloud(selected_user,df)
fig,ax = plt.subplots()
ax.imshow(df_wc)
st.pyplot(fig)
# most common words
most_common_df = helper.most_common_words(selected_user,df)
fig,ax = plt.subplots()
ax.barh(most_common_df[0],most_common_df[1])
plt.xticks(rotation='vertical')
st.title('Most commmon words')
st.pyplot(fig)
# emoji analysis
emoji_df = helper.emoji_helper(selected_user,df)
st.title("Emoji Analysis")
col1,col2 = st.columns(2)
with col1:
st.dataframe(emoji_df)
with col2:
fig,ax = plt.subplots()
ax.pie(emoji_df[1].head(),labels=emoji_df[0].head(),autopct="%0.2f")
st.pyplot(fig)
|