五分钟入门数据可视化,就是这么简单

image

@Author:Runsen

在数据科学中,有多种工具可以进行可视化。在本文中,我(毛利)展示了使用Python来实现的各种可视化图表。

Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型的2D图表和一些基本的3D图表。

主要的可视化视图

比较:比较数据间各类别的关系,或者是它们随着时间的变化趋势,比如折线图;

联系:查看两个或两个以上变量之间的关系,比如散点图;

构成:每个部分占整体的百分比,或者是随着时间的百分比变化,比如饼图;

分布:关注单个变量,或者多个变量的分布情况,比如直方图。

单变量可视化视图:

一次值关注一个变量。如我们一次只关注身高变量,来看身高的取值分布,而暂时忽略其他变量。

多变量可视化视图:

可以让一张图同时查看两个以上的变量,比如“身高”和“年龄”,你可以理解是同一个人的两个参数,这样在同一张图中可以看到每个人的“身高”和“年龄”的取值,从而分析出这两个变量之前是否存在某种联系。

离散变量和连续变量:

离散变量是指其数值只能用自然数或整数单位计算的则为离散变量. 例如,企业个数,职工人数,设备台数等,只能按计量单位数计数,这种变量的数值一般用计数方法取得. 反之,在一定区间内可以任意取值的变量叫连续变量,其数值是连续不断的,相邻两个数值可作无限分割,即可取无限个数值.

针对离散变量我们可以使用常见的条形图和饼图完成数据的可视化工作,那么,针对数值型变量,我们也有很多可视化的方法,例如箱线图、直方图、折线图、面积图、散点图等等。

散点图:

引入工具包,Matplotlib的pyplot包

 import matplotlib.pyplot as plt

在工具包引用后,画散点图,需要使用 plt.scatter(x, y, marker=None) 函数。

x、y 是坐标,marker 代表了标记的符号。比如“x”、“>”或者“o”。选择不同的 marker,呈现出来的符号样式也会不同(就是以指定的符号当成点画图),你可以自己试一下。

或使用工具包seaborn

import seaborn as sns

在引用 seaborn 工具包之后,就可以使用 seaborn 工具包的函数了。如果想要做散点图,可以直接使用 sns.jointplot(x, y, data=None, kind=‘scatter’) 函数。

其中 x、y 是 data 中的下标。data 就是我们要传入的数据,一般是 DataFrame 类型。kind 这类我们取 scatter,代表散点的意思。

例子:

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns# 数据准备N = 1000x = np.random.randn(N)y = np.random.randn(N)# 用 Matplotlib 画散点图plt.scatter(x,y,marker="x")plt.show()#用seaborn画图df=pd.DataFrame({'x':x,'y':y})sns.joinplot(x='x',y='y',data=df,kind='scatter',marker='x')#sns还是要借助pyplot来打印图的 其自身无show方法plt.show()  

运行结果:
image
image

折线图:

折线图可以用来表示数据随着时间变化的趋势。

在 Matplotlib 中,我们可以直接使用 plt.plot() 函数,当然需要提前把数据按照 x 轴的大小进行排序,要不画出来的折线图就无法按照 x 轴递增的顺序展示。

在 Seaborn 中,我们使用 sns.lineplot (x, y, data=None) 函数。其中 x、y 是 data 中的下标。data 就是我们要传入的数据,一般是 DataFrame 类型。

例子:

import pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns# 数据准备x = [2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019]y = [5, 3, 6, 20, 17, 16, 19, 30, 32, 35]# 使用 Matplotlib 画折线图plt.plot(x, y)plt.show()# 使用 Seaborn 画折线图df = pd.DataFrame({'x': x, 'y': y})sns.lineplot(x="年", y="月", data=df)plt.show()

运行结果:

image
image

如果要修改X和Y轴的参数需要这样写代码 df中的参数名字和lineplot中的参数的一一对应的,同时lineplot中的year就是x轴的名字,money就是y轴的名字

df = pd.DataFrame({'year': x, 'money': y})sns.lineplot(x="year", y="money", data=df)plt.show()

直方图:

直方图是比较常见的视图,它是把横坐标等分成了一定数量的小区间,这个小区间也叫作“箱子”,然后在每个“箱子”内用矩形条(bars)展示该箱子的箱子数(也就是 y 值),这样就完成了对数据集的直方图分布的可视化。

在 Matplotlib 中,我们使用 plt.hist(x, bins=10) 函数,其中参数 x 是一维数组,bins 代表直方图中的箱子数量,默认是 10。

在 Seaborn 中,我们使用 sns.distplot(x, bins=10, kde=True) 函数。其中参数 x 是一维数组,bins 代表直方图中的箱子数量,kde 代表显示核密度估计,默认是 True,我们也可以把 kde 设置为 False,不进行显示。核密度估计是通过核函数帮我们来估计概率密度的方法。

例子:

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns# 数据准备a = np.random.randn(100)s = pd.Series(a) # 用 Matplotlib 画直方图plt.hist(s)plt.show()# 用 Seaborn 画直方图sns.distplot(s, kde=False)plt.show()sns.distplot(s, kde=True)plt.show()

运行结果:
image
image
image

条形图

条形图可以帮我们查看类别的特征。在条形图中,长条形的长度表示类别的频数,宽度表示类别。

在 Matplotlib 中,我们使用 plt.bar(x, height) 函数,其中参数 x 代表 x 轴的位置序列,height 是 y 轴的数值序列,也就是柱子的高度。

在 Seaborn 中,我们使用 sns.barplot(x=None, y=None, data=None) 函数。其中参数 data 为 DataFrame 类型,x、y 是 data 中的变量。

例子:

import matplotlib.pyplot as pltimport seaborn as sns# 数据准备x = ['Cat1', 'Cat2', 'Cat3', 'Cat4', 'Cat5']y = [5, 4, 8, 12, 7]# 用 Matplotlib 画条形图plt.bar(x, y)plt.show()# 用 Seaborn 画条形图sns.barplot(x, y)plt.show()

运行结果:
image
image

箱型图:

它可以帮我们分析出数据的差异性、离散程度和异常值等。

箱线图,又称盒式图,由五个数值点组成:最大值 (max)、最小值 (min)、中位数 (median) 和上下四分位数 (Q3, Q1)。

在 Matplotlib 中,我们使用 plt.boxplot(x, labels=None) 函数,其中参数 x 代表要绘制箱线图的数据,labels 是缺省值,可以为箱线图添加标签。

在 Seaborn 中,我们使用 sns.boxplot(x=None, y=None, data=None) 函数。其中参数 data 为 DataFrame 类型,x、y 是 data 中的变量。

例子:

# 数据准备# 生成 0-1 之间的 10*4 维度数据data=np.random.normal(size=(10,4)) lables = ['A','B','C','D']# 用 Matplotlib 画箱线图plt.boxplot(data,labels=lables)plt.show()# 用 Seaborn 画箱线图df = pd.DataFrame(data, columns=lables)sns.boxplot(data=df)plt.show()

运行结果:

在这里插入图片描述

<figcaption style="margin-top: 5px; text-align: center; color: #888; font-size: 14px;">在这里插入图片描述</figcaption>

在这里插入图片描述

<figcaption style="margin-top: 5px; text-align: center; color: #888; font-size: 14px;">在这里插入图片描述</figcaption>

饼图

饼图是常用的统计学模块,可以显示每个部分大小与总和之间的比例。在 Python 数据可视化中,它用的不算多。我们主要采用 Matplotlib 的 pie 函数实现它。

在 Matplotlib 中,我们使用 plt.pie(x, labels=None) 函数,其中参数 x 代表要绘制饼图的数据,labels 是缺省值,可以为饼图添加标签。

这里我设置了 lables 数组,分别代表高中、本科、硕士、博士和其他几种学历的分类标签。nums 代表这些学历对应的人数。

例子:

  import matplotlib.pyplot as plt  # 数据准备  nums = [25, 37, 33, 37, 6]  labels = ['High-school','Bachelor','Master','Ph.d', 'Others']  # 用 Matplotlib 画饼图  plt.pie(x = nums, labels=labels)  plt.show()

运行结果:

image

总结

在 Python 生态系统中绘制数据是一件好事也是一件坏事。绘制数据的工具有很多可供选择既是一件好事也是一件坏事,尽力搞清楚哪一个工具适合你取决于你要实现什么。在一定程度上,你需要尝试各种工具老弄清哪种工具适合你,我觉得没有哪一个工具是最好或最坏。

下面是可视化知识点的思维导图,希望大家转发收藏

可视化知识点

image
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,874评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,102评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,676评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,911评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,937评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,935评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,860评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,660评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,113评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,363评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,506评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,238评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,861评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,486评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,674评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,513评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,426评论 2 352

推荐阅读更多精彩内容