Facharbeit: Visualisierung von Datenbankinhalten (JPGraph)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Facharbeit: Visualisierung von Datenbankinhalten (JPGraph)

    Hi Leute,

    zunächst einmal, ich bin neu, und war bischen unschlüssig wo ich das reinposten sollte xD
    Hoffe ihr nehmts nicht übel, ansonsten einfach verschieben ;)

    Also, ich soll demnächst meine Facharbeit abgeben.
    Wie der Threadname schon sagt, geht es in meiner Facharbeit um Darstellungsmöglichkeiten von MySQL-Datenbankinhalten.
    Weil ich nicht mehr der fiteste bin, was PHP-Prgorammierung mit MySQL Anweisungen anbelangt, wäre ich sehr dankbar für jede mögliche Unterstützung ;)

    Also, zunächst einmal benutze ich hierfür JPGraph verwende. Ich (bzw. mein Facharbeitpartner) würde mich (sich ;P ) für jede weitere Möglichkeit freuen, um mithilfe von PHP-Programmen MySQL Datenbankinhalte darzustellen. (Er behandelt diesen Teil :rolleyes )

    Also, nun zu meinem Plannung zur Umsetzung. Mein Lehrer möchte gerne ein Direktbeispiel sehen, und nannte dafür die Bundestagswahlen.

    Zunächst habe ich versuhct mit JPGraph umzugehen. Darin liegt jetzt nicht das Problem dank der tutorialseite binnendijk.net/jpgraph/ .

    Bloß wie setze ich das mit MySQL Datenbankinhalten durch?
    Mein Ziel:
    Eine funktionierende auf PHP-basierende Page, die die Funktion hat:

    - Manuelle Eingabe von Datenbanksätzen innerhalb der Page
    - Ein Generator, der die Wahlen simuliert und (realistisch wenn möglich) generiert
    - Ausgabe von allen möglichen Diagrammformen, sprich Punktdiagramm (Anzahl der Nichtwähler im Verhältnis Jahr zu Jahr [ebenfalls generiert]), Balkendiagramm, 2D/3D Tortendiagramm zur Veranschaulichung des Wahlstimmenverhältnisses

    Ich weiß nicht, wie ich zufällige Datensätze generiere, und gleichzeitig auch einspeichere. Nach jeder Wahl soll übrigens die alte Wahl einfach überschrieben werden, also jetzt keinen Kopf darüber machen immer wieder neue Tabellen anzulegen, sondern nur eine Datenbank und 2 Tabellen (Wahlergebnisse und Nichtwähler jedes Jahr).

    Könnt ihr mir da behilflich sein? Mit der Page habe ich bereits angefangen, ich müsstet einfach in xampp ordner reinpacken in den htdocs und die Sache läuft.

    Downloade mich!

    Hat da noch jemand Vorschläge, was man sonst noch einfügen könnte?

    Vielen Dank für eure Hilfe!
    MfG AtroCty
  • Hallo,
    vielleicht ist es auch ganz interessant für dich die Grafiken über eine API erstellen zu lassen. Oder zumindest ein paar Produkte zu vergleichen.
    So zum Beispiel über die Google Visualization API. Hier wird alles auf eine eigene Query Language herunterreduziert.

    Naja, zurück zu jpgraph ;)

    Schau dir das sample an:

    Quellcode

    1. <?php
    2. include ("jpgraph.php");
    3. include ("jpgraph_pie.php");
    4. $data = array(40,60,21,33);
    5. $graph = new PieGraph(300,200,"auto");
    6. $graph->SetShadow();
    7. $graph->title->Set("A simple Pie plot");
    8. $graph->title->SetFont(FF_FONT1,FS_BOLD);
    9. $p1 = new PiePlot($data);
    10. $p1->SetLegends($gDateLocale->GetShortMonth());
    11. $p1->SetCenter(0.4);
    12. $graph->Add($p1);
    13. $graph->Stroke();
    14. ?>
    Alles anzeigen


    Die Frage ist nun, wie erreichst du die selbe Funktionalität mit einer MySQL Tabelle? Dazu musst du $data und Legends durch MySQL Ressourcen ersetzen.
    $data ist einfach. Ich baue auf dem Wissen und der Datenbankklasse aus unserem Wiki auf: [wiki]Einführung in PDO[/wiki]

    Aber erstmal brauchst du eine MySQL Tabelle. Wie soll sie aussehen? So?
    partei wahlkreis stimmen
    ------------------------------------------
    SPD Hessen 500
    SPD Berlin 1000
    CDU Hessen 100


    Nun brauchst du Code. Der könnte in etwa so aussehen:

    Quellcode

    1. $sql = "SELECT partei,
    2. SUM(stimmen) AS summe
    3. FROM stimmen
    4. GROUP BY partei";
    5. $stmt = MyDB::getInstance()->prepare($sql);
    6. $stmt->execute();
    7. foreach($stmt->fetchAll() as $row) {
    8. extract($row);
    9. $data[$partei] = $summe;
    10. }
    11. $data = array_values($data);
    12. $legend = array_keys($data);
    13. //...
    14. $p1 = new PiePlot($data);
    15. $p1->SetLegends($legend);
    Alles anzeigen


    Ich weiß aber nicht genau wie die Legende aussehen muss. Wenn mein Beispiel nicht funktioniert schaust du dir mal das Array an:

    Quellcode

    1. print_r($gDateLocale->GetShortMonth());


    Du solltest aber wirklich erstmal loslegen. PHP Arrays durch MySQL Ressourcen zu ersetzen musst du hinbekommen.
  • Geht das auch ohne PDO?

    Wir sind grade in den Startlöchern von PHP und MySQL, also das letzte Thema das wir hatten war der Group Befehl, und es wäre besser, nur Befehle zu nehmen, die wir bereits hatten ...
    Es stimmt, ich habe die eigentlichen Fragen nicht präzise gestellt.
    Ich wollte eher erst mal schauen, ob es hier Leben im Forum gibt und welche gibt die sich mit der Themaitk auseinandersetzen ^^

    Also hier ein paar Fragen:

    1. Wieviele Tabellen wären sinnvoll ? Ich weiß nämlich nicht wie ich bei der MySQL Wahl zur Sache gehen soll...
    Ich meine, sollte man besser die Wähler seperat in einer Tabelle aufführen oder gleich mit in die Partei Tabelle aufführen?
    Und wie sollte man ansetzen, wenn man jedes einzelne Bundesland einbezieht? (die Datenbank habe ich übrigens simpel facharbeit genannt ;) )

    2. Wie könnte ich eine REALISTISCHE Wahl simulieren können? Also wenn ich Zufallswerte mache für eine generierte Wahl, das zum beispiel NPD nicht plützlich 80% der stimmen hat?
    Also wie könnte ich das machen mit einem Befehl wie dem hier eine Wahl simulieren und in die Datenbank einfügen:

    (Tabelle beinhaltet: [$id, $partei, $wahl] ; Die Einheit wird in der Tabelle mal 1.000 genommen)

    Quellcode

    1. //SPD Wahl
    2. $wahl = int mt_rand (1000 , 30000 )
    3. $sql = "INSERT INTO facharbeit VALUES (null, 'PARTEI','$wahl');


    Gäbe es eine alternative als diesen Quellcode jedesmal zu kopieren für jede einzelne Partei? Das sowas automatisch generiert wird?

    3. Ich möchte, das die Größe des Diagramms sich automatisch mit der Anzahl der Parteien vergrößert.
    Also wäre das Beispiel so:

    Quellcode

    1. $sql = "SELECT * FROM partei"
    2. $ergebnis = mysql_query($sql)
    3. $anzahl = mysql_num_rows($ergebnis)
    4. $xachse = $anzahl * 20
    5. new PieGraph($xachse,200,"auto");

    4. Würde sich jemand mitm mir über TeamSpeak oder ICQ in Verbindung setzen und mit mir direkt absprechen? ^^

    Grüße AtroCty

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von AtroCty ()

  • Hi,

    ich weiss nicht wieviel Zeit du noch hast, aber ich würde dir die Graph Engine von Ez Components empfehlen, die um einiges besser ist, als das veraltete jpGraph.
    Auf der Seite gibt es sehr viele Beispiele.
    ezcomponents.org/docs/api/latest/introduction_Graph.html

    Die Einbindung erfolgt wie das dort beschriebene Array, nu dass du mittels der mysql_fetch_assoc Funktion das Array befüllst.
  • vince schrieb:

    Hi,

    ich weiss nicht wieviel Zeit du noch hast, aber ich würde dir die Graph Engine von Ez Components empfehlen, die um einiges besser ist, als das veraltete jpGraph.
    Auf der Seite gibt es sehr viele Beispiele.
    ezcomponents.org/docs/api/latest/introduction_Graph.html

    Die Einbindung erfolgt wie das dort beschriebene Array, nu dass du mittels der mysql_fetch_assoc Funktion das Array befüllst.


    hmmm, Abgabe erfolgt Freitag, ebenso hab ich in der Woche noch 2 Klausuren... und schriftlich habe ich bisjetz noch rein gar nichts (auch wenn ich nur 10 seiten schreiben muss, wobei quellcode-fragmente mit einbezogen wird)
    Außerdem hat mien Facharbeitspartner etlcihe infos über JPGraph shcon rausgesucht, umnd ich tus ihm nicht an jetzt komplett umzusteigen...
    aber als alternativvorschlag wäre das ideal, viele dank dafür!

    Nun ja, wie wäre es aber mit einer Antwort auf die Fragen... ? :)
  • Was wird denn bei der Wahl alles gespeichert? Doch eigentlich nur der Zähler. Namen natürlich nicht.

    So gesehen reicht eine Tabelle aus. Und die Simulation fällt denkbar einfach, weil ihr nur die Zahlen der letzten Wahl eintragen müsst.
    Wenn eure Projektanforderung ist, dass ihr JOINs verwenden sollt, dann mach eben eine Tabelle mit den Attributen id/zeitstempel/partei.
    Dann kannst du dich mit Statistiken austoben und wirst feststellen können welche Partei frühaufsteher wählen würden.

    Warum du die Einheit mit 1000 multiplizierst weiß ich aber nicht???
    Du musst doch auch bei jeder Wahl um 1 inkrementieren. Und nicht bei jeder 1000sten.

    Für die INSERTs bieten sich natürlich Arrays an.

    Quellcode

    1. $wahlen = array(
    2. 'hessen' => array(
    3. 'cdu' => 25,
    4. 'spd' => 25,
    5. ...
    6. ),
    7. 'berlin' => array(
    8. 'spd' => 25,
    9. 'cdu' => 25,
    10. ...
    11. ),
    12. ...
    13. );
    14. foreach($wahlen as $bundesland => $row) {
    15. foreach($row as $partei => $stimmen) {
    16. INSERT INTO ...
    17. }
    18. }
    Alles anzeigen


    Und schau dir wirklich mal eZ Components an. Das ist ja tausendmal schicker als JPGraph.
  • Sooo, erst mal vielen Dank für die Antwort ^^
    Ich habe mich nochmal mit meinem Lehrer abgesprochen, und miente, dass das Beispiel einfach gehalten werden soll, sprich ohne berücksichtigung von Bundesländern.
    Mein Wahlen-Generator ist ganz simpel gehalten:

    Quellcode

    1. //Vorherige Tabelle droppen
    2. $sql = "DROP TABLE wahlergebnis";
    3. $ergebnis = mysql_query($sql,$verbindung)
    4. or die("ERROR: Fail.");
    5. //Tabelle erstellen
    6. $sql = "CREATE TABLE wahlergebnis (ID INTEGER, partei VARCHAR(255), wahl INTEGER)";
    7. $ergebnis = mysql_query($sql,$verbindung)
    8. or die("ERROR: Fail.");
    9. //SPD Wahl
    10. $wahl = mt_rand(1000,30000);
    11. $sql = "INSERT INTO wahlergebnis VALUES (null, 'SPD','$wahl')";
    12. $ergebnis = mysql_query($sql,$verbindung)
    13. or die("ERROR: Fail.");
    14. ...
    Alles anzeigen


    Und die Umsetzung als Diagramm

    Quellcode

    1. //Anpassung the x-Achse anhand der Anzahl der Werte
    2. $sql = "SELECT * FROM wahlergebnis";
    3. $ergebnis = mysql_query($sql);
    4. $anzahl = mysql_num_rows($ergebnis);
    5. $xachse = $anzahl * 60;
    6. $graph = new Graph($xachse,200,"auto");
    7. //Werte ins Diagramm
    8. $sql = "SELECT * FROM wahlergebnis";
    9. $ergebnis = mysql_query($sql);
    10. $i = 0;
    11. while ($zeile = mysql_fetch_array($ergebnis) )
    12. {
    13. $wahl[$i]=$zeile["wahl"];
    14. $i++;
    15. }
    16. $bplot = new BarPlot($wahl);
    Alles anzeigen


    Jetzt muss ich nur noch kleines Diagramm für nicht-Wähler machen pro jahr, aber das funktioniert nach dem gleichen Prinzip, weil ich die Partei durch Jahr ersetzen kann.
    Aber viele Dank für eure Hilfe!

    EDIT:
    Brauche doch nochmal Hilfe ^^
    Wie kann ich das anstellen, das die x-Achse anstelle von Zahlen die jeweilige Partei ausgibt ?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von AtroCty ()

  • Okay, hier schnell eine speziele Frage:

    Wie kann ich die Skala der x-Achse mit einem Array ausfüllen?
    Also, ich möchte das bei der Skalabeschriftung nicht 1,2,3,4,5,6,.... steht, sondern jeweils die Partei unter dem jeweiligen Balken (SPD, CDU ... etc.)
    Diese Werte sollenauch über einen Array aus der Datenbank erstellt werden.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von AtroCty ()