当前位置:首页 > 正文

python统计类函数_python统计方法

更新时间:2025-02-07 22:22 阅读量:59

python数据统计分析

① 常用函数库

? scipy包中的stats模块和statsmodels包是python常用的数据分析工具,scipy.stats以前有一个models子模块,后来被移除了.这个模块被重写并成为了现在独立的statsmodels包.

?scipy的stats包含一些比较基本的工具,比如:t检验,正态性检验,卡方检验之类,statsmodels提供了更为系统的统计模型,包括线性模型,时序分析,还包含数据集,做图工具等等.

(1) 用途

?夏皮罗维尔克检验法 (Shapiro-Wilk) 用于检验参数提供的一组小样本数据线是否符合正态分布,统计量越大则表示数据越符合正态分布,但是在非正态分布的小样本数据中也经常会出现较大的W值.需要查表来估计其概率.由于原假设是其符合正态分布,所以当P值小于指定显著水平时表示其不符合正态分布.

?正态性检验是数据分析的第一步,数据是否符合正态性决定了后续使用不同的分析和预测方法,当数据不符合正态性分布时,我们可以通过不同的转换方法把非正太态数据转换成正态分布后再使用相应的统计方法进行下一步操作.

?科尔莫戈罗夫检验(Kolmogorov-Smirnov test),检验样本数据是否服从某一分布,仅适用于连续分布的检验.下例中用它检验正态分布.

?方差反映了一组数据与其平均值的偏离程度,方差齐性检验用以检验两组或多组数据与其平均值偏离程度是否存在差异,也是很多检验和算法的先决条件.

?最常用的两变量相关性分析,是用作图描述相关性,图的横轴是一个变量,纵轴是另一变量,画散点图,从图中可以直观地看到相关性的方向和强弱,线性正相关一般形成由左下到右上的图形;负面相关则是从左上到右下的图形,还有一些非线性相关也能从图中观察到.

?从图中可以看到明显的正相关趋势.

?皮尔森相关系数(Pearson correlation coefficient)是反应两变量之间线性相关程度的统计量,用它来分析正态分布的两个连续型变量之间的相关性.常用于分析自变量之间,以及自变量和因变量之间的相关性.

?斯皮尔曼等级相关系数(Spearman's correlation coefficient for ranked data ),它主要用于评价顺序变量间的线性相关关系,在计算过程中,只考虑变量值的顺序(rank, 值或称等级),而不考虑变量值的大小.常用于计算类型变量的相关性.

?返回结果的第一个值为相关系数表示线性相关程度,本例中correlation趋近于1表示正相关.第二个值为p-value,p-value越小,表示相关程度越显著.

?单样本T检验,用于检验数据是否来自一致均值的总体,T检验主要是以均值为核心的检验.注意以下几种T检验都是双侧T检验.

?由于比较两组数据是否来自于同一正态分布的总体.注意:如果要比较的两组数据不满足方差齐性, 需要在ttest_ind()函数中添加参数equal_var = False.

①.0. 配对样本T检验

?配对样本T检验可视为单样本T检验的扩展,检验的对象由一群来自正态分布独立样本更改为二群配对样本观测值之差.它常用于比较同一受试对象处理的前后差异,或者按照某一条件进行两两配对分别给与不同处理的受试对象之间是否存在差异.

①.1. 单因素方差分析

?方差分析(Analysis of Variance,简称ANOVA),又称F检验,用于两个及两个以上样本均数差别的显著性检验.方差分析主要是考虑各组之间的平均数差别.

?单因素方差分析(One-wayAnova),是检验由单一因素影响的多组样本某因变量的均值是否有显著差异.

?当因变量Y是数值型,自变量X是分类值,通常的做法是按X的类别把实例成分几组,分析Y值在X的不同分组中是否存在差异.

?当有两个或者两个以上自变量对因变量产生影响时,可以用多因素方差分析的方法来进行分析.它不仅要考虑每个因素的主效应,还要考虑因素之间的交互效应.

?上面介绍的T检验是参数检验,卡方检验是一种非参数检验方法.相对来说,非参数检验对数据分布的要求比较宽松,并且也不要求太大数据量.卡方检验是一种对计数资料的假设检验方法,主要是比较理论频数和实际频数的吻合程度.常用于特征选择,比如,检验男人和女人在是否患有高血压上有无区别,如果有区别,则说明性别与是否患有高血压有关,在后续分析时就需要把性别这个分类变量放入模型训练.

?基本数据有R行C列, 故通称RC列联表(contingency table), 简称RC表,它是观测数据按两个或更多属性(定性变量)分类时所列出的频数表.

?单变量统计描述是数据分析中最简单的形式,其中被分析的数据只包含一个变量,不处理原因或关系.单变量分析的主要目的是通过对数据的统计描述了解当前数据的基本情况,并找出数据的分布模型.

?单变量数据统计描述从集中趋势上看,指标有:均值,中位数,分位数,众数;从离散程度上看,指标有:极差、四分位数、方差、标准差、协方差、变异系数,从分布上看,有偏度,峰度等.需要考虑的还有极大值,极小值(数值型变量)和频数,构成比(分类或等级变量).

?此外,还可以用统计图直观展示数据分布特征,如:柱状图、正方图、箱式图、频率多边形和饼状图.

?多元线性回归模型(multivariable linear regression model ),因变量Y(计量资料)往往受到多个变量X的影响,多元线性回归模型用于计算各个自变量对因变量的影响程度,可以认为是对多维空间中的点做线性拟合.

python常用列表函数

len(list)

列表元素个数

max(list)

返回列表元素最大值

min(list)

返回列表元素最小值

list(seq)

将元组转换为列表

序号

方法

①.

list.append(obj)

在列表末尾添加新的对象

list.count(obj)

统计某个元素在列表中出现的次数

list.extend(seq)

在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)

list.index(obj)

从列表中找出某个值第一个匹配项的索引位置

list.insert(index, obj)

将对象插入列表

list.pop([index=-1])

移除列表中的一个元素(默认最后一个元素),并且返回该元素的值

list.remove(obj)

移除列表中某个值的第一个匹配项

list.reverse()

反向列表中元素

list.sort( key=None, reverse=False)

对原列表进行排序

①.0

list.clear()

清空列表

①.1

list.copy()

复制列表

python函数统计字符串中字母数学其他字符的个数

代码如下:

letter = 0

digital = 0

other = 0

for i in text:

if i.isalpha():

letter += 1

elif i.isdigit():

digital += 1

else:

other += 1

print('字母:{} 数字:{} 其他:{}'.format(letter,digital,other))

输出:

下面是Python内置关于判断字符串类型的方法介绍:

str.isalnum()

如果字符串中的所有字符都是字母或数字且至少有一个字符,则返回?True?, 否则返回?False?. 如果?c.isalpha()?,?c.isdecimal()?,?c.isdigit()?,或?c.isnumeric()?之中有一个返回?True?,则字符++c++是字母或数字.

str.isalpha()

如果字符串中的所有字符都是字母,并且至少有一个字符,返回?True?,否则返回?False?.字母字符是指那些在 Unicode 字符数据库中定义为 "Letter" 的字符,即那些具有 "Lm"、"Lt"、"Lu"、"Ll" 或 "Lo" 之一的通用类别属性的字符. 注意,这与 Unicode 标准中定义的"字母"属性不同.

str.isascii()

str.isdecimal()

str.isdigit()

如果字符串中的所有字符都是数字,并且至少有一个字符,返回?True?,否则返回?False?. 数字包括十进制字符和需要特殊处理的数字,如兼容性上标数字.这包括了不能用来组成 10 进制数的数字,如 Kharosthi 数. 严格地讲,数字是指属性值为 Numeric_Type=Digit 或 Numeric_Type=Decimal 的字符.

str.isidentifier()

如果字符串是有效的标识符,返回?True?,依据语言定义,?标识符和关键字?节.

调用?keyword.iskeyword()?来检测字符串?s?是否为保留标识符,例如?def?和?class.

Python 去重,统计,lambda函数

df.drop_duplicates('item_name')

方法一:

df.drop_duplicates('item_name').count()

方法二:

df['item_name'].nunique()

附:nunique()和unique()的区别:

unique()是以 数组形式(numpy.ndarray)返回列的所有唯一值(特征的所有唯一值)

nunique()即返回的是唯一值的个数

比如:df['item_name'].unique()

要求:将下表中经验列将按周统计的转换为经验不限,保留学历

方法二:定义函数

? def dataInterval(ss):

? ? if '周' in ss:

? ? return ss

?df1['经验'] = df1['经验'].apply(dataInterval)