这是一个竞赛的题目,包括但不限于以下分析维度:
- 各门店商品销量与利润,时间趋势
- 各类别商品销量与利润
- 各价格区间内的畅销商品与滞销商品
- 销售淡季和销售旺季的商品销量分布
根据以上分析目的,主要进行利润、时间、销量指标的数据处理,基础数据包括三张表,分别是2019年销售信息、门店信息、商品信息表:
import pandas as pd
import numpy as np
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity='all'
pd.options.display.max_columns = None
由于三张表的字段有重复且都是中文,所以用英文名称来代表中文字段名称,方便代码的书写。
input_file1 = 'sales2019.csv'
input_file2 = '门店信息.xlsx'
input_file3 = '商品信息.xlsx'
store_id = '门店编号'
store_name = '门店名称'
cost = '采购单价'
sales_price = '销售单价'
sales_count = '销售数量'
sales_fees = '销售金额'
deal_date = '交易日期'
product_id = '商品编号'
type_large = "大分类名称"
type_small = "小分类名称"
profit = '利润'
store_name = '门店简称'
store_namecom = '门店名称'
year = '交易日期_年份'
month = '交易日期_月份'
导入数据的时候注意编码问题,这里的用到了gb2312,
data_sales = pd.read_csv(input_file1, encoding = 'gb2312')
data_store = pd.read_excel(input_file2)
data_product = pd.read_excel(input_file3)
查看空值比例
#查看空值百分比
data_sales.isnull().sum()/data_sales.shape[0] #由于采购单价和销售单价存在少量空值,则删除不会影响其他
data_store.isnull().sum()/data_store.shape[0]
data_product.isnull().sum()/data_product.shape[0]
交易日期 0.000000
门店编号 0.000000
收银台编号 0.000000
商品编号 0.000000
交易日期_年份 0.000000
交易日期_月份 0.000000
商品处编号 0.000000
商品部门编号 0.000000
销售数量 0.000000
销售金额 0.000000
采购单价 0.016224
销售单价 0.018680
dtype: float64
门店编码 0.0
门店名称 0.0
门店简称 0.0
小区编码 0.0
小区名称 0.0
城市名称 0.0
dtype: float64
大分类编号 0.0
大分类名称 0.0
分类编号 0.0
分类名称 0.0
小分类编号 0.0
小分类名称 0.0
商品编号 0.0
商品名称 0.0
dtype: float64
空值极少,只有销售单价和采购单价有为空的数据,而且这两个指标再做利润的时候还会用到,所以要进行填充。
首先,要观察这俩字段空值的规律。
data_sales_cost_pricenull = data_sales[pd.isna(data_sales[cost]) | pd.isna(data_sales[sales_price])]
data_sales_cost_pricenull.info()
data_sales_cost_pricenull.head()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 19331 entries, 20 to 1034807
Data columns (total 12 columns):
交易日期 19331 non-null object
门店编号 19331 non-null int64
收银台编号 19331 non-null int64
商品编号 19331 non-null object
交易日期_年份 19331 non-null int64
交易日期_月份 19331 non-null int64
商品处编号 19331 non