pandas+matplotlib数据处理和绘图

本文旨在介绍如何利用pandas和matplotlib对网店销售数据进行月度客户统计和可视化。首先,详细解释了数据说明和统计要求,如区分每月客户数和新客户数。接着,通过代码演示了数据分组、统计和去重的过程,特别是使用Grouper函数进行按月分组。最后,探讨了pandas.plot与matplotlib.plot在绘制图表上的差异,展示了如何结合两者以实现更复杂的图表功能。

1.主要目的

  1. 对数据进行分类统计
  2. 将统计后结果进行可视化

2.项目说明

2.1数据说明

已有某网店销售数据,数据中分别存储了用户名称、购买日期两列数据,部分数据如下:
在这里插入图片描述

2.2要求说明

(1)统计每月客户人数有多少
统计的是每月客户数量。例如王先生在1月份有三次购买记录,统计客户数量时只能统计为一次。
(2)统计每月新客户人数有多少
每月的新客户是指在统计周期内当月新出现的,例如李先生在1月份有购买记录,则其算1月份的新客户,1月以后的各月均不能再统计李先生。

3.项目代码

import pandas as pd
import matplotlib.pyplot as plt

# 设置字体样式,用来正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
# 用来正常显示负号
plt.rcParams['axes.unicode_minus']=False
#********************************************************************
#(1)计算每月新增客户和总客户
#读取文件数据,选取用到的4列
data=pd.read_excel('./新增客户-精简01.xlsx')
df=data.copy()
#按月对数据进行分组
grouper=pd.Grouper(key='购买日期',freq='M')
df1_list=list(df.groupby(grouper))

#用两个列表,分别存储月份及每月客户数
date1,customer1=[],[]    
for i in df1_list:
    date1.append(i[0].strftime('%Y-%m'))
    customer1.append(i[1].drop_duplicates(subset=['用户'])['用户'].count())
#用列表生成dataframe,并重置索引
df1_result=pd.DataFrame(data=customer1,index=date1).reset_index()
df1_result.columns=['购买日期','每月客户总数']

#按购买日期对数据进行从小到大排序
df2=df.sort_values(by='购买日期')
#去重,只保留最早时间的买家,以便统计每月新增用户
df2.drop_duplicates(subset='用户',inplace=True)
df2_list=list(df2.groupby(grouper))

#用列表分别统计每月新增客户
date2,customer2=[],[]   
for j in df2_list:
    date2.append(j[0].strftime('%Y-%m'))
    customer2.append(j[1]['用户'].count())
#用列表创建dataframe
df2_result=pd.DataFrame(data=customer2,index=date2).reset_index()
df2_result.columns=['购买日期','每月新客户总数']
#合并两个dataframe,合并类型很关键,如果两个df大小不一样,选错内、外连接会丢失数据
df3=pd.merge(df1_result,df2_result,on='购买日期')

#****************************************************************
#(2)将(1)的结果绘图
fig,axs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值