Creator_Program / pages /_Youtube_SOV.py
ghostq3
Add CSVs, pages, Twitter, YouTube directories and requirements.txt file
6cc86ad
"""Third party imports."""
import streamlit as st
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
# Read data from CSV
def read_data(filename):
"""Read data from csv."""
df = pd.read_csv(filename)
df['Date'] = pd.to_datetime(df['Date']) # Convert 'Date' column to datetime
return df
def generate_line_chart(data, metrics1="", metrics2="", metrics3=""):
"""Generate Line charts."""
chart_data = data.copy()
chart_data['Date'] = pd.to_datetime(chart_data['Date'])
chart_data['Date'] = chart_data['Date'].dt.strftime('%m-%d')
# Plot the line charts
if metrics1 in chart_data.columns:
st.line_chart(data=chart_data,x='Date',y=metrics1)
if metrics2 in chart_data.columns:
st.line_chart(data=chart_data,x='Date',y=metrics2)
if metrics3 in chart_data.columns:
st.line_chart(data=chart_data,x='Date',y=metrics3)
def generate_pie_chart(data,widget_id,chart_title):
"""Generate Pie Chart."""
options = ['View Count', 'Like Count', 'Comment Count']
selected_options = st.multiselect(widget_id, options, default=options)
fig = go.Figure()
for option in selected_options:
fig.add_trace(go.Pie(labels=data['Game'], values=data[option], name=option, textinfo='label+percent', textposition='inside'))
fig.update_layout(title=chart_title)
st.plotly_chart(fig)
def generate_bar_chart(data,widget_id):
"""Generate Bar Chart."""
options = ['View Count', 'Like Count', 'Comment Count']
selected_options = st.multiselect(widget_id, options, default=options)
counts = data.groupby('Game')[selected_options].sum().reset_index()
counts['Total'] = counts[selected_options].sum(axis=1) # Calculate the sum of selected options as the 'Total' column
counts_sorted = counts.sort_values(by='Total', ascending=True) # Sort by the 'Total' column
labels = counts_sorted['Game']
values = counts_sorted[selected_options]
fig = go.Figure()
for option in selected_options:
fig.add_trace(go.Bar(y=labels, x=values[option], orientation='h', name=option))
fig.update_layout(title='Count of View Count, Like Count, Comment Count',
xaxis_title='Count',
yaxis_title='Game',
barmode='stack')
st.plotly_chart(fig, use_container_width=True)
# Main function
def main():
"""Initialize the program."""
st.title("Youtube Share of Voice")
# Read CSV file
filename = 'csvs/SOV - SoV_YT.csv'
data = read_data(filename)
# Generate line chart
st.subheader("Axie Infinity Trend")
generate_line_chart(data,'View Count', 'Like Count', 'Comment Count')
# Generate pie chart
pie_df = pd.read_csv('csvs/SOV - YT_axie_vs_field.csv')
generate_pie_chart(pie_df,'Select AVF Metrics','Axie Infinity VS Field')
generate_bar_chart(pie_df,' ')
# Generate pie chart
# pie_df2 = pd.read_csv('csvs/SOV - YT_axie_vs_field - Copy.csv')
# generate_pie_chart(pie_df2,'Select Metrics','Axie Infinity VS Field(With 3 Big Creators)')
# generate_bar_chart(pie_df2,' ')
# Generate pie chart for Ronin Games
rgpie_df = pd.read_csv('csvs/SOV - YT_ronin_games.csv')
generate_pie_chart(rgpie_df,'Select Ronin Games Metrics','Ronin Games VS Each Other')
generate_bar_chart(rgpie_df,' ')
# Generate pie chart for Ronin Games vs Field
rvfpie_df = pd.read_csv('csvs/SOV - YT_RVF.csv')
generate_pie_chart(rvfpie_df,'Select RVF Metrics','Ronin Games VS Field')
generate_bar_chart(rvfpie_df,' ')
if __name__ == '__main__':
main()