资讯专栏INFORMATION COLUMN

1个数据可视化的「百搭套路」,从此打开新思路

lx1036 / 2185人阅读

摘要:国产可视化库,应用广泛,免费,开源。下次面对数据分析任务,就可以参考可视化方法选型中的思路,根据你的需求,选择适当的图表进行可视化。

引言

针对不同的数据类型和数据任务,我们应该如何选择合适的数据可视化?

本文整理了数据可视化的经典套路,希望对你有所启发。


数据分类

首先,我们对数据类型进行分析。

基于任务分类学的数据类型(Data Type By Task Taxonomy, TTT)中将数据分为7类,即一维线性数据、二维数据、三维数据、多维数据、时间数据、树型数据和网状数据1,这七种数据类型所反映的是对现实的抽象。

其中一维数据、二维数据、三维数据、时间数据大家都很熟悉,这里不做赘述。

  • 多维数据: 一般有多个属性字段,可以表示为高维空间的一个点,然后用三维散点图进行可视化。

  • 树结构: 一般用来表达层次关系,是一种常用的非线性数据结构。

  • 网状数据/图结构: 一般用来表达连接关系,也是一种常用的非线性数据结构,常用节点连接图及连接矩阵进行表示。网状数据(图结构)常用来表现自然世界和社会关系中的包含和从属关系、组织信息和逻辑承接关系等。


⭐️ 可视化方法选型

确定数据类型之后,根据常见的数据可视化需求,我们可以把可视化目标分为比较、关系、分布、组合四大类。

下图总结了根据需求分析可采用的统计可视化方法。2


✋ 可视化之前的数据处理

在进行数据分析和可视化之前,通常要对复杂数据进行预处理,常见数据处理如下2

  • 合并:将两个以上的属性合并成一个属性或对象,包括有效简化数据、改变数据尺度。

  • 采样:采样是统计学的基本方法,也是对数据进行选择的主要手段,对数据的初步探索和最后的数据分析环节经常被采用。

  • 降维:维度越高,数据集在维度空间的分布越稀疏,从而减弱了数据集的密度和距离的定义对数据聚类和离群值检测等操作的影响。将数据属性的维度降低,有助于解决维度灾难,减少数据处理的时间和内存消耗,更为有效地可视化数据,降低噪声或消除无关特征等。

  • 特征子集选择:从数据集中选择部分数据属性值可以消除冗余的特征、与任务无关的特征,包括暴力枚举法、特征重要性选择、压缩感知理论的稀疏表达方法。

  • 特征生成:特征生成是指在原始数据的基础上构建新的能反映数据集重要信息的属性,包括特征抽取、将数据应用到新空间、基于特征融合与特征变换的特征构造。

  • 离散化与二值化:将数据集根据分布划分为若干个子类,形成对数据集的离散表达。

  • 属性变换:将某个属性的所有的可能值一一映射到另一个空间,如指数变换、取绝对值等。


✍ 常用可视化代码(python)

数据预处理完成之后,数据可视化既可以自己编程实现,也可以借助现有的可视化工具。

下面整理了双变量/多变量进行可视化分析的常用代码,基于matplotlib和seaborn实现。3

数据概览

import pandas as pdimport numpy as npimport seaborn as snsimport matplotlib.pyplot as pltdf=sns.load_dataset("titanic")# 查看前5条数据df.head()# 查看数据量print(df.shape)# 查看数值型变量的统计信息,包括数量、均值、标准差、最大最小值、分位数df.describe()

相关性图

相关性图可以反映两个变量之间的相关方向,在绘图中还需要增加相关系数,以更直观地判断相关程度。

from scipy.stats import pearsonrsns.jointplot(x="pclass",y="age",data=df,kind="reg",stat_func=pearsonr)

热力图

热力图通过色块的颜色、深浅来表示不同变量之间的相关性。

f=df[["age","fare","sibsp"]].corr()sns.heatmap(f,annot=True)

边际直方图

# Import Datadf = pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/mpg_ggplot2.csv")# Create Fig and gridspecfig = plt.figure(figsize=(16, 10), dpi= 80)grid = plt.GridSpec(4, 4, hspace=0.5, wspace=0.2)# Define the axesax_main = fig.add_subplot(grid[:-1, :-1])ax_right = fig.add_subplot(grid[:-1, -1], xticklabels=[], yticklabels=[])ax_bottom = fig.add_subplot(grid[-1, 0:-1], xticklabels=[], yticklabels=[])# Scatterplot on main axax_main.scatter("displ", "hwy", s=df.cty*4, c=df.manufacturer.astype("category").cat.codes, alpha=.9, data=df, cmap="tab10", edgecolors="gray", linewidths=.5)# histogram on the rightax_bottom.hist(df.displ, 40, histtype="stepfilled", orientation="vertical", color="deeppink")ax_bottom.invert_yaxis()# histogram in the bottomax_right.hist(df.hwy, 40, histtype="stepfilled", orientation="horizontal", color="deeppink")# Decorationsax_main.set(title="Scatterplot with Histograms /n displ vs hwy", xlabel="displ", ylabel="hwy")ax_main.title.set_fontsize(20)for item in ([ax_main.xaxis.label, ax_main.yaxis.label] + ax_main.get_xticklabels() + ax_main.get_yticklabels()):    item.set_fontsize(14)xlabels = ax_main.get_xticks().tolist()ax_main.set_xticklabels(xlabels)plt.show()

成对图

# Load Datasetdf = sns.load_dataset("iris")# Plotplt.figure(figsize=(10,8), dpi= 80)sns.pairplot(df, kind="reg", hue="species")plt.show()

密度曲线+直方图

# Import Datadf = pd.read_csv("https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv")# Draw Plotplt.figure(figsize=(13,10), dpi= 80)sns.distplot(df.loc[df["class"] == "compact", "cty"], color="dodgerblue", label="Compact", hist_kws={"alpha":.7}, kde_kws={"linewidth":3})sns.distplot(df.loc[df["class"] == "suv", "cty"], color="orange", label="SUV", hist_kws={"alpha":.7}, kde_kws={"linewidth":3})sns.distplot(df.loc[df["class"] == "minivan", "cty"], color="g", label="minivan", hist_kws={"alpha":.7}, kde_kws={"linewidth":3})plt.ylim(0, 0.35)# Decorationplt.title("Density Plot of City Mileage by Vehicle Type", fontsize=22)plt.legend()plt.show()

网络可视化

树结构、图结构的可视化,可以用networkx来实现4

import matplotlib.pyplot as pltimport networkx as nxG = nx.petersen_graph()subax1 = plt.subplot(121)nx.draw(G, with_labels=True, font_weight="bold")subax2 = plt.subplot(122)nx.draw_shell(G, nlist=[range(5, 10), range(5)], with_labels=True, font_weight="bold")


⭐️ 常用可视化工具

除了自己编程实现,我们也可以借助成熟的可视化软件,快速制作漂亮的图表。

Microsoft Excel

Office Power Map示例
Microsoft Power Map for Excel可以在三维地球或自定义地图上绘制地理和时态数据,显示这些数据,并创建可以与其他人分享的视觉浏览。

ECharts

https://echarts.apache.org/zh/index.html
国产可视化库,应用广泛,免费,开源。

Tableau

https://www.tableau.com/
BI领域常用的可视化平台,全球范围应用很广的一款商业软件。

Visualization Free

https://www.visualizefree.com/
一款免费的可视化工具,可以通过拖放设计器构建交互式可视化。


? 经典可视化案例

  • 风、气象、海洋状况的全球地图:https://earth.nullschool.net/zh-cn/

  • 标签云制作: https://tagul.com/

  • 全球最牛的28个大数据可视化应用案例:http://www.open-open.com/news/view/154a034/

  • 地理信息可视化开源库:http://mapv.baidu.com/


? 小结

  • 本文整理了数据可视化分析的整体思路,提供了常用代码和可视化工具。

  • 下次面对数据分析任务,就可以参考可视化方法选型中的思路,根据你的需求,选择适当的图表进行可视化。

  • 如果想要更漂亮的展示效果,可以借助成熟的可视化工具。

如果这篇文章对你有用的话,欢迎一键三连支持下博主~


  1. Shneiderman B . The Eyes Have It: A Task by Data Type Taxonomy for Information Visualizations. 2000. ↩︎

  2. 《大数据可视化》电子工业出版社 ↩︎ ↩︎

  3. https://www.machinelearningplus.com/plots/top-50-matplotlib-visualizations-the-master-plots-python/ ↩︎

  4. https://networkx.org/documentation/stable/tutorial.html ↩︎

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/118788.html

相关文章

  • 简聊初步尝试服务端渲染一些感想

    摘要:多多少少有些不开心的事觉得精力没有被投入在重点上创业公司遇到问题变成盲人摸象也许正常吧不过最近这段时间因为服务端的策略调整我开始做一些服务端渲染主要的站点是简聊的登录页面整体从切换到了以及做了一些整体项目结构统一的工作或者说一些思考我估计这 多多少少有些不开心的事, 觉得精力没有被投入在重点上创业公司遇到问题变成盲人摸象也许正常吧不过最近这段时间因为服务端的策略调整, 我开始做一些服务...

    Clect 评论0 收藏0
  • 十道简单算法题二【Java实现】

    摘要:前言清明不小心就拖了两天没更了这是十道算法题的第二篇了上一篇回顾十道简单算法题最近在回顾以前使用写过的数据结构和算法的东西,发现自己的算法和数据结构是真的薄弱,现在用改写一下,重温一下。 前言 清明不小心就拖了两天没更了~~ 这是十道算法题的第二篇了~上一篇回顾:十道简单算法题 最近在回顾以前使用C写过的数据结构和算法的东西,发现自己的算法和数据结构是真的薄弱,现在用Java改写一下,...

    Pluser 评论0 收藏0
  • NameSilo域名优惠码集合汇总(无套路且可支付宝付款)

    摘要:在这篇文章中,老蒋定期更新和整理域名优惠码域名优惠码。关于自动续费的问题账户支持支付宝付款的,我们可以在新注册或者续费等可以用支付宝付款。小时内关于域名退款的问题如果我们不小心域名注册错误,这个老蒋也是有过的。Namesilo域名注册商是老蒋比较喜欢的海外域名注册商之一。喜欢Namesilo商家的理由是从创办以来算是很少有套路域名商,不会因为新注册便宜续费贵,双向价格都是比较平均的。而有一些...

    Freeman 评论0 收藏0
  • 分享一下 软件测试面试历程和套路,真很实在

    摘要:软件测试自学秘诀面试失败一天,心态稳的一批,因为面试的全是外包人事帮我联系的公司,工资全都是一万以上,之前只有四五千的自己根本不觉得自己能胜任。 个人是去年年底零基础转行,两三千培训费学出来,学完后也是稀里糊涂,仅是知道功能测试就是找问题,其他接口,性能,数据库,python基础,虚拟机搭建网站都实现了课程展示那样。面试资...

    Lyux 评论0 收藏0
  • 首次公开,整理12年积累博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<