schule:analyse_einer_wiki-datenbank
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
schule:analyse_einer_wiki-datenbank [2016-05-01 09:49] – [Klassendiagramm/Programmierung] Connector erklärt. marco.bakera | schule:analyse_einer_wiki-datenbank [2019-12-22 22:27] (aktuell) – [Links] marco.bakera | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Analyse einer Wiki-Datenbank ====== | ||
+ | |||
+ | Im Folgenden wollen wir eine Datenbank einer MediaWiki-Installation untersuchen. MediaWiki ist die wohl am weitesten verbreitete Wiki-Software, | ||
+ | |||
+ | ===== ER-Modell ===== | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Den Daten von MediaWiki liegt ein großes und recht komplexes Datenbankmodell zugrunde, das oben abgebildet ist.((Quelle: | ||
+ | |||
+ | - Importiere die Datenbank. | ||
+ | - Analysiere die verschiedenen Tabellen gemäß des Schemas und versuche zu verstehen, was die Tabellen jeweils abspeichern und wie sie verbunden sind. | ||
+ | |||
+ | |||
+ | ===== Analyse der Daten ===== | ||
+ | |||
+ | In einem ersten Schritt wollen wir einige Analysen auf den Daten der Datenbank durchführen. | ||
+ | |||
+ | - Erstelle eine Abfrage, die für jeden Benutzer dessen Anzahl an durchgeführten Änderungen anzeigt. (Spalte: Benutzername, | ||
+ | - Erzeuge eine Ausgabe, die für jeden Benutzer des Systems die kumulierte Größe (in Byte) aller Veränderungen in aufsteigender Reihenfolge angibt. (Spalten: Benutzer, Summer der Änderungen (in Byte)) | ||
+ | - Um die Akzeptanz des Wikis einschätzen zu können, ist ferner von Bedeutung, zu welchen Zeiten | ||
+ | - Die bisherigen Untersuchungen haben die Beteiligung der Benutzer des Wikis betrachtet. Eine weitere statistische Grundlage für die Qualität des Wikis insgesamt und ein Mittel, um Stellen für mögliche Verbesserungen in einem Wiki zu identifizieren, | ||
+ | - Erstelle nun eine Abfrage, die eine Tabelle erzeugt, die für jeden Artikel die Anzahl der Verweise auf diesen Artikel zählt. (Spalten: Artikelname, | ||
+ | |||
+ | |||
+ | ===== Daten um sensible Informationen bereinigen ===== | ||
+ | |||
+ | Nun sollen die Daten um sensible Informationen bereinigt werden. | ||
+ | |||
+ | - Welche Daten sind als schützenswürdig einzustufen? | ||
+ | - Mit welchen Anweisungen lassen sich die Daten anonymisieren? | ||
+ | |||
+ | |||
+ | ===== Verlinkung ===== | ||
+ | |||
+ | Wir wollen nun die Verlinkungsstruktur der Artikel in unserem Wiki sichtbar machen. Hieraus soll erkennbar sein, welcher Artikel auf welchen anderen Artikel verweist. | ||
+ | |||
+ | - Erstelle eine SQL-Anweisung, | ||
+ | |||
+ | |||
+ | ===== Page-Rank Algorithmus ===== | ||
+ | |||
+ | Einer der Gründer von Google Lary Page. Er entwickelte den Page-Rank-Algorithmus, | ||
+ | |||
+ | - Informiere dich über den Google-Pagerank-Algorithmus - z. B. in der [[http:// | ||
+ | - Erstelle eine Präsentation, | ||
+ | - Zeige die Funktionsweise des Algorithmus an den folgenden Beispielen für den Dämpfungsfaktor d=0,85. Berechne jeweils den Pagerank für die einzelnen Seiten. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | |||
+ | ===== Iterative Version des Page-Rank-Algorithmus ===== | ||
+ | |||
+ | - Zunächst nehmen wir für alle Seiten den Pagerank (PR) 1 an. | ||
+ | - Wir setzen die aktuellen Werte in die Formel ein und berechnen den neuen PR. | ||
+ | - Dies machen wir so lange, bis wir keine großen Änderungen mehr sehen können. | ||
+ | |||
+ | ==== Beispiel 3 ==== | ||
+ | |||
+ | ^ A ^ B ^ C ^ | ||
+ | | 1 | 1 | 1 | | ||
+ | | 0.575 | 0.575 | 1 | | ||
+ | | 0.575 | 0.575 | 1 | | ||
+ | | 0.394 | 0.394 | 0.639 | | ||
+ | | 0.317 | 0.317 | 0.485 | | ||
+ | | 0.284 | 0.284 | 0.419 | | ||
+ | | 0.270 | 0.270 | 0.391 | | ||
+ | | 0.264 | 0.264 | 0.379 | | ||
+ | | 0.262 | 0.262 | 0.374 | | ||
+ | | 0.261 | 0.261 | 0.372 | | ||
+ | |||
+ | |||
+ | |||
+ | ===== Klassendiagramm/ | ||
+ | |||
+ | Nun wollen wir den Algorithmus nachprogrammieren. | ||
+ | |||
+ | - Welche Klassen benötigen wir? | ||
+ | - Erstelle ein Klassendiagramm. | ||
+ | - Implementiere die Klassen. | ||
+ | |||
+ | Für die Implementierung mit C# benötigst du einen sogenannten [[http:// | ||
+ | |||
+ | <code csharp> | ||
+ | using System; | ||
+ | using System.Data; | ||
+ | |||
+ | using MySql.Data; | ||
+ | using MySql.Data.MySqlClient; | ||
+ | |||
+ | public class Tutorial | ||
+ | { | ||
+ | public static void Main() | ||
+ | { | ||
+ | string connStr = " | ||
+ | MySqlConnection conn = new MySqlConnection(connStr); | ||
+ | |||
+ | Console.WriteLine(" | ||
+ | conn.Open(); | ||
+ | |||
+ | string sql = " | ||
+ | MySqlCommand cmd = new MySqlCommand(sql, | ||
+ | cmd.ExecuteNonQuery(); | ||
+ | |||
+ | string sql = " | ||
+ | MySqlCommand cmd = new MySqlCommand(sql, | ||
+ | MySqlDataReader rdr = cmd.ExecuteReader(); | ||
+ | |||
+ | while (rdr.Read()) | ||
+ | { | ||
+ | Console.WriteLine(rdr[0]+" | ||
+ | } | ||
+ | rdr.Close(); | ||
+ | |||
+ | conn.Close(); | ||
+ | Console.WriteLine(" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ===== Testen der Klassen ===== | ||
+ | |||
+ | Die Klassen sollen nun getestet werden. | ||
+ | |||
+ | - Erstelle Testfälle für die obigen Beispiele. | ||
+ | - Teste die Klassen gegenüber den händisch berechneten Werten. | ||
+ | |||
+ | Für das dritte Beispiel kannst du den folgenden Quelltext für deine Tests verwenden. | ||
+ | |||
+ | Für Beispiel 3: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | |||
+ | Ausgabe: | ||
+ | |||
+ | < | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Links ===== | ||
+ | |||
+ | * [[http:// | ||
+ | * [[https:// | ||