Python大数据分析之数据分析

# -*- coding: utf-8 -*-

#1,基本统计分析
==================
常用统计函数:
size:计数,不需要括号
sum():求和
mean():均值
var():方差
std():标准差
==================

import pandas as pd
df = pd.read_excel(r'd:\rz.xlsx',sheet_name='Sheet3')

print(df.数分.describe())
print(df.describe())
print(df.解几.size)
print(df.解几.sum())
print(df.解几.var())

import numpy as np
print(np.average(df['数分']))  #用numpy的ave函数求均值
print(df.mode())  #计算众数


#2,分组分析
==================
根据分组字段将分析对象划分成不同的部分,以对比分析各组之间差异性。
df.groupby(by=['分类1','分类2',...])['被统计的列'].agg({列名1:统计函数1,
         列名2:统计函数2,...})
by表示按列进行分组,常用统计函数有size计数,sum求和,mean求均值
==================

import numpy as np
from pandas import read_excel
df = read_excel(r'd:\rz.xlsx',sheet_name='Sheet3')
#英语、体育、军训列的分数必须为int,否则结果会空
print(df.groupby(by='班级')['英语','体育','军训'].mean())
print(df.groupby(by=['班级','性别'])['军训'].agg(
        {'总分':np.sum,
         '人数':np.size,
         '平均值':np.mean,
         '方差':np.var,
         '标准差':np.std,
         '最高分':np.max,
         '最低分':np.min}))

#3,分布分析
#根据分析的目的,将数据进行等距或不等距分组,研究各组分布规律。
import pandas as pd
import numpy
df = pd.read_excel(r'd:\rz.xlsx',sheet_name='Sheet3')
df['总分']=df.英语+df.体育+df.军训+df.数分+df.高代+df.解几
#将数据分为3段
bins=[min(df.总分)-1,400,450,max(df.总分)+1]
#给3段数据贴标签
labels=['400以下','400到450','450以上']
df['总分分层']=pd.cut(df.总分,bins,labels=labels)
print(df)


#4,交叉分析
==================
分析两个或以上分组变量之间的关系,以交叉表形式进行变量间关系的对比分析。
pivot_table(values,index,columns,aggfunc,fill_value),将数据列透视为新表。
values表示透视新表中的值,可选参数
index透视表中的行,必选参数
columns透视表中的列,用来分割数据,可选参数
aggfunc统计函数,可选参数
fill_value表示NA值的统一替换,可选参数
==================
#接上面代码
#按index进行分组,透视所有int列
print(df.pivot_table(index=['班级','姓名'])) 
#透视指定列
print(df.pivot_table(['军训','英语','体育'],index=['班级','姓名']))
#按index进行分组,透视values列,列名按性别分开显示
print(df.pivot_table(values=['总分'],
                     index=['总分分层'],
                     columns=['性别'],
                     aggfunc=[numpy.size,numpy.mean]))


#5,结构分析
#在分组分析及交叉分析的基础之上,计算各组成部分所占的比重。
df_pt=df.pivot_table(values=['总分'],
                     index=['班级'],
                     columns=['性别'],
                     aggfunc=[numpy.sum])
print(df_pt)
print("!!!!",df_pt.sum())    #默认按行合计
print("@@@@",df_pt.sum(axis=1))  #按列合计 
print("####",df_pt.div(df_pt.sum(axis=1),axis=0))  #按列占比
print("$$$$",df_pt.div(df_pt.sum(axis=0),axis=1))  #按行占比


#6,相关分析
==================
研究现象之间是否存在某种依赖关系,并对具有依赖关系的现象探讨相关方向和程度
DataFrame.corr() 计算每列两两之间的相似度,返回DataFrame
Series.corr() 计算该序列与传入的序列之间的相关度,返回一个数值型,大小为相关度
==================

import pandas as pd
import numpy as np
df = pd.read_excel(r'd:\rz.xlsx',sheet_name='Sheet3')
print(df['高代'].corr(df['数分']))
print(df.loc[:,['英语','体育','军训','解几','数分','高代']].corr())

猜你喜欢

转载自www.cnblogs.com/xiaohuhu/p/12027267.html