Spaces:
Runtime error
Runtime error
checkpoint
Browse files- data/twitterdata.csv +40 -0
- textclassifier/TextClassifier.py +29 -3
- twitterscraper/TwitterScraper.py +1 -1
data/twitterdata.csv
CHANGED
@@ -49,3 +49,43 @@ id,tweet,date,user_id,username,urls,nlikes,nreplies,nretweets,topic,sentiment,ta
|
|
49 |
1239960121544933383,"Vi har alla ett ansvar. Oavsett vilka vi är, var vi bor eller hur vi drabbas, så är vi alla en del av Sverige. Låt oss alla hedra det i dessa svåra tider.",2020-03-17 18:01:44,95972673,jimmieakesson,[],196,6,12, 1. swedish society 2. coronavirus pandemic 3. solidarity,statements,The people of Sweden.
|
50 |
1239960095993331712,"Vissa drabbas hårdare än andra, men det är bara genom gemensamma ansträngningar vi kan utmana och övervinna krisen.",2020-03-17 18:01:38,95972673,jimmieakesson,[],110,1,7, covid-19 sub topic 1: effects sub topic 2: solutions,statements,The people of Sweden.
|
51 |
1239960079929090048,"Det kan inte nog betonas att vi befinner oss i ett riktigt allvarligt läge. Belastningen på samhället är redan hård, och allt tyder på att vi har en lång och svår period framför oss.",2020-03-17 18:01:35,95972673,jimmieakesson,[],154,3,10, 1. covid-19 2. sweden 3. lockdown,concern,The Swedish government.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
1239960121544933383,"Vi har alla ett ansvar. Oavsett vilka vi är, var vi bor eller hur vi drabbas, så är vi alla en del av Sverige. Låt oss alla hedra det i dessa svåra tider.",2020-03-17 18:01:44,95972673,jimmieakesson,[],196,6,12, 1. swedish society 2. coronavirus pandemic 3. solidarity,statements,The people of Sweden.
|
50 |
1239960095993331712,"Vissa drabbas hårdare än andra, men det är bara genom gemensamma ansträngningar vi kan utmana och övervinna krisen.",2020-03-17 18:01:38,95972673,jimmieakesson,[],110,1,7, covid-19 sub topic 1: effects sub topic 2: solutions,statements,The people of Sweden.
|
51 |
1239960079929090048,"Det kan inte nog betonas att vi befinner oss i ett riktigt allvarligt läge. Belastningen på samhället är redan hård, och allt tyder på att vi har en lång och svår period framför oss.",2020-03-17 18:01:35,95972673,jimmieakesson,[],154,3,10, 1. covid-19 2. sweden 3. lockdown,concern,The Swedish government.
|
52 |
+
1239960040028557312,Vi välkomnar naturligtvis dessa besked. Att minimera sociala kontakter är avgörande för att vi ska ha möjlighet att bromsa smittspridningen. Låt oss nu hoppas att besked om grundskolan kommer snarast.,2020-03-17 18:01:25,95972673,jimmieakesson,[],128,2,11, covid-19 sub topic 1: social distancing sub topic 2: school closures,agreement,Swedish people
|
53 |
+
1239960011159281667,Regeringen bereder också lag som ska möjliggöra stängning av grundskolorna och samtidigt möjliggöra för samhällskritisk personal att få barnomsorg.,2020-03-17 18:01:18,95972673,jimmieakesson,[],114,3,10, 1. swedish government 2. legislation 3. childcare,opinions,The Swedish government.
|
54 |
+
1239959976837177346,Idag kom dock beskedet att gymnasieskolan och högre utbildning rekommenderas att hålla undervisning på distans. Elever och studenter ska stanna hemma.,2020-03-17 18:01:10,95972673,jimmieakesson,[],108,0,11, 1. education 2. online learning 3. coronavirus,statements,Elevers and students.
|
55 |
+
1239959938622992385,"Det är, som jag tidigare framhållit, ett högt spel. Vårt samhälle är, tyvärr, illa rustat för sådana här situationer. Kritiken kvarstår, således.",2020-03-17 18:01:01,95972673,jimmieakesson,[],141,2,12, 1. swedish politics 2. the coronavirus pandemic 3. government responses to the pandemic,criticism,The Swedish government
|
56 |
+
1239959864228696064,"Det är ingen hemlighet att jag och SD varit kritiska till vad vi upplevt som en defensiv hållning från regeringens och myndigheternas sida. Medan andra länder vidtagit skarpa och långtgående åtgärder för att bromsa smittspridningen, har Sverige avvaktat.",2020-03-17 18:00:43,95972673,jimmieakesson,[],183,3,17, 1. swedish government 2. coronavirus response,criticism,The Swedish government.
|
57 |
+
1239959742035849216,Dagens partiöverläggningar med statsministern hölls – föredömligt – över videolänk. Utöver partiledarna deltog Folkhälsomyndigheten och Socialstyrelsen.,2020-03-17 18:00:14,95972673,jimmieakesson,[],628,22,38, 1. swedish government 2. videoconferencing 3. public health,praise,The Swedish prime minister.
|
58 |
+
1239469549642227712,Regeringen med stödpartier presenterar nytt krispaket för företag och jobb. Känns väl avvägt och rimligt. Delar uppfattningen att det just nu är bättre att agera snabbt än perfekt. https://t.co/TTeaIHjxbA,2020-03-16 09:32:23,95972673,jimmieakesson,[],1151,50,75, 1. swedish government 2. economic policy 3. coronavirus,agreement,Regeringen
|
59 |
+
1239306859032522753,"Imorgon går nära 1,5 miljon barn och unga till skolan... Läs artikeln: https://t.co/jkVCCcqOkg",2020-03-15 22:45:55,95972673,jimmieakesson,['https://www.svd.se/fler-atgarder-kravs-for-att-bromsa-smittspridning'],199,26,32, 1. education 2. children 3. school,statements,Swedish children and youth
|
60 |
+
1239306781559533579,En grupp experter menar i en debattartikel att Sverige behöver vidta mer kraftfulla åtgärder för att bromsa smittspridningen. Jag tycker att de resonerar klokt. Regeringens hittills defensiva hållning kan få oerhörda konsekvenser. https://t.co/dgpU3Io2Cy,2020-03-15 22:45:36,95972673,jimmieakesson,[],798,47,125, 1. covid-19 2. sweden 3. regeringens hittills defensiva hållning,criticism,Regeringen
|
61 |
+
1238499207746633728,Således: Stäng skolorna! Behåll vissa fritidshem öppna för barn till samhällskritisk personal.,2020-03-13 17:16:35,95972673,jimmieakesson,[],372,34,34, 1. swedish schools: 2. closing schools: 3. keeping some after-school programs open:,statements,N/A
|
62 |
+
1238499155888295936,"Ansvaret faller ytterst på politiken, och jag vill se en regering som tar det ansvaret, som tar det säkra för det osäkra, som vidtar kraftfulla för att bromsa smittspridning och inskärper situationens allvar hos befolkningen.",2020-03-13 17:16:23,95972673,jimmieakesson,[],219,12,24, 1. swedish politics 2. coronavirus 3. government response,criticism,Regeringen
|
63 |
+
1238499139664646144,Men tänk om de har fel — igen...,2020-03-13 17:16:19,95972673,jimmieakesson,[],117,6,5, 1. social media 2. twitter 3. opinions,skepticism,N/A
|
64 |
+
1238499108102569985,"Ja, till och med trots att samma myndighet hittills har svajat betänkligt i sina analyser och rekommendationer, så kan de ha rätt .",2020-03-13 17:16:12,95972673,jimmieakesson,[],95,2,3, 1. swedish government 2. coronavirus 3. public health,skepticism,the government
|
65 |
+
1238499046911881217,"Även om andra länder med långt mindre problem än vi gör en annan bedömning, och även om sunt förnuft och rimligt försiktighetstänk talar emot det, så kan den statliga myndigheten ha rätt.",2020-03-13 17:15:57,95972673,jimmieakesson,[],104,2,6, 1. swedish government 2. other countries 3. sunt förnuft,skepticism,The state agency
|
66 |
+
1238499026254934019,"i offentlig förvaltning. Det är vi folkvalda som ska fatta besluten, givetvis mot bakgrund av vilka fakta som presenteras för oss. Om en myndighet gör bedömningen att en viss åtgärd är onödig så kan de givetvis ha alldeles rätt.",2020-03-13 17:15:52,95972673,jimmieakesson,[],107,3,5, 1. government 2. policy 3. decision-making,statements,N/A
|
67 |
+
1238498914128494597,"En sak som dock verkar ha gått förbi regeringen är att forskare och experter inte är politiker. De har inte det yttersta ansvaret. Politiska beslut måste bygga på politiskt ansvarstagande. Det duger inte att skyffla över ansvaret på myndigheter, kommuner eller enskilda tjänstemän",2020-03-13 17:15:25,95972673,jimmieakesson,[],175,5,22, 1. government 2. scientists 3. responsibility,skepticism,The government
|
68 |
+
1238498683563491329,som helt förlitar sig på ännu mer defensiva myndigheter. Det är ett högt spel. Vi politiker är lekmän. Vi vet naturligtvis inte mer om virus och smittspridning än vetenskapen. Därför måste de åtgärder som vidtas politiskt bygga på de fakta vetenskapen ger oss.,2020-03-13 17:14:31,95972673,jimmieakesson,[],179,6,16, 1. politics 2. science 3. technology,skepticism,politicians
|
69 |
+
1238498584401756161,"""Vi planerar för det värsta och hoppas på det bästa."" Den devisen borde vara vägledande för det politiska ledarskapet i dessa kristider. Så är det också i andra länder, men i Sverige har vi istället en defensiv regering.",2020-03-13 17:14:07,95972673,jimmieakesson,[],1221,57,138, 1. politics 2. government 3. sweden,skepticism,Regeringen
|
70 |
+
1238492917414625281, https://t.co/xeMvdcVRdG,2020-03-13 16:51:36,95972673,jimmieakesson,[],575,33,59, 1. social media 2. twitter 3. advertising,statements,The target of this tweet is the general public.
|
71 |
+
1236718442461437952,"Men — det här är min poäng — det är inte primärt fysisk plats som avses i min argumentation. Det begriper de flesta. Vad som har betydelse är kapacitet i vård, skola och omsorg, tillgång på bostäder, segregation, trygghet osv. Sverige ÄR fullt! ❤",2020-03-08 19:20:28,95972673,jimmieakesson,[],1825,107,205, 1. immigration 2. sweden,statements,The target of this tweet is Sweden.
|
72 |
+
1222908147108470784,@klasskamp1 https://t.co/Rwu7VrJCA8,2020-01-30 16:43:17,282532238,dadgostarnooshi,[],3,1,0, 1. social media 2. twitter 3. @klasskamp1,statements,The target of this tweet is @klasskamp1.
|
73 |
+
1222841879194210304,Raketen Jonas Sjöstedt ligger etta. https://t.co/cObFogV93H,2020-01-30 12:19:57,282532238,dadgostarnooshi,['https://www.dn.se/nyheter/sverige/ras-for-lofven-i-fortroendeligan-lyft-for-sjostedt/'],96,4,8, 1. swedish politics 2. the green party 3. opinion polls,praise,Jonas Sjöstedt
|
74 |
+
1221142930531979264,Ska hon inte städa upp lite i sin egen region innan hon kräver att andra ska göra samma sak? https://t.co/ni76Bo3gKH,2020-01-25 19:48:57,282532238,dadgostarnooshi,['https://sverigesradio.se/sida/artikel.aspx?programid=83&artikel=7392613'],109,6,18, 1. europe 2. migration 3. politics,criticism,"The TARGET of this criticism TWEET is ""Sweden."""
|
75 |
+
1221098172241661952,@Nabila_AFR Hahaha,2020-01-25 16:51:05,282532238,dadgostarnooshi,[],2,0,0, 1. social media 2. twitter 3. jokes,jokes,Nabila_AFR
|
76 |
+
1220654619187126273,Överklassknarkandet måste stoppas. https://t.co/xwpNilOTbn,2020-01-24 11:28:34,282532238,dadgostarnooshi,['https://www.expressen.se/nyheter/sprangt-ostermalmshus-var-overklassens-knarkcentral/'],156,33,25, 1. crime 2. drug use 3. social class,opinion,N/A
|
77 |
+
1220428618406531073,@river_mattie Det har gällt fram till 2015. Och det gäller på exakt alla områden förutom just plats för förskolor än idag. Därav inte ”nytt”.,2020-01-23 20:30:31,282532238,dadgostarnooshi,[],5,3,0, 1. swedish education 2. daycare,statements,N/A
|
78 |
+
1220421384041574401,@river_mattie Vill o vill. Det måste ju finnas gator o vägar om det ska gå att ha ett bostadsområde. Därför är ett byggprojekt ett samarbete mellan privat o kommun gnm exploateringsavtal.,2020-01-23 20:01:46,282532238,dadgostarnooshi,[],0,0,0, 1. construction 2. private vs. public,statements,N/A
|
79 |
+
1220420640177623043,@river_mattie Läs sid 14 o alla författningsförslag. Sluta bara låtsas som att detta är nåt helt nytt. Alla byggherrar har i alla år behövt bidra till allmänna anläggningar. Annars riskerar ju kommunerna avstå byggande helt.,2020-01-23 19:58:49,282532238,dadgostarnooshi,[],3,1,0, 1. construction 2. regulations 3. infrastructure,statements,"The target of this tweet is ""all byggherrar."""
|
80 |
+
1220417650880393217,"@river_mattie Ja, vi vill ju inkludera plats för förskolor. Detta gäller ju redan torg, gator, parker osv. Du ansåg dej vara emot hela principen.",2020-01-23 19:46:56,282532238,dadgostarnooshi,[],0,1,0, 1. inclusion 2. preschools 3. public spaces,statements,"The target of this tweet is ""river_mattie."""
|
81 |
+
1220416683371913216,@river_mattie Nja. Det är inte så. Det är ändå byggherren/fastighetsägare som betalar den offentliga infrastrukturen genom avgifter. Om du läser hela betänkandet istf skärmdumpar är det lättare. Skillnaden är bara om man tycker att förskolor o tex kommersiella torg är likvärdigt.,2020-01-23 19:43:06,282532238,dadgostarnooshi,[],2,1,0, 1. infrastructure 2. funding,skepticism,N/A
|
82 |
+
1220409230055874570,"@river_mattie Du vet att detta redan är svensk rätt va? Det finns inget parti som driver att byggherren inte ska stå för den off infrastrukturen i projekten. Eller tycker du kommunen ska betala det? Skulle ju innebära kraftigt höjda skatter, men visst kan det diskuteras.",2020-01-23 19:13:29,282532238,dadgostarnooshi,[],3,1,0, 1. swedish law 2. infrastructure 3. taxes,statements,N/A
|
83 |
+
1220406636583563266,"@river_mattie Detta har varit svensk rätt fram till 2015. Vad är problemet? Ska det inte finnas förskolor i nya bostadsområden? Det är ju inte folks fastigheter utan byggherrens, precis som med all annan offentlig infrastruktur som skäligen måste ingå i projektet.",2020-01-23 19:03:10,282532238,dadgostarnooshi,[],3,1,0, 1. swedish law 2. preschools 3. infrastructure,statements,N/A
|
84 |
+
1220403593624412160,@river_mattie ?,2020-01-23 18:51:05,282532238,dadgostarnooshi,[],1,1,0, 1. social media 2. twitter 3. engagement,questions,The target of this tweet is river_mattie.
|
85 |
+
1220312838373347330,DN föreslår att vi ska återinföra värnskatten. Jag tycker det är en bra idé. https://t.co/xSNG1cktqy,2020-01-23 12:50:27,282532238,dadgostarnooshi,[],365,13,48, 1. swedish politics 2. taxation 3. defense,agreement,The Swedish people
|
86 |
+
1219961234457530375,@matstromberg Över 7 miljarder till välfärden.,2020-01-22 13:33:18,282532238,dadgostarnooshi,[],14,1,0, 1. swedish welfare system 2. financial support for welfare programs 3. taxation,statements,N/A
|
87 |
+
1219958326605287425,Jorå. https://t.co/xjw2iMDvWJ,2020-01-22 13:21:45,282532238,dadgostarnooshi,['https://svt.se/nyheter/inrikes/m-kd-och-v-mer-pengar-till-valfarden'],48,4,3, 1. social media 2. twitter 3. jorå,jokes,The target of this tweet is Jorå.
|
88 |
+
1219199886907801600,Pressen på regeringen blev för stor. Välkommet med 5 extra miljarder till välfärden.,2020-01-20 11:07:59,282532238,dadgostarnooshi,[],143,7,16, 1. swedish politics 2. government spending 3. welfare,statements,The Swedish government
|
89 |
+
1218474712986267648,"@sjunnedotcom Hej. Detta är fel. Det har alltid varit byggherren som i proportion till sitt byggande betalar den offentliga infrastrukturen. Vi tar bara bort ett specifikt förbud mot att även plats för förskolor ska ingå, som infördes 2015.",2020-01-18 11:06:24,282532238,dadgostarnooshi,[],3,0,0, 1. construction 2. infrastructure 3. preschools,statements,sjunnedotcom
|
90 |
+
1218242708101312512,18 år ändå. https://t.co/84kTfcz86n,2020-01-17 19:44:30,282532238,dadgostarnooshi,['https://www.expressen.se/nyheter/ny-matning-vansterpartiet-nar-hogsta-siffran-pa-18-ar/'],70,4,6, 1. age 2. social media,anecdotes,N/A
|
91 |
+
1217521506487603200,(V) har med @jsjostedt som partiledare lyckats förändra på riktigt t.o.m. i ett läge då alla sa att det va omöjligt. Det är väldigt tråkigt att en så rakryggad och skarp företrädare väljer att sluta. Det har varit en ynnest a få jobba tillsammans m dig.,2020-01-15 19:58:42,282532238,dadgostarnooshi,[],388,3,16, 1. swedish politics 2. the moderate party 3. anna kinberg batra,praise,@jsjostedt
|
textclassifier/TextClassifier.py
CHANGED
@@ -10,6 +10,7 @@ from dotenv import find_dotenv, load_dotenv
|
|
10 |
import pandas as pd
|
11 |
import warnings
|
12 |
from pandas.core.common import SettingWithCopyWarning
|
|
|
13 |
|
14 |
warnings.simplefilter(action="ignore", category=SettingWithCopyWarning)
|
15 |
|
@@ -287,7 +288,7 @@ class TextClassifier:
|
|
287 |
already_classified_df = pd.read_csv(filename, on_bad_lines='skip')
|
288 |
print("Already classified tweets: {}".format(already_classified_df.shape[0]))
|
289 |
# Create a temporary df where values from already_classified_df that are not it self.df are stored
|
290 |
-
temp_df =
|
291 |
# Remove rows from self.df that are not in already_classified_df
|
292 |
self.df = self.df[~self.df['id'].isin(already_classified_df['id'])]
|
293 |
# Only classify non-empty rows
|
@@ -323,6 +324,28 @@ class TextClassifier:
|
|
323 |
print("Created {}.".format(filename))
|
324 |
return None
|
325 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
326 |
def __repr__(self):
|
327 |
"""
|
328 |
Gives a string that describes which user is classified
|
@@ -332,5 +355,8 @@ class TextClassifier:
|
|
332 |
|
333 |
|
334 |
if __name__ == "__main__":
|
335 |
-
|
336 |
-
|
|
|
|
|
|
|
|
10 |
import pandas as pd
|
11 |
import warnings
|
12 |
from pandas.core.common import SettingWithCopyWarning
|
13 |
+
import matplotlib.pyplot as plt
|
14 |
|
15 |
warnings.simplefilter(action="ignore", category=SettingWithCopyWarning)
|
16 |
|
|
|
288 |
already_classified_df = pd.read_csv(filename, on_bad_lines='skip')
|
289 |
print("Already classified tweets: {}".format(already_classified_df.shape[0]))
|
290 |
# Create a temporary df where values from already_classified_df that are not it self.df are stored
|
291 |
+
temp_df = already_classified_df[already_classified_df['id'].isin(self.df['id'])]
|
292 |
# Remove rows from self.df that are not in already_classified_df
|
293 |
self.df = self.df[~self.df['id'].isin(already_classified_df['id'])]
|
294 |
# Only classify non-empty rows
|
|
|
324 |
print("Created {}.".format(filename))
|
325 |
return None
|
326 |
|
327 |
+
@staticmethod
|
328 |
+
def split_topics(text:str):
|
329 |
+
"""
|
330 |
+
splits a string of format '1. topic1 2. topic2 3. topic3' into a list of topics
|
331 |
+
:param text: string of format '1. topic1 2. topic2 3. topic3'
|
332 |
+
:return: list of topics
|
333 |
+
"""
|
334 |
+
topics = text.split(' ')
|
335 |
+
topics = [topic.split('.')[1] for topic in topics if int(topic.split('.')[0]) > 0]
|
336 |
+
return topics
|
337 |
+
|
338 |
+
def plot(self, type: int):
|
339 |
+
"""
|
340 |
+
Plots the sentiment of the tweets. Since self.df['topics'] is in the format '1. topic 1 2. topic 2 3. topic 3',
|
341 |
+
we first split the string into new columns
|
342 |
+
:param type:
|
343 |
+
:return: plot
|
344 |
+
"""
|
345 |
+
|
346 |
+
|
347 |
+
|
348 |
+
|
349 |
def __repr__(self):
|
350 |
"""
|
351 |
Gives a string that describes which user is classified
|
|
|
355 |
|
356 |
|
357 |
if __name__ == "__main__":
|
358 |
+
text_classifier = TextClassifier(from_date="2020-01-01", to_date="2020-01-31", user_name='dadgostarnooshi', num_tweets=20)
|
359 |
+
text_classifier.run_main_pipeline()
|
360 |
+
print(text_classifier.split_topics("1. topic1 2. topic2 3. topic3"))
|
361 |
+
|
362 |
+
|
twitterscraper/TwitterScraper.py
CHANGED
@@ -27,7 +27,7 @@ class TwitterScraper(object):
|
|
27 |
# Make sure to_date is later than from_date
|
28 |
assert from_date < to_date, "from_date must be earlier than to_date"
|
29 |
# Make sure num_tweets is a positive integer
|
30 |
-
assert 0 < num_tweets <=
|
31 |
|
32 |
self.from_date = from_date
|
33 |
self.to_date = to_date
|
|
|
27 |
# Make sure to_date is later than from_date
|
28 |
assert from_date < to_date, "from_date must be earlier than to_date"
|
29 |
# Make sure num_tweets is a positive integer
|
30 |
+
assert 0 < num_tweets <= 200, "num_tweets must be a positive integer and at most 20"
|
31 |
|
32 |
self.from_date = from_date
|
33 |
self.to_date = to_date
|