import gradio as gr
from textclassifier import TextClassifier as tc
import pandas as pd
from functions import functions as f
import time
USER_LIST = ['jimmieakesson', 'BuschEbba', 'annieloof', 'JohanPehrson', 'bolund', 'martastenevi', 'SwedishPM',
'dadgostarnooshi']
UserNameDict = dict(zip(['Jimmie Åkesson', 'Ebba Busch', 'Annie Lööf', 'Johan Pehrson', 'Per Bolund',
'Märta Stenevi', 'Magdalena Andersson', 'Nooshi Dadgostar'], USER_LIST))
Columns = ['username', 'nlikes', 'nreplies', 'nretweets', 'main_topic', 'sub_topic', 'sentiment', 'target', 'tweet',
'date', 'urls', 'id', 'class_tuple', 'user_id']
def show_all_stats(ListChoices, SeeFullStats):
dataframe = pd.read_csv("{}/data/twitterdata.csv".format(tc.ROOT_PATH))
if SeeFullStats:
return dataframe[ListChoices]
else:
return pd.DataFrame()
def fixChoicesCorrectOrder(Choices):
ListChoices = [x for x in Columns if x in Choices]
return ListChoices
def MatchNameToUser(Name):
return UserNameDict[Name]
def main(From,
To,
Username,
UserNameChoices,
Nbr_Of_Tweets_To_Classify,
ListChoices,
SeeFullStats
):
def WhoToScrape():
if Username == "":
return MatchNameToUser(UserNameChoices[0])
else:
return Username
text_classifier = tc.TextClassifier(
from_date=From,
to_date=To,
user_list=WhoToScrape(),
num_tweets=int(Nbr_Of_Tweets_To_Classify))
text_classifier.run_main_pipeline()
dataframe = text_classifier.get_dataframe()
dataframe = dataframe[
['username', 'nlikes', 'nreplies', 'nretweets', 'main_topic', 'sub_topic', 'sentiment', 'target', 'tweet',
'date', 'urls', 'id', 'class_tuple', 'user_id']]
return dataframe[fixChoicesCorrectOrder(ListChoices)], show_all_stats(ListChoices, SeeFullStats)
if __name__ == "__main__":
from datetime import date
demo = gr.Interface(
article="
From = The date from which you want to start the analysis.
To = The date to which "
"you want to end "
"the analysis.
Username = The username of the user you want to analyze.
How many "
"tweets to classify = "
"The number of tweets you want to analyze.
",
analytics_enabled=False,
theme="default",
title="Twitter data analysis",
fn=main,
inputs=[gr.components.Textbox(label="From", value='2022-01-01'),
gr.components.Textbox(label="To", value='2022-01-25'),
gr.components.Textbox(label="Username", value="BuschEbba"),
gr.components.Checkboxgroup(
choices=['Jimmie Åkesson', 'Ebba Busch', 'Annie Lööf', 'Johan Pehrson', 'Per Bolund',
'Märta Stenevi',
'Magdalena Andersson', 'Nooshi Dadgostar'], label=""),
gr.components.Textbox(label="How many Tweets to Classify", value="20"),
gr.components.Checkboxgroup(label="Options",
choices=['username', 'nlikes', 'nreplies', 'nretweets', 'main_topic',
'sub_topic', 'sentiment', 'target', 'tweet', 'date', 'urls', 'id',
'class_tuple', 'user_id'],
value=['username', 'nlikes', 'nreplies', 'nretweets', 'main_topic',
'sub_topic', 'sentiment', 'target', 'tweet', 'date']
),
gr.components.Checkbox(label="Show full statistics")
],
outputs=[
gr.components.DataFrame(label="Summary statistics of the intervall you selected", max_rows=None),
gr.components.DataFrame(label="Summary statistics of the total database", max_rows=None, )])
demo.launch(share=False)