超市电商数据分析(上)
数据源概况
提取发货日期字段(Ship Date字段)的年、月信息,并整理发货年、发货月的销售总额,分析发货成本,并预测进货成本
本案例将对某大型超市的零售数据进行数据分析,通过了
解运营状况,做出合理的决策。详细字段是:
- Row ID:行编号;
- Order ID:订单ID;
- Order Date:订单日期;
- Ship Date:发货日期;
- Ship Mode:发货模式;
- Customer ID:客户ID;
- Customer Name:客户姓名;
- Segment:客户类别;
- City:客户所在城市;
- State:客户城市所在州;
- Country:客户所在国家;
- Postal Code:邮编;Market:商店所属区域;
- Region:商店所属州;
- Product ID:产品ID;
- Category:产品类别;
- Sub-Category:产品子类别;
- Product Name:产品名称;
- Sales:销售额;
- Quantity:销售量;
- Discount:折扣;
- Profit:利润;
- Shipping Cost:发货成本;
- Order Priority:订单优先级;
读取、清洗数据
1.使用pandas的read_csv读取数据后,查看各列数据的空值情况,发现Postal Code字段(邮编字段)有空值,而且这一列不重要,所以首先删除掉Postal Code列;
2. 使用DataFrame对象的describe()方法,没有发现异常数据,所以,不必处理;
3.将Order Date订单日期字段的数据修改为datetime类型;
3. 为了后续分析方便,从订单日期中分别提取年、月、季度数据,并添加三个列用来存取年、月、季度信息,分别为:’Order-year’,’Order-month’,’quarter’。
代码及结果如下:
//导入必要的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from pylab import mpl
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体为中文黑体
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示为方块的问题
//读取数据
data = pd.read_csv('market.csv',encoding='ISO-8859-1')
data.head()
data.info()
data.isnull().sum()
data.describe()
data.drop('Postal Code',axis=1,inplace=True)
data.describe()
import datetime
data['Order Date']
#pd.to_datetime(data['Order Date'], format='%d/%m/%Y',errors='coerce').fillna(pd.to_datetime(data['datetime'], format='%d-%m-%Y',errors='coerce')).isnull().sum()
temp = pd.to_datetime(data['Order Date'], format='%m/%d/%Y',errors='coerce').fillna(pd.to_datetime(data['Order Date'], format='%d-%m-%Y',errors='coerce'))
data['Order Date'] = temp.dt.date
data['Order Date']
data['Order-year'] = temp.dt.year
data['Order-month'] = temp.dt.month
data['Order-quarter'] = temp.dt.quarter
data[['Order-year','Order-month','Order-quarter']]
数据分析
利润分析
先根据年和月进行分组,再分别提取各年份(2011-2014年)的数据,分析各年份对应月的利润情况。
# 将 DataFrame 中的数据保存到 CSV 文件中
data.to_csv('market_cleaned.csv', index=False)
# 读取 CSV 文件
df = pd.read_csv('market_cleaned.csv')
# 根据年和月进行分组,分析每年的月利润情况
profit_analysis = df.groupby(['Order-year', 'Order-month'])['Profit'].sum().unstack()
# 2. 数据分析:利润分析
# 根据年和月进行分组,分析每年的月利润情况
profit_analysis = df.groupby(['Order-year', 'Order-month'])['Profit'].sum().unstack()
profit_analysis
# 设置图形大小
plt.figure(figsize=(12, 6))
# 绘制利润分析的热力图
sns.heatmap(profit_analysis, annot=True, fmt=".2f", cmap="YlGnBu")
# 设置标题和轴标签
plt.title('Monthly Profit Analysis (2011-2014)')
plt.xlabel('Month')
plt.ylabel('Year')
# 显示图形
plt.show()