我是靠谱客的博主 健忘果汁,最近开发中收集的这篇文章主要介绍Python的pandas模块的运用之数据分析一、基本统计分析二、分组分析、结构分析、分布分析、交叉分析三、RFM分析四、回归分析,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
pandas之数据分析
- 一、基本统计分析
- 二、分组分析、结构分析、分布分析、交叉分析
- 三、RFM分析
- 四、回归分析
- (一)、简单线性回归分析
- (二)、多重线性回归分析
说明:没有特殊说明的话,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)
最后
以上就是健忘果汁为你收集整理的Python的pandas模块的运用之数据分析一、基本统计分析二、分组分析、结构分析、分布分析、交叉分析三、RFM分析四、回归分析的全部内容,希望文章能够帮你解决Python的pandas模块的运用之数据分析一、基本统计分析二、分组分析、结构分析、分布分析、交叉分析三、RFM分析四、回归分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复