五分钟入门数据可视化_python

在数据科学中,有多种工具可以进行可视化。在本文中,我(毛利)展示了使用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 np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 数据准备
N = 1000
x = 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()  

运行结果:

Matplotlib:

五分钟入门数据可视化_python_02Matplotlib

seaborn:

五分钟入门数据可视化_python_03seaborn

折线图:

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

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

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

例子:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 数据准备
x = [2010201120122013201420152016201720182019]
y = [53620171619303235]
# 使用 Matplotlib 画折线图
plt.plot(x, y)
plt.show()
# 使用 Seaborn 画折线图
df = pd.DataFrame({'x': x, 'y': y})
sns.lineplot(x="年", y="月", data=df)
plt.show()

运行结果:

Matplotlib:

五分钟入门数据可视化_python_04Matplotlib

seaborn:

五分钟入门数据可视化_python_05seaborn

如果要修改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()

seaborn:

五分钟入门数据可视化_python_06seaborn

直方图:

直方图是比较常见的视图,它是把横坐标等分成了一定数量的小区间,这个小区间也叫作“箱子”,然后在每个“箱子”内用矩形条(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 np
import pandas as pd
import matplotlib.pyplot as plt
import 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()

运行结果:

Matplotlib:

五分钟入门数据可视化_python_07Matplotlib

seaborn:

五分钟入门数据可视化_python_08seaborn五分钟入门数据可视化_python_09seaborn

条形图

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

在 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 plt
import seaborn as sns
# 数据准备
x = ['Cat1''Cat2''Cat3''Cat4''Cat5']
y = [548127]
# 用 Matplotlib 画条形图
plt.bar(x, y)
plt.show()
# 用 Seaborn 画条形图
sns.barplot(x, y)
plt.show()

运行结果:

Matplotlib:

五分钟入门数据可视化_python_10Matplotlib

seaborn:

五分钟入门数据可视化_python_11seaborn

箱型图:

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

箱线图,又称盒式图,由五个数值点组成:最大值 (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()

运行结果:

Matplotlib:

五分钟入门数据可视化_python_12Matplotlib

seaborn:

五分钟入门数据可视化_python_13seaborn

饼图

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

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

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

例子:

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

运行结果:

Matplotlib:

五分钟入门数据可视化_python_14Matplotlib


总结

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

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

五分钟入门数据可视化_python_15可视化知识点

看到这里,能不能给个面子关注下

五分钟入门数据可视化_python_16


五分钟入门数据可视化_python_17