pandas+matplotlib数据处理和绘图

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
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值