By IBM
0.篇首
上图是我在Coursera在线课程 What is data science(produced by IBM)的一篇阅读材料中截取下来的。正如文中所述:Digital revolution has touched every aspect of our lives. 请各位Data Scientist 做好准备!
1.直方图
直方图(Histogram),又称质量分布图,是一种统计报告图,是数值数据分布的精确图形表示。 这是一个连续变量(定量变量)的概率分布的估计,并且被 Karl Pearson 首先引入。
在本文中我们会继续使用上篇文章Friendism:Python数据分析01-Iris鸢尾花数据集zhuanlan.zhihu.com
所使用的 seaborn和 matplotlib 来完成直方图的绘制。
其中seaborn函数原型如下:
seaborn.distplot(a, bins=None, hist=True,
kde=True, rug=False, fit=None,
hist_kws=None, kde_kws=None, rug_kws=None,
fit_kws=None, color=None, vertical=False,
norm_hist=False, axlabel=None,
label=None, ax=None)
bins: 指定直方图规格,若为None,则使用Freedman-Diaconis规则,该规则对数据中的离群值不太敏感,可能更适用于重尾分布的数据。
hist:bool
是否绘制(标准化)直方图
kde:bool
是否绘制高斯核密度估计图
rug:bool
是否在支撑轴上绘制rugplot()图
{hist,kde,rug,fit} _kws:字典
底层绘图函数的关键字参数
color:matplotlib color
该颜色可以绘制除了拟合曲线之外的所有内容
vertical:bool
如果为True,则观察值在y轴上,即水平横向的显示
导入seaborn和 matplotlib以及数据集 Iris如下:
from __future__ import division
import pandas as pd
# We'll also import seaborn, a Python graphing library
import warnings # current version of seaborn generates a bunch of warnings that we'll ignore
warnings.filterwarnings("ignore")
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="whitegrid", color_codes=True)
# Next, we'll load the Iris flower dataset, which is in the "../input/" directory
iris = pd.read_csv("/Users/jay/Desktop/datasets/iris/Iris.csv") # the iris dataset is now a Pandas DataFrame
# Let's see what's in the iris data - Jupyter notebooks print the result of the last thing you do
iris.head()
接下来绘制直方图:先用sns.FacetGrid画出轮廓,括号中指定数据集,col为指定column,即表的列
然后用map填充内容,plt.hist指定画图类型为直方图,横坐标为SepalLengthCm
绘制直方图代码如下:
g = sns.FacetGrid(iris, col="Species")
g = g.map(plt.hist, "SepalLengthCm", bins=20,color="r")
得出直方图如下:三种鸢尾花的SepalLength分布
2.核密度估计图(Kernel Density Estimation, KDE)
KDE是在概率论中用来估计未知的密度函数,属于非参数检验方法之一,由Rosenblatt (1955)和Emanuel Parzen(1962)提出,又名Parzen窗(Parzen window)。Ruppert和Cline基于数据集密度函数聚类算法提出修订的核密度估计方法。
但是。。。我找了很多资料,也并没有很读懂KDE(可能还是高数不行的锅),所以我就不给大家乱解释了,希望有统计学的朋友,在看完文章后给我上上课,我再在文章中给大家做补充。尽管如此,在本次项目中使用KDE还是能看出一些东西,废话不多说,上代码!
# A final seaborn plot useful for looking at univariate relations is the kdeplot,
# which creates and visualizes a kernel density estimate of the underlying feature
sns.FacetGrid(iris, hue="Species", size=6) \
.map(sns.kdeplot, "PetalLengthCm") \
.add_legend()
hue="species"# 设置参数hue,分类显示
sns.kdeplot # 画出KDE图
g.add_legend() # 加注释
注意:文中用了"\",是因为知乎的代码块宽度不够,使用了"\"续行符,其实是可以作为完整的一句代码写完的。
然后,上图!以PetalLengthCm为横坐标的KDE图
我们可以很清晰地看到不同种类的鸢尾花在PetalLength上有很大差别。其中Setosa几乎不和另外两种鸢尾花重合。
3.总结
尽管我对KDE的用法还不是很熟练,但是画出来是很重要的一步。代码很简单,没有出过报错,本篇的重点还是统计学的一些数学概念和图表,需要大家一起来学习一起来进步。
参考链接:非参数估计:核密度估计KDE - bonelee - 博客园www.cnblogs.com
作者:钴铬氢气
13/08/2020