Zurück zu allen Blogbeiträgen

Animierte Diagramme mit ggplot und gganimate

  • Coding
  • Data Visualization
  • R
14. Februar 2020
·

Team statworx

Wusstest du, dass du statische ggplot-Diagramme mit dem Paket gganimate von RStudis's Thomas Lin Pedersen und David Robinson in dynamische Animationen verwandeln kannst? Die Ergebnisse sind wirklich beeindruckend! Meine Kollegen bei statworx und ich sind begeistert, wie einfach sich verschiedene Diagrammtypen in superflüssige Animationen umwandeln lassen. In diesem Beitrag gebe ich dir einen kurzen Überblick über einige der tollen Funktionen von gganimate. Ich hoffe, du findest sie genauso spannend wie wir!

Passend zum Valentinstag werfen wir einen Blick auf den Datensatz des Speed-Dating-Experiments, zusammengestellt von den Professoren Ray Fisman und Sheena Iyengar der Columbia Business School. Vielleicht lernen wir dabei nicht nur etwas über gganimate, sondern auch, wie wir unseren Valentin finden können. Wenn du Lust hast, kannst du die Daten von Kaggle herunterladen.

Grundanimation definieren: transition_*

Wie werden statische Diagramme zum Leben erweckt? Im Grunde erstellt gganimate verschiedene Datensubsets, die einzeln geplottet und in aufeinanderfolgenden Frames angezeigt werden, um die Animation zu erzeugen. Das Besondere an gganimate ist, dass es das sogenannte Tweening übernimmt und die Übergangsdatenpunkte zwischen den Frames berechnet.

Die transition_* Funktionen bestimmen, wie die Datensubsets generiert werden und prägen damit den Charakter der Animation. In diesem Blogpost schauen wir uns drei Übergangstypen an: transition_states(), transition_reveal() und transition_filter(). Aber fangen wir ganz vorne an.

Mit transition_states() teilen wir die Daten in Subsets gemäß den Kategorien, die dem states-Argument übergeben werden. Wenn mehrere Zeilen eines Datensatzes zur gleichen Beobachtungseinheit gehören und entsprechend identifizierbar sein sollen, muss eine Gruppierungsvariable angegeben werden. Alternativ kann ein Identifikator einer anderen Ästhetik zugeordnet werden.

Um die Lesbarkeit dieses Beitrags zu gewährleisten, sind alle Texte zur Interpretation der Speed-Dating-Daten kursiv. Wenn dich dieser Teil nicht interessiert, kannst du ihn einfach überspringen. Für die Datenvorbereitung verweise ich auf mein GitHub.

Zunächst betrachten wir, wonach die Teilnehmer des Speed-Dating-Experiments bei einem Partner suchen. Die Teilnehmer sollten die Bedeutung von Attributen bei einem potenziellen Date bewerten, indem sie ein Budget von 100 Punkten auf verschiedene Merkmale verteilen. Höhere Werte deuten auf eine höhere Wichtigkeit hin. Sie sollten die Attribute sowohl aus ihrer eigenen Sicht als auch aus der vermuteten Perspektive ihrer gleichgeschlechtlichen Altersgenossen bewerten.

Wir werden diese Bewertungen für alle Attribute plotten. Da wir die individuellen Wünsche mit den vermuteten Wünschen der Altersgenossen vergleichen möchten, wechseln wir zwischen beiden Bewertungssets. Die Farbe zeigt immer die persönlichen Wünsche eines Teilnehmers an. Eine Blase repräsentiert die Bewertung eines spezifischen Teilnehmers für ein bestimmtes Attribut und wechselt zwischen den eigenen Wünschen und den vermuteten Wünschen der Altersgenossen.

## Static Plot
# ...characteristic vs. (presumed) rating...
# ...color&size mapped to own rating, grouped by ID
plot1 <- ggplot(df_what_look_for, 
       aes(x = value,
           y = variable,
           color = own_rating, # bubbels are always colord according to own whishes
           size = own_rating,
           group = iid)) + # identifier of observations across states
  geom_jitter(alpha = 0.5, # to reduce overplotting: jitttering & alpha
              width = 5) + 
  scale_color_viridis(option = "plasma", # use virdis' plasma scale
                      begin = 0.2, # limit range of used hues
                      name = "Own Rating") +
  scale_size(guide = FALSE) + # no legend for size
  labs(y = "", # no axis label
       x = "Allocation of 100 Points",  # x-axis label
       title = "Importance of Characteristics for Potential Partner") +
  theme_minimal() +  # apply minimal theme
  theme(panel.grid = element_blank(),  # remove all lines of plot raster
        text = element_text(size = 16)) # increase font size

## Animated Plot
plot1 + 
  transition_states(states = rating) # animate contrast subsets acc. to variable rating 

Wenn ihr zunächst etwas verwirrt seid, welcher Zustand welcher ist, habt bitte etwas Geduld, denn wir werden die dynamischen Bezeichnungen im Abschnitt über „Rahmenvariablen“ näher erläutern.

Es ist klar, dass unterschiedliche Menschen nach unterschiedlichen Qualitäten bei einem Partner suchen. Oft wird Attraktivität über andere Eigenschaften gestellt, obwohl ihre Bedeutung stark zwischen den Individuen variiert. Interessanterweise sind sich die Menschen bewusst, dass die Bewertungen ihrer Altersgenossen von ihren eigenen Ansichten abweichen könnten. Die kollektiven Annahmen über andere sind nicht völlig daneben, aber sie haben eine höhere Varianz als die tatsächlichen Bewertungen.

Also gibt es Hoffnung, dass irgendwo jemand nach einem ebenso ehrgeizigen oder intelligenten Partner sucht wie wir. Doch nicht immer zählen nur die inneren Werte.

gganimate bietet die Möglichkeit, die Details der Animation nach unseren Vorstellungen zu gestalten. Mit dem Argument transition_length können wir die relative Länge des Übergangs von einem zum anderen Datensubset festlegen und mit state_length, wie lange jedes Subset der Originaldaten angezeigt wird. Nur wenn das wrap-Argument auf TRUE gesetzt ist, wird der letzte Frame wieder in den ersten Frame der Animation verwandelt, wodurch eine endlose Schleife entsteht.

## Animated Plot
# ...replace default arguments
plot1 + 
  transition_states(states = rating,
                    transition_length = 3, # 3/4 of total time for transitions
                    state_length = 1, # 1/4 of time to display actual data
                    wrap = FALSE) # no endless loop

Styling von Übergängen: ease_aes

Wie bereits erwähnt, kümmert sich gganimate um das Tweening und berechnet zusätzliche Datenpunkte, um sanfte Übergänge zwischen den Punkten der tatsächlichen Eingabedaten zu schaffen. Mit ease_aes können wir steuern, welche Easing-Funktion verwendet wird, um Datenpunkte ineinander zu 'verformen'. Die Standardfunktion gilt für alle Ästhetiken eines Plots. Alternativ können Easing-Funktionen einzelnen Ästhetiken zugewiesen werden. Quadric, cubic , sine und exponential Easing-Funktionen stehen zur Verfügung, wobei die linear easing Funktion die Standardfunktion ist. Diese Funktionen können weiter angepasst werden, indem ein Modifikator-Suffix hinzugefügt wird: Mit -in wird die Funktion normal angewendet, mit -out umgekehrt und mit -in-out erst normal und dann umgekehrt.

Hier habe ich eine Easing-Funktion ausprobiert, die das Hüpfen eines Balls modelliert.

## Animated Plot
# ...add special easing function
plot1 + 
  transition_states(states = rating) + 
  ease_aes("bounce-in") # bouncy easing function, as-is

Dynamisches Labeling: {Frame-Variablen}

Damit wir beim Betrachten der Animationen nicht den Überblick verlieren, stellt gganimate sogenannte Frame-Variablen bereit, die Metadaten über die Animation oder den vorherigen/aktuellen/nächsten Frame liefern. Diese Variablen können innerhalb aller Plot-Labels interpretiert werden, wenn sie in geschweifte Klammern gesetzt sind. Zum Beispiel können wir jeden Frame mit dem Wert der states Variablen beschriften, die das aktuell angezeigte Subset der Daten definiert.

## Animated Plot
# ...add dynamic label: subtitle with current/next value of states variable
plot1 +
  labs(subtitle = "{closest_state}") + # add frame variable as subtitle
  transition_states(states = rating) 

Das Set der verfügbaren Variablen hängt von der Übergangsfunktion ab. Um eine Liste der Frame-Variablen für eine Animation zu erhalten, kann die Funktion frame_vars() aufgerufen werden, um die Namen und Werte der verfügbaren Variablen zu erhalten.

Anzeige vorheriger Daten: shadow_*

Um die Verbindung zwischen verschiedenen Frames zu betonen, können wir einen der 'Schatten' von gganimate verwenden. Standardmäßig wird kein Schatten hinzugefügt shadow_null(). Schatten zeigen Datenpunkte vergangener Frames auf unterschiedliche Weise: shadow_trail() erstellt eine Spur gleichmäßig verteilter Datenpunkte, während shadow_mark() alle Rohdatenpunkte anzeigt.

Wir verwenden shadow_wake(), um ein kleines 'Wach' von vergangenen Datenpunkten zu erzeugen, die allmählich schrumpfen und verblassen. Mit dem Argument wake_length können wir die Länge des Wachs relativ zur Gesamtanzahl der Frames festlegen. Da sich die Wachs überlappen, muss die Transparenz der Geoms möglicherweise angepasst werden. Schatten können die Verständlichkeit bei Plots mit vielen Datenpunkten beeinträchtigen.

plot1B + # same as plot1, but with alpha = 0.1 in geom_jitter
  labs(subtitle = "{closest_state}") +  
  transition_states(states = rating) +
  shadow_wake(wake_length = 0.5) # adding shadow

Die Vorteile von transition_*

Die visuellen Darstellungen von animierten Plots sind nicht nur schön anzusehen, sondern bieten auch tatsächliche Vorteile. Ich finde, dass transition_states gegenüber der Facettierung den Vorteil hat, dass es einfacher ist, individuelle Beobachtungen durch Übergänge zu verfolgen. Egal wie viele Unterplots wir erkunden möchten, wir benötigen nicht viel Platz und überladen unser Dokument nicht mit unzähligen Plots.

Ähnlich bietet transition_reveal zusätzlichen Wert für Zeitreihen, indem es nicht nur eine Zeitvariable auf eine Achse mappt, sondern auch die tatsächliche Zeit berücksichtigt: Die Übergangslänge zwischen den individuellen Frames der Eingabedaten entspricht den tatsächlichen Zeitunterschieden der Ereignisse. Um dies zu veranschaulichen, werfen wir einen Blick auf den 'Erfolg' der Speed-Dates über die verschiedenen Events:

## Static Plot
# ... date of event vs. interest in second date for women, men or couples
plot2 <- ggplot(data = df_match,
                aes(x = date, # date of speed dating event
                    y = count, # interest in 2nd date
                    color = info, # which group: women/men/reciprocal
                    group = info)) +
  geom_point(aes(group = seq_along(date)), # needed, otherwise transition dosen't work
             size = 4, # size of points
             alpha = 0.7) + # slightly transparent
  geom_line(aes(lty = info), # line type according to group
            alpha = 0.6) + # slightly transparent
  labs(y = "Interest After Speed Date",
       x = "Date of Event",
       title = "Overall Interest in Second Date") +
  scale_linetype_manual(values = c("Men" = "solid", # assign line types to groups
                                   "Women" = "solid",
                                   "Reciprocal" = "dashed"),
                        guide = FALSE) + # no legend for linetypes
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) + # y-axis in %
  scale_color_manual(values = c("Men" = "#2A00B6", # assign colors to groups
                                "Women" = "#9B0E84",
                                "Reciprocal" = "#E94657"),
                     name = "") +
  theme_minimal() + # apply minimal theme
  theme(panel.grid = element_blank(), # remove all lines of plot raster
        text = element_text(size = 16)) # increase font size

## Animated Plot
plot2 +
  transition_reveal(along = date) 

Angezeigt werden die Prozentsätze der Frauen und Männer, die nach jedem ihrer Speed-Dates an einem zweiten Date interessiert waren, sowie der Prozentsatz der Paare, bei denen beide Partner sich wiedersehen wollten.

Meistens waren Frauen mehr an zweiten Dates interessiert als Männer. Die Anziehung zwischen den Dating-Partnern ging oft nicht in beide Richtungen: Die Fälle, in denen beide Partner eines Paares ein zweites Date wollten, waren immer seltener als das allgemeine Interesse von Männern oder Frauen. Laut den Daten schien im frühen Herbst eine Flaute in der Romantik zu sein. Vielleicht war jeder noch wegen seines Sommerflirts gebrochenen Herzens? Glücklicherweise ist der Valentinstag im Februar.

Eine sehr praktische Option ist transition_filter(). Damit kannst du ausgewählte Erkenntnisse deiner Datenanalyse präsentieren. Die Animation durchläuft dabei Datensubsets, die durch Filterbedingungen definiert sind. Es liegt an dir, welche Subsets du in Szene setzen möchtest. Die Daten werden gemäß logischen Aussagen gefiltert, die in transition_filter() definiert sind. Alle Zeilen, für die eine Aussage zutrifft, werden in das entsprechende Subset aufgenommen. Wir können den logischen Ausdrücken Namen zuweisen, die als Frame-Variablen zugänglich sind. Wenn das keep-Argument auf TRUE gesetzt ist, bleiben die Daten der vorherigen Frames in späteren Frames erhalten.

Ich möchte untersuchen, ob die eigenen Eigenschaften mit den Attributen zusammenhängen, die man bei einem Partner sucht. Ziehen Gegensätze sich an oder wollen Gleichgesinnte zusammen sein?

Unten siehst du die Wichtigkeiten, die die Teilnehmer des Speed-Dating-Experiments verschiedenen Attributen eines potenziellen Partners zugeordnet haben. Kontrastiert werden Subsets von Teilnehmern, die von ihren Dating-Partnern als besonders lustig, attraktiv, aufrichtig, intelligent oder ehrgeizig bewertet wurden. Die Bewertungsskala reichte von 1 = niedrig bis 10 = hoch, daher nehme ich an, dass Werte >7 herausragend sind.

## Static Plot (without geom)
# ...importance ratings for different attributes
plot3 <- ggplot(data = df_ratings, 
                 aes(x = variable, # different attributes
                     y = own_rating, # importance regarding potential partner
                     size = own_rating, 
                     color = variable, # different attributes
                     fill = variable)) +
  geom_jitter(alpha = 0.3) +
  labs(x = "Attributes of Potential Partner", # x-axis label
       y = "Allocation of 100 Points (Importance)",  # y-axis label
       title = "Importance of Characteristics of Potential Partner", # title
       subtitle = "Subset of {closest_filter} Participants") + # dynamic subtitle 
  scale_color_viridis_d(option = "plasma", # use viridis scale for color 
                        begin = 0.05, # limit range of used hues
                        end = 0.97,
                        guide = FALSE) + # don't show legend
  scale_fill_viridis_d(option = "plasma", # use viridis scale for filling
                       begin = 0.05, # limit range of used hues
                       end = 0.97, 
                       guide = FALSE) + # don't show legend
  scale_size_continuous(guide = FALSE) + # don't show legend
  theme_minimal() + # apply minimal theme
  theme(panel.grid = element_blank(),  # remove all lines of plot raster
        text = element_text(size = 16)) # increase font size

## Animated Plot 
# ...show ratings for different subsets of participants
plot3 +
  geom_jitter(alpha = 0.3) +
  transition_filter("More Attractive" = Attractive > 7, # adding named filter expressions
                    "Less Attractive" = Attractive <= 7,
                    "More Intelligent" = Intelligent > 7,
                    "Less Intelligent" = Intelligent <= 7,
                    "More Fun" = Fun > 7,
                    "Less Fun" = Fun <= 5) 

Natürlich ist die Anzahl der außergewöhnlich attraktiven, intelligenten oder lustigen Teilnehmer relativ gering. Überraschenderweise gibt es wenig Unterschiede zwischen den Erwartungen von niedrig- vs. hochbewerteten Teilnehmern. Die Gruppe mit niedrigerer Bewertung umfasst mehr Personen mit extremen Erwartungen. Die individuellen Geschmäcker scheinen unabhängig von den eigenen Eigenschaften zu variieren.

Styling der (Dis)Appearance von Daten: enter_* / exit_*

Besonders wenn angezeigte Subsets von Daten nicht oder nur teilweise überlappen, kann es vorteilhaft sein, dies visuell zu betonen. Die Funktionen enter_() und exit_() ermöglichen es uns, den Eintritt und Austritt von Datenpunkten zu gestalten, die nicht zwischen den Frames bestehen bleiben.

Es gibt viele kombinierbare Optionen: Datenpunkte können einfach erscheinen oder verschwinden (der Standard), verblassen (enter_fade()/exit_fade()), wachsen oder schrumpfen (enter_grow()/exit_shrink()), ihre Farbe ändern (enter_recolor()/exit_recolor()), fliegen (enter_fly()/exit_fly()) oder treiben (enter_drift()/exit_drift()).

Diese stilistischen Mittel können verwendet werden, um Änderungen in den Daten verschiedener Frames zu betonen. Ich habe exit_fade() verwendet, um nicht weiter eingeschlossene Datenpunkte verblassen zu lassen, während sie aus dem Plotbereich auf einer vertikalen Route hinausfliegen (y_loc = 100. Die Punkte, die wieder in die Stichprobe eintreten, fliegen von unten in den Plot (y_loc = 0):

## Animated Plot 
# ...show ratings for different subsets of participants
plot3 +
  geom_jitter(alpha = 0.3) +
  transition_filter("More Attractive" = Attractive > 7, # adding named filter expressions
                    "Less Attractive" = Attractive <= 7,
                    "More Intelligent" = Intelligent > 7,
                    "Less Intelligent" = Intelligent <= 7,
                    "More Fun" = Fun > 7,
                    "Less Fun" = Fun <= 5) +
  enter_fly(y_loc = 0) + # entering data: fly in vertically from bottom
  exit_fly(y_loc = 100) + # exiting data: fly out vertically to top...
  exit_fade() # ...while color is fading

Finetuning und Speichern: animate() & anim_save()

Zum Glück macht gganimate es sehr einfach, unsere Animationen zu finalisieren und zu speichern. Wir können unser fertiges gganimate-Objekt an animate() übergeben, um die Anzahl der zu rendernden Frames (nframes), die Rate der Frames pro Sekunde (fps) und die Dauer der Animation (duration) zu definieren. Wir können auch das Gerät bestimmen, auf dem die einzelnen Frames gerendert werden (Standard ist device = “png”). Zudem können wir Argumente an das Gerät weitergeben, wie z.B. width oder height. Beachte, dass das einfache Drucken eines gganimateobject gleichbedeutend mit der Übergabe an animate() mit Standardargumenten ist. Wenn wir unsere Animation speichern möchten, ist das Argument renderer wichtig: Die Funktion anim_save() ermöglicht es uns, jedes gganimate-Objekt mühelos zu speichern, vorausgesetzt, es wurde mit magick_renderer() oder dem Standard gifski_renderer() gerendert.

Die Funktion anim_save() ist recht einfach. Wir können Dateiname (filename) und Pfad (path) (Standard ist das aktuelle Arbeitsverzeichnis) sowie das Animationsobjekt (Standard ist die zuletzt erstellte Animation) definieren.

# create a gganimate object
gg_animation <- plot3 +
  transition_filter("More Attractive" = Attractive > 7,
                    "Less Attractive" = Attractive <= 7) 

# adjust the animation settings 
animate(gg_animation, 
        width = 900, # 900px wide
        height = 600, # 600px high
        nframes = 200, # 200 frames
        fps = 10) # 10 frames per second

# save the last created animation to the current directory 
anim_save("my_animated_plot.gif")

Fazit (und einen fröhlichen Valentinstag)

Ich hoffe, dieser Blogbeitrag hat dir gezeigt, wie du gganimate nutzen kannst, um deine eigenen ggplots in schöne und informative Animationen zu verwandeln. Ich habe nur die Oberfläche der gganimate-Funktionen angekratzt, also bitte verstehe diesen Beitrag nicht als eine vollständige Beschreibung der Funktionen oder des Pakets. Es gibt viel zu entdecken, also fang an mit gganimate!

Und noch wichtiger: Warte nicht auf die Liebe. Die Speed-Dating-Daten zeigen, dass wahrscheinlich jemand da draußen nach jemandem wie dir sucht. Also von uns allen hier bei statworx: Happy Valentine’s Day!

## 8 bit heart animation
animation2 <- plot(data = df_eight_bit_heart %>% # includes color and x/y position of pixels 
         dplyr::mutate(id = row_number()), # create row number as ID  
                aes(x = x, 
                    y = y,
                    color = color,
                    group = id)) +
  geom_point(size = 18, # depends on height & width of animation
             shape = 15) + # square
  scale_color_manual(values = c("black" = "black", # map values of color to actual colors
                                "red" = "firebrick2",
                                "dark red" = "firebrick",
                                "white" = "white"),
                     guide = FALSE) + # do not include legend
  theme_void() + # remove everything but geom from plot
  transition_states(-y, # reveal from high to low y values 
                    state_length = 0) +
  shadow_mark() + # keep all past data points
  enter_grow() + # new data grows 
  enter_fade() # new data starts without color

animate(animation2, 
        width = 250, # depends on size defined in geom_point 
        height = 250, # depends on size defined in geom_point 
        end_pause = 15) # pause at end of animation

Linkedin Logo
Marcel Plaschke
Head of Strategy, Sales & Marketing
Beratung vereinbaren
Zugehörige Leistungen
No items found.

Weitere Blogartikel

  • Coding
  • Python
  • Statistics & Methods
Ensemble-Methoden im maschinellen Lernen: Bagging & Subagging
Team statworx
15.4.2025
Mehr erfahren
  • Deep Learning
  • Python
  • Tutorial
Verwendung von Reinforcement Learning zum Spielen von Super Mario Bros auf NES mit TensorFlow
Sebastian Heinz
15.4.2025
Mehr erfahren
  • Coding
  • Machine Learning
  • R
Abstimmung von Random Forest auf Zeitreihendaten
Team statworx
15.4.2025
Mehr erfahren
  • Data Science
  • Statistics & Methods
Modellregularisierung – The Bayesian Way
Thomas Alcock
15.4.2025
Mehr erfahren
  • Coding
  • Python
  • Statistics & Methods
Wie man Gradient Boosting um den Faktor Zwei beschleunigt
Team statworx
15.4.2025
Mehr erfahren
  • Coding
  • Frontend
  • R
Dynamische UI-Elemente in Shiny - Teil 2
Team statworx
15.4.2025
Mehr erfahren
  • Coding
  • R
Warum heißen sie so?! – Ursprung und Bedeutung von R-Paketnamen
Team statworx
15.4.2025
Mehr erfahren
  • Data Engineering
  • Python
Von überall aus auf deinen Spark-Cluster zugreifen – mit Apache Livy
Team statworx
15.4.2025
Mehr erfahren
  • Coding
  • Data Engineering
  • Data Science
Testen von REST-APIs mit Newman
Team statworx
14.4.2025
Mehr erfahren
  • Machine Learning
  • Python
  • R
XGBoost: Entscheidungsbaum vs. Lineares Modell
Fabian Müller
14.4.2025
Mehr erfahren
  • Data Science
  • R
Kombination von Preiselastizitäten und Verkaufsprognosen zur Verkaufssteigerung
Team statworx
14.4.2025
Mehr erfahren
  • Data Science
  • Machine Learning
  • R
Zeitreihenvorhersage mit Random Forest
Team statworx
14.4.2025
Mehr erfahren
  • Data Visualization
  • R
Gemeinschaftsdetektion mit Louvain und Infomap
Team statworx
14.4.2025
Mehr erfahren
  • Machine Learning
Machine Learning Goes Causal II: Der kausale Bruder des Random Forests
Team statworx
11.4.2025
Mehr erfahren
  • Artificial Intelligence
AI Trends Report 2025: Die 16 Trends im Überblick
Tarik Ashry
25.2.2025
Mehr erfahren
  • Artificial Intelligence
  • Data Science
  • GenAI
Wie ein CustomGPT Effizienz und Kreativität bei hagebau fördert
Tarik Ashry
15.1.2025
Mehr erfahren
  • Artificial Intelligence
  • Data Science
  • Human-centered AI
Explainable AI in der Praxis: Mit der richtigen Methode die Black Box öffnen
Jonas Wacker
15.1.2025
Mehr erfahren
  • Artificial Intelligence
  • GenAI
  • statworx
Zurück in die Zukunft: Die Geschichte von Generativer KI (Episode 4)
Tarik Ashry
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • GenAI
  • statworx
Zurück in die Zukunft: Die Geschichte von Generativer KI (Episode 3)
Tarik Ashry
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • GenAI
  • statworx
Zurück in die Zukunft: Die Geschichte von Generativer KI (Episode 2)
Tarik Ashry
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Culture
  • Data Science
  • Deep Learning
  • GenAI
  • Machine Learning
AI Trends Report 2024: statworx COO Fabian Müller zieht eine Zwischenbilanz
Tarik Ashry
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • GenAI
  • statworx
Maßgeschneiderte KI-Chatbots: Hohe Leistung und schnelle Integration vereint
Tarik Ashry
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • GenAI
  • statworx
Zurück in die Zukunft: Die Geschichte von Generativer KI (Episode 1)
Tarik Ashry
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Culture
  • Human-centered AI
KI in der Arbeitswelt: Wie wir Skepsis in Zuversicht verwandeln
Tarik Ashry
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • GenAI
  • statworx
Generative KI als Denkmaschine? Ein medientheoretischer Blick
Tarik Ashry
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Culture
  • Human-centered AI
Wie Führungskräfte die Datenkultur im Unternehmen stärken können
Tarik Ashry
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Science
Wie wir für Microsoft einen Chatbot mit echtem Wissen entwickelt haben
Team statworx
6.12.2024
Mehr erfahren
  • Data Science
  • Data Visualization
  • Frontend Solution
Warum Frontend-Entwicklung in Data Science-Anwendungen nützlich ist
Jakob Gepp
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Human-centered AI
  • statworx
the byte - Wie wir ein KI-gesteuertes Pop-up Restaurant aufgebaut haben
Sebastian Heinz
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Science
  • GenAI
Die Zukunft des Customer Service: Generative KI als Erfolgsfaktor
Tarik Ashry
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Human-centered AI
  • Strategy
Der AI-Act ist da – diese Risikoklassen sollte man kennen
Fabian Müller
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Human-centered AI
  • Machine Learning
Genderdarstellung in der KI – Teil 2: Automatisierte Erzeugung genderneutraler Versionen von Gesichtsbildern
Team statworx
6.12.2024
Mehr erfahren
  • Data Science
  • Human-centered AI
  • Statistics & Methods
Die Black-Box entschlüsseln – 3 Explainable AI Methoden zur Vorbereitung auf den AI-Act
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Human-centered AI
  • Strategy
Wie der AI-Act die KI-Branche verändern wird: Alles, was man jetzt darüber wissen muss
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Recap
  • statworx
Big Data & AI World 2023 Recap
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Science
  • Statistics & Methods
Ein erster Einblick in unser Forecasting Recommender Tool
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Science
Vom Können, Tun und Wollen – Warum Datenkultur und Death Metal einiges miteinander gemeinsam haben
David Schlepps
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Deep Learning
  • Machine Learning
Wie man KI-generierte Avatare mit Hilfe von Stable Diffusion und Textual Inversion erstellt
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Science
  • Strategy
Das Geheimnis der Datenkultur entschlüsseln: Diese Faktoren beeinflussen Kultur und Erfolg von Unternehmen
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Human-centered AI
  • Machine Learning
GPT-4 – Eine Einordnung der wichtigsten Neuerungen
Mareike Flögel
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Human-centered AI
  • Strategy
Knowledge Management mit NLP: So einfach verarbeitet man E-Mails mit KI
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Deep Learning
  • Machine Learning
3 Anwendungsfälle, wie ChatGPT die Kommunikation in Unternehmen revolutionieren wird
Ingo Marquart
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Machine Learning
  • Tutorial
Paradigmenwechsel in NLP: 5 Ansätze, um bessere Prompts zu schreiben
Team statworx
6.12.2024
Mehr erfahren
  • Recap
  • statworx
Ho ho ho – weihnachtlicher Küchenabriss
Julius Heinz
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Deep Learning
  • Machine Learning
Real-time Computer Vision: Gesichter erkennen mit einem Roboter
Sarah Sester
6.12.2024
Mehr erfahren
  • Recap
  • statworx
statworx @ UXDX Conf 2022
Markus Berroth
6.12.2024
Mehr erfahren
  • Data Engineering
  • Tutorial
Data Engineering – From Zero to Hero
Thomas Alcock
6.12.2024
Mehr erfahren
  • Recap
  • statworx
statworx @ vuejs.de Conf 2022
Jakob Gepp
6.12.2024
Mehr erfahren
  • Data Engineering
  • Data Science
Überwachung und Protokollierung von Anwendungen und Infrastruktur: Metriken und (Ereignis-)Protokolle
Team statworx
6.12.2024
Mehr erfahren
  • Data Engineering
  • Data Science
  • Python
Wie Du Deinen Code und Deine Abhängigkeiten in Python scannst
Thomas Alcock
6.12.2024
Mehr erfahren
  • Cloud Technology
  • Data Engineering
  • Data Science
Wie du dein Data Science Projekt fit für die Cloud machst
Alexander Broska
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Human-centered AI
  • Machine Learning
Geschlechter­darstellung in der KI – Teil 1: Verwendung von StyleGAN zur Erforschung von Geschlechter­vielfalt bei der Bild­bearbeitung
Isabel Hermes
6.12.2024
Mehr erfahren
  • R
Das helfRlein Package – Eine Sammlung nützlicher Funktionen
Team statworx
6.12.2024
Mehr erfahren
  • Data Engineering
  • Data Science
  • Machine Learning
Data-Centric AI: Von Model-First zu Data-First KI-Prozessen
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Deep Learning
  • Human-centered AI
  • Machine Learning
DALL-E 2: Warum Diskriminierung in der KI-Entwicklung nicht ignoriert werden kann
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Human-centered AI
statworx AI Principles: Warum wir eigene KI-Prinzipien entwickeln
Team statworx
6.12.2024
Mehr erfahren
  • Recap
  • statworx
5 Highlights vom Digital Festival Zürich 2021
Team statworx
6.12.2024
Mehr erfahren
  • Recap
  • statworx
Unfold 2022 in Bern – by Cleverclip
Team statworx
6.12.2024
Mehr erfahren
  • Data Science
  • Human-centered AI
  • Machine Learning
  • Strategy
Warum Data Science und KI-Initiativen scheitern – eine Reflektion zu nicht-technischen Faktoren
Team statworx
6.12.2024
Mehr erfahren
  • Machine Learning
  • Python
  • Tutorial
Wie man eine Machine Learning API mit Python und Flask erstellt
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Science
  • Human-centered AI
  • Machine Learning
Vorurteile in KI abbauen
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Cloud Technology
  • Data Science
  • Sustainable AI
Wie du als Data Scientist deinen KI CO₂ Fußabdruck verringerst
Team statworx
6.12.2024
Mehr erfahren
  • Coding
  • Data Engineering
Automatisierte Erstellung von Docker Containern
Stephan Emmer
6.12.2024
Mehr erfahren
  • Coding
  • Data Visualization
  • R
Anpassung der Zeit- und Datumsskalen in ggplot2
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Science
  • Machine Learning
5 Typen von Machine Learning Algorithmen (Mit Anwendungsfällen)
Team statworx
6.12.2024
Mehr erfahren
  • Coding
  • Machine Learning
  • Python
Data Science in Python – Der Einstieg in Machine Learning mit Scikit-Learn
Team statworx
6.12.2024
Mehr erfahren
  • Recap
  • statworx
2022 und die Reise zu statworx next
Sebastian Heinz
6.12.2024
Mehr erfahren
  • Recap
  • statworx
Als Data Science Praktikant bei statworx
Team statworx
6.12.2024
Mehr erfahren
  • Coding
  • Data Science
  • Python
Wie man mit Call Graph automatisch Projektgrafiken erstellt
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Science
  • Human-centered AI
  • Machine Learning
  • statworx
Kolumne: Mensch und Maschine Seite an Seite
Sebastian Heinz
6.12.2024
Mehr erfahren
  • Data Engineering
  • Data Science
  • Machine Learning
Machine Learning Modelle bereitstellen und skalieren mit Kubernetes
Team statworx
6.12.2024
Mehr erfahren
  • Coding
  • Python
  • Tutorial
statworx Cheatsheets – Python Basics Cheatsheet für Data Science
Team statworx
6.12.2024
Mehr erfahren
  • Cloud Technology
  • Data Engineering
  • Machine Learning

3 Szenarien zum Deployment von Machine Learning Workflows mittels MLflow
Team statworx
6.12.2024
Mehr erfahren
  • Data Science
  • statworx
  • Strategy
STATWORX meets DHBW – Data Science Real-World Use Cases
Team statworx
6.12.2024
Mehr erfahren
  • Coding
  • Deep Learning
Car Model Classification I: Transfer Learning mit ResNet
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Deep Learning
  • Machine Learning
Car Model Classification IV: Integration von Deep Learning Modellen mit Dash
Dominique Lade
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Deep Learning
  • Machine Learning

Car Model Classification III: Erklärbarkeit von Deep Learning Modellen mit Grad-CAM
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Coding
  • Deep Learning
Car Model Classification II: Deployment von TensorFlow-Modellen in Docker mit TensorFlow Serving
Team statworx
6.12.2024
Mehr erfahren
  • AI Act
Potenzial noch nicht ausgeschöpft – Ein Kommentar zur vorgeschlagenen KI-Regulierung der EU
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Deep Learning
  • statworx
Creaition – Revolutionierung des Designprozesses mit Machine Learning
Team statworx
6.12.2024
Mehr erfahren
  • Data Science
  • Deep Learning
Die 5 wichtigsten Use Cases für Computer Vision
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Science
  • Machine Learning
Generative Adversarial Networks: Wie mit Neuronalen Netzen Daten generiert werden können
Team statworx
6.12.2024
Mehr erfahren
  • Data Engineering
5 Technologien, die jeder Data Engineer kennen sollte
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Deep Learning
  • Machine Learning
5 praxisnahe Beispiele für NLP Use Cases
Team statworx
6.12.2024
Mehr erfahren
  • Coding
  • Data Science
  • Deep Learning
Finetuning von Tesseract-OCR für deutsche Rechnungen
Team statworx
6.12.2024
Mehr erfahren
  • Data Science
  • Deep Learning
Neue Trends im Natural Language Processing – Wie NLP massentauglich wird
Dominique Lade
6.12.2024
Mehr erfahren
  • Data Engineering
  • Data Science
  • Machine Learning
Machine Learning Modelle mit Hilfe von Docker Containern bereitstellen
Thomas Alcock
6.12.2024
Mehr erfahren
  • Frontend
  • Python
  • Tutorial
Wie Du ein Dashboard In Python baust – Plotly Dash Step-by-Step Tutorial
Alexander Blaufuss
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Machine Learning
Whitepaper: Ein Reifegradmodell für Künstliche Intelligenz
Team statworx
6.12.2024
Mehr erfahren
  • Data Engineering
  • R
  • Tutorial
Wie Du ShinyApps in Docker-Images einbauen kannst
Team statworx
6.12.2024
Mehr erfahren
  • Recap
  • statworx
STATWORX 2.0 – Das neue Headquarter in Frankfurt ist eröffnet
Julius Heinz
6.12.2024
Mehr erfahren
  • Coding
  • Python
Web Scraping 101 in Python mit Requests & BeautifulSoup
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Deep Learning
Deep Learning – Überblick und Einstieg
Team statworx
6.12.2024
Mehr erfahren
  • Data Science
  • R
  • Statistics & Methods
Wie man eine Kreuzvalidierung zur Evaluation der Modellperformance von Grund auf selbst erstellt
Team statworx
6.12.2024
Mehr erfahren
  • Machine Learning
  • R
  • Statistics & Methods
Was dem MAPE fälschlicherweise vorgeworfen wird, seine WAHREN Schwächen und BESSERE Alternativen!
Team statworx
6.12.2024
Mehr erfahren
  • Data Visualization
  • R
Interaktive Netzwerkvisualisierung mit R
Team statworx
6.12.2024
Mehr erfahren
  • Data Science
  • Tutorial
Eine Einführung in Dataiku DSS
Team statworx
6.12.2024
Mehr erfahren
  • Coding
  • Data Visualization
  • Python
Das häufigste Problem mit Plotly Histograms und wie man es löst
Team statworx
6.12.2024
Mehr erfahren
  • Coding
  • Data Engineering
  • R
Wie Du ein R-Skript in Docker ausführst
Team statworx
6.12.2024
Mehr erfahren
  • Data Science
  • Data Visualization
  • Python
Data Science in Python – Matplotlib – Teil 4
Team statworx
6.12.2024
Mehr erfahren
This is some text inside of a div block.
This is some text inside of a div block.