From fa29b1dc8acfa828a54564d121de4445ba5b1915 Mon Sep 17 00:00:00 2001 From: procrastimax Date: Sat, 17 Jun 2023 20:01:23 +0200 Subject: [PATCH] Adds general infos for dataset --- app.py | 3 +- data/general_analysis_results.json | 1 + src/mod_welcome.py | 66 ++++++++++++++++++++++++++---- 3 files changed, 61 insertions(+), 9 deletions(-) create mode 100644 data/general_analysis_results.json diff --git a/app.py b/app.py index 1e668c6..b3e66c6 100644 --- a/app.py +++ b/app.py @@ -35,8 +35,7 @@ app_ui = ui.page_navbar( def server(input: Inputs, output: Outputs, session: Session): - # mod_welcome.welcome_server() - pass + mod_welcome.welcome_server("Intro") static_dir = Path(__file__).parent / "www" diff --git a/data/general_analysis_results.json b/data/general_analysis_results.json new file mode 100644 index 0000000..1b6ca61 --- /dev/null +++ b/data/general_analysis_results.json @@ -0,0 +1 @@ +{"hashtags": 267255, "mention": 71142, "url": 141594, "tweet_count": 151690, "num_police_accounts": 163, "date_first_tweet": "2020-10-27 09:29:13", "date_last_tweet": "2023-03-16 11:42:58", "day_diff": 870, "avg_post_hour": 11.156780275562001, "num_text_tokens": 3764759} \ No newline at end of file diff --git a/src/mod_welcome.py b/src/mod_welcome.py index fd8e917..9fb3978 100644 --- a/src/mod_welcome.py +++ b/src/mod_welcome.py @@ -1,4 +1,5 @@ -from shiny import module, ui +from shiny import module, ui, render +import json # UI ---- # Note that we made conter_ui a function, and decorated it @@ -8,19 +9,70 @@ from shiny import module, ui def welcome_ui(): return ui.div( ui.h2("Projekt Copbird: Eine Zusammenfassung"), + ui.h3("Allgemeines"), ui.markdown(""" Copbird ist ein Projekt der [AG-Link][0]. - Im Rahmen dieses Projektes entstand ein Stück Software, dass es uns ermöglicht hat viele tausend Tweets von verschiedenen Titter Accounts der Polizei abzurufen und zu speichern. - - + Im Rahmen dieses Projektes entstand ein Stück Software, dass es uns ermöglicht hat viele tausend Tweets von fast allen Twitter Accounts der Polizei abzurufen und zu speichern. + Die Idee hinter diesem Projekt war es, der exekutiven Gewalt auch im digitalen Raum genauer auf die Finger zu schauen. + Denn Twitter und andere Social Media Kanäle sind mittlerweile weit mehr als einfache Informationskanäle. + Es wird Werbung betrieben, gezielt Lügen oder sogenannte „Fake News“ verbreitet, politische Ideologien verfochten und meistens auch einfach nur Memes ausgetauscht. + Doch welche Rolle nimmt dabei die Polizei genau ein und was macht sie auf Twitter? [0]: https://ag-link.xyz - """) + """), + ui.output_text("dataset_infos"), + ui.h3("Ursprung der Idee"), + ui.markdown(""" + Die Idee für dieses Projekt überkam uns bei einem Vortrag der KEW (Kritische Einführungswochen) an der Universität Leipzig im Herbst 2020. Im Zuge eines Vortrages von Copwatch Leipzig wurde dort die Rolle der Polizei auf Twitter zu den Ausschreitungen zum G20 2017 in Hamburg erläutert. + Dieser Vortrag stellte heraus, dass die Polizeikräfte im Vorfeld der Demonstration sich ordentlich mit ihrem Inventar & Fuhrpark gebrüstet haben. + Es war eine Demonstration der Macht und ein klares Signal an alle Demonstrierenden: „Wir sind auf alles vorbereitet – vor allem auf Eskalation“. + Dieses zur Schau stellen von Macht, war eine deutliche Kampfansage an alle, die sich in Hamburg versammelt haben, um gegen den G20 Gipfel zu demonstrieren. + Und die Fronten waren von Anfang an klar. + So hat die Polizei in ihrer theoretisch neutralen Rolle die Bevölkerung zu informieren versagt und von Anfang an zur eskalierenden Stimmungsmache, die zur „Welcome to Hell“ Demonstration einen Höhepunkt erreicht hat, beigetragen. + + Doch nicht nur das, laut einer Studie (https://g20.protestinstitut.eu/) wurden während des Geschehens von Medienakteuren, den schnell abgesetzten Tweets der Polizei zur aktuellen Lage von Blockaden und Ausschreitungen schnell vertraut, obwohl die Polizei ein Teil der Konfliktpartei. + Einige der abgesetzten Tweets zur Dynamik der Veranstaltung und den Ausschreitungen haben sich schlussendlich sogar als falsch herausgestellt, wodurch bewusst oder unbewusst Falschinformationen verbreitet wurden. + + Der Vortrag von Copwatch Leipzig hat genau solche Tweets analysiert und Folgen davon vorgestellt. Dies geschah aber von Hand, also die Tweets wurden nicht maschinell herausgesucht, verarbeitet und analysiert, sondern in mühseliger Handarbeit selektiert und analysiert. + Als Gruppe von Technik-Interessierten Menschen dachten wir uns darauf hin, warum nicht einfach ALLE Tweets der Polizei sammeln und automatisiert analysieren, um herauszufinden ob wir solche Untersuchungen, wie von Copwatch Leipzig oder der G20 Studie, nicht auch automatisieren könnten. + """), + ui.h3("Vortragswoche"), + ui.markdown("""Infos zur Vortragswoche"""), + ui.h3("Hackathon"), + ui.markdown( + """Link zu netzpolitik Artikel: https://netzpolitik.org/2021/copbird-hackathon-auf-twitter-macht-jede-polizei-ihr-eigenes-ding/"""), + ui.h3("Das Ende der Twitter API"), + ui.markdown(""":(""") ) +with open("data/general_analysis_results.json", "r") as f: + general_analysis_dict = json.load(f) + # Server ---- # Note that we just added the @module.server decorator -@module.server + + +@ module.server def welcome_server(input, output, session, starting_value=0): - pass + @output + @render.text + def dataset_infos(): + tweet_count = general_analysis_dict["tweet_count"] + hashtags = general_analysis_dict["hashtags"] + mentions = general_analysis_dict["mention"] + url = general_analysis_dict["url"] + num_police_accounts = general_analysis_dict["num_police_accounts"] + date_first_tweet = general_analysis_dict["date_first_tweet"] + date_last_tweet = general_analysis_dict["date_last_tweet"] + day_diff = general_analysis_dict["day_diff"] + avg_post_hour = general_analysis_dict["avg_post_hour"] + num_text_tokens = general_analysis_dict["num_text_tokens"] + + ds_txt = f"""Der Datensatz umfasst {tweet_count} Tweets bestehend aus {num_text_tokens} Wörtern. + Es wurden {hashtags} Hashtags, {mentions} Erwähnungen und {url} Links erfasst. + Im Datensatz sind Tweets von {num_police_accounts} Polizei, BKA, Bundespolizei, etc. enthalten. + Der erste erfasste Tweet ist vom {date_first_tweet}, und der letzte vom {date_last_tweet}. Damit haben wir über {day_diff} Tage Tweets gesammelt + Und die durchschnittliche Uhrzeit für Tweets ist ca. {int(avg_post_hour)} Uhr. + """ + return ds_txt