模块为我们提供了非常多的描述性统计分析的指标函数,如总和、均值、最小值、最大值等,我们来具体看看这些函数:

1、随机生成三组数据

import numpy as np
import pandas as pdnp.random.seed(1234)
d1 = pd.Series(2*np.random.normal(size = 100)+3)
d2 = np.random.f(2,4,size = 100)
d3 = np.random.randint(1,100,size = 100)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2、统计分析用到的函数

d1.count()          #非空元素计算
d1.min()            #最小值
d1.max()            #最大值
d1.idxmin()         #最小值的位置,类似于R中的which.min函数
d1.idxmax()         #最大值的位置,类似于R中的which.max函数
d1.quantile(0.1)    #10%分位数
d1.sum()            #求和
d1.mean()           #均值
d1.median()         #中位数
d1.mode()           #众数
d1.var()            #方差
d1.std()            #标准差
d1.mad()            #平均绝对偏差
d1.skew()           #偏度
d1.kurt()           #峰度
d1.describe()       #一次性输出多个描述性统计指标
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 必须注意的是,descirbe方法只能针对序列或数据框,一维数组是没有这个方法的

自定义一个函数,将这些统计指标汇总在一起:

def status(x) : return pd.Series([x.count(),x.min(),x.idxmin(),x.quantile(.25),x.median(),x.quantile(.75),x.mean(),x.max(),x.idxmax(),x.mad(),x.var(),x.std(),x.skew(),x.kurt()],index=['总数','最小值','最小值位置','25%分位数','中位数','75%分位数','均值','最大值','最大值位数','平均绝对偏差','方差','标准差','偏度','峰度'])
  • 1
  • 2
  • 3
  • 4
  • 5

执行该函数,查看一下d1数据集的这些统计函数值:

df = pd.DataFrame(status(d1))
df
  • 1
  • 2

结果:

在实际的工作中,我们可能需要处理的是一系列的数值型数据框,如何将这个函数应用到数据框中的每一列呢?可以使用apply函数,这个非常类似于R中的apply的应用方法。
将之前创建的d1,d2,d3数据构建数据框:

df = pd.DataFrame(np.array([d1,d2,d3]).T, columns=['x1','x2','x3'])
df.head()df.apply(status)
  • 1
  • 2
  • 3
  • 4

结果:

3、加载CSV数据

import numpy as np
import pandas as pdbank = pd.read_csv("D://bank/bank-additional-train.csv")
bank.head()    #查看前5行
  • 1
  • 2
  • 3
  • 4
  • 5

描述性统计1:describe()

result = bank['age'].describe()
pd.DataFrame(result )   #格式化成DataFrame
  • 1
  • 2

描述性统计2:describe(include=[‘number’])

include中填写的是数据类型,若想查看所有数据的统计数据,则可填写object,即include=['object'];若想查看float类型的数据,则为include=['float']。
  • 1
  • 2
result = bank.describe(include=['object'])
  • 1


含义:

  • count:指定字段的非空总数。
  • unique:该字段中保存的值类型数量,比如性别列保存了男、女两种值,则unique值则为2。
  • top:数量最多的值。
  • freq:数量最多的值的总数。
bank.describe(include=['number'])
  • 1

连续变量的相关系数(corr)

bank.corr()
  • 1

协方差矩阵(cov)

bank.cov()
  • 1

删除列

bank.drop('job', axis=1)    #删除年龄列,axis=1必不可少
  • 1

排序

bank.sort_values(by=['job','age'])  #根据工作、年龄升序排序
bank.sort_values(by=['job','age'], ascending=False)     #根据工作、年龄降序排序
  • 1
  • 2

多表连接

准备数据:

import numpy as np
import pandas as pdstudent = {'Name':['Bob','Alice','Carol','Henry','Judy','Robert','William'],'Age':[12,16,13,11,14,15,24],'Sex':['M','F','M','M','F','M','F']}score = {'Name':['Bob','Alice','Carol','Henry','William'],'Score':[75,35,87,86,57]}df_student = pd.DataFrame(student)
df_studentdf_score = pd.DataFrame(score)
df_score
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

student:

score:

内连接

stu_score1 = pd.merge(df_student, df_score, on='Name')
stu_score1
  • 1
  • 2
  • 注意,默认情况下,merge函数实现的是两个表之间的内连接,即返回两张表中共同部分的数据。可以通过how参数设置连接的方式,left为左连接;right为右连接;outer为外连接。

左连接

stu_score2 = pd.merge(df_student, df_score, on='Name',how='left')
stu_score2
  • 1
  • 2

  • 左连接中,没有Score的学生Score为NaN

缺失值处理

现实生活中的数据是非常杂乱的,其中缺失值也是非常常见的,对于缺失值的存在可能会影响到后期的数据分析或挖掘工作,那么我们该如何处理这些缺失值呢?常用的有三大类方法,即删除法填补法插值法

删除法

当数据中的某个变量大部分值都是缺失值,可以考虑删除改变量;当缺失值是随机分布的,且缺失的数量并不是很多是,也可以删除这些缺失的观测。

替补法

对于连续型变量,如果变量的分布近似或就是正态分布的话,可以用均值替代那些缺失值;如果变量是有偏的,可以使用中位数来代替那些缺失值;对于离散型变量,我们一般用众数去替换那些存在缺失的观测。

插补法

插补法是基于蒙特卡洛模拟法,结合线性模型、广义线性模型、决策树等方法计算出来的预测值替换缺失值。

查询某一字段数据为空的数量

sum(pd.isnull(stu_score2['Score']))
结果:2
  • 1
  • 2

直接删除缺失值

stu_score2.dropna()
  • 1

删除前:

删除后:

  • 默认情况下,dropna会删除任何含有缺失值的行

删除所有行为缺失值的数据

import numpy as np
import pandas as pddf = pd.DataFrame([[1,2,3],[3,4,np.nan],[12,23,43],[55,np.nan,10],[np.nan,np.nan,np.nan],[np.nan,1,2]],columns=['a1','a2','a3'])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

df.dropna()     #该操作会删除所有有缺失值的行数据
  • 1

df.dropna(how='all')    #该操作仅会删除所有列均为缺失值的行数据
  • 1

填充数据

使用一个常量来填补缺失值,可以使用fillna函数实现简单的填补工作:

1、用0填补所有缺失值

df.fillna(0)
  • 1

2、采用前项填充或后向填充

df.fillna(method='ffill')   #用前一个值填充
  • 1

df.fillna(method='bfill')   #用后一个值填充
  • 1

3、使用常量填充不同的列

df.fillna({'a1':100,'a2':200,'a3':300})
  • 1

4、用均值或中位数填充各自的列

a1_median = df['a1'].median()   #计算a1列的中位数
a1_median=7.5a2_mean = df['a2'].mean()       #计算a2列的均值
a2_mean = 7.5a3_mean = df['a3'].mean()       #计算a3列的均值
a3_mean = 14.5df.fillna({'a1':a1_median,'a2':a2_mean,'a3':a3_mean})   #填充值
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

  • 很显然,在使用填充法时,相对于常数填充或前项、后项填充,使用各列的众数、均值或中位数填充要更加合理一点,这也是工作中常用的一个快捷手段。

数据打乱(shuffle)

实际工作中,经常会碰到多个DataFrame合并后希望将数据进行打乱。在pandas中有sample函数可以实现这个操作。

df = df.sample(frac=1)
  • 1
  • 这样对可以对df进行shuffle。其中参数frac是要返回的比例,比如df中有10行数据,我只想返回其中的30%,那么frac=0.3。

有时候,我们可能需要打混后数据集的index(索引)还是按照正常的排序。我们只需要这样操作

df = df.sample(frac=1).reset_index(drop=True)  

转载于http://blog.csdn.net/A632189007/article/details/76176985

用python进行统计分析相关推荐

  1. 数据分析 python 用途-python数据统计分析

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

  2. python数据分析-python数据统计分析

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

  3. python数据统计分析

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

  4. 【CSDN软件工程师能力认证学习精选】python数据统计分析

    CSDN软件工程师能力认证(以下简称C系列认证)是由中国软件开发者网CSDN制定并推出的一个能力认证标准.C系列认证历经近一年的实际线下调研.考察.迭代.测试,并梳理出软件工程师开发过程中所需的各项技 ...

  5. 数据科学与python——Pandas统计分析基础(数据堆叠+数据清洗)

    Pandas统计分析基础数据堆叠+数据清洗 一.合并数据:获取完整的数据集. 1.读取数据 2.将两个csv文件按照mete.csv文件的日期对齐 3.纵向合并数据data1与data2 4.使用dr ...

  6. python做统计分析_用Python做数据分析,Numpy,Pandas,matp

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 用Python做数据分析,Numpy,Pandas,matplotlib是怎么也绕不开的三个包,我最开始学习pandas是看的<利用Python进行 ...

  7. 采用python批量统计分析Excel表格数据

    最近为了做点小事情,需要对12个Excel文件进行处理,每个Excel文件的数据量都非常庞大.所处理的数据是全国196个站点2000年至2011年每天的降水数据,需要根据这些数据统计出每个站点的年降水 ...

  8. 利用python进行统计分析的一些笔记(1)

    这个姿势笔记,比较杂乱,记录学习过程的. 第7章.数据清洗 """ Series的map方法可以接受一个函数或含有映射关系的字典型对象, 使用map是一种实现元素级转换以 ...

  9. python与统计分析课后答案_高校邦Python科学计算课后习题答案

    能与碱液反应生成红色的化合物是 答:大黄素 关于坚持一个中国的原则两说法错误的是 答:大陆和台湾同属一个中国的事实已经改变 弗洛伊德认为"如果性满足轻易可以获得,一切美好的追求会变得停滞不前 ...

最新文章

  1. cocos2dx 场景的切换
  2. python3.7和3.8的区别-Python 3.8 新功能来一波(大部分人都不知道)
  3. 联想笔记本不能无线上网
  4. CVPR 2019 | 目标检测之面向更高精度的包围框回归
  5. 数据分析入门_char01
  6. php实现把es6转为es5,使用webpack将ES6转化ES5的实现方法
  7. 均胜群英:PC+移动端数字化管理,两年降本7%,人均产值提高300%
  8. ElasticSearch的安装过程
  9. ElementUI:tree给节点添加icon图标
  10. 【python爬虫】动漫之家漫画下载(scrapy)
  11. 神经网络是不是分类算法,人工神经网络分类算法
  12. 判断一个数是否为质数(素数)
  13. android studio图形验证码,android 一行代码,快速实现图片验证码(附android studio 版小demo)...
  14. MPICH2 bcast广播函数使用
  15. Jenkins中Maven构建Archiving会重命名jar
  16. 搭建前端错误监控系统
  17. DNF 单机游戏 手机游戏 网络游戏 推荐游戏 TXT 小说 外挂 辅助
  18. 支付设计白皮书:支付系统的总架构
  19. 深圳市专精特新企业申报流程及奖励政策重点介绍,补贴20-50万
  20. 邻居表项的mcast_solicit数量

热门文章

  1. 网络直播电视之M3U8解析篇(上)
  2. sfc流程图怎么画_GX Works2编程软件SFC流程图编写
  3. 成型泡沫组件的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  4. BZOJ 3891 USACO 2014 Dec Piggy Back 搜索 最短路
  5. 2015山东毕业生如何进行网上报道(报到证)?
  6. ps基础学习:邮票效果制作
  7. RAD Studio 11.2 详细图文安装教程 (delphi 11.2)
  8. 程序员理财的正确姿势
  9. 研究方向确定:移动网络优化
  10. android平板车载,酷狗发布Android Pad版 抢滩车载及平板应用市场