北京的网站开发公司,单页网站seo怎么做,株洲建设工程造价信息网站,网站做支付借口多少钱Python数据分析项目-基于Python的销售数据分析项目 文章目录 Python数据分析项目-基于Python的销售数据分析项目项目介绍数据分析结果导出数据查阅 数据分析内容哪些类别比较畅销?哪些商品比较畅销?不同门店的销售额占比哪个时间段是超市的客流高封期?查看源数据类型计算本月…Python数据分析项目-基于Python的销售数据分析项目 文章目录 Python数据分析项目-基于Python的销售数据分析项目项目介绍数据分析结果导出数据查阅 数据分析内容哪些类别比较畅销?哪些商品比较畅销?不同门店的销售额占比哪个时间段是超市的客流高封期?查看源数据类型计算本月的相关的指标计算上月相关指标计算去年同期相关指标创建DataFrame 添加同比和环比字段 项目介绍
数据 分析结果导出 近些年来国内大型连锁超市如雨后春笋般迸发对于各个超市来说竞争压力不可谓 不大为了拓展、保留客户各种促销手段应运而生。 以下为国内某连锁超市的成交统计数据针对于该数据挖掘其中价值为该超市的促销手段提供技术支持。
数据查阅
import pandas as pd
from datetime import datetime# 导入数据源parse_dates将时间字符串转为日期时间格式
datapd.read_csv(order-14.3.csv,parse_dates[成交时间],encodinggbk)
print(data.shape)
data.head()
(3478, 7)
商品ID 类别ID 门店编号 单价 销量 成交时间 订单ID
0 30006206 915000003 CDNL 25.23 0.328 2017-01-03 09:56:00 20170103CDLG000210052759
1 30163281 914010000 CDNL 2.00 2.000 2017-01-03 09:56:00 20170103CDLG000210052759
2 30200518 922000000 CDNL 19.62 0.230 2017-01-03 09:56:00 20170103CDLG000210052759
3 29989105 922000000 CDNL 2.80 2.044 2017-01-03 09:56:00 20170103CDLG000210052759
4 30179558 915000100 CDNL 47.41 0.226 2017-01-03 09:56:00 20170103CDLG000210052759
数据分析内容
哪些类别比较畅销?
# ascendingFalse 降序
data.groupby(类别ID)[销量].sum().reset_index().sort_values(by销量,ascendingFalse).head(10)data.groupby(类别ID)[销量].sum(): 这一部分首先对数据集 data 按照 “类别ID” 进行分组然后针对每个类别的销量销量列进行求和操作。 .reset_index(): 对分组后的结果进行重置索引将其转换为一个新的DataFrame以便后续操作。 .sort_values(by销量, ascendingFalse): 对DataFrame按照销量销量列进行降序排序即将销量最高的类别排在最前面。参数 ascendingFalse 表示按降序排列。 .head(10): 获取排序后的前10行数据即销量最高的10个商品类别。
哪些商品比较畅销?
pd.pivot_table(data,index商品ID,values销量,aggfuncsum).reset_index().sort_values(by销量,ascendingFalse).head(10)pd.pivot_table(data, index商品ID, values销量, aggfuncsum)这部分代码使用了 Pandas 库中的 pivot_table 函数它用于创建透视表。在这里它的参数含义如下 data指定数据源即数据集。index商品ID表示将 “商品ID” 列作为透视表的行索引。values销量表示将 “销量” 列作为需要聚合的数值列。aggfuncsum表示对 “销量” 列进行汇总计算这里使用的是求和函数 sum。 .reset_index()对生成的透视表结果进行重置索引将其转换为一个新的DataFrame对象。 .sort_values(by销量, ascendingFalse)对透视表结果按照 “销量” 列进行降序排序即将销量最高的商品排在最前面。参数 ascendingFalse 表示按降序排列。 .head(10)获取排序后的前10行数据即销量最高的10个商品。
不同门店的销售额占比
data[销售额]data[销量]*data[单价]
# 不同门店销售
print(data.groupby(门店编号)[销售额].sum())
# 不同门店销售额占比
dfbb data.groupby(门店编号)[[销售额]].sum()/data[销售额].sum()
dfbb.rename(columns{销售额:销售额占比},inplaceTrue)
dfbbdata[销售额]data[销量]*data[单价]首先创建了一个新的列 “销售额”其值为 “销量” 列和 “单价” 列对应位置的乘积表示每个商品的销售额。 print(data.groupby(门店编号)[销售额].sum())使用 groupby 函数按照 “门店编号” 对数据进行分组然后对每个门店的销售额进行求和操作得到不同门店的销售额总和。 dfbb data.groupby(门店编号)[[销售额]].sum()/data[销售额].sum()这一部分是计算各门店销售额在总销售额中的占比。首先使用 groupby 函数按照 “门店编号” 分组然后对每个门店的销售额进行求和操作。接着将每个门店的销售额与总销售额相除得到销售额占比。 dfbb.rename(columns{销售额:销售额占比},inplaceTrue)对生成的 DataFrame 对象进行重命名将列名 “销售额” 改为 “销售额占比”以便更清晰地表示数据含义。
import matplotlib as pltplt.rcParams[figure.figsize] (16.0, 8.0) # 设置figure_size尺寸
plt.rcParams[font.sans-serif][SimHei] # 用来设置字体样式以正常显示中文标签
plt.rcParams[axes.unicode_minus]False # 默认是使用Unicode负号设置正常显示字符如正常显示负号
plt.rcParams[font.size] 15(data.groupby(门店编号)[销售额].sum()/data[销售额].sum()).plot.pie()哪个时间段是超市的客流高封期?
# 利用自定义时间格式函数strftime提取小时数
data[小时]data[成交时间].map(lambda x:int(x.strftime(%H)))
# 对小时和订单去重
trafficdata[[小时,订单ID]].drop_duplicates()
# 求每小时的客流量
traffic.groupby(小时)[订单ID].count().plot()data[小时]data[成交时间].map(lambda x:int(x.strftime(%H)))这一部分代码使用了 map 函数和 lambda 表达式将 “成交时间” 列中的时间信息提取出小时数并存储到新的列 “小时” 中。strftime(%H) 方法用于将时间转换为字符串并提取小时部分。 trafficdata[[小时,订单ID]].drop_duplicates()这一部分代码将数据集中的 “小时” 和 “订单ID” 列提取出来并对其进行去重操作得到每小时的订单数量。 traffic.groupby(小时)[订单ID].count().plot()这部分代码计算了每小时的客流量首先使用 groupby 函数按照 “小时” 列进行分组然后对每个小时的订单ID数量进行计数操作。最后调用 plot 方法绘制曲线图横轴为小时纵轴为客流量订单数量。 查看源数据类型
import pandas as pd
from datetime import datetimedatapd.read_csv(order-14.1.csv,parse_dates[成交时间],encodinggbk)
data.head()
# print(data.head(5))
# 查看源数据类型
data.info()import pandas as pd这行代码导入了Pandas库并将其重命名为 pd以便在后续代码中使用。 from datetime import datetime从 datetime 模块中导入 datetime 类。这是为了后续在解析日期时间时使用。 datapd.read_csv(order-14.1.csv,parse_dates[成交时间],encodinggbk)这行代码使用 pd.read_csv() 函数读取名为 “order-14.1.csv” 的CSV文件并将其加载到名为 data 的DataFrame中。其中的参数解释如下 order-14.1.csv指定要读取的CSV文件的路径。parse_dates[成交时间]指定要解析为日期时间类型的列名。在这里“成交时间” 列会被解析为日期时间类型以便后续进行时间序列的分析。encodinggbk指定文件的编码格式为GBK以正确解析包含中文字符的数据。 data.head()这行代码输出 data DataFrame 的前5行数据以便查看数据的样式和结构。 data.info()这行代码用于打印有关DataFrame的基本信息包括每列的名称、非空值的数量以及每列的数据类型等。这有助于了解数据的完整性和结构。
计算本月的相关的指标
# 计算本月的相关的指标
This_monthdata[(data[成交时间]datetime(2018,2,1))(data[成交时间]datetime(2018,2,28))]
# 销售额计算
sales_1(This_month[销量]*This_month[单价]).sum()
# 客流量计算
traffic_1This_month[订单ID].drop_duplicates().count()
# 客单价计算
s_t_1sales_1/traffic_1
print(本月销售额为{:.2f},客流量为{},客单价为{:.2f}.format(sales_1,traffic_1,s_t_1)) This_monthdata[(data[成交时间]datetime(2018,2,1))(data[成交时间]datetime(2018,2,28))]这行代码根据成交时间筛选出了本月的订单数据。使用了DataFrame的布尔索引选择了成交时间在2月1日至2月28日之间的数据。 sales_1(This_month[销量]*This_month[单价]).sum()这行代码计算了本月的销售额。首先将销量和单价相乘得到每笔订单的销售额然后对所有订单的销售额进行求和。 traffic_1This_month[订单ID].drop_duplicates().count()这行代码计算了本月的客流量。首先对订单ID列进行去重操作然后计算去重后的订单数量即客流量。 s_t_1sales_1/traffic_1这行代码计算了本月的客单价即销售额除以客流量。 print(本月销售额为{:.2f},客流量为{},客单价为{:.2f}.format(sales_1,traffic_1,s_t_1))这行代码将计算结果打印输出格式化输出了本月的销售额、客流量和客单价保留两位小数。
计算上月相关指标
# 计算上月相关指标
last_monthdata[(data[成交时间]datetime(2018,1,1))(data[成交时间]datetime(2018,1,31))]# 销售额计算
sales_2(last_month[销量]*last_month[单价]).sum()
# 客流量计算
traffic_2last_month[订单ID].drop_duplicates().count()
# 客单价计算
s_t_2sales_2/traffic_2
print(本月销售额为{:.2f},客流量为{},客单价为{:.2f}.format(sales_2,traffic_2,s_t_2)) last_monthdata[(data[成交时间]datetime(2018,1,1))(data[成交时间]datetime(2018,1,31))]这行代码根据成交时间筛选出了上月的订单数据。使用了DataFrame的布尔索引选择了成交时间在1月1日至1月31日之间的数据。 sales_2(last_month[销量]*last_month[单价]).sum()这行代码计算了上月的销售额。首先将销量和单价相乘得到每笔订单的销售额然后对所有订单的销售额进行求和。 traffic_2last_month[订单ID].drop_duplicates().count()这行代码计算了上月的客流量。首先对订单ID列进行去重操作然后计算去重后的订单数量即客流量。 s_t_2sales_2/traffic_2这行代码计算了上月的客单价即销售额除以客流量。 print(本月销售额为{:.2f},客流量为{},客单价为{:.2f}.format(sales_2,traffic_2,s_t_2))这行代码将计算结果打印输出格式化输出了上月的销售额、客流量和客单价保留两位小数。
计算去年同期相关指标
# 计算去年同期相关指标
same_monthdata[(data[成交时间]datetime(2017,2,1))(data[成交时间]datetime(2017,2,28))]sales_3(same_month[销量]*same_month[单价]).sum()traffic_3same_month[订单ID].drop_duplicates().count()
s_t_3sales_3/traffic_3
print(本月销售额为{:.2f},客流量为{},客单价为{:.2f}.format(sales_3,traffic_3,s_t_3)) same_monthdata[(data[成交时间]datetime(2017,2,1))(data[成交时间]datetime(2017,2,28))]这行代码根据成交时间筛选出了去年同期2017年2月的订单数据。使用了DataFrame的布尔索引选择了成交时间在2017年2月1日至2017年2月28日之间的数据。 sales_3(same_month[销量]*same_month[单价]).sum()这行代码计算了去年同期的销售额。首先将销量和单价相乘得到每笔订单的销售额然后对所有订单的销售额进行求和。 traffic_3same_month[订单ID].drop_duplicates().count()这行代码计算了去年同期的客流量。首先对订单ID列进行去重操作然后计算去重后的订单数量即客流量。 s_t_3sales_3/traffic_3这行代码计算了去年同期的客单价即销售额除以客流量。 print(本月销售额为{:.2f},客流量为{},客单价为{:.2f}.format(sales_3,traffic_3,s_t_3))这行代码将计算结果打印输出格式化输出了去年同期的销售额、客流量和客单价保留两位小数。
# 利用函数提高编码效率
def get_month_data(data):sale(data[销量]*data[单价]).sum()trafficdata[订单ID].drop_duplicates().count()s_tsale/trafficreturn (sale,traffic,s_t)# 本月相关指数
sales_1,traffic_1,s_t_1get_month_data(This_month)
print(sales_1,traffic_1,s_t_1)# 上月相关指数
sales_2,traffic_2,s_t_2get_month_data(last_month)
print(sales_2,traffic_2,s_t_2)# 去年同期相关指数
sales_3,traffic_3,s_t_3get_month_data(same_month)
print(sales_3,traffic_3,s_t_3) def get_month_data(data):这行代码定义了一个名为 get_month_data() 的函数它接受一个数据集 data 作为输入参数。 sale(data[销量]*data[单价]).sum()在函数内部这行代码计算了给定数据的销售额。首先将销量和单价相乘得到每笔订单的销售额然后对所有订单的销售额进行求和。 trafficdata[订单ID].drop_duplicates().count()这行代码计算了给定数据的客流量。首先对订单ID列进行去重操作然后计算去重后的订单数量即客流量。 s_tsale/traffic这行代码计算了给定数据的客单价即销售额除以客流量。 return (sale,traffic,s_t)这行代码将销售额、客流量和客单价作为元组返回给调用方。 sales_1,traffic_1,s_t_1get_month_data(This_month)这行代码调用 get_month_data() 函数计算了本月的销售额、客流量和客单价并将结果分别赋值给了 sales_1、traffic_1 和 s_t_1 变量。 类似地sales_2,traffic_2,s_t_2get_month_data(last_month) 和 sales_3,traffic_3,s_t_3get_month_data(same_month) 分别计算了上月和去年同期的相关指数。 最后print(sales_1,traffic_1,s_t_1)、print(sales_2,traffic_2,s_t_2) 和 print(sales_3,traffic_3,s_t_3) 分别打印出了本月、上月和去年同期的销售额、客流量和客单价。
创建DataFrame 添加同比和环比字段
# 创建DataFrame
reportpd.DataFrame([[sales_1,sales_2,sales_3],[traffic_1,traffic_2,traffic_3],[s_t_1,s_t_2,s_t_3]],columns[本月累计,上月同期,去年同期],index[销售额,客流量,客单价])
# print(report)
# 添加同比和环比字段
report[环比]report[本月累计]/report[上月同期]-1report[同比]report[本月累计]/report[去年同期]-1 reportpd.DataFrame([[sales_1,sales_2,sales_3],[traffic_1,traffic_2,traffic_3],[s_t_1,s_t_2,s_t_3]], columns[本月累计,上月同期,去年同期], index[销售额,客流量,客单价])这行代码创建了一个DataFrame对象 report。其中 [[sales_1,sales_2,sales_3],[traffic_1,traffic_2,traffic_3],[s_t_1,s_t_2,s_t_3]]是一个二维列表包含了本月累计、上月同期和去年同期的销售额、客流量和客单价。columns[本月累计,上月同期,去年同期]指定了DataFrame的列标签分别对应本月累计、上月同期和去年同期。index[销售额,客流量,客单价]指定了DataFrame的行标签分别对应销售额、客流量和客单价。 report[环比]report[本月累计]/report[上月同期]-1这行代码计算了环比即本月累计与上月同期的销售额、客流量和客单价的增长率。 report[同比]report[本月累计]/report[去年同期]-1这行代码计算了同比即本月累计与去年同期的销售额、客流量和客单价的增长率。
# 查看报表
report
# 将结果导出本地
report.to_csv(order.csv,encodingutf-8-sig)