数据可视化之his图和Q-Q图

PDF:概率密度函数(probability density function), 在数学中,连续型随机变量的概率密度函数(在不至于混淆时可以简称为密度函数)是一个描述这个随机变量的输出值,在某个确定的取值点附近的可能性的函数。

PMF : 概率质量函数(probability mass function), 在概率论中,概率质量函数是离散随机变量在各特定取值上的概率。

CDF : 累积分布函数 (cumulative distribution function),又叫分布函数,是概率密度函数的积分,能完整描述一个实随机变量X的概率分布。

**z分数(z-score),也叫标准分数(standard score)是一个数与平均数的差再除以标准差的过程。**z=(x-μ)/σ。

1.Q-Q图,反应数据是否呈正态分布

Q-Q图(Quantile-Quantile Plot,样本分位数-总体分位数)是一种散点图,它描述了样本分位数与观测值确实服从正态分布时所观察到的分位数之间的关系,可用来检验正态性假定是否成立。当各点近似分布在一条直线附近时,可认为正态性假设成立;反之,则不成立。

QQ图反应的是样本数据的分位数和指定分布的分位数的关系,用于比较两个数据的分布情况

使用scipy.stats.probplot进行绘制:

复制代码
qq=probplot(probplot_data, fit=True)
复制代码
使用`probplot_data`数据集绘制概率图或Q-Q图,并在图形中拟合一个理论分布(默认为正态分布)
复制代码
返回一个元组(tuple),其中包含两个数组。第一个数组是样本数据的分位数(quantiles),第二个数组是对应的理论分位数(theoretical quantiles)。如果参数fit为True,则还会返回一个斜率和截距,用于拟合理论分位数和样本分位数之间的线性关系,斜率表示该线性关系的斜率,即理论分位数对样本分位数的影响程度。截距表示该线性关系的截距,即当样本分位数为0时,理论分位数的取值。

通过 plt.plot(qq[0][1], qq[0][0])用来画图,其中纵坐标是标准化的理论分位数,也就是z-score,如果想用cumulative_probabilities来表示Q-Q图的纵坐标,那么就进行如下转换:

#定义你想展示的cumulative_probabilities数值:

cumulative_probabilities = [0.0001, 0.001, 0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.95, 0.99, 0.999, 0.9999]

计算对应的Z分数:

z_scores = [stats.norm.ppf(prob) for prob in cumulative_probabilities]

#PS:`stats.norm.ppf`是SciPy库中的一个函数,用于计算正态分布的百分位点(也称为分位数)`stats.norm.ppf(q, loc=0, scale=1)`用于计算给定累积概率`q`下的正态分布的百分位点。 `q`:累积概率,取值范围为0到1。 `loc`:正态分布的均值,默认值为0。 `scale`:正态分布的标准差,默认值为1。 函数返回的结果是给定累积概率下的对应百分位点的数值。

#将纵坐标对应的z-score改为 cumulative_probabilities数值:

plt.yticks(z_scores, cumulative_probabilities)

2.hist图 可以查看数据分布情况

fig, axs = plt.subplots(3, 2, figsize=(10, 10))

for i, column in enumerate(columns):

title = column

bin_range = bin_ranges.get(column, (0.2, 1.5))

hist_data = data[column][(data[column] > bin_range[0]) & (data[column] < bin_range[1])]

axs[i // 2, i % 2].hist(hist_data, bins=30, range=bin_range, density=True, alpha=0.7)

#`hist_data`:要绘制直方图的数据。`bins`:指定直方图的箱子数量。默认值为30,表示将数据分成30个等宽的区间。`range`:指定直方图的数据范围。 `density`:指定是否将直方图的纵轴标准化为概率密度。默认值为False,表示纵轴表示直方图的计数。如果设置为True,纵轴将表示概率密度。

plt.tight_layout()

其中如果density=True,那么纵轴是概率密度,而概率密度函数的取值可以大于1,这是因为概率密度函数并不是概率。概率密度函数的主要目的是描述随机变量在不同取值处的概率密度大小,而不是直接表示概率。因此,概率密度函数的取值大小并没有严格的上限。 概率密度函数的面积才表示概率。对于连续随机变量,概率密度函数的面积在整个定义域上积分等于1。

如果想让纵轴代表概率值,可以做以下改变:

复制代码
weights = np.ones_like(hist_data)/float(len(hist_data))
plt.hist(hist_data, weights=weights)
相关推荐
BYSJMG34 分钟前
计算机大数据毕业设计推荐:基于Spark的气候疾病传播可视化分析系统【Hadoop、python、spark】
大数据·hadoop·python·信息可视化·spark·django·课程设计
计算机毕设残哥1 小时前
大数据毕业设计选题推荐:护肤品店铺运营数据可视化分析系统详解
大数据·信息可视化·课程设计
杨超越luckly1 天前
HTML应用指南:利用POST请求获取上海黄金交易所金价数据
前端·信息可视化·金融·html·黄金价格
计算机毕设定制辅导-无忧学长3 天前
Grafana 与 InfluxDB 可视化深度集成(二)
信息可视化·数据分析·grafana
java1234_小锋3 天前
一周学会Matplotlib3 Python 数据可视化-绘制自相关图
开发语言·python·信息可视化·matplotlib·matplotlib3
非凡ghost3 天前
AMS PhotoMaster:全方位提升你的照片编辑体验
windows·学习·信息可视化·软件需求
瓦特what?3 天前
关于C++的#include的超超超详细讲解
java·开发语言·数据结构·c++·算法·信息可视化·数据挖掘
计算机毕设残哥4 天前
完整技术栈分享:基于Hadoop+Spark的在线教育投融资大数据可视化分析系统
大数据·hadoop·python·信息可视化·spark·计算机毕设·计算机毕业设计
Highcharts.js4 天前
Highcharts Dashboards | 打造企业级数据仪表板:从图表到数据驾驶舱
信息可视化
java1234_小锋4 天前
[免费]基于Python的影视数据可视化分析系统(Flask+echarts)【论文+源码+SQL脚本】
python·信息可视化·flask·python影视分析·python电影分析