You are not logged in.

  • Login

Dear visitor, welcome to Coder Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Sunday, May 3rd 2009, 7:41pm

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 http://www.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

2

Sunday, May 3rd 2009, 8:30pm

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:

PHP Quellcode

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


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: Einführung in PDO

Aber erstmal brauchst du eine MySQL Tabelle. Wie soll sie aussehen? So?

Quoted

partei wahlkreis stimmen
------------------------------------------
SPD Hessen 500
SPD Berlin 1000
CDU Hessen 100


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

PHP Quellcode

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


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

PHP Quellcode

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


Du solltest aber wirklich erstmal loslegen. PHP Arrays durch MySQL Ressourcen zu ersetzen musst du hinbekommen.

3

Sunday, May 3rd 2009, 10:16pm

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)

PHP Quellcode

1
2
3
//SPD Wahl
$wahl = int mt_rand  (1000 , 30000 )
$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:

PHP Quellcode

1
2
3
4
5
$sql = "SELECT * FROM partei"
$ergebnis = mysql_query($sql)
$anzahl = mysql_num_rows($ergebnis)
$xachse = $anzahl * 20
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

This post has been edited 1 times, last edit by "AtroCty" (May 3rd 2009, 10:23pm)


4

Monday, May 4th 2009, 12:00am

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.
http://ezcomponents.org/docs/api/latest/…tion_Graph.html

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

5

Monday, May 4th 2009, 4:32pm

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.
http://ezcomponents.org/docs/api/latest/…tion_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... ? :)

6

Monday, May 4th 2009, 5:18pm


Nun ja, wie wäre es aber mit einer Antwort auf die Fragen... ? :)


D0nut hat es ja schon angesprochen.

Bevor du mit irgendwelchen Datenbanktabellen oder Scripten anfängst musst du erstmal planen.
Was hast du bisher gemacht , wie soll es aussehen ?

7

Monday, May 4th 2009, 6:02pm

äääh, steht doch alles im 1. Beitrag ^^

PHP Quellcode

1
 

This post has been edited 6 times, last edit by "AtroCty" (May 7th 2009, 9:59pm)


8

Tuesday, May 5th 2009, 9:07am

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.

PHP Quellcode

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


Und schau dir wirklich mal eZ Components an. Das ist ja tausendmal schicker als JPGraph.

9

Tuesday, May 5th 2009, 12:03pm

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:

PHP Quellcode

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


Und die Umsetzung als Diagramm

PHP Quellcode

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


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 ?

This post has been edited 2 times, last edit by "AtroCty" (May 5th 2009, 12:19pm)


10

Tuesday, May 5th 2009, 9:11pm

nur ein Versuch...

PHP Quellcode

1
2
3
4
while ($zeile = mysql_fetch_array($ergebnis) )
{
    $wahl[$zeile["partei"]]=$zeile["wahl"];
    ...

11

Thursday, May 7th 2009, 4:29pm

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.

This post has been edited 1 times, last edit by "AtroCty" (May 7th 2009, 4:51pm)


13

Thursday, May 7th 2009, 6:50pm

Nein, leider nicht :(
Ich weiß leider auch nicht den Befehlt um überhaupt eigene Skalen zu erstellen. Ich habs versucht zu googlen und hab auch Manuel gesucht, aber nicht gefunden außer

PHP Quellcode

1
$graph->SetScale("textlin");

...

14

Thursday, May 7th 2009, 8:00pm

Ich glaube du benötigst "TickLabels"

Siehe:


PHP Quellcode

1
2
3
$datax=array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov");
$graph = new Graph(500,250,'auto');    
$graph->xaxis->SetTickLabels($datax);

15

Thursday, May 7th 2009, 8:14pm

Super! Hat geklappt!
Facharbeit fast fertig :)
Ich kann sie auch zur Verfügung stellen nach Vervollständigung.

16

Friday, May 8th 2009, 8:40am

Ich kann sie auch zur Verfügung stellen nach Vervollständigung.


Das wäre schön, wenn du sie als pdf anhängen würdest, wenn du das darfst 8)

17

Monday, June 1st 2009, 7:25pm

Wie versprochen: Hier die Facharbeit!
AtroCty has attached the following file:

18

Tuesday, June 2nd 2009, 1:17pm

Vielen Dank :)

Sieht recht interessant aus, ich werde es mir mal heute Abend oder so zu gemüte führen ;)

Was mir beim drüberscrollen schon aufgefallen hast: das Layout gefällt mir ;)

19

Tuesday, June 2nd 2009, 6:28pm

ja, sehr ansprechendes Layout, ausführliche Tests mit Screenshots und Code.
Da werdet ihr sicher eine gute Note abräumen.

Danke fürs hier veröffentlichen und die Quellenangabe ;)

20

Wednesday, June 3rd 2009, 3:08pm

Noten bekommen:

Mein Partner (alles was NICHT JPGraph ist) hat 5 Punkte bekommen.
Für meinen JPGraph Teil gab es 12 Punkte :D

Similar threads

Social bookmarks