Courtesy of pxhere

Problemstellung

Grundaufbau dieses Projekts

In diesem Projekt soll es um die Anwendung des shiny-Pakets zur Erstellung von interaktiven Websites gehen. Im Folgenden teilt sich die Problemstellung diesbezüglich in zwei verschiedene inhaltliche Zielsetzungen auf:

  1. Auf der Basis der Daten und Ergebnisse aus Projekt 1 (Suchanfragen verschiedener deutscher Parteien) wollen wir eine interaktive Grafik erstellen.
  2. Auf der Basis von Projekt 5 wollen wir eine interaktive Oberfläche erstellen, die es uns erlaubt, Sudokus vollständig zu lösen.

Beide Aufgabenteile kannst du unabhängig voneinander durchführen. Jegliche Anforderungen aus den vorhergehenden Projekten werden in den Lösungen getrennt bereitgestellt. Falls du die Projekte 1 und 5 also noch nicht abgeschlossen hast, kannst du dieses Projekt dennoch bearbeiten - wir würden dir jedoch empfehlen, dass du sie dir vorher anschaust.

Teil 1: Darstellung der Suchanfragen verschiedener Parteien

In diesem Teil des Projekts geht es um einen Datensatz mit prozentualen Angaben zu den monatlichen Google-Suchanfragen von 9 verschiedenen deutschen Parteien in einem Zeitraum von ca. 20 Jahren (für weitere Informationen dazu siehe Projekt 1). Mit diesen Daten soll hier eine interaktive App erstellt werden, die die folgenden Funktionen aufweist:

  • Die Daten sollen in einem Diagramm dargestellt werden.
  • Der Titel des Diagramms soll durch die Anwender:innen definierbar sein.
  • Die angezeigten Parteien sollen manuell wählbar sein.
  • Der dargestellte Zeitraum soll durch die Anwender:innen bestimmbar sein.

Außerdem sollen die Daten durch 4 verschiedenen Diagramme dargestellt werden können, die jeweils die oben genannten Funktionen erfüllen. Dazu soll eine sogenannte navbarPage benutzt werden. Folgende 4 Darstellungen sollten enthalten sein:

  1. Ein Liniendiagramm mit der Zeit auf der x-Achse und der prozentualen Häufigkeit auf der y-Achse (siehe Projekt 1).
  2. Ein Liniendiagramm mit der Zeit auf der x-Achse und der kumulierten Häufigkeit auf der y-Achse.
  3. Ein Balkendiagramm mit der kumulierten Häufigkeit der Parteien.
  4. Ein Kuchendiagramm mit der kumulierten Häufigkeit der Parteien.

Zusatz: Beziehe außerdem einen actionButton mit ein, durch den sich die Diagramme erst durch Knopfdruck bezüglich angezeigter Parteien und Zeitraum verändern.

Falls du Projekt 1 noch nicht bearbeitet hast, diesen Teil des Projekts aber trotzdem bearbeiten willst, kannst du dir die benötigten Datensätze hier und hier herunterladen. Für nötige Veränderungen an den Datensätzen erhältst du Hinweise in den Tipps. Jene Veränderungen wurden bereits in Projekt 1 besprochen und sind in diesem Projekt nicht das übergeordnete Lernziel. Falls du die benötigten Veränderungen nicht bewältigen kannst, findest du diese in den Lösungen zu diesem Projekt unter dem Abschnitt “Aufbereitung der Daten”, sodass du den Teil des Projekts trotzdem ohne Probleme bearbeiten kannst.

Bestehen jetzt immer noch Fragen bezüglich der Zielsetzung dieses Abschnitts oder bezüglich dessen, was in der App dargestellt werden soll, kannst du dir hier den Zusatz mit näheren Erläuterungen anschauen:

Zusatzinformationen

Hier siehst du nun, wie die Inhalte der App zu “Darstellung der Suchanfragen verschiedener Parteien” aussehen würden, wenn man diese nicht interaktiv mit ShinyR programmieren würde. Das soll dir einen ersten Eindruck darüber verschaffen, was ShinyR leisten kann und dir zu zeigen, was in diesem Teil des Projekts von dir erwartet wird.

Dem Ganzen liegen nur 4 verschiedene Grafiken zugrunde, die auf dem Datensatz aus Projekt 1 basieren. Das wären ein normales Liniendiagramm, ein Liniendiagramm, das die kumulierten Häufigkeiten im Zeitvarlauf darstellt, sowie ein Balkendiagramm und ein Kuchendiagramm mit den kumulierten Häufigkeiten für die betrachtete Zeitspanne.

Das Ziel in diesem Projekt soll es sein, diese Grafiken mit shinyR über ein Interface manipulierbar zu machen, sodass in jedem Diagramm…

…der Titel des Diagramms durch die Anwender:innen definierbar ist:

…die angezeigten Parteien manuell wählbar sind:

…der dargestellte Zeitraum durch die Anwender:innen bestimmbar ist:

…alle zuvor genannten Funktionen gleichzeitig möglich sind:

Das Ziel des Projektes ist es also, aus den statischen Abbildungen etwas entstehen zu lassen, mit dem jede:r interagieren kann, sodass man sich nur das ansehen kann, was eine:n gerade im Detail interessiert.

Teil 2: Sudokus lösen

Das Ziel in diesem Teil des Projekts soll es sein, eine Oberfläche zu erstellen, mit der man ein Sudoku vollständig lösen kann. Dafür braucht man logischerweise eine angemessene Darstellung des Sudokus (für weitere Informationen dazu siehe Projekt 5) und Eingabefelder für die fehlenden Zahlen. Wie du diese Anforderungen umsetzt und wie weit du dabei gehst, ist ganz dir überlassen - in den Tipps erhältst du Vorschläge für dein eigenes Vorgehen, in den Lösungen wird dir ein mögliches Vorgehen vorgestellt.

Folgendes sollte deine App auf jeden Fall beinhalten:

  1. Die App sollte ein “Default-Sudoku” beinhalten, das beim Öffnen der App angezeigt wird.
  2. Das Sudoku sollte mithilfe von Inputs vollständig befüllbar sein.
  3. Es sollten nur jene Zahlen veränderbar sein, die nicht zuvor durch das Sudoku gegeben waren.
  4. Alle durch die Anwender:innen eingesetzten Zahlen sollten ständig veränderbar sein.
  5. Man sollte das eigene Sudoku in die App laden können (im .rds-Format) und es dort lösen können. Die Punkte 1-4 sollten also derart umgesetzt werden, dass sie für jedes geladene Sudoku Gültigkeit besitzen.

Falls du dich nicht für ein generelles Layout entscheiden kannst, benutze eine pageWithSidebar. Für eine kurze Übersicht zu diesem Layout schau dir zum Beispiel diese Website an.

Sofern du Projekt 5 noch nicht bearbeitet hast und du keine eigenen Sudokus erstellen kannst, hast du die Möglichkeit, hier und hier zwei Sudokus herunterzuladen. Diese kannst du im Folgenden in die aktuelle R-Sitzung laden und zum Ausprobieren deiner ausgearbeiteten App verwenden.

Bestehen jetzt immer noch Fragen bezüglich der Zielsetzung dieses Abschnitts oder bezüglich dessen, was in der App dargestellt werden soll, kannst du dir hier den Zusatz mit näheren Erläuterungen anschauen:

Zusatzinformationen

Hier siehst du nun, wie die Inhalte der App zu “Sudokus lösen” aussehen würden, wenn man diese nicht interaktiv mit ShinyR programmieren würde. Das soll dir einen ersten Eindruck darüber verschaffen, was ShinyR leisten kann und dir zu zeigen, was in diesem Teil des Projekts von dir erwartet wird.

Die gesamte App basiert auf einem Sudoku. Aus diesem Grund stellt dessen Abbildung den wichtigsten Teil der App dar. Diese kann zum Beispiel so aussehen:

Nun hast du bereits eine geeignete Abbildung eines Sudokus, doch dieses Sudoku soll auch irgendwie gelöst werden können. In Zeile 3 und Spalte 1 kann man beispielsweise eine 5 einsetzen. Genau das sollte über das Interface möglich sein:

Das Ziel dieses Abschnittes ist es also, ein Interface zu erstellen, mit dem man ein Sudoku lösen kann. Dieses Interface soll dann so erweitert werden, dass man auch eigene Sudoku-Vorlagen hochladen und lösen kann.

Hilfe und Lösungen

Falls du nicht weiterkommst, kannst du dir kleine Denkanstöße bei unseren Tipps holen. Probiere aber am Besten zunächst aus, ob du das Problem selbstständig mithilfe der dir gegebenen Informationen lösen kannst. Wenn du fertig bist, kannst du deine Lösung mit unseren Lösungen vergleichen. Du musst auch nicht immer den gleichen Code haben, da es oft viele Wege zum Ziel gibt.

Robin Mehler
Projekte