Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:blc:informatik:glf4-24:analyse-scripts [2024/03/08 15:29] – Ivo Blöchliger | lehrkraefte:blc:informatik:glf4-24:analyse-scripts [2024/03/18 17:42] (current) – [Youtube Englisch] Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ===== Analyse-Scripts ===== | ||
| + | Folgende Scripts konvertieren die Social-Media-Daten in eine .csv-Datei. | ||
| + | |||
| + | |||
| + | ==== Spotify ==== | ||
| + | <code python spotify.py> | ||
| + | import re # Regular Expressions | ||
| + | import datetime | ||
| + | import os # Files suchen | ||
| + | import json | ||
| + | # Erklärungen zu diesem Code sind Analog dem Youtube-Extraktor. | ||
| + | |||
| + | rootdir = " | ||
| + | |||
| + | # Resultat, das am Schluss geschrieben werden soll | ||
| + | csv = "" | ||
| + | # Wie viele Kontrollausgaben? | ||
| + | debug = 100 | ||
| + | |||
| + | # Alle HTML-Dateien im Verzeicznis anzeigen | ||
| + | for root, dirs, files in os.walk(rootdir): | ||
| + | for file in files: | ||
| + | if file.endswith(" | ||
| + | filepath = os.path.join(root, | ||
| + | # Datei oeffnen | ||
| + | | ||
| + | f = open(filepath, | ||
| + | #html = f.read() | ||
| + | data=json.load(f) | ||
| + | print(data) | ||
| + | f.close() | ||
| + | |||
| + | for d in (data): | ||
| + | # Einträge in Zahlen umwandeln | ||
| + | # Monat plus die anderen Einträge (ohne AM/PM) in Zahlen umgewandelt | ||
| + | # Die Zeichenkette " | ||
| + | | ||
| + | |||
| + | # Datum daraus generieren (macht die Datumsmanipulation einfacher). | ||
| + | # Jahr, Monat, Tag, Stunde, Minute, Sekunde | ||
| + | | ||
| + | |||
| + | if debug>0: | ||
| + | # Ausgabe zur Kontrolle, produziert folgendes Format | ||
| + | print(d[" | ||
| + | debug -= 1 # Um 1 vermindern | ||
| + | |||
| + | |||
| + | # Formatierte Ausgabe des Datums, siehe https:// | ||
| + | # \n heisst neue Zeile. | ||
| + | csv += str(d[" | ||
| + | |||
| + | # Ausgabe in Datei schreiben | ||
| + | f = open(" | ||
| + | f.write(csv) | ||
| + | f.close() </ | ||
| + | ==== Twitter ==== | ||
| + | |||
| + | <code python twitter.py> | ||
| + | import re # Regular Expressions | ||
| + | import datetime | ||
| + | import os # Files suchen | ||
| + | |||
| + | # Erklärungen zu diesem Code sind Analog dem Youtube-Extraktor. | ||
| + | |||
| + | rootdir = " | ||
| + | |||
| + | # Resultat, das am Schluss geschrieben werden soll | ||
| + | csv = "" | ||
| + | # Wie viele Kontrollausgaben? | ||
| + | debug = 100 | ||
| + | |||
| + | # Alle HTML-Dateien im Verzeicznis anzeigen | ||
| + | for root, dirs, files in os.walk(rootdir): | ||
| + | for file in files: | ||
| + | if file.endswith(" | ||
| + | filepath = os.path.join(root, | ||
| + | # Datei oeffnen | ||
| + | f = open(filepath, | ||
| + | html = f.read() | ||
| + | f.close() | ||
| + | |||
| + | |||
| + | # Datum der aus zwei verschiedenen Formaten einlesen | ||
| + | # Alle nötigen Angaben werden in Klammern " | ||
| + | daten = re.findall(" | ||
| + | daten2 = re.findall(" | ||
| + | # | ||
| + | # | ||
| + | | ||
| + | if(debug> | ||
| + | print(file,": | ||
| + | debug-=1 | ||
| + | |||
| + | |||
| + | # Alle Einträge durchgehen, d enthält jeweils den nächsten Eintrag | ||
| + | for d in (daten2+daten): | ||
| + | # Einträge in Zahlen umwandeln | ||
| + | # Monat plus die anderen Einträge (ohne AM/PM) in Zahlen umgewandelt | ||
| + | # Die Zeichenkette " | ||
| + | | ||
| + | e = [int(x) for x in d] | ||
| + | if debug>0: | ||
| + | # Ausgabe zur Kontrolle, sollte folgendes Format Produzieren | ||
| + | print(e) # [1, 6, 2021, 21, 23, 12] | ||
| + | debug -= 1 # Um 1 vermindern | ||
| + | |||
| + | # Datum daraus generieren (macht die Datumsmanipulation einfacher). | ||
| + | # Jahr, Monat, Tag, Stunde, Minute, Sekunde | ||
| + | datum = datetime.datetime(e[0], | ||
| + | |||
| + | if debug>0: | ||
| + | # Ausgabe zur Kontrolle, produziert folgendes Format | ||
| + | print(datum) | ||
| + | debug -= 1 # Um 1 vermindern | ||
| + | |||
| + | |||
| + | # Formatierte Ausgabe des Datums, siehe https:// | ||
| + | # \n heisst neue Zeile. | ||
| + | csv += datum.strftime(" | ||
| + | |||
| + | # Ausgabe in Datei schreiben | ||
| + | f = open(" | ||
| + | f.write(csv) | ||
| + | f.close() | ||
| + | </ | ||
| + | ==== Snapchat Datum-Zeit Angaben ==== | ||
| + | <code python snapchat.py> | ||
| + | import re # Regular Expressions | ||
| + | import datetime | ||
| + | import os # Files suchen | ||
| + | |||
| + | # Erklärungen zu diesem Code sind Analog dem Youtube-Extraktor. | ||
| + | |||
| + | rootdir = " | ||
| + | |||
| + | # Resultat, das am Schluss geschrieben werden soll | ||
| + | csv = "" | ||
| + | # Wie viele Kontrollausgaben? | ||
| + | debug = 30 | ||
| + | |||
| + | # Alle HTML-Dateien im Verzeicznis anzeigen | ||
| + | for root, dirs, files in os.walk(rootdir): | ||
| + | for file in files: | ||
| + | if file.endswith(" | ||
| + | filepath = os.path.join(root, | ||
| + | # Datei oeffnen | ||
| + | f = open(filepath, | ||
| + | html = f.read() | ||
| + | f.close() | ||
| + | |||
| + | |||
| + | # Datum der Form 30.12.2021, 22:13 einlesen | ||
| + | # Alle nötigen Angaben werden in Klammern " | ||
| + | daten = re.findall(" | ||
| + | if(debug> | ||
| + | print(file,": | ||
| + | debug-=1 | ||
| + | |||
| + | |||
| + | # Alle Einträge durchgehen, d enthält jeweils den nächsten Eintrag | ||
| + | for d in daten: | ||
| + | # Einträge in Zahlen umwandeln | ||
| + | # Monat plus die anderen Einträge (ohne AM/PM) in Zahlen umgewandelt | ||
| + | # Die Zeichenkette " | ||
| + | |||
| + | e = [int(x) for x in d] | ||
| + | if debug>0: | ||
| + | # Ausgabe zur Kontrolle, sollte folgendes Format Produzieren | ||
| + | print(e) # [1, 6, 2021, 21, 23, 12] | ||
| + | debug -= 1 # Um 1 vermindern | ||
| + | |||
| + | # Datum daraus generieren (macht die Datumsmanipulation einfacher). | ||
| + | # Jahr, Monat, Tag, Stunde, Minute, Sekunde | ||
| + | datum = datetime.datetime(e[0], | ||
| + | |||
| + | if debug>0: | ||
| + | # Ausgabe zur Kontrolle, produziert folgendes Format | ||
| + | print(datum) | ||
| + | debug -= 1 # Um 1 vermindern | ||
| + | |||
| + | |||
| + | # Formatierte Ausgabe des Datums, siehe https:// | ||
| + | # \n heisst neue Zeile. | ||
| + | csv += datum.strftime(" | ||
| + | |||
| + | # Ausgabe in Datei schreiben | ||
| + | f = open(" | ||
| + | f.write(csv) | ||
| + | f.close() | ||
| + | </ | ||
| + | |||
| + | ==== Snapchat Location Data ==== | ||
| + | <code python snapchat_locations.py> | ||
| + | import json | ||
| + | import re | ||
| + | import datetime | ||
| + | |||
| + | |||
| + | filename = " | ||
| + | with open(filename) as f: | ||
| + | mydata = json.load(f) | ||
| + | |||
| + | # | ||
| + | # | ||
| + | |||
| + | # Kopfzeile der CSV-Datei | ||
| + | csv = "" | ||
| + | |||
| + | # Muster zum extrahieren der Koordinaten | ||
| + | geomuster = re.compile(" | ||
| + | |||
| + | # Muster der Zeitangabe | ||
| + | zeitformat = " | ||
| + | |||
| + | minlat = 100 | ||
| + | maxlat = -100 | ||
| + | minlon = 200 | ||
| + | maxlon = -200 | ||
| + | |||
| + | # Alle Anagaben in ' | ||
| + | for location in mydata[' | ||
| + | # Extrahieren der geographischen Koordinaten | ||
| + | res = geomuster.search(location[' | ||
| + | try: | ||
| + | latitude = float(res.group(1)) | ||
| + | longitude = float(res.group(2)) | ||
| + | minlat = min([minlat, | ||
| + | maxlat = max([maxlat, | ||
| + | minlon = min([minlon, | ||
| + | maxlon = max([maxlon, | ||
| + | # Umwandlunmaxer Datum/ | ||
| + | dt = datetime.datetime.strptime(location[' | ||
| + | # Zeile in der CSV Datei | ||
| + | csv += f" | ||
| + | except AttributeError: | ||
| + | pass | ||
| + | |||
| + | |||
| + | # Noch einen Header mit den minimalen/ | ||
| + | csv = f" | ||
| + | |||
| + | # CSV Datei schreiben | ||
| + | with open(" | ||
| + | f.write(csv) | ||
| + | </ | ||
| + | |||
| + | Visualisierung mit Excel: | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | |||
| + | ==== Instagram Deutsch ==== | ||
| + | <code python insta_deutsch.py> | ||
| + | import re # Regular Expressions | ||
| + | import datetime | ||
| + | import os # Files suchen | ||
| + | |||
| + | # Erklärungen zu diesem Code sind Analog dem Youtube-Extraktor. | ||
| + | |||
| + | rootdir = " | ||
| + | |||
| + | # Resultat, das am Schluss geschrieben werden soll | ||
| + | csv = "" | ||
| + | # Wie viele Kontrollausgaben? | ||
| + | debug = 10 | ||
| + | |||
| + | # Alle HTML-Dateien im Verzeicznis anzeigen | ||
| + | for root, dirs, files in os.walk(rootdir): | ||
| + | for file in files: | ||
| + | if file.endswith(" | ||
| + | filepath = os.path.join(root, | ||
| + | # Datei oeffnen | ||
| + | f = open(filepath, | ||
| + | html = f.read() | ||
| + | f.close() | ||
| + | | ||
| + | | ||
| + | # Datum der Form 30.12.2021, 22:13 einlesen | ||
| + | # Alle nötigen Angaben werden in Klammern " | ||
| + | daten = re.findall(" | ||
| + | if(debug> | ||
| + | print(file,": | ||
| + | debug-=1 | ||
| + | |||
| + | |||
| + | # Alle Einträge durchgehen, d enthält jeweils den nächsten Eintrag | ||
| + | for d in daten: | ||
| + | # Einträge in Zahlen umwandeln | ||
| + | # Monat plus die anderen Einträge (ohne AM/PM) in Zahlen umgewandelt | ||
| + | # Die Zeichenkette " | ||
| + | | ||
| + | e = [int(x) for x in d] | ||
| + | if debug>0: | ||
| + | # Ausgabe zur Kontrolle, sollte folgendes Format Produzieren | ||
| + | print(e) # [1, 6, 2021, 21, 23, 12] | ||
| + | debug -= 1 # Um 1 vermindern | ||
| + | | ||
| + | # Datum daraus generieren (macht die Datumsmanipulation einfacher). | ||
| + | # Jahr, Monat, Tag, Stunde, Minute, Sekunde | ||
| + | datum = datetime.datetime(e[2], | ||
| + | |||
| + | if debug>0: | ||
| + | # Ausgabe zur Kontrolle, produziert folgendes Format | ||
| + | print(datum) | ||
| + | debug -= 1 # Um 1 vermindern | ||
| + | | ||
| + | | ||
| + | # Formatierte Ausgabe des Datums, siehe https:// | ||
| + | # \n heisst neue Zeile. | ||
| + | csv += datum.strftime(" | ||
| + | | ||
| + | # Ausgabe in Datei schreiben | ||
| + | f = open(" | ||
| + | f.write(csv) | ||
| + | f.close() | ||
| + | </ | ||
| + | ==== Instagram Englisch ==== | ||
| + | <code python insta_englisch.py> | ||
| + | import re # Regular Expressions | ||
| + | import datetime | ||
| + | import os # Files suchen | ||
| + | |||
| + | # Erklärungen zu diesem Code sind Analog dem Youtube-Extraktor. | ||
| + | |||
| + | rootdir = " | ||
| + | mnum = {" | ||
| + | |||
| + | # Resultat, das am Schluss geschrieben werden soll | ||
| + | csv = "" | ||
| + | # Wie viele Kontrollausgaben? | ||
| + | debug = 10 | ||
| + | |||
| + | # Alle HTML-Dateien im Verzeicznis anzeigen | ||
| + | for root, dirs, files in os.walk(rootdir): | ||
| + | for file in files: | ||
| + | if file.endswith(" | ||
| + | filepath = os.path.join(root, | ||
| + | # Datei oeffnen | ||
| + | f = open(filepath, | ||
| + | html = f.read() | ||
| + | f.close() | ||
| + | | ||
| + | | ||
| + | # Datum der Form 30.12.2021, 22:13 einlesen | ||
| + | # Alle nötigen Angaben werden in Klammern " | ||
| + | daten = re.findall(" | ||
| + | |||
| + | | ||
| + | if(debug> | ||
| + | print(file,": | ||
| + | debug-=1 | ||
| + | |||
| + | |||
| + | # Alle Einträge durchgehen, d enthält jeweils den nächsten Eintrag | ||
| + | for d in daten: | ||
| + | # Einträge in Zahlen umwandeln | ||
| + | # Monat plus die anderen Einträge (ohne AM/PM) in Zahlen umgewandelt | ||
| + | # Die Zeichenkette " | ||
| + | | ||
| + | e = [mnum[d[0]]] + [int(x) for x in d[1:-1]] | ||
| + | if d[5]==" | ||
| + | | ||
| + | if debug>0: | ||
| + | # Ausgabe zur Kontrolle, sollte folgendes Format Produzieren | ||
| + | print(e) # [1, 6, 2021, 21, 23, 12] | ||
| + | debug -= 1 # Um 1 vermindern | ||
| + | | ||
| + | # Datum daraus generieren (macht die Datumsmanipulation einfacher). | ||
| + | # Jahr, Monat, Tag, Stunde, Minute, Sekunde | ||
| + | datum = datetime.datetime(e[2], | ||
| + | |||
| + | if debug>0: | ||
| + | # Ausgabe zur Kontrolle, produziert folgendes Format | ||
| + | print(datum) | ||
| + | debug -= 1 # Um 1 vermindern | ||
| + | | ||
| + | # Wochentag (Mo=0, Di=1, ..., So=6) | ||
| + | # Sämtliche Methoden für datetime-Objekte sind hier beschrieben: | ||
| + | wday = datum.weekday() | ||
| + | | ||
| + | # Formatierte Ausgabe des Datums, siehe https:// | ||
| + | # \n heisst neue Zeile. | ||
| + | csv += datum.strftime(" | ||
| + | | ||
| + | # Ausgabe in Datei schreiben | ||
| + | f = open(" | ||
| + | f.write(csv) | ||
| + | f.close() | ||
| + | </ | ||
| + | |||
| + | ==== Youtube JSON-Export ==== | ||
| + | <code python youtube-json.py> | ||
| + | import sys,os,glob | ||
| + | import json | ||
| + | import datetime | ||
| + | |||
| + | # Diese Zeile anpassen (kann auch z.B. *.json sein) | ||
| + | defaultFilePattern = " | ||
| + | |||
| + | |||
| + | # Sucht nach passenden Dateien | ||
| + | def searchForInputFiles(): | ||
| + | if len(sys.argv)==2: | ||
| + | if os.path.exists(sys.argv[1]): | ||
| + | if os.path.isfile(sys.argv[1]): | ||
| + | return [sys.argv[1]] | ||
| + | else: | ||
| + | return glob.glob(sys.argv[1]+"/ | ||
| + | return glob.glob(" | ||
| + | |||
| + | def showHelp(): | ||
| + | print(" | ||
| + | print(defaultFilePattern) | ||
| + | print(" | ||
| + | print(" | ||
| + | |||
| + | |||
| + | files = searchForInputFiles() | ||
| + | if len(files)==0: | ||
| + | print(" | ||
| + | showHelp() | ||
| + | |||
| + | with open(" | ||
| + | for file in files: | ||
| + | with open(file, " | ||
| + | data = json.load(f) | ||
| + | for d in data: | ||
| + | # Zeitangabe in Python datetime objekt umwandeln (Das Z kennt Python nicht) | ||
| + | zeit = datetime.datetime.fromisoformat(d[' | ||
| + | # Folgende Zeile anpassen, falls Excel nicht mit diesem Datumsformat umgegehn kann | ||
| + | output.write(zeit.strftime(" | ||
| + | </ | ||
| + | |||
| + | ==== Youtube Englisch (HTML-Export)==== | ||
| + | <code python youtube_englisch.py> | ||
| + | import re # Regular Expressions | ||
| + | import datetime | ||
| + | |||
| + | # Erklärungen zu diesem Code gibt es auch als Video hier: | ||
| + | # https:// | ||
| + | # und für Datensparsame und solche ohne BLDSG-Account auch hier: | ||
| + | # https:// | ||
| + | |||
| + | # Daten einlesen | ||
| + | # Entweder vollständiger Pfad zur Datei oder (wie z.B. C: | ||
| + | # nur Dateiname, wenn die Datei im gleichen Verzeichnis wie das Pythonprogramm liegt. | ||
| + | f = open(" | ||
| + | html = f.read() | ||
| + | f.close() | ||
| + | |||
| + | |||
| + | # Datum der Form Jan 6, 2021, 9:23:12 PM CET | ||
| + | # Alle nötigen Angaben werden in Klammern " | ||
| + | daten = re.findall(r" | ||
| + | |||
| + | #Erste 3 Einträge zur Kontrolle ausgeben | ||
| + | print(daten[0: | ||
| + | |||
| + | # Zuordnung der Monatsnamen zu Monatsnummern, | ||
| + | mnum = {" | ||
| + | |||
| + | # Resultat, das am Schluss geschrieben werden soll | ||
| + | csv = "" | ||
| + | |||
| + | # Wie viele Kontrollausgaben? | ||
| + | debug = 10 | ||
| + | |||
| + | # Alle Einträge durchgehen, d enthält jeweils den nächsten Eintrag | ||
| + | for d in daten: | ||
| + | # Einträge in Zahlen umwandeln | ||
| + | # Monat plus die anderen Einträge (ohne AM/PM) in Zahlen umgewandelt | ||
| + | # Die Zeichenkette " | ||
| + | e = [mnum[d[0]]] + [int(x) for x in d[1:-1]] | ||
| + | if d[6]==" | ||
| + | e[3]=(e[3]+12) % 24 | ||
| + | | ||
| + | if debug>0: | ||
| + | # Ausgabe zur Kontrolle, sollte folgendes Format Produzieren | ||
| + | print(e) # [1, 6, 2021, 21, 23, 12] | ||
| + | debug -= 1 # Um 1 vermindern | ||
| + | |||
| + | # Datum daraus generieren (macht die Datumsmanipulation einfacher). | ||
| + | # Jahr, Monat, Tag, Stunde, Minute, Sekunde | ||
| + | datum = datetime.datetime(e[2], | ||
| + | |||
| + | if debug>0: | ||
| + | # Ausgabe zur Kontrolle, produziert folgendes Format | ||
| + | print(datum) | ||
| + | debug -= 1 # Um 1 vermindern | ||
| + | |||
| + | # Wochentag (Mo=0, Di=1, ..., So=6) | ||
| + | # Sämtliche Methoden für datetime-Objekte sind hier beschrieben: | ||
| + | wday = datum.weekday() | ||
| + | |||
| + | # Formatierte Ausgabe des Datums, siehe https:// | ||
| + | # \n heisst neue Zeile. | ||
| + | csv += datum.strftime(" | ||
| + | |||
| + | # Ausgabe in Datei schreiben | ||
| + | f = open(" | ||
| + | f.write(csv) | ||
| + | f.close() | ||
| + | </ | ||
| + | |||
| + | ==== Youtube Deutsch (HTML-Export) ==== | ||
| + | <code python youtube_deutsch.py> | ||
| + | import re # Regular Expressions | ||
| + | import datetime | ||
| + | |||
| + | # VERSION FUER DEUTSCHE EXPORTE, Datumsangabe in der Form 09.02.2012, 14:15:59 MEZ | ||
| + | |||
| + | # Erklärungen zu diesem Code gibt es auch als Video hier: | ||
| + | # https:// | ||
| + | # und für Datensparsame und solche ohne BLDSG-Account auch hier: | ||
| + | # https:// | ||
| + | |||
| + | # Daten einlesen | ||
| + | # Entweder vollständiger Pfad zur Datei oder (wie z.B. C: | ||
| + | # nur Dateiname, wenn die Datei im gleichen Verzeichnis wie das Pythonprogramm liegt. | ||
| + | f = open(" | ||
| + | html = f.read() | ||
| + | f.close() | ||
| + | |||
| + | |||
| + | # Datum der Form Jan 6, 2021, 9:23:12 PM CET | ||
| + | # Alle nötigen Angaben werden in Klammern " | ||
| + | |||
| + | # Datum der Form 09.02.2012, 14:15:59 MESZ | ||
| + | daten = re.findall(r" | ||
| + | |||
| + | |||
| + | #Erste 3 Einträge zur Kontrolle ausgeben | ||
| + | print(daten[0: | ||
| + | |||
| + | # Zuordnung der Monatsnamen zu Monatsnummern, | ||
| + | mnum = {" | ||
| + | |||
| + | # Resultat, das am Schluss geschrieben werden soll | ||
| + | csv = "" | ||
| + | |||
| + | # Wie viele Kontrollausgaben? | ||
| + | debug = 10 | ||
| + | |||
| + | # Alle Einträge durchgehen, d enthält jeweils den nächsten Eintrag | ||
| + | for d in daten: | ||
| + | # Einträge in Zahlen umwandeln | ||
| + | # Monat plus die anderen Einträge (ohne AM/PM) in Zahlen umgewandelt | ||
| + | # Die Zeichenkette " | ||
| + | e = [int(x) for x in d] | ||
| + | |||
| + | if debug>0: | ||
| + | # Ausgabe zur Kontrolle, sollte folgendes Format Produzieren | ||
| + | print(e) # [1, 6, 2021, 21, 23, 12] | ||
| + | debug -= 1 # Um 1 vermindern | ||
| + | |||
| + | # Datum daraus generieren (macht die Datumsmanipulation einfacher). | ||
| + | # Jahr, Monat, Tag, Stunde, Minute, Sekunde | ||
| + | datum = datetime.datetime(e[2], | ||
| + | |||
| + | if debug>0: | ||
| + | # Ausgabe zur Kontrolle, produziert folgendes Format | ||
| + | print(datum) | ||
| + | debug -= 1 # Um 1 vermindern | ||
| + | |||
| + | # Wochentag (Mo=0, Di=1, ..., So=6) | ||
| + | # Sämtliche Methoden für datetime-Objekte sind hier beschrieben: | ||
| + | wday = datum.weekday() | ||
| + | |||
| + | # Formatierte Ausgabe des Datums, siehe https:// | ||
| + | # \n heisst neue Zeile. | ||
| + | csv += datum.strftime(" | ||
| + | |||
| + | # Ausgabe in Datei schreiben | ||
| + | f = open(" | ||
| + | f.write(csv) | ||
| + | f.close() | ||
| + | |||
| + | </ | ||