~~REVEAL~~ ====== Übung zum Seminar "Mensch und Bot" ====== Dr. Raphael Wimmer Sommersemester 2025 ===== Überblick: 7. Mai 2025 - Diverses, Python ====== - Umgebungsvariablen und Pfade - Welche Python-IDE soll ich verwenden? - apt, pip, conda, virtualeenv (, docker) - Environments und Paketmanager für Python - uv - die eierlegende Wollmilchsau - Grundkonzepte Python ===== PATH ===== - Umgebungsvariablen: Key-Value-Paare, die vom OS innerhalb einer Shell den Programmen zur Verfügung gestellt werden. - Anzeigen/setzen mit `export` (Linux) bzw. `SET` (Windows) - PATH-Umgebungsvariable: wo liegen die ausführbaren Dateien - Reihenfolge relevant - das erstbeste Executable mit passendem Namen wird genommen. - (auch später relevant: `PYTHONPATH`) ===== Python IDEs ===== - jeder beliebige Text-Editor - vim (Anleitungen: [1](https://www.vimfromscratch.com/articles/vim-for-python), [2](http://liuchengxu.org/posts/use-vim-as-a-python-ide/)) - [Jetbrains PyCharm](https://www.jetbrains.com/pycharm/) (umfangreiche IDE speziell für Python) - [VisualStudio Code](https://code.visualstudio.com/) ([Tutorial](https://code.visualstudio.com/docs/python/python-tutorial)) - [repl.it](https://replit.com/) (kollaborative browser-basierte IDE) - weitere? ===== PEP 8 - Style Guide für Python ===== - **PEP**: *Python Enhancement Proposal* - ein Vorschlag, wie die Sprache weiterentwickelt werden soll - PEP 8 -- Style Guide for Python Code](https://www.python.org/dev/peps/pep-0008/) - `pycodestyle`: Kommandozeilentool, das Code auf PEP-8-Konformität prüft - Hier im Kurs: PEP-8-Regeln bitte einhalten (zwingend für Studienleistung), bis auf Regel zu max. Zeilenlänge - Link-Tipp: Vortrag von Raymond Hettinger: [Beyond PEP 8 -- Best practices for beautiful intelligible code](https://www.youtube.com/watch?v=wf-BqAjZb8M&t=2s) ===== Paketmanagement in Python ===== Es gibt drei verbreitete Möglichkeiten, Python-Module zu installieren: - Paketmanagement des Betriebssystems (z.B. ``apt`` unter Debian/Ubuntu Linux) - ``pip`` - Pythons Paketmanager - ``conda`` - Paketmanagement der Anaconda-Distribution Um für jede Anwendung separate Module zu installieren: virtual environments ==== Paketmanagement durch Betriebssystem ==== - Primär bei Linux-Distributionen, z.B. Debian/Ubuntu - ``apt install python3-matplotlib`` - Vorteile: global verfügbar, sicher, vorkompilierte Binaries - Nachteile: nicht immer aktuell, nicht alle Python-Pakete verfügbar, immer nur eine Paketversion installierbar ==== Paketmanagement mit pip ==== - Pakete werden aus dem Python Package Index (PyPI) installiert (PyPI enthält quasi alle Pakete) - ``pip3 install matplotlib`` - ``pip3 install -r requirements.txt``: Textdatei mit Paketnamen und ggf. Versionen. - Vorteile: global oder (default) lokal installierbar, immer aktuellste Version, quasi alle Pakete verfügbar. - Nachteile: nicht zwingend robust/sicher, Kompilierungsschritt bei C-Erweiterungen notwendig - Tool `pipx`: installiert Python-**Programme** in einer eigenen virtuellen Umgebung und fügt sie zum Pfad hinzu ([Repo / Anleitung](https://github.com/pypa/pipx)) ==== Paketmanagement mit conda ==== - Anaconda: Python-Distribution für Scientific Computing (multi-platform) - Minimale Distribution: [miniconda](https://docs.conda.io/en/latest/miniconda.html) - ``conda``: package manager für Anaconda ([Intro](https://conda.io/projects/conda/en/latest/user-guide/getting-started.html)) - pip und conda können parallel eingesetzt werden ([1](https://www.anaconda.com/blog/understanding-conda-and-pip), [2](https://pythonspeed.com/articles/conda-vs-pip/)) - Alternative: [Mamba](https://github.com/mamba-org/mamba) - Vorteile: sicher, robust, vorkompilierte Binaries, integrierte Unterstützung von *virtual environments* - Nachteile: nicht immer aktuell, wenige Python-Pakete verfügbar, fügt Overhead (Ressourcen, Debugging) hinzu ==== Virtual Environments ==== - Grundidee: für jedes Projekt eine eigene Python-Installation ([Doku](https://docs.python.org/3/library/venv.html)) - Funktionsweise: Überschreiben der Pfade zu Binaries, Bibliotheken in der aktuellen Shell - Virtualenv im Unterverzeichnis ``.env`` anlegen: ``python3 -m venv .env`` - Virtualenv aktivieren: ``source .env/bin/activate`` (Linux) / ``.env\Scripts\activate.bat`` - deaktivieren durch Beenden der Shell - Viele IDEs unterstützen venv ([VS Code](https://code.visualstudio.com/docs/python/environments), [PyCharm](https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html)) - Conda: ``conda create --name myenv`` / ``conda activate myenv`` ==== uv - die eierlegende Wollmilchsau ==== - Tool für gängiges Python-Projektmanagement ([Doku](https://docs.astral.sh/uv/) - sehr schnell (Rust, Caching) - Wrapper für viele gängige Aktionen: - `uv python install ` - installiert Python - `uv init ` - erzeugt Projektverzeichnis, initialisiert venv und Git. - `uv add ` - fügt Paket zu Projekt hinzu - `uv run ` - führt Script in aktuellem venv aus - `uv pip <...>` / `uv venv <...>` - wrappt pip/venv - [Ausführliche Diskussion](https://www.bitecode.dev/p/a-year-of-uv-pros-cons-and-should) ===== Überblick: 21. Mai 2025 - Erste Chatbots ====== ==== ELIZA ==== - Python-Quellcode: https://github.com/wadetb/eliza - Eure Aufgaben: - Code zum Laufen bringen - Etwas an den Antworten ändern - Ausgeben, was unter der Haube passiert (optional) ==== Eigener Chatbot ==== - Eure Aufgabe: schreibt einen eigenen Chatbot mit einer Heuristik - notwendig: loops, ´input()/rawinput()´, evtl. regex oder String-Operationen - Anforderungen: reagiert auf bestimmte Schlüsselwörter ===== Überblick: 4. Juni 2025 - openai, llm, flask ====== ==== Simon Willison's llm Python module ==== - https://github.com/simonw/llm - https://simonwillison.net/2025/Mar/11/using-llms-for-code/ - https://simonw.substack.com/p/how-i-use-llms-to-help-me-write-code - Video: [Language models on the command-line w/ Simon Willison](https://www.youtube.com/watch?v=QUXQNi6jQ30) ==== Experimente mit llm ==== - Installiert `llm` von PYPI - Holt Euch den OpenAI-API-Key aus GRIPS (wird bald wieder deaktiviert) - fügt den API-Key bei llm hinzu (siehe Doku) - stellt ein paar Anfragen - variiert die Temperatur ==== OpenAI API ==== - Klassische REST-Schnittstelle - Beispiel: ``wget --method=POST --header="Authorization: Bearer $OPENAI_API_KEY" --header="Content-Type: application/json" --body-data='{"model": "gpt-4o","messages": [{ "role": "user", "content": "Hello, world!" }]}' https://api.openai.com/v1/chat/completions -O -`` - [Python-API](https://github.com/openai/openai-python) ==== Unser neuer ChatBot mit Web und KI ==== Wir *vibe-coden* einen ChatBot mit Web-Interface und OpenAI-Backend * [Flask](https://flask.palletsprojects.com/en/stable/): simples Python Web-Framework * Wir fragen ChatGPT (oder via llm) nach einer simplen Chat-Anwendung in Flask * Wie prompten wir? Was ist unser Ziel? * Nächste Schritte: ChatGPT-API-Call generieren lassen, in Flask einbauen ===== 11. Juni 2025 - Studienleistung, Social Bots ====== ==== Studienleistungen ==== - Verpflichtende Abgabe bis 30.7.2025 - Projekt 1: Ein Chatbot mit Besonderheit (Python) - Python-Script mit Angabe der Dependencies (requirements.txt) - Chatten - Nachrichten werden entweder an LLM (z.B. OpenAI) geschickt oder von ELiza-Grammatik interpretiert - irgendwas Spannendes! (Eastereggs, Animationen, etc., dokumentiert in README.md) - Code ist nicht grauenhaft - Projekt 2: Eine Analyse eines (Bot-)Netzwerks (Jupyter Notebook) - Anforderungen: TODO! ===== 18. Juni 2025: Social Network Analysis ===== ==== Grundlage: Graphen ==== ==== Grafische Tools zur Social Network Analysis ==== - [Gephi](https://gephi.org/) - [SocNetV](https://socnetv.org/) - [Maltego](https://www.maltego.com/) - ... ==== Aufgabe 1: Exploration von Konzepten mit SocNetV ==== - Installiert [SocNetV](https://socnetv.org/) - Ladet den Krackhardt-Datensatz (Control Panel → Auto Create → Famous Datasets → Krackhardt) - Exploriert die verschiedenen Visualisierungen und Metriken ==== Aufgabe 2: Exploration von Daten mit Gephi ==== - Installiert [Gephi](https://gephi.org/) - Ladet Euch einen der [Beispiel-Datensätze für Gephi](https://github.com/melaniewalsh/sample-social-network-datasets) herunter (z.B. den ``trump``-Datensatz) - Besprecht mit der Person neben Euch, welche Aspekte interessant sein könnten - Bereitet eine Visualisierung vor. ==== Aufgabe 3: Aufbereiten von Daten für die Netzwerkanalyse (gemeinsam) ==== - Ladet den [TwiBot20-Beispieldatensatz](https://github.com/BunsenFeng/TwiBot-20/blob/main/TwiBot-20_sample.json) von GitHub herunter - Schaut Euch die Daten in der JSON-Datei an - Wir erstellen gemeinsam ein Jupyter Notebook, das die JSON-Daten in GraphML konvertiert ==== Weiterführende Links ==== - https://networkrepository.com/soc.php - https://neo4j.com/graphgists/finding-influencers-in-a-social-network/ - https://arxiv.org/html/2403.15856v1 - https://medium.com/@girraffael/network-statistical-analysis-on-my-instagram-connections-graph-c5ca91062d47 / https://github.com/ghazalrafiei/Social-Network-Graph-Analysis ==== Datensätze ==== - https://snap.stanford.edu/data/ - https://www.kaggle.com/datasets - https://github.com/gephi/gephi/wiki/Datasets ==== Aufgaben bis zum nächsten Mal ==== - [Videos zur Einführung SNA von Martin Grandjean](https://www.martingrandjean.ch/introduction-to-social-network-analysis/) anschauen ([Script](https://zenodo.org/records/5083036)) - Analyse eines Details des TwiBot20-Beispieldatensatzes vorbereiten und vorstellen. ===== 16. Juli 2025: Social Network Analysis: Hands-On ===== ==== Linktipps ==== - [Comprehensive Python Cheatsheet](https://gto76.github.io/python-cheatsheet/) - [Socioscan](https://github.com/haybnzz/socioscan) - Tool für SNA (noch nicht genauer angeschaut) - [Twitter-Explorer](https://github.com/pournaki/twitter-explorer) - noch ein Tool für SNA ==== Aktuelle Themen ==== - [Bad Actors are Grooming LLMs to Produce Falsehoods](https://americansunlight.substack.com/p/bad-actors-are-grooming-llms-to-produce) - [YouTube-Kanal mit KI-generierten "Interviews" von Leuten auf der Straße](https://www.youtube.com/@KINGOFAIVIDEO19/shorts) - [Hacker News](https://hn.algolia.com/?q=bots) ==== Review: NetworkX-Aufgaben ==== - bis heute: Aufgaben aus [Jupyter Notebook](https://elearning.uni-regensburg.de/mod/resource/view.php?id=2931168) erledigen - wie lange habt Ihr gebraucht? - gemeinsames Review ==== Gemeinsam: Sammeln von SNA-Datensatz mit Zeeschuimer ==== - Ziel: Übung mit den Werkzeugen - Kleinen Datensatz mit [zeeschuimer](https://github.com/digitalmethodsinitiative/zeeschuimer) sammeln - Welche Felder stecken in der JSON-Datei? (Tool-Tip: [jq](https://jqlang.org/)) - neues Jupyter-Notebook zum Extrahieren der relevanten Informationen schreiben - Code für Visualisierung aus existierendem Notebook übernehmen - Am Ende der Übung: Geschichte dazu erzählen