5 Visualisierungen zur Verbesserung von Data Story

Dieser Artikel wurde vor dem Python Developer- Kurs übersetzt .




Das Geschichtenerzählen ist eine der wichtigsten Fähigkeiten für Datenanalyseprofis. Um Ideen zu kommunizieren und überzeugend umzusetzen, müssen Sie eine effektive Kommunikation aufbauen. In diesem Artikel werden 5 Visualisierungsmethoden vorgestellt, die über das klassische Verständnis hinausgehen und Ihre Data Story ästhetischer und schöner machen können. Wir werden mit der Plotly- Grafikbibliothek in Python arbeiten (sie ist auch in R verfügbar), mit der Sie mit minimalem Aufwand animierte und interaktive Diagramme erstellen können.

Was ist gut bei Plotly?


Plotly-Diagramme können problemlos in verschiedene Umgebungen integriert werden: Sie eignen sich gut für Jupyter-Notebooks, können in eine Website eingebettet werden und sind vollständig in Dash integriert - ein hervorragendes Tool zum Erstellen von Dashboards und Analyseanwendungen.

Lasst uns beginnen


Wenn Sie Plot noch nicht installiert haben, können Sie dies mit dem folgenden Befehl tun:

pip install plotly

Großartig, jetzt können Sie fortfahren!

1. Animationen


Unsere Arbeit bezieht sich oft auf zeitliche Daten, zum Beispiel wenn wir die Entwicklung einer bestimmten Metrik betrachten. Animation in Plotly ist ein cooles Tool, das mit nur einer Codezeile widerspiegelt, wie sich Daten im Laufe der Zeit ändern.



import plotly.express as px
from vega_datasets import data
df = data.disasters()
df = df[df.Year > 1990]
fig = px.bar(df,
             y="Entity",
             x="Deaths",
             animation_frame="Year",
             orientation='h',
             range_x=[0, df.Deaths.max()],
             color="Entity")
# improve aesthetics (size, grids etc.)
fig.update_layout(width=1000,
                  height=800,
                  xaxis_showgrid=False,
                  yaxis_showgrid=False,
                  paper_bgcolor='rgba(0,0,0,0)',
                  plot_bgcolor='rgba(0,0,0,0)',
                  title_text='Evolution of Natural Disasters',
                  showlegend=False)
fig.update_xaxes(title_text='Number of Deaths')
fig.update_yaxes(title_text='')
fig.show()

Fast jedes Diagramm kann animiert werden, wenn Sie eine Variable haben, mit der Sie nach Zeit filtern können. Beispiel für eine Streudiagramm-Animation:

import plotly.express as px
df = px.data.gapminder()
fig = px.scatter(
    df,
    x="gdpPercap",
    y="lifeExp",
    animation_frame="year",
    size="pop",
    color="continent",
    hover_name="country",
    log_x=True,
    size_max=55,
    range_x=[100, 100000],
    range_y=[25, 90],

    #   color_continuous_scale=px.colors.sequential.Emrld
)
fig.update_layout(width=1000,
                  height=800,
                  xaxis_showgrid=False,
                  yaxis_showgrid=False,
                  paper_bgcolor='rgba(0,0,0,0)',
                  plot_bgcolor='rgba(0,0,0,0)')

2. Sunburst-Diagramme


Sunburst-Diagramme sind eine großartige Möglichkeit, eine Gruppe nach Operation zu visualisieren . Wenn Sie die verfügbare Datenmenge in eine oder mehrere kategoriale Variablen aufteilen möchten, verwenden Sie das Sunburst-Diagramm.

Angenommen, wir müssen die Verteilung der Trinkgelder nach Geschlecht und Tageszeit ermitteln. So können wir die Gruppe nach Operator zweimal verwenden und die empfangenen Daten einfach visualisieren, um die übliche Tabellenausgabe nicht zu sehen.



Das Diagramm ist interaktiv. Sie können auf die Kategorien klicken und jede Kategorie einzeln anzeigen. Sie müssen sich nur für diese Kategorien entscheiden und die Hierarchie zwischen ihnen durchdenken (Argumentparentsim Code) und weisen Sie die entsprechenden Werte zu, die in unserem Fall die Ausgabe der Gruppe durch die Operatoren sind .

import plotly.graph_objects as go
import plotly.express as px
import numpy as np
import pandas as pd
df = px.data.tips()
fig = go.Figure(go.Sunburst(
    labels=["Female", "Male", "Dinner", "Lunch", 'Dinner ', 'Lunch '],
    parents=["", "", "Female", "Female", 'Male', 'Male'],
    values=np.append(
        df.groupby('sex').tip.mean().values,
        df.groupby(['sex', 'time']).tip.mean().values),
    marker=dict(colors=px.colors.sequential.Emrld)),
                layout=go.Layout(paper_bgcolor='rgba(0,0,0,0)',
                                 plot_bgcolor='rgba(0,0,0,0)'))

fig.update_layout(margin=dict(t=0, l=0, r=0, b=0),
                  title_text='Tipping Habbits Per Gender, Time and Day')
fig.show()

Fügen wir nun eine weitere Hierarchieebene hinzu:



Dazu fügen wir das Ergebnis einer anderen Gruppe hinzu , von der wir drei weitere Kategorien erhalten.

import plotly.graph_objects as go
import plotly.express as px
import pandas as pd
import numpy as np
df = px.data.tips()
fig = go.Figure(go.Sunburst(labels=[
    "Female", "Male", "Dinner", "Lunch", 'Dinner ', 'Lunch ', 'Fri', 'Sat',
    'Sun', 'Thu', 'Fri ', 'Thu ', 'Fri  ', 'Sat  ', 'Sun  ', 'Fri   ', 'Thu   '
],
                            parents=[
                                "", "", "Female", "Female", 'Male', 'Male',
                                'Dinner', 'Dinner', 'Dinner', 'Dinner',
                                'Lunch', 'Lunch', 'Dinner ', 'Dinner ',
                                'Dinner ', 'Lunch ', 'Lunch '
                            ],
                            values=np.append(
                                np.append(
                                    df.groupby('sex').tip.mean().values,
                                    df.groupby(['sex',
                                                'time']).tip.mean().values,
                                ),
                                df.groupby(['sex', 'time',
                                            'day']).tip.mean().values),
                            marker=dict(colors=px.colors.sequential.Emrld)),
                layout=go.Layout(paper_bgcolor='rgba(0,0,0,0)',
                                 plot_bgcolor='rgba(0,0,0,0)'))
fig.update_layout(margin=dict(t=0, l=0, r=0, b=0),
                  title_text='Tipping Habbits Per Gender, Time and Day')

fig.show()

3. Parallele Kategorien


Eine weitere gute Möglichkeit, Beziehungen zwischen Kategorien zu visualisieren, ist dieses parallele Kategoriediagramm. Sie können unterwegs Werte ziehen, auswählen und abrufen, was sich hervorragend für Präsentationen eignet.



import plotly.express as px
from vega_datasets import data
import pandas as pd
df = data.movies()
df = df.dropna()
df['Genre_id'] = df.Major_Genre.factorize()[0]
fig = px.parallel_categories(
    df,
    dimensions=['MPAA_Rating', 'Creative_Type', 'Major_Genre'],
    color="Genre_id",
    color_continuous_scale=px.colors.sequential.Emrld,
)
fig.show()

4. Parallele Koordinaten


Ein paralleles Koordinatendiagramm ist eine erweiterte Version des obigen Diagramms. Hier spiegelt jeder Teil des Diagramms eine Beobachtung wider. Dies ist ein gutes Werkzeug zum Erkennen von Ausreißern (einzelne vom Rest der Daten isolierte Streams), Clustern, Trends und redundanten Daten (wenn beispielsweise zwei Variablen für alle Beobachtungen dieselben Werte haben, liegen sie auf einer horizontalen Linie, die auf das Vorhandensein von Redundanz hinweist).



import plotly.express as px
from vega_datasets import data
import pandas as pd
df = data.movies()
df = df.dropna()
df['Genre_id'] = df.Major_Genre.factorize()[0]
fig = px.parallel_coordinates(
    df,
    dimensions=[
        'IMDB_Rating', 'IMDB_Votes', 'Production_Budget', 'Running_Time_min',
        'US_Gross', 'Worldwide_Gross', 'US_DVD_Sales'
    ],
    color='IMDB_Rating',
    color_continuous_scale=px.colors.sequential.Emrld)
fig.show()


5. Diagramme, Sensoren und Anzeigen




Sensordiagramme werden für die Ästhetik benötigt. Sie sind eine gute Möglichkeit, Erfolgs- oder Leistungsindikatoren zu melden und sie mit Ihrem Ziel in Beziehung zu setzen.



Indikatoren werden im Kontext von Geschäft und Beratung sehr nützlich sein. Sie ergänzen visuelle Effekte mit Text, der die Aufmerksamkeit des Publikums auf sich zieht und Wachstumsindikatoren an das Publikum sendet.

import plotly.graph_objects as go
fig = go.Figure(go.Indicator(
    domain = {'x': [0, 1], 'y': [0, 1]},
    value = 4.3,
    mode = "gauge+number+delta",
    title = {'text': "Success Metric"},
    delta = {'reference': 3.9},
    gauge = {'bar': {'color': "lightgreen"},
        'axis': {'range': [None, 5]},
             'steps' : [
                 {'range': [0, 2.5], 'color': "lightgray"},
                 {'range': [2.5, 4], 'color': "gray"}],
          }))
fig.show()

import plotly.graph_objects as go
fig = go.Figure(go.Indicator(
    title = {'text': "Success Metric"},
     mode = "number+delta",
    value = 300,
    delta = {'reference': 160}))
fig.show()


fig = go.Figure(go.Indicator(
     title = {'text': "Success Metric"},
    mode = "delta",
    value = 40,
 delta = {'reference': 160}))
fig.show()

Das ist alles!


Ich hoffe, Sie finden etwas Nützliches für sich. Bleiben Sie zu Hause, seien Sie sicher, arbeiten Sie produktiv.



Erfahren Sie mehr über den Kurs.



All Articles