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

代码 代码 1337 人阅读 | 0 人回复

<
弁言

针对差别的数据规范战数据使命,我们该当怎样挑选适宜的数据可视化?
本文收拾整顿了数据可视化的典范套路,期望对您有所启示。

数据分类

起首,我们对数据规范停止阐发。
基于使命分类教的数据规范(Data Type By Task Taxonomy, TTT)中将数据分为7类,即一维线性数据、两维数据、三维数据、多维数据、工夫数据、树型数据战网状数据1,那七种数据规范所反应的是对理想的笼统。
此中一维数据、两维数据、三维数据、工夫数据各人皆很熟习,那里没有做赘述。


  • 多维数据: 普通有多个属性字段,能够暗示为下维空间的一个面,然后用三维集面图停止可视化。
  • 树构造: 普通用去表达条理干系,是一种经常使用的非线性数据构造。
  • 网状数据/图构造: 普通用去表达毗连干系,也是一种经常使用的非线性数据构造,经常使用节面毗连图及毗连矩阵停止暗示。网状数据(图构造)经常使用去表现天然天下战社会干系中的包罗战附属干系、构造疑息战逻辑启接干系等。

⭐️ 可视化办法选型

肯定数据规范以后,按照常睹的数据可视化需供,我们能够把可视化目的分为比力、干系、散布、组开四年夜类。
下图总结了按照需供阐发可采取的统计可视化办法。2
214929tf2fzlhlh8audkx8.jpg


✋ 可视化之前的数据处置

正在停止数据阐发战可视化之前,凡是要对庞大数据停止预处置,常睹数据处置以下2


  • 合并:将两个以上的属性合并成一个属性或工具,包罗有用简化数据、改动数据标准。
  • 采样:采样是统计教的底子办法,也是对数据停止挑选的次要手腕,对数据的开端探究战最初的数据阐发环节经常被采取。
  • 降维:维度越下,数据散正在维度空间的散布越稠密,从而削弱了数据散的稀度战距离的界说对数据散类战离群值检测等操纵的影响。将数据属性的维度低落,有助于打点维度劫难,削减数据处置的工夫战内乱存耗损,更加有用天可视化数据,低落噪声或消弭无闭特性等。
  • 特性子散挑选:从数据会合挑选部门数据属性值能够消弭冗余的特性、取使命无闭的特性,包罗暴力枚举法、特性主要性挑选、紧缩感知实际的稠密表达办法。
  • 特性天生:特性天生是指正在本初数据的底子上构建新的能反应数据散主要疑息的属性,包罗特性抽与、将数据使用到新空间、基于特性交融取特性变更的特性机关。
  • 离集化取两值化:将数据散按照散布分别为多少个子类,构成对数据散的离集表达。
  • 属性变更:将某个属性的一切的大要值逐个映照到另外一个空间,如指数变更、与尽对值等。

✍ 经常使用可视化代码(python)

数据预处置完成以后,数据可视化既能够本人编程完成,也能够借助现有的可视化东西。
上面收拾整顿了单变量/多变量停止可视化阐发的经常使用代码,基于matplotlib战seaborn完成。3
数据概览

  1. import pandas as pd
  2. import numpy as np
  3. import seaborn as sns
  4. import matplotlib.pyplot as plt
  5. df=sns.load_dataset(&#39;titanic&#39;)
  6. # 检察前5条数据
  7. df.head()
  8. # 检察数据量
  9. print(df.shape)
  10. # 检察数值型变量的统计疑息,包罗数目、均值、尺度好、最年夜最小值、分位数
  11. df.describe()
复造代码
相干性图

相干性图能够反应两个变量之间的相干标的目的,正在画图中借需求增长相干系数,以更曲不雅天判定相干水平。
  1. from scipy.stats import pearsonr
  2. sns.jointplot(x="pclass",y="age",data=df,kind="reg",stat_func=pearsonr)
复造代码
热力争

热力争经由过程色块的色彩、深浅去暗示差别变量之间的相干性。
  1. f=df[[&#39;age&#39;,&#39;fare&#39;,&#39;sibsp&#39;]].corr()
  2. sns.heatmap(f,annot=True)
复造代码
边沿曲圆图

  1. # Import Data
  2. df = pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/mpg_ggplot2.csv")
  3. # Create Fig and gridspec
  4. fig = plt.figure(figsize=(16, 10), dpi= 80)
  5. grid = plt.GridSpec(4, 4, hspace=0.5, wspace=0.2)
  6. # Define the axes
  7. ax_main = fig.add_subplot(grid[:-1, :-1])
  8. ax_right = fig.add_subplot(grid[:-1, -1], xticklabels=[], yticklabels=[])
  9. ax_bottom = fig.add_subplot(grid[-1, 0:-1], xticklabels=[], yticklabels=[])
  10. # Scatterplot on main ax
  11. ax_main.scatter(&#39;displ&#39;, &#39;hwy&#39;, s=df.cty*4, c=df.manufacturer.astype(&#39;category&#39;).cat.codes, alpha=.9, data=df, cmap="tab10", edgecolors=&#39;gray&#39;, linewidths=.5)
  12. # histogram on the right
  13. ax_bottom.hist(df.displ, 40, histtype=&#39;stepfilled&#39;, orientation=&#39;vertical&#39;, color=&#39;deeppink&#39;)
  14. ax_bottom.invert_yaxis()
  15. # histogram in the bottom
  16. ax_right.hist(df.hwy, 40, histtype=&#39;stepfilled&#39;, orientation=&#39;horizontal&#39;, color=&#39;deeppink&#39;)
  17. # Decorations
  18. ax_main.set(title=&#39;Scatterplot with Histograms \n displ vs hwy&#39;, xlabel=&#39;displ&#39;, ylabel=&#39;hwy&#39;)
  19. ax_main.title.set_fontsize(20)
  20. for item in ([ax_main.xaxis.label, ax_main.yaxis.label] + ax_main.get_xticklabels() + ax_main.get_yticklabels()):
  21.     item.set_fontsize(14)
  22. xlabels = ax_main.get_xticks().tolist()
  23. ax_main.set_xticklabels(xlabels)
  24. plt.show()
复造代码
成对图

  1. # Load Dataset
  2. df = sns.load_dataset(&#39;iris&#39;)
  3. # Plot
  4. plt.figure(figsize=(10,8), dpi= 80)
  5. sns.pairplot(df, kind="reg", hue="species")
  6. plt.show()
复造代码
稀度直线+曲圆图

  1. # Import Data
  2. df = pd.read_csv("https://github.com/selva86/datasets/raw/master/mpg_ggplot2.csv")
  3. # Draw Plot
  4. plt.figure(figsize=(13,10), dpi= 80)
  5. sns.distplot(df.loc[df[&#39;class&#39;] == &#39;compact&#39;, "cty"], color="dodgerblue", label="Compact", hist_kws={&#39;alpha&#39;:.7}, kde_kws={&#39;linewidth&#39;:3})
  6. sns.distplot(df.loc[df[&#39;class&#39;] == &#39;suv&#39;, "cty"], color="orange", label="SUV", hist_kws={&#39;alpha&#39;:.7}, kde_kws={&#39;linewidth&#39;:3})
  7. sns.distplot(df.loc[df[&#39;class&#39;] == &#39;minivan&#39;, "cty"], color="g", label="minivan", hist_kws={&#39;alpha&#39;:.7}, kde_kws={&#39;linewidth&#39;:3})
  8. plt.ylim(0, 0.35)
  9. # Decoration
  10. plt.title(&#39;Density Plot of City Mileage by Vehicle Type&#39;, fontsize=22)
  11. plt.legend()
  12. plt.show()
复造代码
收集可视化

树构造、图构造的可视化,能够用networkx去完成4
  1. import matplotlib.pyplot as plt
  2. import networkx as nx
  3. G = nx.petersen_graph()
  4. subax1 = plt.subplot(121)
  5. nx.draw(G, with_labels=True, font_weight=&#39;bold&#39;)
  6. subax2 = plt.subplot(122)
  7. nx.draw_shell(G, nlist=[range(5, 10), range(5)], with_labels=True, font_weight=&#39;bold&#39;)
复造代码
214929o0p12xcxxu22r13z.jpg


⭐️ 经常使用可视化东西

除本人编程完成,我们也能够借助成生的可视化硬件,快速建造标致的图表。
Microsoft Excel

  Office Power Map示例
Microsoft Power Map for Excel能够正在三维天球或自界说舆图上画造天文战时态数据,显现那些数据,并创立能够取其别人分享的视觉浏览。
214929mtfv3zp9bghoehyb.jpg

ECharts

  https://echarts.apache.org/zh/index.html
国产可视化库,使用普遍,免费,开源。
214930r1j9hh9t2j1022s2.jpg

Tableau

  https://www.tableau.com/
BI范畴经常使用的可视化仄台,环球范畴使用很广的一款贸易硬件。
214930taoll2lfoaor8q2e.jpg

Visualization Free

  https://www.visualizefree.com/
一款免费的可视化东西,能够经由过程拖放设想器构建交互式可视化。
214930zlma26mkm6zjk6mm.jpg



免责声明:假如进犯了您的权益,请联络站少,我们会实时删除侵权内乱容,感谢协作!
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请您发送邮箱:Cdnjson@163.com提供相关证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
回复 关闭延时

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则