Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

Erstellung einer Statistik

Beispiel - Kapitelstatistik

Die Entwickler von inf-schule wollen wissen, welches ihrer Kapitel (in einem bestimmten Zeitraum) wie oft aufgerufen wird. Unter Kapitel sind hier die Inhaltsblöcke zu verstehen, die auf den Kachern der Startseite von inf-schule zu sehen sind.

In einem Web-Logeintrag sind die aufgerufenen Kapitel anhand des URI-Eintrags zu erkennen.

...
    109.91.38.195 - - [28/Dec/2015:12:27:51 +0100] "GET /rechner/digitaltechnik/grundgatter HTTP/1.1" 200 3666 "http://www.inf-schule.de/rechner/digitaltechnik/werkzeuge" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.25"
    188.165.15.15 - - [28/Dec/2015:12:27:53 +0100] "GET /programmierung/funktional/konzepte/zeichenketten/verschluesselung?version=10 HTTP/1.1" 200 8816 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)"
    46.4.123.172 - - [28/Dec/2015:12:27:53 +0100] "GET /algorithmen/graphen/wegeingraphen/station_routenplaner?version=10 HTTP/1.0" 200 5722 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)"
    109.91.38.195 - - [28/Dec/2015:12:27:53 +0100] "GET /rechner/digitaltechnik/grundgatter/fachkonzept_grundgatter HTTP/1.1" 200 4049 "http://www.inf-schule.de/rechner/digitaltechnik/grundgatter" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.25"
    109.91.38.195 - - [28/Dec/2015:12:27:53 +0100] "GET /content/rechner/digitaltechnik/grundgatter/fachkonzept_grundgatter/and_gatter.png HTTP/1.1" 200 1201 "http://www.inf-schule.de/rechner/digitaltechnik/grundgatter/fachkonzept_grundgatter" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.25"
    109.91.38.195 - - [28/Dec/2015:12:27:54 +0100] "GET /content/rechner/digitaltechnik/grundgatter/fachkonzept_grundgatter/or_gatter.png HTTP/1.1" 200 1275 "http://www.inf-schule.de/rechner/digitaltechnik/grundgatter/fachkonzept_grundgatter" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.25"
    109.91.38.195 - - [28/Dec/2015:12:27:54 +0100] "GET /content/rechner/digitaltechnik/grundgatter/fachkonzept_grundgatter/not_gatter.png HTTP/1.1" 200 1136 "http://www.inf-schule.de/rechner/digitaltechnik/grundgatter/fachkonzept_grundgatter" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.25"
...

Hier werden der Reihe nach die Kapitel "rechner", "programmierung", "algorithmen" und "rechner" aufgerufen. Die Einträge, deren Pfad mit "content" beginnen, sind ...

Man kann in der von inf-schule erzeugten Logdatei das Kapitel der aufgerufenen Seite anhand des ersten Bestandteils im Pfad der GET-Anfrage erkennen. Diesen Bestandteil muss man aus der Anfrage herausfiltern. Es reicht dann, eine Art Strichliste zu führen, ...

Eine Funktion zur Ermittlung des Kapitels

Die Funktion kapitelAnfrage soll aus einer GET-Anfrage den Bezeichner des Kapitels, in dem sich die angeforderte Seite befindet, ermitteln.

<Black-Box-Diagramm><Funktionsname>kapitelAnfrage</Funktionsname><Übergaben><Übergabe><Wert>'GET /rechner/digitaltechnik/grundgatter HTTP/1.1'</Wert><Variable>anfrage</Variable><Typ>str</Typ></Übergabe></Übergaben><Rückgabe><Typ>str</Typ><Wert>'rechner'</Wert></Rückgabe></Black-Box-Diagramm>

Das Herausfiltern des Kapitelbezeichnes lässt sich leicht mit String-Operationen durchführen. Der folgende Python-Dialog zeigt, wie man das machen könnte.

>>> anfrage = 'GET /rechner/digitaltechnik/grundgatter HTTP/1.1'
>>> posAnfangPfad = anfrage.find(' ') + 1
>>> posAnfangPfad
4
>>> posEndePfad = anfrage.find(' ', posAnfangPfad)
>>> posEndePfad
39
>>> pfad = anfrage[posAnfangPfad:posEndePfad]
>>> pfad
'/rechner/digitaltechnik/grundgatter'
>>> pfad_aufgeteilt = pfad.split('/')
>>> pfad_aufgeteilt
['', 'rechner', 'digitaltechnik', 'grundgatter']

Aufgabe 1

Entwickle eine Definition zur Funktion kapitelAnfrage. Teste sie mit verschiedenen Anfragen.

Eine Strichliste implementieren

In Python gibt es verschiedene Möglichkeiten, eine Art Strichliste für Kapitelaufrufe zu implementieren. Eine recht einfache benutzt hierzu die Datenstruktur Liste.

>>> statistik = [['information', 0],
                 ['programmierung', 0],
                 ['modellierung', 0],
                 ['algorithmen', 0],
                 ['software', 0],
		         ['kommunikation', 0],
                 ['rechner', 0],
                 ['sprachen', 0],
                 ['grenzen', 0],
                 ['deklarativ', 0],
                 ['vernetzung', 0],
                 ['infschule', 0]]

Hier wird jedem Kapitelbezeichner (für ein inf-schule-Kapitel) der Startwert "0 Striche" zugeordnet.

Man erhöht die Anzahl der "Striche", indem man den zugeordneten Wert an der entsprechenden Stelle in den geschachtelten Listen erhöht.

>>> statistik = ...
>>> index_rechner = 6
>>> statistik[index_rechner][1] = statistik[index_rechner][1] + 1
>>> statistik
[['information', 0], ['programmierung', 0], ['modellierung', 0], ['algorithmen', 0], ['software', 0], ['kommunikation', 0], ['rechner', 1], ['sprachen', 0], ['grenzen', 0], ['deklarativ', 0], ['vernetzung', 0], ['infschule', 0]]

Aufgabe 2

Probiere das selbst aus. Füge weitere "Striche" für die Kapitel 'sprachen' und 'rechner' hinzu.

Die Logdatei auswerten

Mit den Vorbetrachtungen solltest du jetzt in der Lage sein, die gewünschte Kapitelstatistik zu erstellen.

Aufgabe 3

Benutze das in den vorangehenden Kapiteln entwickelte Gerüst für Auswertungsprogramme bei Logdateien und passe es an die hier gestellte Aufgabe an. Benutze zum Testen die Datei logdatei_test.txt mit nur wenigen Logeinträgen und die deutlich umfangreichere Datei logdatei.txt.

X

Fehler melden

X

Suche