基于Python数据分析之pandas统计分析


Posted in Python onMarch 03, 2020

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

1、随机生成三组数据

import numpy as np
import pandas as pd

np.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)

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() #一次性输出多个描述性统计指标

必须注意的是,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%分位数','均值','最大值','最大值位数','平均绝对偏差','方差','标准差','偏度','峰度'])

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

df = pd.DataFrame(status(d1))
df

结果:

基于Python数据分析之pandas统计分析

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

df = pd.DataFrame(np.array([d1,d2,d3]).T, columns=['x1','x2','x3'])
df.head()

df.apply(status)

结果:

基于Python数据分析之pandas统计分析

3、加载CSV数据

import numpy as np
import pandas as pd

bank = pd.read_csv("D://bank/bank-additional-train.csv")
bank.head() #查看前5行

基于Python数据分析之pandas统计分析

描述性统计1:describe()

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

基于Python数据分析之pandas统计分析

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

include中填写的是数据类型,若想查看所有数据的统计数据,则可填写object,即include=['object'];若想查看float类型的数据,则为include=['float']。

result = bank.describe(include=['object'])

基于Python数据分析之pandas统计分析

含义:

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

基于Python数据分析之pandas统计分析

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

bank.corr()

基于Python数据分析之pandas统计分析

协方差矩阵(cov)

bank.cov()

基于Python数据分析之pandas统计分析

删除列

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

排序

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

多表连接

准备数据:

import numpy as np
import pandas as pd

student = {'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_student

df_score = pd.DataFrame(score)
df_score

student:

基于Python数据分析之pandas统计分析

score:

基于Python数据分析之pandas统计分析

内连接

stu_score1 = pd.merge(df_student, df_score, on='Name')
stu_score1

注意,默认情况下,merge函数实现的是两个表之间的内连接,即返回两张表中共同部分的数据。可以通过how参数设置连接的方式,left为左连接;right为右连接;outer为外连接。

基于Python数据分析之pandas统计分析

左连接

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

基于Python数据分析之pandas统计分析

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

缺失值处理

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

删除法

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

替补法

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

插补法

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

此处测试使用上面学生成绩数据进行处理

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

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

直接删除缺失值

stu_score2.dropna()

删除前:

基于Python数据分析之pandas统计分析

删除后:

基于Python数据分析之pandas统计分析

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

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

import numpy as np
import pandas as pd

df = 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'])

基于Python数据分析之pandas统计分析

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

基于Python数据分析之pandas统计分析

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

基于Python数据分析之pandas统计分析

填充数据

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

1、用0填补所有缺失值

df.fillna(0)

基于Python数据分析之pandas统计分析

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

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

基于Python数据分析之pandas统计分析

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

基于Python数据分析之pandas统计分析

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

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

基于Python数据分析之pandas统计分析

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

a1_median = df['a1'].median() #计算a1列的中位数
a1_median=7.5

a2_mean = df['a2'].mean() #计算a2列的均值
a2_mean = 7.5

a3_mean = df['a3'].mean() #计算a3列的均值
a3_mean = 14.5

df.fillna({'a1':a1_median,'a2':a2_mean,'a3':a3_mean}) #填充值

基于Python数据分析之pandas统计分析

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

数据打乱(shuffle)

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

df = df.sample(frac=1)

这样对可以对df进行shuffle。其中参数frac是要返回的比例,比如df中有10行数据,我只想返回其中的30%,那么frac=0.3。
有时候,我们可能需要打混后数据集的index(索引)还是按照正常的排序。我们只需要这样操作

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

以上这篇基于Python数据分析之pandas统计分析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
Apr 09 Python
python实现DES加密解密方法实例详解
Jun 30 Python
Python基于dom操作xml数据的方法示例
May 12 Python
flask框架中勾子函数的使用详解
Aug 01 Python
Python面向对象之类的封装操作示例
Jun 08 Python
简单了解python的内存管理机制
Jul 08 Python
简单了解Django ContentType内置组件
Jul 23 Python
django项目简单调取百度翻译接口的方法
Aug 06 Python
Python数据处理篇之Sympy系列(五)---解方程
Oct 12 Python
python 将dicom图片转换成jpg图片的实例
Jan 13 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
Mar 12 Python
python 实现关联规则算法Apriori的示例
Sep 30 Python
python 的numpy库中的mean()函数用法介绍
Mar 03 #Python
Python统计学一数据的概括性度量详解
Mar 03 #Python
python多维数组分位数的求取方式
Mar 03 #Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
Mar 03 #Python
python Plotly绘图工具的简单使用
Mar 03 #Python
python 函数嵌套及多函数共同运行知识点讲解
Mar 03 #Python
python实现扫雷游戏
Mar 03 #Python
You might like
PHP memcache扩展的三种安装方法
2009/04/26 PHP
一个PHP针对数字的加密解密类
2014/03/20 PHP
ThinkPHP视图查询详解
2014/06/30 PHP
PHP程序中使用adodb连接不同数据库的代码实例
2015/12/19 PHP
php实现转换html格式为文本格式的方法
2016/05/16 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
PHP校验15位和18位身份证号的类封装
2018/11/07 PHP
javascript arguments 传递给函数的隐含参数
2009/08/21 Javascript
firefox firebug中文入门教程 脚本之家新年特别版
2010/01/02 Javascript
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
2013/08/06 Javascript
jquery制作弹窗提示窗口代码分享
2014/03/02 Javascript
jQuery插件datepicker 日期连续选择
2015/06/12 Javascript
jquery+html5烂漫爱心表白动画代码分享
2015/08/24 Javascript
在 Express 中使用模板引擎
2015/12/10 Javascript
在WordPress中加入Google搜索功能的简单步骤讲解
2016/01/04 Javascript
jQuery基于json与cookie实现购物车的方法
2016/04/15 Javascript
AngularJS监听路由变化的方法
2017/03/07 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
微信小程序模板和模块化用法实例分析
2017/11/28 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
2018/09/25 Javascript
浅谈React碰到v-if
2018/11/04 Javascript
vue中实现图片压缩 file文件的方法
2020/05/28 Javascript
Python简单生成8位随机密码的方法
2017/05/24 Python
python中获得当前目录和上级目录的实现方法
2017/10/12 Python
利用Python如何将数据写到CSV文件中
2018/06/05 Python
Django中的forms组件实例详解
2018/11/08 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
2020/02/26 Python
python基于爬虫+django,打造个性化API接口
2021/01/21 Python
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
销售所有的狗狗产品:Dog.com
2016/10/13 全球购物
Blue Nile中国官网:全球知名的钻石和珠宝网络零售商
2020/03/22 全球购物
你对IPv6了解程度
2016/02/09 面试题
列车乘务员工作不细心检讨书
2014/10/07 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书