Python的pandas模块的运用之数据分析


说明:没有特殊说明的话,data都表示数据框

一、基本统计分析

基本统计分析又称描述性分析,其主要统计指标有计数、求和、平均值、方差、标准差等
describe()函数的运用

import pandas
data = pandas.read_csv(
	'D:/1.csv',
	engine='python',
	encoding='ut8'
)
# sales为列
data.sales.describe()

其返回的统计指标如下表

统计指标说明对应函数
count计数count()
mean均值mean()
std标准差std()
min最小值min()
25%第一四分位quantile(0.25)
50%中位数quantile(0.50)
75%第三四分位quantile(0.75)
max最大值max()

如果只需要获取某个统计指标,可以使用以下函数

# 计数
data.sales.count()
# 最大值
data.sales.max()
# 最小值
data.sales.min()
# 求和
data.salas.sum()
# 均值
data.sales.mean()
# 方差
data.sales.var()
# 获取离排在百分30%最近的位数
data.sales.quantile(0.3, interpolation='nearest')

二、分组分析、结构分析、分布分析、交叉分析

分组分析

# 按照性别列进行分组,对年龄列进行均值统计
ga = data.groupby(
	by=['gender'],
	# 是否设置单独设置索引列,默认不设置True
	as_index=False
	)['age'].agg('mean')

结构分析
结构分析就是在分组分析的基础上,计算各组成部分所占的比重

ga = data.groupby(
	by=['gender']
)['id'].agg('count')
# 计算总用户数
ga.sum()
# 计算不同性别男女的比例
ga/ga.sum()

分布分析
分布分析是在定量分组分析的基础上进行的
交叉分析
交叉分析是分析2个或者2个变量之间的关系

# 设置年龄分段阈值
bins=[0, 20, 40, 100]
# 设置年龄分段标签
ageLabels=['20岁及以下','21到30岁','31到40岁','41岁及以上']
# 生成年龄分段列
data['年龄分层'] = pandas.cut(
	data.年龄,
	bins,
	labels=ageLabels
)
# 统计每个年龄段的人数
aggResult=data.groupby(
	by=['年龄分层']
)['用户ID'].agg['count']
# 对每个年龄段的用户进行求和
aggResult.sum()
# 计算各年龄分层的用户比例
pAggResult = round(
	aggResult/aggResult.sum(),
	4
	)*100
pAggResult.map('{:,.2f}%'.format)
 
# 进行交叉分析,行为年龄分层,列为性别,对用户ID进行统计
ptResult = data.pivot_table(
	values='用户ID',
	index='年龄分层',
	columns='性别',
	aggfunc='count'
)

三、RFM分析

RFM分析,就是根据客户的活跃程度和交易金额贡献,进行客户价值细分的一种客户细分方法
主要有3个指标:R(Recency)近度、F(Frequency)频度、M(Monetary)额度
具体的百度哈
步骤:
1、计算RFM各项分值
2、汇总RFM的分值
3、对客户进行细分

# 将交易日期处理为日期数据类型
data['DealDateTime']= pandas.to_datetime(
	data.DealDateTime,
	format='%Y/%m/%d'
)
# 求交易日期到现在的距离
from datetime import datetime
data['DateDiff'] = datetime.now()-data['DealDateTime']
# 从时间距离中获取天数
data['DateDiff'] = data['DateDiff'].dt.days
# 找出最小的最近消费距离
R_Agg=data.groupby(
	by=['CustomerID'],
	as_index=False
)['DateDiff'].agg('min')
# 统计每个用户交易的总次数,即对订单数进行计数
F_Agg = data.groupby(
	by=['CustomerID'],
	as_index=False
)['OrderID'].agg('count')
# 对每次的交易金额求和
M_Agg = data.groupby(
	by=['CustomerID'],
	as_index=False
)['sales'].agg('sum')
# 把统计结果关联起来
aggData = R_Agg.merge(F_Agg).merge(M_Agg)
# 修改列名
aggData.columns = ['CustomerID','Recency','FrequencyAgg', 'MonetaryAgg']
# 根据用户消费频次列,按照从小到大的顺序
# 求出排在0,20%,40%,60%,80%,100%
bins = aggData.FrecencyAgg.quantile(
	q=[0,0.2,0.4,0.6,0.8,1]
	interpolation='nearest'
)
# 避免最小值不在区间里
bins[0]=0
# f分值与用户消费时间成正相关关系
fLables = [1, 2, 3, 4, 5]
F_S = pandas.cut(
	aggData.FrecencyAgg,
	bins,labels=fLabels
)
# 根据用户最近的消费距离列,按照从小到大的顺序
# 求出排在0,20%,40%,60%,80%,100%
bins = aggData.RecencyAgg.quantile(
	q=[0,0.2,0.4,0.6,0.8,1]
	interpolation='nearest'
)
# 避免最小值不在区间里
bins[0]=0
# R分值与用户消费时间成反相关关系
rLables = [5, 4, 3, 2, 1]
R_S = pandas.cut(
	aggData.RecencyAgg,
	bins,labels=rLabels
)
# 根据用户消费总额列,按照从小到大的顺序
# 求出排在0,20%,40%,60%,80%,100%
bins = aggData.MonetaryAgg.quantile(
	q=[0,0.2,0.4,0.6,0.8,1]
	interpolation='nearest'
)
# 避免最小值不在区间里
bins[0]=0
# M分值与用户消费时间成正相关关系
mLables = [1, 2, 3, 4, 5]
F_S = pandas.cut(
	aggData.MonetaryAgg,
	bins,labels=mLabels
)
# 将R_S,M_S,F_S加到数据框aggData中
aggData['R_S'] = R_S
aggData['F_S'] = F_S
aggData['M_S'] = M_S
# 因为R_S,F_S,M_S得分值采用标签赋值方式进行获取
# 所以要先转为数值型再计算出RFM的得分值
aggData['RFM'] = 100*R_S.astype(int)+10*F_S.astype(int)+M_S.astype(int)

bins = aggData.RFM.quantile(
	q=[0,0.125,0.25,0.375,0.5,0.625,0.75,0.875,1]
)
bins[0]=0
# RFM值越大,得分越高
rfmLabels= [1,2,3,4,5,6,7,8]
# 根据百分位数对数据进行分段
aggData['level'] = pandas.cut(
	aggData.RFM,
	bins,labels=rfmLabels
)
# 对level进行分组,按照客户ID进行计数统计
aggData.groupby(
	by='level'
)['CustomerID'].agg('count')

四、回归分析

回归分析的步骤
1、根据预测目标,确定自变量和因变量
2、绘制散点图,确定回归模型类型
3、估计模型参数,建立回归模型
4、对回归模型进行校验
5、利用回归模型进行预测

(一)、简单线性回归分析

# 定义自变量x,因变量y
x=data['广告费用']
y=data['销售额']
# 计算相关系数
data['广告费用'].corr(data['销售额'])
# 绘制散点图
data.plot('广告费用', '销售额',kind='scatter')
from sklearn.liner_model import LinearRegression
# 使用线性回归模型进行建模
lrModel=LinearRegression()
# 使用自变量x和因变量y训练模型
lrModel.fit(x,y)
# 查看系数
lrModel.coef_
# 查看截距
lrModel.intercept_
# 计算模型精度
lrModel.score(x,y)
# 生成预测所需的自变量数据框
px = pandas.DataFrame(
	'广告费用'[20]
)
# 对未知的数据进行预测
lrModel.predict(px)

(二)、多重线性回归分析

与简单线性回归的区别是,多重线性回归是研究2个几2个以上的自变量与因变量的关系

# 定义自变量
x = data[['广告费','客流量']]
# 定义因变量
y = data[['销售额']]
# 计算相关系数
data['广告费用'].corr(data['销售额'])
data['客流量'].corr(data['销售额'])
# 广告费用作为x轴,销售额y轴,绘制散点图
data.plot('广告费用','销售额', kind='scatter')
# 客流量作为x轴,销售额y轴,绘制散点图
data.plot('客流量','销售额', kind='scatter')
# 使用线性回归模型进行建模
from sklean.linear_model import LinearRegression
lrModel = LinearRegression()
# 使用自变量x和因变量y训练模型
lrModel.fit(x,y)
# 查看系数
lrModel.coef_
# 查看截距
lrModel_intercept_
# 计算模型精度
lrModel.score(x,y)
px = pandas.DataFrame(
	{
	'广告费用':[20],
	'客流量':[5]
	}
)
# 对未知数据进行预测
lrModel.predict(px)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值