5 visualisasi untuk membantu meningkatkan Data Story

Artikel ini diterjemahkan sebelum kursus Pengembang Python .




Mendongeng adalah salah satu keterampilan terpenting bagi para profesional analisis data. Untuk mengkomunikasikan ide dan melakukannya dengan meyakinkan, Anda perlu membangun komunikasi yang efektif. Pada artikel ini, kami akan memperkenalkan 5 metode visualisasi yang melampaui pemahaman klasik dan dapat membuat Data Story Anda lebih estetis dan indah. Kami akan bekerja dengan pustaka grafis Plotly dengan Python (ini juga tersedia dalam R), yang memungkinkan Anda membuat diagram animasi dan interaktif dengan upaya minimal.

Apa yang bagus di Plotly


Grafik sederhana dapat dengan mudah diintegrasikan ke dalam berbagai lingkungan: mereka bekerja dengan baik di notebook jupyter, mereka dapat tertanam dalam situs web, dan mereka juga terintegrasi penuh dengan Dash - alat yang sangat baik untuk membuat dashboard dan aplikasi analitik.

Ayo mulai


Jika Anda belum menginstal plotly, Anda dapat melakukan ini dengan perintah berikut:

pip install plotly

Hebat, sekarang Anda bisa melanjutkan!

1. Animasi


Pekerjaan kami sering terkait dengan data temporal, misalnya, ketika kami mempertimbangkan evolusi metrik tertentu. Animasi dalam plotly adalah alat keren yang membantu mencerminkan bagaimana data berubah seiring waktu hanya dengan satu baris kode.



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()

Hampir semua bagan dapat dianimasikan jika Anda memiliki variabel yang membantu Anda memfilter berdasarkan waktu. Contoh animasi sebar:

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. Grafik Sunburst


Sunburst chart adalah cara yang bagus untuk memvisualisasikan grup dengan operasi . Jika Anda ingin memecah jumlah data yang tersedia menjadi satu atau lebih variabel kategori, gunakan bagan sunburst.

Misalkan kita perlu mendapatkan distribusi tip berdasarkan jenis kelamin dan waktu. Jadi, kita bisa menggunakan grup dengan operator dua kali dan dengan mudah memvisualisasikan data yang diterima sehingga tidak melihat output tabel yang biasa.



Diagram ini interaktif, Anda dapat mengklik pada kategori dan melihat setiap kategori secara individual. Yang harus Anda lakukan adalah memutuskan kategori-kategori ini, pikirkan hierarki di antara mereka (argumenparentsdalam kode) dan tetapkan nilai yang sesuai, yang dalam kasus kami akan menjadi output grup oleh operator .

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()

Sekarang mari kita tambahkan level hierarki lain:



Untuk melakukan ini, kita akan menambahkan hasil dari grup lain dengan , dari mana kita akan mendapatkan tiga kategori lagi.

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. Kategori paralel


Cara lain yang baik untuk memvisualisasikan hubungan antara kategori adalah dengan grafik kategori paralel ini. Anda dapat menarik, memilih, dan mendapatkan nilai saat bepergian, yang sangat bagus untuk presentasi.



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. Koordinat paralel


Diagram koordinat paralel adalah versi yang diperluas dari grafik di atas. Di sini, setiap bagian dari grafik mencerminkan satu pengamatan. Ini adalah alat yang baik untuk mendeteksi pencilan (aliran tunggal yang diisolasi dari data lainnya), kelompok, tren, dan data yang berlebihan (misalnya, jika dua variabel memiliki nilai yang sama untuk semua pengamatan, mereka akan terletak pada garis horizontal, yang menunjukkan adanya redundansi).



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. Grafik, sensor, dan indikator




Diagram sensor diperlukan untuk estetika. Mereka adalah cara yang baik untuk melaporkan keberhasilan atau indikator kinerja dan menghubungkannya dengan tujuan Anda.



Indikator akan sangat berguna dalam konteks bisnis dan konsultasi. Mereka melengkapi efek visual dengan teks yang menangkap perhatian audiens dan menyiarkan indikator pertumbuhan kepada audiens.

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()

Itu saja!


Saya harap Anda menemukan sesuatu yang berguna untuk diri Anda sendiri. Tetap di rumah, aman, bekerja produktif.



Pelajari lebih lanjut tentang kursus.



All Articles