十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
今天下午,成长群的群主申总提出,群里每个人找一个战友,互帮互助。一石激起千层浪,群里面积极向上好青年们就开始踊跃自我介绍,一个比一个优秀,让人羡慕不已。我正想要参与其中,突然想到我的活学活用系列需要更新了。没有困难,创造困难也要上。于是,仔细想一想,可能出现几种情况:
成都创新互联公司是一家专注于成都做网站、网站建设与策划设计,渭南网站建设哪家好?成都创新互联公司做网站,专注于网站建设10年,网设计领域的专业建站公司;建站业务涵盖:渭南等地区。渭南做网站价格咨询:18982081108
如果用Python来随机配对,能解决上面的问题。还有一个好处,每个月初,有了新的成员加进来之后,可以重新打乱配对一次,这样每个月都会有一个新的战友配对,就可以结交一个新朋友,岂不更好。
把全体群成员放在一个集合里面,然后随机的从这个集合中挑出两个元素,作为一对战友,然后把这俩哥们从集合中删除,剩下的成员组成了新的集合,再对新的集合重复上面的操作,一直到新的集合为空,程序结束
在Python中可以用list或者set来实现
set和list的区别如下:
set是无序的,不可重复的
list是有序的,可以重复的
直觉上set比较适合,于是查看set的文档,看有没有适合的操作函数。发现set的操作函数有5个:
其中pop()从集合中删除并返回随机的一个元素,好像很符合我的要求,于是动手尝试。
输入的结果如下:
成功了O(∩_∩)O哈哈~
PS:因为可能存在成员数为单数的情况,为了不使程序出错,这里添加了一个try-except
上面是用set实现的,那用list能实现吗?
答案是:可以
查看Python文档,发现一个函数非常适合:random.shuffle,这个家伙能把一个list中的成员洗牌打乱,那么我们就可以按照顺序把大乱以后的list中的成员打印出来,挨着的两个成员就成为战友。实现如下:
输入的结果如下:
成功,而且不会因为单数问题报错,实现起来也比set简单,更重要的一点是程序运行后生成了一个雷暴members保存了所有的战友匹配信息。方便保存。
这里有个知识点是list的切片,list[i:j]返回的是一个小list,是原来list的第i个元素到第j个元素。
如果要应用到群成员配对,只需要把members的内容替换成为愿意程序配对的群成员们就可以啦
set创建和pop()函数
list创建,list切片
random.shuffle(list)给list洗牌
1. 常用函数库
scipy包中的stats模块和statsmodels包是python常用的数据分析工具,scipy.stats以前有一个models子模块,后来被移除了。这个模块被重写并成为了现在独立的statsmodels包。
scipy的stats包含一些比较基本的工具,比如:t检验,正态性检验,卡方检验之类,statsmodels提供了更为系统的统计模型,包括线性模型,时序分析,还包含数据集,做图工具等等。
2. 小样本数据的正态性检验
(1) 用途
夏皮罗维尔克检验法 (Shapiro-Wilk) 用于检验参数提供的一组小样本数据线是否符合正态分布,统计量越大则表示数据越符合正态分布,但是在非正态分布的小样本数据中也经常会出现较大的W值。需要查表来估计其概率。由于原假设是其符合正态分布,所以当P值小于指定显著水平时表示其不符合正态分布。
正态性检验是数据分析的第一步,数据是否符合正态性决定了后续使用不同的分析和预测方法,当数据不符合正态性分布时,我们可以通过不同的转换方法把非正太态数据转换成正态分布后再使用相应的统计方法进行下一步操作。
(2) 示例
(3) 结果分析
返回结果 p-value=0.029035290703177452,比指定的显著水平(一般为5%)小,则拒绝假设:x不服从正态分布。
3. 检验样本是否服务某一分布
(1) 用途
科尔莫戈罗夫检验(Kolmogorov-Smirnov test),检验样本数据是否服从某一分布,仅适用于连续分布的检验。下例中用它检验正态分布。
(2) 示例
(3) 结果分析
生成300个服从N(0,1)标准正态分布的随机数,在使用k-s检验该数据是否服从正态分布,提出假设:x从正态分布。最终返回的结果,p-value=0.9260909172362317,比指定的显著水平(一般为5%)大,则我们不能拒绝假设:x服从正态分布。这并不是说x服从正态分布一定是正确的,而是说没有充分的证据证明x不服从正态分布。因此我们的假设被接受,认为x服从正态分布。如果p-value小于我们指定的显著性水平,则我们可以肯定地拒绝提出的假设,认为x肯定不服从正态分布,这个拒绝是绝对正确的。
4.方差齐性检验
(1) 用途
方差反映了一组数据与其平均值的偏离程度,方差齐性检验用以检验两组或多组数据与其平均值偏离程度是否存在差异,也是很多检验和算法的先决条件。
(2) 示例
(3) 结果分析
返回结果 p-value=0.19337536323599344, 比指定的显著水平(假设为5%)大,认为两组数据具有方差齐性。
5. 图形描述相关性
(1) 用途
最常用的两变量相关性分析,是用作图描述相关性,图的横轴是一个变量,纵轴是另一变量,画散点图,从图中可以直观地看到相关性的方向和强弱,线性正相关一般形成由左下到右上的图形;负面相关则是从左上到右下的图形,还有一些非线性相关也能从图中观察到。
(2) 示例
(3) 结果分析
从图中可以看到明显的正相关趋势。
6. 正态资料的相关分析
(1) 用途
皮尔森相关系数(Pearson correlation coefficient)是反应两变量之间线性相关程度的统计量,用它来分析正态分布的两个连续型变量之间的相关性。常用于分析自变量之间,以及自变量和因变量之间的相关性。
(2) 示例
(3) 结果分析
返回结果的第一个值为相关系数表示线性相关程度,其取值范围在[-1,1],绝对值越接近1,说明两个变量的相关性越强,绝对值越接近0说明两个变量的相关性越差。当两个变量完全不相关时相关系数为0。第二个值为p-value,统计学上,一般当p-value0.05时,可以认为两变量存在相关性。
7. 非正态资料的相关分析
(1) 用途
斯皮尔曼等级相关系数(Spearman’s correlation coefficient for ranked data ),它主要用于评价顺序变量间的线性相关关系,在计算过程中,只考虑变量值的顺序(rank, 值或称等级),而不考虑变量值的大小。常用于计算类型变量的相关性。
(2) 示例
(3) 结果分析
返回结果的第一个值为相关系数表示线性相关程度,本例中correlation趋近于1表示正相关。第二个值为p-value,p-value越小,表示相关程度越显著。
8. 单样本T检验
(1) 用途
单样本T检验,用于检验数据是否来自一致均值的总体,T检验主要是以均值为核心的检验。注意以下几种T检验都是双侧T检验。
(2) 示例
(3) 结果分析
本例中生成了2列100行的数组,ttest_1samp的第二个参数是分别对两列估计的均值,p-value返回结果,第一列1.47820719e-06比指定的显著水平(一般为5%)小,认为差异显著,拒绝假设;第二列2.83088106e-01大于指定显著水平,不能拒绝假设:服从正态分布。
9. 两独立样本T检验
(1) 用途
由于比较两组数据是否来自于同一正态分布的总体。注意:如果要比较的两组数据不满足方差齐性, 需要在ttest_ind()函数中添加参数equal_var = False。
(2) 示例
(3) 结果分析
返回结果的第一个值为统计量,第二个值为p-value,pvalue=0.19313343989106416,比指定的显著水平(一般为5%)大,不能拒绝假设,两组数据来自于同一总结,两组数据之间无差异。
10. 配对样本T检验
(1) 用途
配对样本T检验可视为单样本T检验的扩展,检验的对象由一群来自正态分布独立样本更改为二群配对样本观测值之差。它常用于比较同一受试对象处理的前后差异,或者按照某一条件进行两两配对分别给与不同处理的受试对象之间是否存在差异。
(2) 示例
(3) 结果分析
返回结果的第一个值为统计量,第二个值为p-value,pvalue=0.80964043445811551,比指定的显著水平(一般为5%)大,不能拒绝假设。
11. 单因素方差分析
(1) 用途
方差分析(Analysis of Variance,简称ANOVA),又称F检验,用于两个及两个以上样本均数差别的显著性检验。方差分析主要是考虑各组之间的平均数差别。
单因素方差分析(One-wayAnova),是检验由单一因素影响的多组样本某因变量的均值是否有显著差异。
当因变量Y是数值型,自变量X是分类值,通常的做法是按X的类别把实例成分几组,分析Y值在X的不同分组中是否存在差异。
(2) 示例
(3) 结果分析
返回结果的第一个值为统计量,它由组间差异除以组间差异得到,上例中组间差异很大,第二个返回值p-value=6.2231520821576832e-19小于边界值(一般为0.05),拒绝原假设, 即认为以上三组数据存在统计学差异,并不能判断是哪两组之间存在差异 。只有两组数据时,效果同 stats.levene 一样。
12. 多因素方差分析
(1) 用途
当有两个或者两个以上自变量对因变量产生影响时,可以用多因素方差分析的方法来进行分析。它不仅要考虑每个因素的主效应,还要考虑因素之间的交互效应。
(2) 示例
(3) 结果分析
上述程序定义了公式,公式中,"~"用于隔离因变量和自变量,”+“用于分隔各个自变量, ":"表示两个自变量交互影响。从返回结果的P值可以看出,X1和X2的值组间差异不大,而组合后的T:G的组间有明显差异。
13. 卡方检验
(1) 用途
上面介绍的T检验是参数检验,卡方检验是一种非参数检验方法。相对来说,非参数检验对数据分布的要求比较宽松,并且也不要求太大数据量。卡方检验是一种对计数资料的假设检验方法,主要是比较理论频数和实际频数的吻合程度。常用于特征选择,比如,检验男人和女人在是否患有高血压上有无区别,如果有区别,则说明性别与是否患有高血压有关,在后续分析时就需要把性别这个分类变量放入模型训练。
基本数据有R行C列, 故通称RC列联表(contingency table), 简称RC表,它是观测数据按两个或更多属性(定性变量)分类时所列出的频数表。
(2) 示例
(3) 结果分析
卡方检验函数的参数是列联表中的频数,返回结果第一个值为统计量值,第二个结果为p-value值,p-value=0.54543425102570975,比指定的显著水平(一般5%)大,不能拒绝原假设,即相关性不显著。第三个结果是自由度,第四个结果的数组是列联表的期望值分布。
14. 单变量统计分析
(1) 用途
单变量统计描述是数据分析中最简单的形式,其中被分析的数据只包含一个变量,不处理原因或关系。单变量分析的主要目的是通过对数据的统计描述了解当前数据的基本情况,并找出数据的分布模型。
单变量数据统计描述从集中趋势上看,指标有:均值,中位数,分位数,众数;从离散程度上看,指标有:极差、四分位数、方差、标准差、协方差、变异系数,从分布上看,有偏度,峰度等。需要考虑的还有极大值,极小值(数值型变量)和频数,构成比(分类或等级变量)。
此外,还可以用统计图直观展示数据分布特征,如:柱状图、正方图、箱式图、频率多边形和饼状图。
15. 多元线性回归
(1) 用途
多元线性回归模型(multivariable linear regression model ),因变量Y(计量资料)往往受到多个变量X的影响,多元线性回归模型用于计算各个自变量对因变量的影响程度,可以认为是对多维空间中的点做线性拟合。
(2) 示例
(3) 结果分析
直接通过返回结果中各变量的P值与0.05比较,来判定对应的解释变量的显著性,P0.05则认为自变量具有统计学意义,从上例中可以看到收入INCOME最有显著性。
16. 逻辑回归
(1) 用途
当因变量Y为2分类变量(或多分类变量时)可以用相应的logistic回归分析各个自变量对因变量的影响程度。
(2) 示例
(3) 结果分析
直接通过返回结果中各变量的P值与0.05比较,来判定对应的解释变量的显著性,P0.05则认为自变量具有统计学意义。
1 要求:实现两个列表中的元素逐一配对。
2 1、普通方法:
3 L1 = ['x','y','z']
4 L2 = [1,2,3]
5 L3 = []
6 for a in L1:
7 ... for b in L2:
8 ... L3.append((a,b))
9 ...
10 print L3
11 [('x', 1), ('x', 2), ('x', 3), ('y', 1), ('y', 2), ('y', 3), ('z', 1), ('z', 2), ('z', 3)]
12 ####################################################
13 2、列表解析:
14 L1 = ['x','y','z']
15 L2 = [1,2,3]
16 L3 = [ (a,b) for a in L1 for b in L2 ]
17 print L3
18 [('x', 1), ('x', 2), ('x', 3), ('y', 1), ('y', 2), ('y', 3), ('z', 1), ('z', 2), ('z', 3)]
本节将介绍使用多级索引(分层索引)和其他高级索引技巧
分层或多级次索引的存在是非常有意义的,因为它打开了复杂的数据分析和操作的大门,特别是处理高维数据
从本质上讲,它允许您在较低维度的数据结构包括 Series(1d) 和 DataFrame(2d) 中存储和操作任意维度的数据
在本节中,我们将展示分层索引的确切含义,以及如何结合前面介绍的所有 pandas 索引功能使用
在 0.24.0 版本之后, MultiIndex.label 重命名为 MultiIndex.codes 。 MultiIndex.set_labels 重命名为 MultiIndex.set_codes .
MultiIndex 对象是标准 Index 对象的分层模式,它通常在 pandas 对象中存储轴标签
你可以把 MultiIndex 看成一个元组数组,其中每个元组都是唯一的。 MultiIndex 有如下创建方式
当传递给 Index 构造函数一个元组列表时,它将尝试返回一个 MultiIndex 。
下面的示例演示了初始化 MultiIndex 的不同方法。
当你想要对两个可迭代对象中的每个元素进行两两配对时,可以使用 MultiIndex.from_product()
您也可以使用 MultiIndex.from_frame() 方法直接从 DataFrame 中构造一个 MultiIndex 。
为了方便起见,你可以直接将数组列表传递给 Series 或 DataFrame 的 index 参数来自动构造一个 MultiIndex
所有的 MultiIndex 构造函数都接受一个 name 参数,该参数存储索引级别的名称。如果没有设置,则值为 None
索引可以放在任何轴上,索引的层级也可以随你设置
这已经简化了较高层次的索引,使控制台的输出更容易看清。
注意 ,索引的显示方式可以通过 pandas.set_options() 中的 multi_sparse 选项来控制。
值得注意的是,将元组用作轴上的原子标签也是可以的
多索引之所以重要,是因为它允许您执行分组、选择和重塑操作,我们将在下面以及后续部分中描述这些操作
get_level_values() 方法能够返回特定级别的标签向量
分级索引的一个重要特性是,您可以通过标识数据中的子组的部分标签来选择数据
部分选择以一种完全类似于在常规 DataFrame 中选择列的方式,返回的结果会 "降低" 分层索引的级别
MultiIndex 会保留索引的所有已经定义了的级别,尽管它们实际上可能并没有被使用。
在对索引进行切片时,您可能会注意到这一点。例如
这样做的目的是为了避免重新计算级别,以提高切片的性能。如果你只想看某一级别,可以使用 get_level_values() 方法
可以使用 remove_unused_levels() 方法重构 MultiIndex
在具有 MultiIndex 的不同索引对象之间的操作会自动对齐
Series/DataFrames 的 reindex() 方法可以传入一个 MultiIndex ,甚至可以是一个元组列表或元组数组