您的位置:首页 > 房产 > 建筑 > python对一组数据进行描述性统计

python对一组数据进行描述性统计

2025/2/1 6:26:20 来源:https://blog.csdn.net/pengbr/article/details/139277481  浏览:    关键词:python对一组数据进行描述性统计

描述性统计

描述性统计是一种统计学方法,用于总结和描述数据的主要特征。它可以帮助我们了解数据的中心位置、分散程度和形状等信息。以下是一些常用的描述性统计量:

中心趋势的度量:
1、均值(Mean):所有数据点的总和除以数据点的数量。
2、中位数(Median):将数据集从小到大排序后,位于中间位置的数值。
3、众数(Mode):数据集中出现次数最多的数值。

离散程度的度量:
4、方差(Variance):衡量数据点与均值的平均偏差平方。
5、标准差(Standard Deviation):方差的平方根,用于描述数据的分散程度。
6、四分位数(Quartiles):将数据集分为四等份的数值,包括Q1(第一四分位数)、Q2(第二四分位数,即中位数)和Q3(第三四分位数)。
7、最小值(Minimum):数据集中的最小数值。
8、最大值(Maximum):数据集中的最大数值。
9、极差(Range):最大值与最小值之差,用于描述数据的分布范围。
10、变异系数(Coefficient of Variation,简称 CV):是一个统计学上的度量,用于描述数据的相对离散程度,即标准差与均值的比值,通常以百分比形式表示。变异系数用于比较不同数据集的离散程度,尤其是在数据集的均值差异很大的情况下。

分布形态的描述:
11、偏度(Skewness):描述数据分布的对称性,正值表示右偏,负值表示左偏。
12、峰度(Kurtosis):描述数据分布的尖峭程度,正值表示比正态分布更尖峭,负值表示比正态分布更平坦。
13、K-S检验与P值:K-S检验,即Kolmogorov-Smirnov检验,是一种非参数检验方法,用于评估一个数据集是否符合某个特定的分布,或者比较两个数据集是否来自同一分布。K-S检验不需要假设数据服从正态分布,因此它是一种非常灵活的检验方法。
在实际应用中,我们通常设定一个显著性水平(例如0.05),如果P值小于这个显著性水平,我们就会拒绝原假设,认为数据集与假设的分布存在显著差异,或者两个数据集不是来自同一分布。相反,如果P值大于显著性水平,我们没有足够的证据拒绝原假设,认为数据集符合假设的分布,或者两个数据集来自同一分布。

图形表示:
14、频数分布表(Frequency Distribution Table):列出数据的各个值及其出现的频数。
15、直方图(Histogram):用条形图表示数据的频数分布。
16、箱线图(Box Plot):显示数据的五个数值总结(最小值、第一四分位数、中位数、第三四分位数、最大值)及可能的异常值。
17、散点图(Scatter Plot):用点表示两个变量之间的关系。

Python代码

import numpy as np
import pandas as pd
from scipy import statsclass DescriptiveStatistics:def __init__(self, numbers):self.numbers = numbers# 求一组数据均值def mean(self):return np.mean(self.numbers)# 求一组数据中位数def median(self):return np.median(self.numbers)# 求一组数据众数def mode(self):# 众数mode_result = stats.mode(self.numbers)mode = mode_result[0]# 众数出现的次数mode_count = mode_result[1]return mode, mode_count# 求一组数据方差def var(self):return np.var(self.numbers)# 求一组数据标准差def std(self):return np.std(self.numbers)# 标准差是方差的平方根# return math.sqrt(self.var())# 求一组数据四分位数def quartile(self):q1 = np.percentile(self.numbers, 25)# q2也是中位数q2 = np.percentile(self.numbers, 50)q3 = np.percentile(self.numbers, 75)return q1, q2, q3# 求最小值def min(self):return np.min(self.numbers)# 求最大值def max(self):return np.max(self.numbers)# 求极差def range(self):return np.ptp(self.numbers)# return self.max() - self.min()# 求变异系数def cv(self):# 变异系数为标准差与均值的比值,通常用百分数表示return (self.std() / self.mean()) * 100# 求偏度def skewness(self):return stats.skew(self.numbers)# 求峰度def kurtosis(self):return stats.kurtosis(self.numbers)# K-S检验def ks_test(self):# 判断一组数据是否符合正态分布d_statistic, p_value = stats.kstest(self.numbers, 'norm',(self.mean(), self.std()))# 判断一组数据是否符合标准正态分布,均值为0,标准差为1的正态分布d_statistic1, p_value1 = stats.kstest(self.numbers, 'norm',args=(0, 1))if p_value > 0.05:print('数据符合正态分布')if p_value1 > 0.05:print('数据符合标准正态分布')else:print('数据不符合标准正态分布')else:print('数据不符合正态分布')return d_statistic, p_value, d_statistic1, p_value1# 整理打印结果def output(self):print_result = [{'mean': self.mean(), 'median': self.median(), 'mode': self.mode(),'max': self.max(), 'min': self.min(), 'range': self.range(),'var': self.var(), 'std': self.std(), 'skewness': self.skewness(),'quartile': self.quartile(), 'cv': self.cv(), 'kurtosis': self.kurtosis(),'ks_test': self.ks_test()}]# 将打印结果转换为Pandas DataFramedf = pd.DataFrame(print_result)# # 保存为CSV文件# df.to_csv('output.csv', index=False)# 返回DataFramereturn dfif __name__ == '__main__':number = [1, 2, 3, 4, 5, 6, 7, 7, 8]ds = DescriptiveStatistics(number)print(ds.mean())print(ds.median())print(ds.mode())print(ds.var())print(ds.std())print(ds.quartile())print(ds.range())print(ds.cv())print(ds.skewness())print(ds.kurtosis())print(ds.ks_test())print(ds.output())

打印结果:

4.777777777777778
5.0
(7, 2)
5.28395061728395
2.2986845406196887
(3.0, 5.0, 7.0)
7
48.11200201297023
-0.22135555123008172
-1.2793038693335659
数据符合正态分布
数据不符合标准正态分布
(0.16649544279946027, 0.9308963502001697, 0.8661387569407097, 2.7602046369131942e-08)
数据符合正态分布
数据不符合标准正态分布mean  ...                                            ks_test
0  4.777778  ...  (0.16649544279946027, 0.9308963502001697, 0.86...[1 rows x 13 columns]

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com