前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >5种可视化效果,以升级您的数据故事

5种可视化效果,以升级您的数据故事

作者头像
代码医生工作室
发布2020-04-14 16:30:26
1.1K0
发布2020-04-14 16:30:26
举报
文章被收录于专栏:相约机器人相约机器人

作者 | Liana Mehrabyan

来源 | Medium

编辑 | 代码医生团队

讲故事是数据科学家必不可少的技能。为了传达想法和说服力,需要有效的沟通。美学可视化是实现这一目标的绝佳工具。在本文中,将介绍5种超越经典的可视化技术,这些技术可以使数据故事更加美观和有效。将在python中使用Plotly图形库(R中也可用),该库以最少的工作量提供了动画和交互式图。

Plotly有什么好处

图表高度可集成:它们可与jupyter笔记本一起使用,可嵌入网站中并与Dash完全集成,Dash是构建仪表板和分析应用程序的绝佳工具。

https://plotly.com/dash/

入门

如果尚未安装,只需在终端中运行以下命令:

代码语言:javascript
复制
pip install plotly

1.动画

工作通常涉及时间数据,在其中研究此或该指标的演变。绘图动画是仅用一行代码即可观察数据如何随时间变化的好工具。

代码语言:javascript
复制
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()

只要有一个要过滤的时间变量,几乎任何情节都可以设置动画。动画散点图的示例:

代码语言:javascript
复制
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.森伯斯特图

森伯斯特图表是一种通过语句可视化团队的好方法。如果要通过一个或多个分类变量分解给定数量,请使用森伯斯特图。

假设想细分每个性别和一天中的时间的平均小费金额。这是一个按语句分组的双重语句,可以通过可视化而不是表输出有效地进行传递:

该图是交互式的,使可以单击并自行浏览每个类别。所需要做的就是定义所有类别,声明它们之间的层次结构(请参见代码中的parents参数)并分配相应的值,这将是group by语句的输出。

代码语言:javascript
复制
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()

现在,在层次结构中添加另一层:

为此,将涉及三个类别变量的另一组语句添加到另一个值中。

代码语言:javascript
复制
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.平行类别

探索分类变量之间关系的另一种好方法是此流程图。可以随时随地拖放,突出显示和浏览值,这非常适合演示。

代码语言:javascript
复制
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.平行坐标

平行坐标图是以上图的连续版本。在这里,每个和弦代表一个观察。这是一个出色的工具,可用于发现离群值(与其余数据隔离的单线程),聚类,趋势和冗余变量(例如,如果每个观察值的两个变量具有相似的值,则它们将位于水平线上并表示冗余) 。

代码语言:javascript
复制
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.仪表图和指标

量表仅用于美学。它们是报告某些成功指标或KPI并将其与目标关联的好方法。

指标在业务和咨询方面非常有用。它们通过文字标记来补充视觉效果,吸引观众的注意力并传达增长指标。

代码语言:javascript
复制
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()
代码语言:javascript
复制
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()

就是这样!

希望觉得这个有帮助。待在家里,保持安全,保持生产力。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 相约机器人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档