python用户价值分析

数据获取:

表格数据
数据清洗后数据:链接:https://pan.baidu.com/s/1D7qOZqKmF3YR3meQPsp3sQ 
提取码:1234 

数据下载下来后,先进行数据清洗。数据清洗在进行用户价值分析,也可以直接下载我清洗后的数据。

RFM模型:

RFM的含义:

R (Recency)︰客户最近一次交易时间的间隔。R值越大,表示客户交易发生的日期越久,反之则表示客户交易发生的日期越近。

F (Frequency)︰客户在最近一段时间内交易的次数。F值越大,表示客户交易越频繁,反之则表示客户交易不够活跃。

M(Monetary)︰客户在最近一段时间内交易的金额。M值越大,表示客户价值越高,反之则表示客户价值越低。


数据透视表:

如果我们对上面的数据做一个这样的数据透视表,在excel表个是这样的,因为这个表格中用户ID是很多重复的,所以我们要分析用户的话需要将用户提取出来,根据RFM模型,我们需要获得每个用户的 最后一次交易时间,交易次数,和最近一段时间内交易的金额。以上数据透视表已经将其体现出来了,那我们就将使用代码将以上功能体现出来。

# 透视表
df = data.pivot_table(index=['CustomerID'],
                      values=['InvoiceDate', 'InvoiceNo', 'total'],
                      aggfunc={'InvoiceDate': 'max', 'InvoiceNo': 'count', 'total': 'sum'}

                      )
print(df)
CustomerID在excel 中放在行的位置,其实是列名;
values:需要处理的数据
aggfunc:是需要处理的列计算方法

计算最后一次下单的时间就是InvoiceDate的最大值,InvoiceNo 计算交易了几次,total 交易了多少钱。

客户最近一次交易时间的间隔 = 分析的数据时间段内最晚的时间 - 最后一次交易时间,这里我们用InvoiceDate列所有数据最后一次交易时间为基准。减去每个用户最后一次交易时间,得到一个时间差,然后转换为天数。
df['R'] = (df['InvoiceDate'].max() - df['InvoiceDate']).dt.days   # 求得天数
print(df)

这样就添加了一列R

 

InvoiceNo对应的是F, total对应的是M。所以我们直接改列名就好

df.rename(columns = {'InvoiceNo':'F','total':'M'},inplace= True)

rfmdf = df[['R','F','M']]
print(rfmdf)

这样我们就将RFM数据提取处理了,具体要这么分析呢?

模型分类:

 我们将数据转换为0和1。进行二分法 ,大于平均值的为1, 小于平均值的为 0

rfmdf = rfmdf.apply(lambda x : x- x.mean())
# 如果>平均值,则为'1',否则为'0'
rfmdf = rfmdf.applymap(lambda x : '1' if x>0 else '0')

再去定义一个函数将进行定义什么类型的客户。

def func(x):
    label = {
        '111': '重要价值客户',
        '101': '重要发展客户',
        '011': '重要保持客户',
        '001': '重要挽留客户',
        '110': '一般价值客户',
        '100': '一般发展客户',
        '010': '一般保持客户',
        '000': '一般挽留客户'
    }
    return label[x['R']+x['F']+x['M']]
rfmdf['label'] = rfmdf.apply(func,axis=1)
rfmdf['label'].value_counts()
print(rfmdf)

这里我们已经对客户进行了定义。但是表格不适合我们一眼看得到数据  ,接下来我们需要进行绘图。这里用到的函数是matplotlib。

对数据进行绘图:

首先我们得先下载matplotlib 函数包,命令行:pip install matplotlib

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.size'] = 20

rfmdf['label'].value_counts().plot.bar(figsize=(20,9),color='red',alpha=0.6)
plt.xticks(rotation =0)
for i ,j in enumerate(rfmdf['label'].value_counts()):
    plt.text(i-0.1,j+50,j,va='center')

plt.show()

 我这边用的是柱状图,你们可以用饼图或者其他图都可以。

以下是完整的代码

import pandas as pd
# import numpy as np
import matplotlib.pyplot as plt

data = pd.read_csv(r'E:\数据分析\用户价值分析 RFM模型\data.csv')
pd.set_option('display.max_columns', 888)  # 大于总列数
pd.set_option('display.width', 1000)
# print(data.head())
# print(data.info())

# .空值处理
# print(data.isnull().sum())  # 空值中和,查看每一列的空值

# 空值删除
data.drop(columns=['Description'], inplace=True)


# CustomerID有空值
# 删除所有列的空值
data.dropna(inplace=True)
# print(data.isnull().sum())  # 由于CustomerID为必须字段,所以强制删除其他列,以CustomerID为准
#

# 转换为日期类型
data['InvoiceDate'] = pd.to_datetime(data['InvoiceDate'])

# CustomerID 转换为整型
data['CustomerID'] = data['CustomerID'].astype('int')


# print(data.describe())

data = data[data['Quantity'] > 0]
# print(data)

#
# 查看重复值
# data[data.duplicated()]
# print(data[data.duplicated()])
# 删除重复值
data.drop_duplicates(inplace=True)
# 每张发票的总价
data['total'] = data['Quantity'] * data['UnitPrice']

# # 透视表
df = data.pivot_table(index=['CustomerID'],
                      values=['InvoiceDate', 'InvoiceNo', 'total'],
                      aggfunc={'InvoiceDate': 'max', 'InvoiceNo': 'count', 'total': 'sum'}

                      )

# 1) 对用户进行分组,求得每个用户最后一次交易时间
# 2) 分析的数据时间段内最晚的时间 - 最后一次交易时间

df['R'] = (df['InvoiceDate'].max() - df['InvoiceDate']).dt.days   # 求得天数
# print(df)
df.rename(columns = {'InvoiceNo':'F','total':'M'},inplace= True)

rfmdf = df[['R','F','M']]
print(rfmdf)

# 先二分
rfmdf = rfmdf.apply(lambda x : x- x.mean())
# 如果>平均值,则为'1',否则为'0'
rfmdf = rfmdf.applymap(lambda x : '1' if x>0 else '0')


def func(x):
    label = {
        '111': '重要价值客户',
        '101': '重要发展客户',
        '011': '重要保持客户',
        '001': '重要挽留客户',
        '110': '一般价值客户',
        '100': '一般发展客户',
        '010': '一般保持客户',
        '000': '一般挽留客户'
    }
    return label[x['R']+x['F']+x['M']]
rfmdf['label'] = rfmdf.apply(func,axis=1)

# value_counts()
rfmdf['label'].value_counts()
print(rfmdf)


plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.size'] = 20

rfmdf['label'].value_counts().plot.bar(figsize=(20,9),color='red',alpha=0.6)
plt.xticks(rotation =0)
for i ,j in enumerate(rfmdf['label'].value_counts()):
    plt.text(i-0.1,j+50,j,va='center')

plt.show()

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python电信用户流量分析是通过使用Python编程语言来处理和分析电信用户的流量数据。以下是对该主题的300字回答: 在电信网络中,用户的流量数据是关键的信息,它提供了用户在特定时间段内进行网络活动的详细记录。这些数据可以包括用户的上行和下行流量、访问的网站和应用程序、流量类型(如音频、视频或文本流量)等。 Python是一种功能强大且灵活的编程语言,它拥有丰富的数据处理和分析工具。通过使用Python,我们能够轻松地处理和分析电信用户的流量数据,揭示出对电信公司和用户都有价值的见解。 首先,我们可以使用Python编写脚本来读取和解析用户流量数据。脚本可以从原始数据文件中读取数据,并将其转换为Python可以处理的格式,例如数据框架或数组。然后,我们可以使用Python的数据分析库(如pandas)来对数据进行清洗、转换和聚合。 一旦我们完成了数据处理和准备工作,我们可以使用Python的数据可视化库(如matplotlib或seaborn)来制作流量分析的图表和图形。这些图表可以帮助我们了解用户的流量消耗模式,例如高峰和低谷的流量使用时间、流量类型的分布等。 此外,我们还可以使用Python进行更高级的流量分析,例如基于用户画像的分析。通过结合用户的流量数据和其他可用数据(如用户年龄、地理位置、订阅套餐等),我们可以使用Python的机器学习和深度学习库(如scikit-learn或TensorFlow)来构建预测模型,从而更好地理解用户的行为和需求。 总之,通过使用Python进行电信用户流量分析,我们可以利用该语言强大的数据处理和分析功能,从海量的用户流量数据中获取有价值的见解。这些见解可以帮助电信公司优化网络资源分配、提供更好的用户体验和服务,并制定更有效的营销策略。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖子是个潜力股

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值