数据可视化之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)
相关推荐
界面开发小八哥5 小时前
可视化工具SciChart如何结合Deepseek快速创建一个React仪表板?
react.js·信息可视化·数据可视化·原生应用·scichart
树谷-胡老师6 小时前
顶刊配图复现:Origin+DeepSeek完美协同
信息可视化
web1350858863514 小时前
Python大数据可视化:基于python的电影天堂数据可视化_django+hive
python·信息可视化·django
白水先森19 小时前
ArcGIS Pro制作人口三维地图教程
arcgis·信息可视化·数据分析
是一只努力的小菜鸡啦21 小时前
数据分析和数据挖掘的工作内容
信息可视化·数据挖掘·数据分析
dabidai1 天前
AI基础:数据可视化简易入门(Matplotlib和Seaborn)
人工智能·信息可视化·matplotlib
鸭鸭鸭进京赶烤1 天前
数学建模:解锁智能计算的密码!
人工智能·计算机网络·算法·数学建模·信息可视化·机器人·信息与通信
拓端研究室TRL1 天前
R语言Stan贝叶斯空间条件自回归CAR模型分析死亡率多维度数据可视化
开发语言·信息可视化·数据挖掘·回归·r语言
码界筑梦坊2 天前
基于Flask的京东商品信息可视化分析系统的设计与实现
大数据·python·信息可视化·flask·毕业设计
pianmian12 天前
python绘图之箱型图
python·信息可视化·数据分析