python分析每月销售数据

时间: 2023-10-04 admin IT培训

python分析每月销售数据

python分析每月销售数据

一.数据背景

数据集是某网站下载的CD商品的数据集合,本次使用Python+Jupyter Notebook对数据集进行数据分析。数据集

二.理解数据:

数据集是TXT格式,大约有7万条数据。包含用户ID,购买日期,购买量及金额。数据清洗:

1)使用Pandas进行数据集读取,并给数据集加索引

import pandas as pd

import numpy as np

#给数据集合加横轴索引

columns=['user_id','order_dt','order_products','order_amount']

#读取文件集,并利依据空格进行数据拆分

df=pd.read_table('D:\BaiduNetdiskDownload\CDNOW_master.txt',names=columns,sep='\s+')

df.head()

2)查看数据集类型及大小:

#查看数据类型

df.info()

#查看数据集大小

df.describe()

因为数据集合中,order_dt 购买日期显示为整数型字段,后面可能用到月份的数据透视,所以这里进行数据转换成日期datetime格式,并增加一列与之对应的月份格式,方便后续数据调用。

#整数型数据进行日期格式转换,年月日日期格式

df['order_dt']=pd.to_datetime(df.order_dt,format='%Y%m%d')

#增加数据集中月份字段

df['month']=df.order_dt.values.astype('datetime64[M]')

df

三. 数据分析及可视化

1.用户消费趋势分析(月度)

对用户消费行为进行分析,并使用Matplotlib数据包进行简单的数据可视化展示

1)每月消费总额

#按照月度进行分组

month_groupby=df.groupby('month')

#每月度的交易金额求和

order_month_amount=month_groupby.order_amount.sum()

#加载数据可视化包,并进行相关设置

import matplotlib.pyplot as plt

#可视化显示在页面

%matplotlib inline

#更改图表设计风格

plt.style.use('ggplot')

#解决中文乱码问题,设置字体格式

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

#进行图表可视化

order_month_amount.plot()

#加表头,居中显示

plt.title(label='月度消费总额',loc='center')

2)每月消费人数&每月产品购买量

#ID计数

order_month_amount1=month_groupby.user_id.count()

order_month_amount1.plot()

plt.title(label='月度消费总人数',loc='center')

#产品销量求和

month_groupby.order_products.sum().plot()

plt.title(label='每月产品购买量',loc='center')

3)每月消费人数

#user_id数据去重,并按照月份统计个数(加索引)

month_user_id=df.groupby(['month','user_id']).count().reset_index()

month_user_id.groupby('month').user_id.count().plot()

plt.title('月度消费总人数',loc='center')

2.用户个体消费分析用户消费金额,消费次数描述统计

#按照用户ID进行数据拆分

grouped_user=df.groupby('user_id')

#用户ID对应数据求和

grouped_user.sum().describe()

#利用散点图,判断极值影响范围

grouped_user.sum().plot.scatter(x='order_amount',y='order_products'

#构建直方图,显示产品销量区间占比

grouped_user.sum().query('order_products<90').order_products.plot.hist(bins=20)

#计算累加值,判断

user_cumsum=grouped_user.sum().sort_values('order_amount').apply(lambda x: x.cumsum()/x.sum())

user_cumsum

#增加索引,方便构建折线图

user_cumsum.reset_index().order_amount.plot()