用python进行统计分析
模块为我们提供了非常多的描述性统计分析的指标函数,如总和、均值、最小值、最大值等,我们来具体看看这些函数:
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
![](http://static.blog.csdn.net/images/save_snippets.png)
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
![](http://static.blog.csdn.net/images/save_snippets.png)
- 必须注意的是,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
![](http://static.blog.csdn.net/images/save_snippets.png)
执行该函数,查看一下d1数据集的这些统计函数值:
df = pd.DataFrame(status(d1))
df
- 1
- 2
![](http://static.blog.csdn.net/images/save_snippets.png)
结果:
在实际的工作中,我们可能需要处理的是一系列的数值型数据框,如何将这个函数应用到数据框中的每一列呢?可以使用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
![](http://static.blog.csdn.net/images/save_snippets.png)
结果:
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
![](http://static.blog.csdn.net/images/save_snippets.png)
描述性统计1:describe()
result = bank['age'].describe()
pd.DataFrame(result ) #格式化成DataFrame
- 1
- 2
![](http://static.blog.csdn.net/images/save_snippets_01.png)
描述性统计2:describe(include=[‘number’])
include中填写的是数据类型,若想查看所有数据的统计数据,则可填写object,即include=['object'];若想查看float类型的数据,则为include=['float']。
- 1
- 2
![](http://static.blog.csdn.net/images/save_snippets_01.png)
result = bank.describe(include=['object'])
- 1
![](http://static.blog.csdn.net/images/save_snippets_01.png)
含义:
- count:指定字段的非空总数。
- unique:该字段中保存的值类型数量,比如性别列保存了男、女两种值,则unique值则为2。
- top:数量最多的值。
- freq:数量最多的值的总数。
bank.describe(include=['number'])
- 1
![](http://static.blog.csdn.net/images/save_snippets_01.png)
连续变量的相关系数(corr)
bank.corr()
- 1
![](http://static.blog.csdn.net/images/save_snippets.png)
协方差矩阵(cov)
bank.cov()
- 1
![](http://static.blog.csdn.net/images/save_snippets_01.png)
删除列
bank.drop('job', axis=1) #删除年龄列,axis=1必不可少
- 1
![](http://static.blog.csdn.net/images/save_snippets.png)
排序
bank.sort_values(by=['job','age']) #根据工作、年龄升序排序
bank.sort_values(by=['job','age'], ascending=False) #根据工作、年龄降序排序
- 1
- 2
![](http://static.blog.csdn.net/images/save_snippets_01.png)
多表连接
准备数据:
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
![](http://static.blog.csdn.net/images/save_snippets.png)
student:
score:
内连接
stu_score1 = pd.merge(df_student, df_score, on='Name')
stu_score1
- 1
- 2
![](http://static.blog.csdn.net/images/save_snippets_01.png)
- 注意,默认情况下,merge函数实现的是两个表之间的内连接,即返回两张表中共同部分的数据。可以通过how参数设置连接的方式,left为左连接;right为右连接;outer为外连接。
左连接
stu_score2 = pd.merge(df_student, df_score, on='Name',how='left')
stu_score2
- 1
- 2
![](http://static.blog.csdn.net/images/save_snippets.png)
- 左连接中,没有Score的学生Score为NaN
缺失值处理
现实生活中的数据是非常杂乱的,其中缺失值也是非常常见的,对于缺失值的存在可能会影响到后期的数据分析或挖掘工作,那么我们该如何处理这些缺失值呢?常用的有三大类方法,即删除法
、填补法
和插值法
。
删除法
当数据中的某个变量大部分值都是缺失值,可以考虑删除改变量;当缺失值是随机分布的,且缺失的数量并不是很多是,也可以删除这些缺失的观测。
替补法
对于连续型变量,如果变量的分布近似或就是正态分布的话,可以用均值替代那些缺失值;如果变量是有偏的,可以使用中位数来代替那些缺失值;对于离散型变量,我们一般用众数去替换那些存在缺失的观测。
插补法
插补法是基于蒙特卡洛模拟法,结合线性模型、广义线性模型、决策树等方法计算出来的预测值替换缺失值。
查询某一字段数据为空的数量
sum(pd.isnull(stu_score2['Score']))
结果:2
- 1
- 2
![](http://static.blog.csdn.net/images/save_snippets_01.png)
直接删除缺失值
stu_score2.dropna()
- 1
![](http://static.blog.csdn.net/images/save_snippets_01.png)
删除前:
删除后:
- 默认情况下,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
![](http://static.blog.csdn.net/images/save_snippets.png)
df.dropna() #该操作会删除所有有缺失值的行数据
- 1
![](http://static.blog.csdn.net/images/save_snippets_01.png)
df.dropna(how='all') #该操作仅会删除所有列均为缺失值的行数据
- 1
![](http://static.blog.csdn.net/images/save_snippets_01.png)
填充数据
使用一个常量来填补缺失值,可以使用fillna函数实现简单的填补工作:
1、用0填补所有缺失值
df.fillna(0)
- 1
![](http://static.blog.csdn.net/images/save_snippets_01.png)
2、采用前项填充或后向填充
df.fillna(method='ffill') #用前一个值填充
- 1
![](http://static.blog.csdn.net/images/save_snippets_01.png)
df.fillna(method='bfill') #用后一个值填充
- 1
![](http://static.blog.csdn.net/images/save_snippets_01.png)
3、使用常量填充不同的列
df.fillna({'a1':100,'a2':200,'a3':300})
- 1
![](http://static.blog.csdn.net/images/save_snippets_01.png)
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
![](http://static.blog.csdn.net/images/save_snippets.png)
- 很显然,在使用填充法时,相对于常数填充或前项、后项填充,使用各列的众数、均值或中位数填充要更加合理一点,这也是工作中常用的一个快捷手段。
数据打乱(shuffle)
实际工作中,经常会碰到多个DataFrame合并后希望将数据进行打乱。在pandas中有sample
函数可以实现这个操作。
df = df.sample(frac=1)
- 1
![](http://static.blog.csdn.net/images/save_snippets_01.png)
- 这样对可以对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进行统计分析相关推荐
- 数据分析 python 用途-python数据统计分析
1. 常用函数库 scipy包中的stats模块和statsmodels包是python常用的数据分析工具,scipy.stats以前有一个models子模块,后来被移除了.这个模块被重写并成为了现在 ...
- python数据分析-python数据统计分析
1. 常用函数库 scipy包中的stats模块和statsmodels包是python常用的数据分析工具,scipy.stats以前有一个models子模块,后来被移除了.这个模块被重写并成为了现在 ...
- python数据统计分析
1. 常用函数库 scipy包中的stats模块和statsmodels包是python常用的数据分析工具,scipy.stats以前有一个models子模块,后来被移除了.这个模块被重写并成为了 ...
- 【CSDN软件工程师能力认证学习精选】python数据统计分析
CSDN软件工程师能力认证(以下简称C系列认证)是由中国软件开发者网CSDN制定并推出的一个能力认证标准.C系列认证历经近一年的实际线下调研.考察.迭代.测试,并梳理出软件工程师开发过程中所需的各项技 ...
- 数据科学与python——Pandas统计分析基础(数据堆叠+数据清洗)
Pandas统计分析基础数据堆叠+数据清洗 一.合并数据:获取完整的数据集. 1.读取数据 2.将两个csv文件按照mete.csv文件的日期对齐 3.纵向合并数据data1与data2 4.使用dr ...
- python做统计分析_用Python做数据分析,Numpy,Pandas,matp
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 用Python做数据分析,Numpy,Pandas,matplotlib是怎么也绕不开的三个包,我最开始学习pandas是看的<利用Python进行 ...
- 采用python批量统计分析Excel表格数据
最近为了做点小事情,需要对12个Excel文件进行处理,每个Excel文件的数据量都非常庞大.所处理的数据是全国196个站点2000年至2011年每天的降水数据,需要根据这些数据统计出每个站点的年降水 ...
- 利用python进行统计分析的一些笔记(1)
这个姿势笔记,比较杂乱,记录学习过程的. 第7章.数据清洗 """ Series的map方法可以接受一个函数或含有映射关系的字典型对象, 使用map是一种实现元素级转换以 ...
- python与统计分析课后答案_高校邦Python科学计算课后习题答案
能与碱液反应生成红色的化合物是 答:大黄素 关于坚持一个中国的原则两说法错误的是 答:大陆和台湾同属一个中国的事实已经改变 弗洛伊德认为"如果性满足轻易可以获得,一切美好的追求会变得停滞不前 ...
最新文章
- cocos2dx 场景的切换
- python3.7和3.8的区别-Python 3.8 新功能来一波(大部分人都不知道)
- 联想笔记本不能无线上网
- CVPR 2019 | 目标检测之面向更高精度的包围框回归
- 数据分析入门_char01
- php实现把es6转为es5,使用webpack将ES6转化ES5的实现方法
- 均胜群英:PC+移动端数字化管理,两年降本7%,人均产值提高300%
- ElasticSearch的安装过程
- ElementUI:tree给节点添加icon图标
- 【python爬虫】动漫之家漫画下载(scrapy)
- 神经网络是不是分类算法,人工神经网络分类算法
- 判断一个数是否为质数(素数)
- android studio图形验证码,android 一行代码,快速实现图片验证码(附android studio 版小demo)...
- MPICH2 bcast广播函数使用
- Jenkins中Maven构建Archiving会重命名jar
- 搭建前端错误监控系统
- DNF 单机游戏 手机游戏 网络游戏 推荐游戏 TXT 小说 外挂 辅助
- 支付设计白皮书:支付系统的总架构
- 深圳市专精特新企业申报流程及奖励政策重点介绍,补贴20-50万
- 邻居表项的mcast_solicit数量
热门文章
- 网络直播电视之M3U8解析篇(上)
- sfc流程图怎么画_GX Works2编程软件SFC流程图编写
- 成型泡沫组件的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- BZOJ 3891 USACO 2014 Dec Piggy Back 搜索 最短路
- 2015山东毕业生如何进行网上报道(报到证)?
- ps基础学习:邮票效果制作
- RAD Studio 11.2 详细图文安装教程 (delphi 11.2)
- 程序员理财的正确姿势
- 研究方向确定:移动网络优化
- android平板车载,酷狗发布Android Pad版 抢滩车载及平板应用市场