电商销售数据分析项目
说明:项目通过jupter notebook。使用pandas,numpy,matplotlib等第三方库对某电子产品数据进行不同角度和指标上的分析。
数据连接:
链接: https://pan.baidu.com/s/1c3nRiGrx66RDPY93SUpWEA
提取码:2h89
导入库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
#设置中文编码和负号的正常显示
plt.rcParams['font.family']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
1、导入数据
# 导入数据(将数据集命名为df),显示数据的前5行
df = pd.read_csv('E:/PythonData/电子产品销售分析.csv')
df.head()
2、查看每列数据的统计
# 查看统计数据
df.describe()
3、将evenet_time列数据类型转为日期
#数据清洗和处理 、通过切片提取时间
#数据类型转化
df['event_time'] = pd.to_datetime(df['event_time'].str[:19], format="%Y-%m-%d %H:%M:%S")
# 显示所有数据信息,时间类型为datetime64
df.info()
4、增加月、日、时间列
#计算时间变量,分别提取时间中的 月,天,小时
df['Month'] = df['event_time'].dt.month
df['Day'] = df['event_time'].dt.day
df['hour'] = df['event_time'].dt.hour
df.head()
5、查看数据缺失值情况
df.isnull().sum()
6、将有缺失项的两列用missing填充
# 用字符串missing代替缺失值
df['category_code'].fillna('missing',inplace=True)
df['brand'].fillna('missing',inplace=True)
# 再次查看缺失值
df.isnull().sum()
7、删除重复值
#重复值检查和处理
df.duplicated()
# 删除重复值
df.drop_duplicates()
8、画出每月成交订单数量折线图
# 创建图像
plt.figure(figsize=(10,6))
# 成交(price>0),每月的订单数量,对月份进行分组,对用户id进行计数
plt.plot(df[df['price']>0].groupby('Month')['user_id'].count())
# 调整刻度
plt.xticks(range(12)[::1])
# 添加标注
plt.xlabel('月份')
plt.ylabel('订单数量')
# 增加标题
plt.title('每月订单数量')
9、画出每月成交订单金额折线图
# 创建图像
plt.figure(figsize=(10,6))
# 成交(price>0),每月的成交额,对月份进行分组,对价格求和聚合
plt.plot(df[df['price']>0].groupby('Month')['price'].sum())
# 调整刻度
plt.xticks(range(12)[::1])
# 添加标注
plt.xlabel('月份')
plt.ylabel('订单金额')
# 增加标题
plt.title('每月订单金额')
总结:
从1到8月份,订单数量与订单金额呈上升趋势,8月份达到顶峰,之后的月份开始逐渐下降。
10、每月消费人数的折线图
#创建图形
plt.figure(figsize=(10,6))
# 对月份进行分组,对用户id进行去重计数聚合
plt.plot(df[df['price']>0].groupby('Month')['user_id'].nunique(), linestyle='--', color='g')
# 调整刻度
plt.xticks(range(12)[::1])
# 添加标注
plt.xlabel('月份')
plt.ylabel('消费人数')
# 添加标题
plt.title('每月消费人数')
# 显示图形
plt.show()
11、不同省份用户数量的柱状图
# 创建图形
plt.figure(figsize=(10,6))
# price>0的行,对不同地区进行分组。返回去用户id去重后的个数(返回的是唯一值的个数),并对个数进行升序操作
df[df['price']>0].groupby('local')['user_id'].nunique().sort_values(ascending=True).plot.bar()
# 添加标注
plt.xlabel('省份')
plt.ylabel('用户数量')
# 添加标题
plt.title('不同省份用户数量')
# 显示图形
plt.show()
12、不同省份订单数量的水平柱状图
# 绘制图形
plt.figure(figsize=(10,6))
# 对省份进行分组,对用户id进行计数聚合,并对个数大小进行升序排列
df[df['price']>0].groupby('local')['order_id'].count().sort_values(ascending=True).plot.barh()
# 添加标注
plt.xlabel('订单数量')
plt.ylabel('省份')
# 添加标题
plt.title('不同省份订单数量')
#显示图形
plt.show()
总结:
由上两张图可知,广东省的用户数量和订单数量都是最多。其次为上海,和北京等的经济较为发达的城市。其余省份都处于一个较低的水平。
13、下单时间与订单数量变化折线图
# 创建图形
plt.figure(figsize=(10,6))
# 对小时进行分组,对订单id进行计数聚合,绘制出折线图
df[df['price']>0].groupby('hour')['order_id'].count().plot()
# 添加标注
plt.xlabel('小时')
plt.ylabel('订单数')
# 添加标题
plt.title('订单随小时数变化')
# 显示图形
plt.show()
总结:
由上图可知:在0到10点的下单数量为持续上升的趋势,在10点达到峰值,之后的时间呈下降趋势。
14、查看未完成订单的数量
# 未完成订单,意味着价格为0
df[df['price']==0].count() # 结果显示有39个订单未完成
15、消费次数与消费金额关系的散点图
#消费次数与消费金额的关系
# 创建图形
plt.figure(figsize=(10,6))
# 绘制散点图,x轴表示对id进行分组,对订单id进行计数聚合。y轴表示对用户id进行分组,对金额进行求和聚合
plt.scatter(x=df[df['price']>0].groupby('user_id')['order_id'].count(),
y=df[df['price']>0].groupby('user_id')['price'].sum())
#添加标签
plt.xlabel('消费次数')
plt.ylabel('消费金额')
# 添加标题
plt.title('消费次数与消费金额关系')
# 显示图形
plt.show()
总结:
消费金额与消费次数呈正相关上升的趋势。
16、用户男女人数对比扇形图
df_sex = df['sex'].value_counts() # 计算不同数或是字符串出现的个数
# 只筛选出订单成交的行
df = df[df['price']>0]
# 创建图形
plt.figure(figsize=(8,8))
# 绘制饼图
plt.pie(df_sex.values, labels=df_sex.index, autopct='%.2f%%',
wedgeprops={'linewidth':0.5,'edgecolor':'green'},
textprops={'fontsize':20,'color':'#003371'}
)
# 添加标题
plt.title('男女占比', size=20)
# 显示图形
plt.show()
17、年龄分布直方图
plt.figure(figsize=(10,6),dpi=80)
# 注意设置每个矩形的边缘颜色
plt.hist(df['age'], bins=10, color='steelblue', edgecolor='k', label='年龄', alpha=0.5)
plt.tick_params(top='off', right='off')
# 添加标注
plt.xlabel('年龄')
# 添加标题
plt.title('年龄分布直方图')
# 显示图形
plt.show()
18、将年龄离散化,增加一列age_box
bins = [10,20,30,40,50]
# 将年龄分布成4个区间
labels = ['10-20','20-30','30-40','40-50']
df['age_box'] = pd.cut(df['age'], bins, labels=labels)
# 对四个不同的区间人计数
age_box = df['age_box'].value_counts()[labels]
age_box
19、不同年龄段与购买数量的关系,画出柱状图
# 创建图形
plt.figure(figsize=(10,6))
# 绘制柱状图
plt.bar(labels, age_box.values, color='#cb3a56')
# 添加标注
plt.ylabel('购买数量', size=22)
plt.xlabel('年龄分段', size=22)
# 调整刻度
plt.xticks(size=18)
plt.yticks(size=18)
# 添加标题
plt.title('不同年龄分段的购买情况', size=25)
# 显示图形
plt.show()
总结:
由上图,10-20年龄段的人购买数量最少,其余的居多。40-50岁对应的购买数量是最多的。