Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
de:create:databank [15.02.2017 19:38] – [Beispiel 2: Daten zwischen Interviews austauschen] fahrde:create:databank [19.09.2023 15:03] (aktuell) – [Daten zwischen Interviews austauschen] admin
Zeile 6: Zeile 6:
   * Werte an nachfolgende Interviews übergeben   * Werte an nachfolgende Interviews übergeben
   * Daten über mehrere Interviews hinweg verwalten (z.B. Quoten zählen, Stimuli systematisch rotieren) bzw. Daten zwischen Interviews austauschen   * Daten über mehrere Interviews hinweg verwalten (z.B. Quoten zählen, Stimuli systematisch rotieren) bzw. Daten zwischen Interviews austauschen
-  * Anhand des Teilnahmeschlüssels (Seriennummer) oder der Referenz personalisierte Daten einblenden (Daten im Interview zuspielen)+  * Anhand des Personenkennung, dem Teilnahmecode oder der Referenz personalisierte Daten einblenden (Daten im Interview zuspielen)
   * Eingabefelder im Fragebogen individuell vorbelegen (in Kombination mit ''[[:de:create:functions:preset|preset()]]'')   * Eingabefelder im Fragebogen individuell vorbelegen (in Kombination mit ''[[:de:create:functions:preset|preset()]]'')
  
Zeile 73: Zeile 73:
  
  
-===== Beispiel 1: Umfangreiches Testmaterial =====+===== Daten herunterladen ===== 
 + 
 +Falls die Daten während der Erhebung mittels ''[[:de:create:functions:dbset]]'' aktualisiert wurden, kann man den Inhalt der "Datenbank für Inhalte" jederzeit als CSV-Datei herunterladen: 
 + 
 +**Spezialfunktionen** -> **Datenbank für Inhalte** -> Knopf "Herunterladen" 
 + 
 + 
 + 
 +===== Anwendungsbeispiele ===== 
 + 
 +==== Umfangreiches Testmaterial ====
  
 In einer Studie sollen 500 Zeitungsartikel von unterschiedlichen Personen beurteilt werden. Die Artikel entstammen einer elektronischen Datenbank und liegen bereits in tabellarischer Form vor. Damit jeder Artikel gleich häufig beurteilt wird, kommt eine [[:de:create:random_urns|Randomisierung mit Urnen]] zum Einsatz. Aber es wäre denkbar ineffizient, 500 Textbausteine einzeln anzulegen. In einer Studie sollen 500 Zeitungsartikel von unterschiedlichen Personen beurteilt werden. Die Artikel entstammen einer elektronischen Datenbank und liegen bereits in tabellarischer Form vor. Damit jeder Artikel gleich häufig beurteilt wird, kommt eine [[:de:create:random_urns|Randomisierung mit Urnen]] zum Einsatz. Aber es wäre denkbar ineffizient, 500 Textbausteine einzeln anzulegen.
Zeile 102: Zeile 112:
  
  
-===== Beispiel 2: Daten zwischen Interviews austauschen =====+==== Daten zwischen Interviews austauschen ====
  
 In der Vorerhebung einer Tagebuchstudie wird abgefragt, welche Fernsehsender eine Person nutzt. In den weiteren Erhebungen der Tagebuchstudie wird die tägliche Nutzungsdauer für die jeweiligen Sender abgefragt. Dazu sollen in einer offenen Texteingabe nur jene Sender angeboten werden, die in der Vorerhebung ausgewählt wurden. In der Vorerhebung einer Tagebuchstudie wird abgefragt, welche Fernsehsender eine Person nutzt. In den weiteren Erhebungen der Tagebuchstudie wird die tägliche Nutzungsdauer für die jeweiligen Sender abgefragt. Dazu sollen in einer offenen Texteingabe nur jene Sender angeboten werden, die in der Vorerhebung ausgewählt wurden.
  
 Für die gesamte Tagebuchstudie kommt die Serienmail-Funktion von SoSci Survey zum Einsatz. Über ''caseSerial()'' kann daher in jedem Fragebogen ein eindeutiger Personen-Code ermittelt werden. Für die gesamte Tagebuchstudie kommt die Serienmail-Funktion von SoSci Survey zum Einsatz. Über ''caseSerial()'' kann daher in jedem Fragebogen ein eindeutiger Personen-Code ermittelt werden.
 +
 +**Hinweis:** Falls die E-Mail-Adresse im ersten Fragebogen erst erhoben wird ([[:de:survey:opt-in-live]]), verwenden Sie in diesem Fragebogen statt ''caseSerial()'' bitte ''value()'' mit der Kennung der Opt-In-Frage.
  
 In der Vorerhebung werden die genutzten Fernsehsender mit der Mehrfachauswahl "FS01" auf Seite 2 des Fragebogens abgefragt. Auf Seite 3 (oder später) wird die Auswahl in der Datenbank vermerkt: In der Vorerhebung werden die genutzten Fernsehsender mit der Mehrfachauswahl "FS01" auf Seite 2 des Fragebogens abgefragt. Auf Seite 3 (oder später) wird die Auswahl in der Datenbank vermerkt:
Zeile 112: Zeile 124:
 <code php> <code php>
 $sender = getItems('FS01', 'is', 2); $sender = getItems('FS01', 'is', 2);
-$key = 'FS-'.caseSerial();  // Der Seriennummer wird noch ein "FS-" vorangestellt, damit in der Datenbank auch noch andere Inhalte gespeichert werden können.+$key = 'FS-'.caseSerial();  // Dem Teilnahmecode wird noch ein "FS-" vorangestellt, damit in der Datenbank auch noch andere Inhalte gespeichert werden können.
 dbSet($key, $sender); dbSet($key, $sender);
 </code> </code>
Zeile 124: Zeile 136:
 </code> </code>
  
 +**Wichtig:** ''dbGet()'' liefert immer ein Array -- auch wenn man mit ''dbSet()'' nur einen einzelnen Wert speichert.
  
-===== Beispiel 3: Auswertung zuspielen =====+Wenn man im ersten Fragebogen einen einzelnen Wert speichert, muss man im anderen Fragebogen mittels eckiger Klammer (''[0]'') auf das erste (und einzige) Array-Element zugreifen. 
 + 
 +<code php> 
 +$group value('RG01'); 
 +$key = 'RG-'.caseSerial();  // Auch hier wird ein Präfix für den Datenbank-Eintrag verwendet, um alle Optionen offen zu halten 
 +dbSet($key, $group); 
 +</code> 
 + 
 +<code php> 
 +$key = 'RG-'.caseSerial(); 
 +$data = dbGet($key); 
 +if ($data) { 
 +  $group = $data[0]; 
 +  // Zwischenspeichern des Werts in eine interne Variable, 
 +  // um den Wert später via value() zu verwenden (optional) 
 +  put('IV01_01', $group); 
 +} else { 
 +  // Fehlermeldung anzeigen, dass etwas schief gelaufen ist 
 +  show('XY01'); 
 +  put('IV01_01', -1); 
 +
 +</code> 
 + 
 +Der PHP-Code für den zweiten Fragebogen sieht auch den Fall vor, dass in der Datenbank für Inhalte kein passender Eintrag gefunden wird. Das könnte z.B. passieren, wenn die Befragte den ersten Fragebogen nicht bis zum ''dbSet()'' ausgefüllt hat. 
 + 
 + 
 +==== Auswertung zuspielen ====
  
 In einer Befragung müssen die Teilnehmer mehrere lange Skalen ausfüllen. Als Dankeschön können Sie 2 Wochen später eine Auswertung ihrer Ergebnisse einsehen. Die Auswertung kann nicht live erfolgen (''[[:de:create:functions:valuemean|valueMean()]]'', [[:de:create:points|Punkte für Antworten zählen]]), weil zunächst die Normwerte aus der Stichprobe bestimmt werden müssen. Zum Abruf ihrer Ergebnisse müssen die Teilnehmer einen Code notieren, weil die Erhebung anonym erfolgt. In einer Befragung müssen die Teilnehmer mehrere lange Skalen ausfüllen. Als Dankeschön können Sie 2 Wochen später eine Auswertung ihrer Ergebnisse einsehen. Die Auswertung kann nicht live erfolgen (''[[:de:create:functions:valuemean|valueMean()]]'', [[:de:create:points|Punkte für Antworten zählen]]), weil zunächst die Normwerte aus der Stichprobe bestimmt werden müssen. Zum Abruf ihrer Ergebnisse müssen die Teilnehmer einen Code notieren, weil die Erhebung anonym erfolgt.
Zeile 168: Zeile 207:
  
  
-===== Beispiel 4: Daten a-priori zuspielen =====+==== Daten a-priori zuspielen ====
  
-In einer (nicht-anonymen) Kundenbefragung sind einige Stammdaten bereits bekannt -- sie sollen im Fragebogen aber aktualisiert/vervollständigt werden. Die Kunden erhalten personalisierte Links (Zugriff "Seriennummer") mit einem Code, der jedem Kunden vorab zugeteilt wurde. Hierfür werden 12-stellige Zufallscodes verwendet, damit man nicht einfach die Codes anderer Kunden erraten und deren Daten abrufen kann, wie es bei einer fortlaufenden Kundennummer leicht möglich wäre.+In einer (nicht-anonymen) Kundenbefragung sind einige Stammdaten bereits bekannt -- sie sollen im Fragebogen aber aktualisiert/vervollständigt werden. Die Kunden erhalten personalisierte Links (Zugriff "Teilnahmecode") mit einem Code, der jedem Kunden vorab zugeteilt wurde. Hierfür werden 12-stellige Zufallscodes verwendet, damit man nicht einfach die Codes anderer Kunden erraten und deren Daten abrufen kann, wie es bei einer fortlaufenden Kundennummer leicht möglich wäre.
  
 Es wird eine Tabelle erstellt, die als erste Spalte den Code enthält und daneben die Stammdaten. Die Tabelle wird als CSV-Datei gespeichert und in die projektinterne Datenbank importiert. Es wird eine Tabelle erstellt, die als erste Spalte den Code enthält und daneben die Stammdaten. Die Tabelle wird als CSV-Datei gespeichert und in die projektinterne Datenbank importiert.
Zeile 178: Zeile 217:
 |72KU635485UG|MSD-Media GbR|Korbinianstr.|17||| |72KU635485UG|MSD-Media GbR|Korbinianstr.|17|||
  
-Der Code wird im personalisierten [[:de:survey:url|Link zum Fragebogen]] als Seriennummer (''s'') übergeben und steht im PHP-Code daher via ''caseSerial()'' zur Verfügung.+Der Code wird im personalisierten [[:de:survey:url|Link zum Fragebogen]] als Teilnahmecode (''s'') übergeben und steht im PHP-Code daher via ''caseSerial()'' zur Verfügung.
  
 Die offene Texteingabe "ST01" hat folgende Eingabefelder: Firma (01), Straße (02), Hausnummer (03), PLZ (04), Ort (05). Mittels ''prepare()'' werden nun die bekannten Daten eingetragen -- der Kunde kann sie beim Ausfüllen ggf. anpassen. Die offene Texteingabe "ST01" hat folgende Eingabefelder: Firma (01), Straße (02), Hausnummer (03), PLZ (04), Ort (05). Mittels ''prepare()'' werden nun die bekannten Daten eingetragen -- der Kunde kann sie beim Ausfüllen ggf. anpassen.
Zeile 195: Zeile 234:
 question('ST01'); question('ST01');
 </code> </code>
 +
 +
 +==== Daten ergänzen ====
 +
 +Um während des Interviews einen Eintrag in der Datenbank für Inhalte zu ergänzen, muss dieser ausgelesen, ergänzt und dann wieder geschrieben werden.
 +
 +Zum Beispiel wurden unter dem Schlüssel "FS-<Teilnahmecode>" a-priori Daten hinterlegt (3 Einträge pro Person, also Indizes 0 bis 2). In Befragungswelle 1 soll nun eine Produktpräferenz aus Frage PP01 als viertes Datum (Index 3) ergänzt werden. Der folgende PHP-Code könnte dann auf der Seite __nach__ der Seite mit PP01 stehen (s. Hinweise zu ''[[:de:create:functions:value]]'').
 +
 +<code php>
 +$key = 'FS-'.caseSerial();
 +// Daten auslesen
 +$data = dbGet($key);
 +if ($data === false) {
 +  // Keine Daten gefunden - vielleicht eine Warnung anzeigen
 +  $data = array(-8, -8, -8);  // ... und das Datenelement initialisieren
 +}
 +// Die Antwort aus PP01 ergänzen
 +$data[3] = value('PP01');
 +// Eintrag erneut speichern
 +$data = dbSet($key, $data);
 +</code>
 +
 +
 +==== Auswahloptionen sukzessive einschränken ====
 +
 +Die Datenbank für Inhalte kann auch dafür verwendet werden, um lange Auswahllisten schrittweise einzuschränken. Im folgenden Beispiel soll zunächst ein Stadtteil ausgewählt werden und dann im nächsten Schritt eine Haltstelle innerhalb des Stadtteils.
 +
 +Dafür wird in der Datenbank für Inhalte zunächst eine Liste angelegt, welche die Stadtteile beinhaltet und die Haltestellen. Wichtig ist die Vergabe geeigneter Datenbankschlüssel. Diese müssen folgende Kriterien erfüllen:
 +
 +  - Stadtteile und Haltestellen benötigen ein unterschiedliches Präfix, das heißt, die Schlüssel müssen z.B. mit unterschiedlichen Buchstaben beginnen. Im Beispiel beginnen die Schlüssel für Stadtteile mit "S" und jene für die Haltestellen mit "H".
 +  - Die Haltestellen, welche zu einem Stadtteil gehören, müssen nach dem "H" denselben weiteren Code verwenden. Alle Haltestellen in Stadtteil A würden also z.B. mit "H01" beginnen.
 +  - Es spart Arbeit, wenn man den Antwortcode für die Stadtteile so wählt, dass sie mit den Präfixen der Haltestellen-Schlüssel übereinstimmen. Also z.B. Code 1 für Stadtteil A und entsprechend die Präfixe "H01" für die zugehörigen Haltestellen.
 +
 +Die Liste für den Import könnte also wie folgt aussehen:
 +
 +<code>
 +S01  1 Stadtteil A
 +S02  2 Stadtteil B
 +S03  3 Stadtteil C
 +...
 +S50 50 Stadtteil Zeta
 +H0101  101 Haltestelle "Ammersberg" in Stadtteil A
 +H0102  102 Haltestelle "Breitenbach" in Stadtteil A
 +H0103  103 Haltestelle "Clemensstraße" in Stadtteil A
 +...
 +H5017 5015 Haltestelle "Zwiebelturm" in Stadtteil Zeta
 +</code>
 +
 +Nun werden im Fragenkatalog zwei Fragen vom Typ [[:de:create:questions:extselect]] erstellt. Die Optionen sollen diese beiden Fragen [[:de:create:questions:extselect#optionen_aus_der_datenbank|aus der Datenbank beziehen]]. Als Präfix in der Frage für die Stadtteile stellen Sie "S" ein und als Datenbank-Präfix für die Haltestellen-Frage ein "H". Die Vorschau zeigt nun zunächst alle Haltestellen.
 +
 +**Tipp:** Anstatt einer erweiterten Auswahl können Sie auch eine [[:de:create:questions:suggest]] verwenden. Das ist dann sinvoll, wenn Sie z.B. bei den Stadtteilen sehr viele Antwortoptionen haben.
 +
 +Wenn die Vorschau der Fragen Ihren Wünschen entspricht (nur bei den Haltestellen eben noch zu viele anzeigt), dann geht es nun and **Fragebogen zusammenstellen**. Dort platzieren Sie die Fragen nach den Stadteilen ("AF01" im Beispiel) auf eine Seite. Auf der nächsten Seite wird dann mit ein wenig PHP-Code und der Funktion ''[[:de:create:functions:question]]'' die Frage für die Haltestellen ("AF02") platziert. Und zwar wird hier mit dem Parameter ''%%'filter'%%'' sichergestellt, dass nur die passenden Haltestellen angezeigt werden.
 +
 +<code php>
 +// Erst einmal den ausgewählten Stadtteil auslesen
 +$stadtteil = value('AF01');
 +// Dann das Präfix für die passenden Haltestellen erstellen
 +$prefix = 'H'.sprintf('%02d', $stadtteil);
 +// Dann die Frage nach dem Stadtteil mit den passenden Optionen zeigen.
 +question('AF02', 'filter='.$prefix);
 +</code>
 +
 +Die Funktion ''sprintf()'' sorgt dafür, dass der Antwortcode aus AF01 zweistellig (Formatcode ''%02d'') ausgegeben wird aus ''1'' wird dadurch der String ''%%'01'%%''.
 +
 +Der Punkt (''.'') dient in PHP dazu, Strings zu verketten. Wenn in der Variable ''$prefix'' also z.B. "H01" gespeichert ist, dann wird aus ''%%'filter='.$prefix%%'' ein ''%%'filter=H01'%%''.
de/create/databank.1487183931.txt.gz · Zuletzt geändert: 15.02.2017 19:38 von fahr
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Share Alike 4.0 International
Driven by DokuWiki