()
如何使用单行制作美观,完全交互的图
沉没成本的谬论, 是诸多有害认知偏见里, 会让人类沦为猎物的其中之一。它指的是, 我们有着倾向, 会把时间以及资源, 继续投入到失败的事业当中 , 原因在于, 我们已然耗费了大量时间, 去做必定会失败的事情。沉没成本表明, 我们不应在糟糕的工作上停留更长时间, 即便它明显行不通 , 即便要把项目拒之门外。确实如此 , 当有机会使用效率更高 、交互性更佳且外观更好的替代方案时 , 就没有理由再继续使用乏味 、过时的绘图库。
在过去几个月里, 我察觉到使用的仅有缘由, 是我耗时数百小时去钻研复杂语法, 这种复杂性致使数小时的受挫之感, 搞清楚怎样格式化日期或者增添第二个y轴, 所幸此时是绘图的绝佳契机, 在探究了各类选择后, 就易用性、文档以及功能来讲, 分明的胜出者是可开发的库, 在本文当中, 我们会深入探察绘图, 学习怎样在更短时间里制作更优的绘图, 通常只需一行代码。
(
本文所有代码于其上得以提供, 这些全都是交互式的图表, 能够在上予以查看。
of ()
简要概述
有着基于.js构建, 且.js又是基于d3.js构建而成之开源基础的软件包。我们会在针对数据框设计的内容里称呼其为包。所以, 我们整个技术栈呈现为cufflinks> plotly>.js> d3.js, 这表明着在拥有让d3令人赞叹不已的交互式图形功能之际, 还能具备编码的效率。
有这样一家公司, 它是图形公司, 能提供多种产品, 还有开源工具, 其库可供免费使用, 可在离线状况下制作毫无限制数量的图表, 不过在在线形势下最多仅能制作25个图表用于和世界分享。
本文里的全部工作, 皆是于……之中达成了的, 而且于离线状态下运转存有绘图+。借由pip开展安装以及……之后, 以……样式导入以下内容用以在……之内运行:
# Standard plotly imports import plotly.plotly as py import plotly.graph_objs as go from plotly.offline import iplot, init_notebook_mode # Using plotly + cufflinks in offline mode import cufflinks cufflinks.go_offline(connected=True) init_notebook_mode(connected=True)
单变量分布:直方图和箱线图
单变量图, 它是开启分析的标准方式, 直方图呢, 是用来绘制分布图的首选图形, 虽说存在一些问题。在这儿, 运用我的中型文章统计数据, 您瞧, 可在此处查看怎样获取自己的统计数据, 或者也能在此处使用我的统计数据, 并借此制作文章点赞数量的交互式直方图, 而df是标准的数据框, 接下来:
df['claps'].iplot( kind='hist', xTitle='claps', yTitle='count', title='Claps Distribution' )
made with +
对于那些惯于使用的用户, 我们要做的便是再添一个字母, 即用iplot替代plot, 如此我们会得到一个样貌更佳、更具交互性的图表!我们能够单击数据去获取更多详尽信息, 把它放大至绘图的各个部位, 而后如同稍后会看到的那般,挑选不同的类别来突出显示。
如果我们想绘制重叠的直方图,那很简单:
df[['time_started', 'time_published']].iplot( kind='hist', histnorm='percent', barmode='overlay', xTitle='Time of Day', yTitle='(%) of Articles', title='Time Started and Time Published' )
借助一些操作,我们可以绘制一个小图:
# Resample to monthly frequency and plot df2 = df[['view','reads','published_date']].\ set_index('published_date').\ resample('M').mean() df2.iplot(kind='bar', xTitle='Date', yTitle='Average', title='Monthly Average Views and Reads' )如我们所见到的, 我们能够把的功能跟+进行结合。对于每一个故事, 按照出版物发布的粉丝的箱线图, 我们加以使用, 随后进行绘制:
df.pivot(columns='publication', values='fans').iplot( kind='box', yTitle='fans', title='Fans Distribution by Publication' )
我们能够依据需求去浏览子集数据, 这便是交互所具备的好处。箱形图里面存在许多信息, 而且要是无法看见数字的话, 那大部分信息我们将会遗漏!
散点图
核心是大多数分析里 的散点图, 它能让我们看到变量随时间的变化, 还能看到两个或者多个变量之间的关系。
时间序列
在现实世界里, 有相当一部分数据是具备时间元素的。幸运的是, +的设计对时间序列的可视化予以了考虑。我们来给我的TDS文章制作一个数据框, 接着瞧瞧趋势会怎样变化。
# Create a dataframe of Towards Data Science Articles tds = df[df['publication'] == 'Towards Data Science'].\ set_index('published_date') # Plot read time as a time series tds[['claps', 'fans', 'title']].iplot( y='claps', mode='lines+markers', secondary_y = 'fans', secondary_y_title='Fans', xTitle='Date', yTitle='Claps', text='title', title='Fans and Claps over Time' )在这里,我们正在一行中做很多不同的事情:
· 自动获取格式正确的时序X轴
· 添加辅助y轴,因为我们的变量具有不同的范围
· 添加文章标题作为悬停信息
有关更多信息,我们还可以轻松添加文本注释:
tds_monthly_totals.iplot( mode='lines+markers+text', text=text, y='word_count', opacity=0.8, xTitle='Date', yTitle='Word Count', title='Total Word Count by Month' )
with
对于由第三个类别变量着色的双变量散点图,我们使用:
df.iplot( x='read_time', y='read_ratio', # Specify the category categories='publication', xTitle='Read Time', yTitle='Reading Percent', title='Reading Percent vs Read Ratio by Publication' )
采取运用指定布局的那种对数轴, (关于布局详细情形可去查看文档获取), 并且借助数值变量去调节气泡大小, 把情况弄得更复杂些:
tds.iplot( x='word_count', y='reads', size='read_ratio', text=text, mode='markers', # Log xaxis layout=dict( xaxis=dict(type='log', title='Word Count'), yaxis=dict(title='Reads'), title='Reads vs Log Word Count Sized by Read Ratio'))
借助去开展更多的工作, (至于相关详细信息, 需依照笔记本去查看), 进一步地我们能够在一张图表之上放置四个变量, (然而并不建议进行如此这般的操作)!
像以前那般, 我们能够把与 + 一同运用, 借此获取很有用的plot。
df.pivot_table( values='views', index='published_date', columns='publication').cumsum().iplot( mode='markers+lines', size=8, symbol=[1, 2, 3, 4, 5], layout=dict( xaxis=dict(title='Date'), yaxis=dict(type='log', title='Total Views'), title='Total Views over Time by Publication'))
倘若探寻进一步功能的更多范例予以参阅的话, 便可去瞅一瞅笔记本或者文档。我们能够借助于一行代码, 而且依旧拥有全部交互功能, 把文本注释、参考线以及最佳拟合线增添至绘图里面。
高级图
呈现给您的这些图表, 您或许不常应用, 当下就要将其予以说明, 它们给人的感触会较深。其极具惊人特点的功能, 就连实现保持于一行代码这儿, 都要予以采用 , 甚至还要用到。
散点矩阵
很多变量之间的关系, 我们要去探索时, 散点图, 也就是splom, 是个不错的选择。
import plotly.figure_factory as ff figure = ff.create_scatterplotmatrix( df[['claps', 'publication', 'views', 'read_ratio','word_count']], diag='histogram', index='publication')
即使该图是完全互动的,也允许我们探索数据。
关联热图
为了将数值变量彼此间的相关性直观呈现出来, 我们对相关性展开计算, 而后打造带有注释的热图:
corrs = df.corr() figure = ff.create_annotated_heatmap( z=corrs.values, x=list(corrs.columns), y=list(corrs.index), annotation_text=corrs.round(2).values, showscale=True)
plot清单多得数不过来, 还存在几个主题, 运用它们我们能够轻易取得截然不同的样式, 比如说, 接下来在“space”主题里我们有一个比率图, 在另一个里面有一个展布图:
我们还获得了3D图(表面和气泡):
对于那些喜欢的人,您甚至可以制作饼图:
在 Chart 中进行编辑
笔记本上画这些图时, 图形右下方能看到个小链接, 显示“导出到 plot.ly”。单击该链接, 会被带到 Chart, 这儿能在绘图上修饰, 用于最终演示。这时能添加注释, 指定颜色, 还要把所有内容清理干净, 获得不错形象。之后能在线发布图形, 这样任何人借链接就能找到它。
以下是我在Chart 中修改过的两个图表:
对于这里所提及的全部内容, 我们依旧未曾探寻到库的所有功能!我提议您一并查阅文档, 从而获取更为令人惊叹的图形。
of wind farms in ()
结论
对于沉没成本谬误而言, 其相当糟糕之处在意, 唯有当你退出此项工作之后, 才清楚自己究竟浪费了多少时日。所幸因我犯下长时间使用之错, 故你无需这般。
在考虑绘制库时,我们需要做一些事情:
· 单行代码图表快速探索
· 子集/调查数据的交互元素
· 可选择根据需要深入研究细节
· 轻松定制以进行最终演示
至当前, 于其中达成全部这些操作的最优之选是。借由 , 我们能够迅速开展可视化, 且凭借交互性助力我们更优地认识数据。此外, 容我们承认, 绘图理应属于数据科学里最为让人愉悦的部分之一!在别的库中, 绘图成了一件繁杂之事, 然而在其中, 绘制一幅出色的图表就变得令人欢快!
在一段时间内, 关于我的, 与在其中的, 一个情节。
已至2019年, 此刻应升级绘图库。之所以要升级, 是因其有助于在数据科学可视化里达成更高效率, 更具功能以及更美观的呈现效果。
这份文本, 是从Will所著的《The Next Level of Data in》直接翻译而来的, 供作参考时使用标点。
)