diff --git a/bericht/bericht.pdf b/bericht/bericht.pdf index 6d698a44b5e6fff222e450346079f8a9f3d4b21f..42ccc63eb41ac0ece5115e39aa395f89ac8f5f66 100644 Binary files a/bericht/bericht.pdf and b/bericht/bericht.pdf differ diff --git a/bericht/bericht.tex b/bericht/bericht.tex index 63081c8d777dc18de3f83711506bbc57418798a8..b94f69f13d5e52d96a43d341163c10d522cae6ed 100644 --- a/bericht/bericht.tex +++ b/bericht/bericht.tex @@ -8,6 +8,7 @@ \usepackage{enumitem} \usepackage{csquotes} \usepackage{graphicx} +\usepackage{subcaption} % Dimensionen bitte nicht ändern. \usepackage[left=2cm, right=2cm, top=2cm, bottom=2cm, bindingoffset=1cm, includeheadfoot]{geometry} %Zeilenabstand bitte nicht ändern @@ -109,6 +110,7 @@ zu erfüllen. Diese Visualisierungen sind: In den folgenden Abschnitten werden die verwendeten Daten, die erstellten Visualisierungstechniken und deren Umsetzung und deren Anwendungensfälle detailliert beschrieben. +\newpage \section{Daten} Die verwendeten Daten stammen von Kaggle\cite{Daten} und liegen im CSV-Format vor. Diese Datensammlung umfasst Informationen zu verschiedenen Hardware-Komponenten, Preisen, Bewertungen und weiteren Merkmalen einer großen Anzahl älterer und aktueller @@ -156,18 +158,18 @@ Beschriftung oder als Filter. Fehlende Datenwerte wurden in Elm als Nothing-Wert \\ \textbf{Verarbeitungschritte:} \begin{enumerate}[] - \item Auswahl der Daten (nach Sinnhaftigkeit für Projekt) - \item Zuordnung der Daten zu einer Arten (numerische vergleichbare Werte, Wahrheitswerte, textuelle Beschreibungen) - \item Falls nötig manuelle Anpassung einzelner (fehlerhafter) Werte - \item Parsen der Datenwerte von der CSV-Datei: + \item Auswahl der Daten nach ihrer Relevanz für das Projekt + \item Zuordnung der Daten zu Kategorien (numerische vergleichbare Werte, Wahrheitswerte, textuelle Beschreibungen) + \item Falls erforderlich, manuelle Korrektur einzelner fehlerhafter Werte + \item Parsen der Datenwerte aus der CSV-Datei: \begin{itemize} - \item Falls numerischer Wert in Zeichenkette - extrahieren durch entfernen der Textinhalte und parsen zu Datentyp - \item Falls numerischer Wert - extrahieren und parsen zu Datentyp - \item Falls Wahrheitswert - in Elm Wahrheitwert übersetzen - \item Falls Wert nicht vorhanden (egal welcher Art) - in Elm Nothing übersetzen - \item sonst - als Zeichenkette speichern + \item Bei numerischen Werten in Zeichenketten: Extraktion durch Entfernen von Textinhalten und Umwandlung in den entsprechenden Datentyp + \item Bei numerischen Werten: Extraktion und Umwandlung in den entsprechenden Datentyp + \item Bei Wahrheitswerten: Übersetzung in Elm-Wahrheitswerte + \item Bei fehlenden Werten (unabhängig von der Art): Übersetzung in Elm-Nothing + \item Andernfalls: Speicherung als Zeichenkette \end{itemize} - \item Speicherung der Daten im Model + \item Speicherung der geparsten Daten im Model \end{enumerate} Anmerkung: Da bei einigen wenigen Smartphone-Modellen in der CSV-Datei falsche Datenwerte für den RAM und den internen Speicher vorlagen, wurden diese Daten korrigiert oder ergänzt. Beispielsweise waren bei einigen Modellen RAM und interner Speicher @@ -187,6 +189,7 @@ oder einer bestimmten Zeit verwendete Hardware ermöglichen, was helfen würde, und -planung auszuschließen. Die Daten zu den verkauften Einheiten könnten zudem den tatsächlichen Erfolg eines Modells verdeutlichen, anstatt sich ausschließlich auf Kundenbewertungen zu stützen. +\newpage \section{Visualisierungen} \subsection{Analyse der Anwendungsaufgaben} Um das Zielproblem zu lösen, müssen die Anwender mehrere spezifische Anwendungsaufgaben bearbeiten. Diese @@ -369,7 +372,7 @@ werden, indem der Mauszeiger über den Achsenbezeichner bewegt wird.\\ Die plot-übergreifenden Interaktionen bieten eine effiziente und vorteilhafte Bedienung, die über die einzelnen Visualisierungen hinausgeht und zusätzliche Analysemöglichkeiten eröffnen. Innerhalb der Anwendung wurden drei Hauptinteraktionen dieser Art implementiert. -\begin{itemize} +\begin{itemize}[] \item \textbf{Scatterplot -> Starplot} : Beim Klicken auf einen Datenpunkt im Scatterplot wechselt die Anwendung zur Starplot-Darstellung und projiziert die Datenwerte des ausgewählten Smartphones auf das ältere (upgedatete) der beiden vorhandenen Starplots. Dadurch kann der Anwender bei Bedarf alle Variablen des Smartphones, das im Scatterplot @@ -398,10 +401,114 @@ Anwendung wurden drei Hauptinteraktionen dieser Art implementiert. und ermöglicht einen schnellen Wechsel zwischen den Visualisierungen. \end{itemize} +\newpage \section{Implementierung} +Während des Projekts wurde eine Visualisierungsanwendung in Elm entwickelt, die in mehrere Module unterteilt +ist. Für jede der vier Visualisierungen wurde ein eigenes Modul erstellt, das alle wichtigen Funktionen +für die Gestaltung und Interaktionen der jeweiligen Darstellung bereitstellt (Scatterplot.elm, +ParallelCoordinates.elm, TreeView.elm, Starplot.elm). Zur Organisation und Integration aller +Visualisierungen dient das Modul Main.elm, welches als Startpunkt des Elm-Programms fungiert. Es beinhaltet +die Initialisierung des Modells (Model.elm), die Update-Funktionen für Interaktionen sowie die allgemeine +Auswahl, welche Visualisierung dargestellt werden soll (View). Darüber hinaus werden in Main.elm die Daten +aus der CSV-Datei in eine bestimmte Datenstruktur geparsed, die im Modul SmartPhoneType.elm definiert ist. +Um diese Aufgaben zu erfüllen, importiert Main.elm alle zuvor genannten Module sowie zusätzliche Elm-Pakete.\\ +\\ +Die aus der CSV-Datei geparsten Daten werden im Modell (siehe Abb. 1(a)) als eine Liste vom Typ Smartphone +gespeichert (siehe Abb. 1(b)). Diese Liste enthält alle möglichen Attribute eines Smartphones, die aus der +CSV-Datei extrahiert werden konnten, wie z. B. Preis, Bewertung und verschiedene Hardware-Details.\\ +\begin{figure}[h] + \begin{subfigure}[c]{0.4\textwidth} + \includegraphics[width=\textwidth]{img/SmartphoneType.PNG} + \subcaption{SmartPhoneType} + \end{subfigure} + \begin{subfigure}[c]{0.6\textwidth} + \includegraphics[width=\textwidth]{img/Model1.PNG} + \subcaption{Modelausschnitt} + \end{subfigure} + \caption{SmartPhoneType und Modelausschnitt} +\end{figure} +\\ +Das Modell wird hauptsächlich zur Verwaltung der verschiedenen Zustände der Visualisierungs-Interaktionen und +zur Speicherung der Smartphone-Daten verwendet. Das Attribut data enthält die Liste der geparsten Smartphones. +Die weiteren Attribute dienen der Zustandsverwaltung der Darstellung, wie zum Beispiel scatterplotOptions +(für Scatterplot-Optionen) und plotVisible (um anzugeben, welche Plots aktuell dargestellt werden sollen).\\ +\\ +Die ScatterPlotOptions (siehe Abb. 2(a)) enthalten Informationen zu den aktuellen Attribut- und Einheitenbezeichnern +an den Achsen sowie eine Liste der Werte für diese Attribute.\\ +Die ParallelPlotOption (siehe Abb. 2(d)) speichert Zustandsinformationen zur Reihenfolge der Achsen (Bezeichner, +Einheiten und Werte) sowie zusätzliche Filteroptionen.\\ +Die TreeOption (siehe Abb. 2(c)) enthält Informationen über die Zoom-Zustände, ausgewählte Filteroptionen und +manuell entfernte Knoten.\\ +Die StarPlotOption (siehe Abb. 2(b)) speichert Informationen zu den zwei aktuellen Modell-IDs für beide Starplots, +sowie Eingaben für die IDs und den Zustand, welches Starplot als nächstes bei einer Interaktion mit anderen Plots +überschrieben werden soll.\\ +\begin{figure}[h] + \begin{subfigure}[c]{0.5\textwidth} + \includegraphics[width=\textwidth]{img/Model2.PNG} + \subcaption{ScatterPlotOPtion} + \end{subfigure} + \begin{subfigure}[c]{0.5\textwidth} + \includegraphics[width=\textwidth]{img/Model6.PNG} + \subcaption{StarPlotOption} + \end{subfigure} + \begin{subfigure}[c]{0.5\textwidth} + \includegraphics[width=\textwidth]{img/Model5.PNG} + \subcaption{TreeOption} + \end{subfigure} + \begin{subfigure}[c]{0.5\textwidth} + \includegraphics[width=\textwidth]{img/Model3.PNG} + \subcaption{ParallelPlotOption} + \end{subfigure} + \caption{Teile vom Model} +\end{figure} +\\ +Die FilterOption (siehe Abb. 3), die bei den ParallelPlotOption und TreeOption verwendet wird, enthält Zustände +zu den ausgewählten Filtern. Dazu gehören der gewählte Hersteller und das Vorhandensein bestimmter +Smartphone-Funktionen wie 5G oder NFC.\\ +\begin{figure}[h] + \center + \includegraphics[]{img/Model4.PNG} + \caption{FilterOption} +\end{figure} +\\ +Das letzte Modul ExtendedFunctions.elm enthält zusätzliche erstellte Funktionen wie map10 und listmap10. +Diese ähneln den in Elm vorhandenen Funktionen, bieten jedoch Unterstützung für mehr Parameter. Die Funktion +map10 ist vergleichbar mit Maybe.map, und listmap10 ähnelt List.map, nur dass beide Funktionen jeweils 10 +Parameter verarbeiten können. Da diese Funktionen die Möglichkeiten der Sprache Elm erweitern und für die +Parallelkoordinaten-Visualisierung benötigt wurden, um Attribute und Listen auf eine Funktion abzubilden, +wurden sie in einem separaten Modul bereitgestellt.\\ +\\ +Dank der Übungen gestaltete sich die Umsetzung einiger Plots einfacher als ursprünglich erwartet. Der Aufwand +für den Scatterplot und den Parallelen-Koordinaten-Plot war relativ gering, da größere Teile aus den vorhandenen +Übungsaufgaben übernommen werden konnten und nur kleinere Anpassungen, wie etwa neue Interaktionen oder +Designänderungen, nötig waren.\\ +Anders verhielt es sich bei den beiden anderen Plots (Tree und Starplot), die von Grund auf geplant und +recherchiert werden mussten. +Für den Tree-Plot war es erforderlich, nach neuen Paketen zu suchen, um die Navigation durch den Baum für den +Anwender so einfach wie möglich zu gestalten und ein ansprechendes Design zu erzielen. Beim Starplot war zwar +keine Einarbeitung in neue Pakete nötig, jedoch mussten aufwendigere Designs erstellt, Interaktionen hinzugefügt +und das grundlegende Gerüst für den Starplot komplett neu entwickelt werden. Insgesamt lässt sich sagen, dass die +Plots, die in den Übungen behandelt wurden, mit weniger Aufwand umgesetzt werden konnten als der Tree-Plot mit +einem anderen Paket und der Starplot.\\ +\\ +Im Folgenden werden einige wichtige Elm-Pakete, die bei der Implementierung verwendet wurden, genannt und kurz deren Einsatz erläutert: +\begin{itemize} + \item \textbf{BrianHicks/elm-csv und NoRedInk/elm-json-decode-pipeline}: Diese Pakete wurden für das Parsen der CSV-Daten verwendet. + \item \textbf{elm-community/typed-svg}: Diente zur Erstellung von SVG-Grafiken in allen Plots. + \item \textbf{elm-community/list-extra}: Ermöglichte das einfache Ändern der Reihenfolge von Elementen in einer Liste: insbesondere + genutzt im Parallelen-Koordinaten-Plot, um die Achsen zu vertauschen. + \item \textbf{gampleman/elm-visualization und gampleman/elm-rosetree}: Eingesetzt zur Darstellung des Baums. + \item \textbf{folkertdev/one-true-path-experiment}: Verwendet für die Darstellung von Linien (Pfaden) in den Parallelen-Koordinaten- und Starplots. + \item \textbf{myrho/elm-round}: Zum Runden von Float-Zahlen auf zwei Dezimalstellen. + \item \textbf{avh4/elm-color}: Diente zur Farbgestaltung von SVG-Elementen. +\end{itemize} +Die Elm-Anwendung wurde in JavaScript (main.js) übersetzt und in eine HTML-Seite (index.html) integriert. Um das +Design der Webseite anzupassen, wurden CSS-Klassen verwendet, die einzelne Teile der Elm-Anwendung verändern. +Diese CSS-Design-Implementierungen sind in einer separaten CSS-Datei (style.css) gespeichert, die ebenfalls in die +HTML-Seite eingebunden wird. Alle diese Dateien befinden sich im Ordner \enquote{public}. Die HTML-Seite präsentiert +die erstellte Visualisierungsanwendung. \section{Anwendungsfälle} - \subsection{Anwendung Scatterplot} \subsection{Anwendung Parallel-Koordianten-Plot} \subsection{Anwendung Tree} @@ -460,5 +567,11 @@ Was wären mögliche sinnvolle Erweiterungen, entweder auf der Ebene der Visuali \newpage \printbibliography + +\section*{Anmerkung} +\textbf{Verwendete Hilfsmittel:}\\ +ChatGPT\cite{chatgpt}, für die sprachliche und grammatikalische Verbesserung meiner geschriebenen +Texte. Der Inhalt meines Berichtes entstammt von mir und hat sich durch die Verwendung des Hilfsmittels +nicht geändert. \end{document} diff --git a/bericht/img/Model1.PNG b/bericht/img/Model1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..d0cfe40b2db8c8bd0a84809a9e28d5298308275b Binary files /dev/null and b/bericht/img/Model1.PNG differ diff --git a/bericht/img/Model2.PNG b/bericht/img/Model2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..18f75b928224fabb2e34cd75c6fc094a12c14589 Binary files /dev/null and b/bericht/img/Model2.PNG differ diff --git a/bericht/img/Model3.PNG b/bericht/img/Model3.PNG new file mode 100644 index 0000000000000000000000000000000000000000..3d40ce88723fd2fab8e415137d84c76428916859 Binary files /dev/null and b/bericht/img/Model3.PNG differ diff --git a/bericht/img/Model4.PNG b/bericht/img/Model4.PNG new file mode 100644 index 0000000000000000000000000000000000000000..2c4208fedd0d735e73529d2992f2fd6ce9b7a8e8 Binary files /dev/null and b/bericht/img/Model4.PNG differ diff --git a/bericht/img/Model5.PNG b/bericht/img/Model5.PNG new file mode 100644 index 0000000000000000000000000000000000000000..04a3a16e49c2560e02aa4c07f7432a986d058fe8 Binary files /dev/null and b/bericht/img/Model5.PNG differ diff --git a/bericht/img/Model6.PNG b/bericht/img/Model6.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ed3dfd5e1598535c82296cd9537a236f002e76ff Binary files /dev/null and b/bericht/img/Model6.PNG differ diff --git a/bericht/img/SmartphoneType.PNG b/bericht/img/SmartphoneType.PNG new file mode 100644 index 0000000000000000000000000000000000000000..5b5266a8d3c428bccfb61e6bc88d852f4f721b9b Binary files /dev/null and b/bericht/img/SmartphoneType.PNG differ diff --git a/bericht/literatur.bib b/bericht/literatur.bib index 329420f05f33311d152d045412f1f0e4587a6a81..e46460ad514558a2aaf6239f1d4d11a0cf4ca997 100644 --- a/bericht/literatur.bib +++ b/bericht/literatur.bib @@ -1,11 +1,11 @@ -@article{Daten, +@online{Daten, author = {Nitya verma}, title = {Smartphone Dataset (Cleaned)}, year = {2024}, url = {https://www.kaggle.com/datasets/nityaverma19/smartphone-dataset-cleaned} } -@article{Code, +@online{Code, author = {Tom Schindler}, title = {GitLab: InfoVisualProjekt Code}, year = {2024}, @@ -13,7 +13,7 @@ url = {https://gitlab.informatik.uni-halle.de/akfns/infovisualprojekt} } -@article{Anwendung, +@online{Anwendung, author = {Tom Schindler}, title = {Anwendung: Smartphone Analyse Tool}, year = {2024}, @@ -21,3 +21,10 @@ url = {https://infovisualprojekt-akfns-bfb2b698162b3251098cb9fc9246a929585a1a2.gpages.informatik.uni-halle.de/} } +@online{chatgpt, + author = {OpenAI}, + title = {ChatGPT}, + url = {https://openai.com/blog/chatgpt}, + urldate = {2023-09-30} +} +