参考资料:python统计分析-托马斯
1、导入库和数据准备
# 导入库
# 用于数值处理的库
import numpy as np
import pandas as pd
import scipy as sp
from scipy import stats
# 用于绘图的库
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
# 数据准备
x=np.random.randn(500)
2、散点图
这是单变量数据最简单的展示方法,只要绘制出每个单独的点即可。相应的绘图命令如下:
# 实现代码一
plt.plot(x,'.')
# 实现代码二
plt.scatter(np.arange(len(x)),x)
注意:如果出现x轴只有少数离散值的情况(比如,第一组、第二组和第三组),那么将重叠的数据点稍微分散开(也叫作“增加抖动”)将会有助于展示每个数据点。
3、直方图
直方图提供了数据分布的一个很好的概览。如果除以总的数据点个数,便可得到相对频率直方图;如果只是将每个区间的顶部中点连起来,我们会得到一个相对频率的多边形。
plt.hist(x,bins=25)
直方图的绘制可参考:
python统计分析——直方图(sns.histplot)_sns.histplot函数-CSDN博客
python统计分析——直方图(plt.hist)-CSDN博客
4、核密度(kde)估计图
直方图有一个缺点,它是非连续的,并且它的形状严格取决于区间的宽度。为了活的平滑的概率密度,也就是描述一个事件在给定区间内被发现的可能性,我们可以使用核密度估计的方法。因此,正态分布被用作典型的核。核函数的宽度决定了平滑的程度。为了了解这是如何运作的,我们用下列6个数据点来构建直方图和核密度估计:
x=[-2.1,-1.3,-0.4,1.9,5.1,6.2]
对于直方图来说,首先水平轴被分割为覆盖数据范围的小区间。下图中,我们有6个宽度为2的区间。当有一个数据点落在某个区间内时,我们放一高度为1/12的箱子。如果不止一个数据点落入一个区间,我们就把箱子逐个堆起来。
对于核密度估计来说,我们对每一个数据点x,都放置一个方差为2.25的正态分布核。将核加起来形成核密度的估计。和离散的直方图相比较,核密度估计明显更加平滑。
核密度估计能够更快地收敛至潜在的连续型随机变量的密度。 作图代码可写为
sns.kdeplot(x)
核的窗宽h是一个决定我们在多大程度上来平滑掉每个事件的贡献的参数。在特定条件下,h的最佳选择可以认为是:
其中,是样本的标准偏差(西尔弗曼的经验法则)
5、累计频率
累计频率曲线表示的是低于某一特定值的数据的数量(或百分比)。该曲线对统计分析非常有帮助,比如当我们想知道包含所有值的95%的数据范围时。累计频率在比较两组或多组个体的值的分布情况时也非常有用。
当使用百分比点位的时候,累计频率还有个额外的好处,就是它有界:
。
x=np.random.randn(500)
plt.rcParams['font.family']='SimHei' # 用于设置图片正常显示中文
plt.plot(stats.cumfreq(x)[0])
plt.ylabel('累计频率') # 设置纵坐标轴标题
plt.xlabel('数据值') # 设置横坐标轴标题
6、误差条图
在比较数值的度量时,误差条图是展示均值和变异度的常用方法。值得注意的是,误差条图必须显式说明到底是标准差还是标准误。使用标准误有一个很好的特性:当基于标准误的两组误差条之间有重叠时,我们可以确定两组之间的均值没有统计学差异(p>0.05),反之则不一定成立。
index=np.arange(5)
y=index**2
errorBar=index/2 # 只是为了演示而非真实误差值
plt.errorbar(index,y,yerr=errorBar,fmt='o',capsize=5,capthick=3)
6、箱形图
箱形图经常在学术刊物中使用,用来表示两组或多组的数值。箱子的地图和顶部分别表示第一分位数和第三分位数,而箱子内部中间的线表示中位数。值得注意的是上下须,存在着不同的习惯用法。最常见的形式是,下面的须在第一分位数外1.5×IQR(四分位距)范围内的最低值,而上面的须表示在第三分位数外1.5×IQR(四分位距)范围内的最高值;离群值(在上下须之外)被单独绘制,这也是检验离群值的一种方法。另一个习惯用法是,须表示整个数据的范围。
plt.boxplot(x,sym='*')
箱形图可以和核密度估计图联合起来绘制,生成小提琴图,其中纵轴和箱线图一样,但在水平方向上额外绘制了对称的核密度估计图。
# 准备数据
nd=stats.norm # nd为标准正态分布总体
data=nd.rvs(size=(100)) # 从nd中抽取100个数据
nd2=stats.norm(loc=3,scale=1.5) # nd2为均值为3,标准差为1.5的正态分布总体
data2=nd2.rvs(size=(100)) # 从nd2中抽取100个数值
# 绘制小提琴图
plt.rcParams['axes.unicode_minus']=False # 设置坐标轴负号正常显示
df=pd.DataFrame({
'Girls':data,'Boys':data2
})
sns.violinplot(df)
作图参考:
python统计分析——小提琴图(sns.violinplot)-CSDN博客
python统计分析——小提琴图(plt.violinplot)_plt violin-CSDN博客
python统计分析——箱线图(df.boxplot)_df.boxplot()-CSDN博客
python统计分析——箱线图(sns.boxplot)_python sns.boxplot-CSDN博客
python统计分析——箱线图(plt.boxplot)_python 箱线图-CSDN博客
excel统计分析——正态性检验(箱线图)_excel的透视正态性检验-CSDN博客
8、分组条形图
对于一些应用来说,pandas的绘图能力可以使得生成有用的图形更容易。
df=pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','c'])
df.plot(kind='bar',grid=False)
9、饼图
txtLabels=['Cats','Dogs','Frogs','Others']
fractions=[0.45,0.30,0.15,0.10]
offsets=(0,0.05,0,0)
plt.pie(fractions,explode=offsets,labels=txtLabels,
autopct='%1.1f%%',startangle=90,
colors=sns.color_palette('muted'))
plt.axis('equal')