excel学习库

excel表格_excel函数公式大全_execl从入门到精通

Python其实很简单 第二十四章 抽样与数据构成分析

为了从原始数据中得到更深层次、更能揭示数据之间内在联系的信息,

本章所用数据表(学生成绩表

24.1 sample()函数

在手工数据分析年代,面对成百上千的数据,我们往往就束手无策,人工处理大量的数据总感到力不从心。尽管我们都知道了,原始数据越多越详实越好,但时间和精力总归是有限的,也许你耗费了大量的心血得到了想要的分析结果,但已时过境迁,费尽心机得来的分析报表一点价值都没有,的确非常遗憾。

抽样,就成了拨冗取真的利器。大凡碰到数据量太大的情况,从中抽取一小部分数据加以处理即可,虽然因此会对数据分析结果的准确性产生很大的影响,但也是不得已而为之。

在如今的大数据时代,我们毫不畏惧海量的数据。可以说,不怕数据多,只怕数据少。采用

虽然抽样方法在大数据时代的已经不那么重要了,但还是有必要介绍一下,因为如果要快速、一目了然的掌握个大致的情况,抽样是最合适不过的了。

sample()的语法格式:

dfnSeriesn0/1

其中,随机数种子,当设置后每次抽取的记录都是相同的;0时为默认值,表示横向抽取,1时表示按列抽取。

现采用学生成绩表数据,将

In [1]: from pandas import read_excel

file='d:/xscj.xlsx'

df=read_excel(file,sheet_name=0,converters={'学号':str})

In [2]: df1=df.sample(3) #随机抽取3个记录

print(df1)

学号

14 0205 张佳媛 女 110 113 96 319 2

9 0110 柳雯 女 94 72 51 217 1

5 0106 郭峻峰 男 100 110 100 310 1

#随机抽取20%的记录

print(df1)

学号

0 0101 陈浩楠 男 109 107 100 316 1

11 0202 王博 男 109 112 94 315 2

20 0301 李佳兴 男 106 96 92 294 3

21 0302 陈美菱 女 102 95 88 285 3

25 0306 王菲 女 111 115 96 322 3

22 0303 王佳妮 女 106 108 84 298 3

#增加了replace参数,允许重复选取

print(df1)

学号

25 0306 王菲 女 111 115 96 322 3

25 0306 王菲 女 111 115 96 322 3

20 0301 李佳兴 男 106 96 92 294 3

20 0301 李佳兴 男 106 96 92 294 3

20 0301 李佳兴 男 106 96 92 294 3

19 0210 贾一伊 女 103 100 94 297 2

#添加了随机数种子,值为2

print(df1)

学号

1 0102 金新阳 男 100 103 90 293 1

0 0101 陈浩楠 男 109 107 100 316 1

14 0205 张佳媛 女 110 113 96 319 2

6#随机数种子的值不变,输出结果不变

print(df1)

学号

1 0102 金新阳 男 100 103 90 293 1

0 0101 陈浩楠 男 109 107 100 316 1

14 0205 张佳媛 女 110 113 96 319 2

24.2 分布分析

分布分析用于分析各个分组数据分布规律。

1

import numpy as np #为了使用np.size,故导入numpy

from pandas import read_excel

#学生成绩表xscj.xlsx

df=read_excel(file,sheet_name=0,converters={'学号':str})

2(略)

In [3]: df['总分'].max()

Out[3]: 331

In [4]: df['总分'].min()

Out[4]: 217

通过上述两个命令,我们已经知道了总分的最高分和最低分。下面将总分按照

In [5]: bins=[ df['总分'].min()-1,250,300,df['总分'].max()+1]

#定义了三个区间,min()-1和max()+1是为了保证将最小值和最大值都包含进来。

In [6]: bins

Out[6]: [216, 250, 300, 332]

In [7]: labels=['200分到250分之间','250分到300之间','300分到350分']

#定义了四个标签

In [8]: labels

Out[8]: ['200分到250分之间', '250分到300之间', '300分到350分']

In [9]: df['总分分段']=pd.cut(df.总分,bins,labels=labels)

#将每一个记录都归属到每一个区间,并将标签写入字段“总分分段”中。

10

C:\Users\zym\AppData\Local\Continuum\anaconda3\Scripts\ipython:1: FutureWarning: using a dict on a Series for aggregation

is deprecated and will be removed in a future version. Use named aggregation instead.

>>> grouper.agg(name_1=func_1, name_2=func_2)

#按照字段“总分分段”的值进行分组统计,由于numpy版本的问题,可能会出现上面的提示信息,并不影响执行,可以忽略。

Out[10]:

人数

总分分段

200分到250分之间 4

250分到300之间 14

300分到350分 12

从上述各段人数分布,可以反映出成绩分布规律。

24.3 数据透视

为了从不同维度分析数据,可以使用

pivot_table()函数的语法格式:

pivot_table(values, index, columns, aggfunc, fill_value)

其中,

index和cloumns两个参数至少要选取一个,否则就等于没有指定透视对象,函数不能被执行。

下面举例说明(数据表为:学生成绩表

1

#学生成绩表xscj.xlsx

df=read_excel(file,sheet_name=0,converters={'学号':str})

2(略)

In [3]: df.pivot_table(index='班级')

Out[3]:

总分

班级

1 292.1 102.8 86.0 103.3

2 282.5 91.3 87.8 103.4

3 290.4 103.2 82.8 104.4

中选取行作为透视对象,,一个班级的数据在同一行表示。

In [4]: df.pivot_table(columns='班级')

Out[4]:

班级

总分

数学

英语

语文

4中选取行作为透视对象,,每一个班级的数据在同一列表示。

如上,中输出的数据为各班的数值列(总分、数学、英语、语文)的平均值,即默认的统计函数就是

为了验证是否为平均值,我们验证一下。

首先,为了使用

In [5]: import numpy as np

然后在

6

6

班级

总分

数学

英语

语文

发现6的输出结果完全一致,故证明统计值就是各数值列的平均值。

7

7

mean amax amin

班级

总分

数学

英语

语文

8

8

mean amax amin

总分

班级

1 292.1 102.8 86.0 103.3 331 119 100 113 217 72 51 89

2 282.5 91.3 87.8 103.4 319 113 97 110 234 58 75 95

3 290.4 103.2 82.8 104.4 322 115 96 112 238 88 39 90

78输出的内容是一样的,但8更似明了。所以,不管是指定

24.4构成分析

如果把某一项数据看成一个整体,那么,构成这个整体的各个单元所占的比重是多少?这是一个非常重要的数据。如前面我们统计过总分在各个分段的学生人数,再将各段人数除以总人数也可以得到,但

例:

In [1]: import numpy as np

import pandas as pd

from pandas import read_excel

file='d:/xscj.xlsx'

df=read_excel(file,sheet_name=0,converters={'学号':str})

bins=[ df['总分'].min()-1,250,300,df['总分'].max()+1]

labels=['C','B','A']

df['等级']=pd.cut(df.总分,bins,labels=labels)

2

2

学号

0 0101 陈浩楠 男 109 107 100 316 1 A

1 0102 金新阳 男 100 103 90 293 1 B

2 0103 朱浩楠 女 89 74 88 251 1 B

3 0104 白雨薇 女 113 119 99 331 1 A

4 0105 张梓悦 女 112 116 98 326 1 A

3

4

4

size

总分

等级

班级

1 1 4 5

2 2 5 3

3 1 5 4

4输出结果中,行表示各个班级,列表示总分值分别属于

5

5

size

总分

等级

班级

1 0.1 0.4 0.5

2 0.2 0.5 0.3

3 0.1 0.5 0.4

5输出结果中,行表示各个班级,列表示总分值分别属于

6

6

size

总分

等级

班级

1 0.25 0.285714 0.416667

2 0.50 0.357143 0.250000

3 0.25 0.357143 0.333333

6输出结果中,行表示各个班级,列表示总分值分别属于

24.5相关分析

通过分析两个或多个变量之间数量变化规律,从而发现是否存在某种依存关系,是数据分析很重要的内容。

Python提供的相关性分析函数能够帮助我们快速发现相关关系,并得到描述相关程度的数值即相关度。

相关分析函数有适用于

相关度

0≤|γ|<0.3 两个变量之间存在“低度相关”

0.3≤|γ|<0.8 两个变量之间存在“中度相关”

0.8≤|γ|≤1 两个变量之间存在“高度相关”

下面举例说明:

1

#学生成绩表xscj.xlsx

df=read_excel(file,sheet_name=0,converters={'学号':str})

In [2]: df['语文'].corr(df['数学'])

Out[2]: 0.7404834173020638

由于

In [3]: df.loc[:,['语文','数学','英语']].corr()

Out[3]:

语文

语文

数学

英语

可以看出,每一门课程和本身的相关度都为

出现这种情况的原因是否与各科成绩的满分值有关呢?因为语文、数学的满分值都是

In [4]: df.英语=df.英语*1.2

5

5

学号

0 0101 陈浩楠 男 109 107 120.0 316 1

1 0102 金新阳 男 100 103 108.0 293 1

2 0103 朱浩楠 女 89 74 105.6 251 1

3 0104 白雨薇 女 113 119 118.8 331 1

4 0105 张梓悦 女 112 116 117.6 326 1

5可以看到英语成绩已经调整为满分值为

6

6

语文

语文

数学

英语

但是,对比[3]和6,发现各个相关度的值都没有变化。这充分说明相关度计算方法是比较可信的。

本文由大漠孤驼的编程苦旅原创,欢迎关注,带你一起长知识!

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接