Diagramme mit einfachsten Mitteln

Ich habe gerade eine kleine Umfrage durchgeführt und möchte die Ergebnisse jetzt auswerten. Ein PHP-Skript hat im Ordner results die Dateien res, res1, res2… abgelegt, in denen die Ergebnisse gespeichert wurden:

/* Variablen holen */
$konfiguration = $_POST["konfiguration"];

$path = "results/";
$filename = "res";

/* Dateinamen bestimmen */
while (file_exists($path.$filename)) {
$fnum++;
$filename = "res".$fnum;
}

$fp = fopen($path.$filename, "w") or die("Konnte das Ergebnis nicht speichern!");

fwrite($fp, "konfiguration: ");
fwrite($fp, $konfiguration);
fwrite($fp, "\n");
/* ... */
fclose($fp);

Der Inhalt einer Datei sieht dann folgendermaßen aus:

...
absturz: Nein
uebersichtlichkeit: 2
konfiguration: Ja
...

Also immer nach dem Schema ‘Frage: Antwort’. Da juckt es schon direkt in den Fingern, das Ganze mit grep und co. auszuwerten. Zum Schluss soll ein Bild herauskommen, dass ich dann in Latex einbinden kann. Office-Suiten schieden von vornherein aus, da das evil ist und ich dabei Aggressionen kriege viel zu lange dauern würde und die Ergebnisse üblicherweise schlecht aussehen. Ich guckte kurz, ob man da was mit Python machen kann und nachdem die erste Bibliothek nicht so richtig ging sah ich, dass es eine Google-API für einfache Diagramme gibt. Das ist nach den Google web fonts schon die zweite praktische API von Google, von der ich bisher noch nichts wusste. Wer weiß, was es da noch so alles gibt…

Der Plan Eine der Fragen ist die ‘konfiguration’. Gültige Antworten waren ‘Ja’, ‘Nein’, ‘Weiß nicht’. Erstmal alle Antworten ausgeben lassen:

$ find ./results/ | xargs grep "konfiguration"
./results/res5:konfiguration: Ja
./results/res2:konfiguration: Ja
./results/res7:konfiguration: Ja
./results/res3:konfiguration: Nein
./results/res11:konfiguration: Ja
...

Wenn man jetzt noch ein weiteres Mal filtert (nach den Antwortmöglichkeiten) und die entstehenden Zeilen zählt erhält man die Häufigkeiten:

$ find ./results/ | xargs grep "konfiguration" | grep "Ja" | wc -l
12

Jetzt muss das nur noch mit der Google Chart-API kombiniert werden. Dieser http-Request:

https://chart.googleapis.com/chart?cht=p3&chs=250x100&chd=t:60,40&chl=Hello|World

Erzeugt z.B. dieses Diagramm: Alles was man so einstellen kann ist in der URL codiert:

  • 250x100 Pixel

  • Werte 60 und 40

  • Beschriftung ‘Hello’ und ‘World’

Zusammenkleben Damit das zusammen funktioniert habe ich ein kleines Bash-Skript geschrieben, das die Umfragen auswertet, eine URL zusammenbastelt und schließlich mit wget die Abfrage durchführt, die dann in einer Datei gespeichert wird. Das sieht dann so aus:

#!/bin/bash

settings="cht=p&chs=500x200"

#konfiguration konfiguration_ja=find ./results/ | xargs grep "konfiguration" | grep "Ja" | wc -l konfiguration_nein=find ./results/ | xargs grep "konfiguration" | grep "Nein" | wc -l konfiguration_weiss=find ./results/ | xargs grep "konfiguration" | grep "Weiß nicht" | wc -l wget “https://chart.googleapis.com/chart?${settings}&chd=t:${konfiguration_ja},${konfiguration_nein},${konfiguration_weiss}&chl=Ja|Nein|Weiß nicht” -O konfiguration.png

#zufriedenheit zufriedenheit_1=find ./results/ | xargs grep "zufriedenheit" | grep "1" | wc -l zufriedenheit_2=find ./results/ | xargs grep "zufriedenheit" | grep "2" | wc -l zufriedenheit_3=find ./results/ | xargs grep "zufriedenheit" | grep "3" | wc -l zufriedenheit_4=find ./results/ | xargs grep "zufriedenheit" | grep "4" | wc -l zufriedenheit_5=find ./results/ | xargs grep "zufriedenheit" | grep "5" | wc -l zufriedenheit_6=find ./results/ | xargs grep "zufriedenheit" | grep "6" | wc -l wget “https://chart.googleapis.com/chart?${settings}&chd=t:${zufriedenheit_1},${zufriedenheit_2},${zufriedenheit_3},${zufriedenheit_4},${zufriedenheit_5},${zufriedenheit_6}&chl=1|2|3|4|5|6" -O zufriedenheit.png

In den Settings können global Diagrammtyp, Farbe und Auflösung geändert werden. ‘Zufriedenheit’ ist eine weitere Frage, die mit Schulnoten bewertet werden konnte. Insgesamt erstelle ich 14 solcher Diagramme mit einem einzigen Skript, das in einer Sekunde abgearbeitet ist. Wenn sich die Rohdaten ändern oder ich die Diagrammfarben ändern will muss einfach nur das Skript erneut aufgerufen werden und Alles wird aktualisiert.

[caption id=“attachment_512” align=“aligncenter” width=“500” caption=“Zufriedenheit”][/caption]