读取数据

导入所需科学计算库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 忽略小警告
import warnings
warnings.filterwarnings('ignore')

读取数据

df = pd.read_csv('D:\数据分析相关笔记等\数据集\电子产品销售分析数据集\电子产品销售分析.csv')
df.head()
Unnamed: 0 event_time order_id product_id category_id category_code brand price user_id age sex local
0 0 2020-04-24 11:50:39 UTC 2294359932054536986 1515966223509089906 2.268105e+18 electronics.tablet samsung 162.01 1.515916e+18 24.0 海南
1 1 2020-04-24 11:50:39 UTC 2294359932054536986 1515966223509089906 2.268105e+18 electronics.tablet samsung 162.01 1.515916e+18 24.0 海南
2 2 2020-04-24 14:37:43 UTC 2294444024058086220 2273948319057183658 2.268105e+18 electronics.audio.headphone huawei 77.52 1.515916e+18 38.0 北京
3 3 2020-04-24 14:37:43 UTC 2294444024058086220 2273948319057183658 2.268105e+18 electronics.audio.headphone huawei 77.52 1.515916e+18 38.0 北京
4 4 2020-04-24 19:16:21 UTC 2294584263154074236 2273948316817424439 2.268105e+18 NaN karcher 217.57 1.515916e+18 32.0 广东
df['event_time'].unique()
array(['2020-04-24 11:50:39 UTC', '2020-04-24 14:37:43 UTC','2020-04-24 19:16:21 UTC', ..., '2020-11-21 10:10:01 UTC','2020-11-21 10:10:13 UTC', '2020-11-21 10:10:30 UTC'], dtype=object)
df['age'].unique()
array([24., 38., 32., 20., 21., 16., 49., 43., 37., 27., 48., 47., 28.,41., 22., 18., 44., 50., 46., 25., 34., 45., 17., 30., 36., 35.,39., 19., 40., 33., 31., 42., 23., 29., 26.])

清洗数据

提取数据时,处理与业务流程不符合数据,售价为负

df[df['price'] < 0]

处理空值

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 564169 entries, 0 to 564168
Data columns (total 12 columns):#   Column         Non-Null Count   Dtype
---  ------         --------------   -----  0   Unnamed: 0     564169 non-null  int64  1   event_time     564169 non-null  object 2   order_id       564169 non-null  int64  3   product_id     564169 non-null  int64  4   category_id    564169 non-null  float645   category_code  434799 non-null  object 6   brand          536945 non-null  object 7   price          564169 non-null  float648   user_id        564169 non-null  float649   age            564169 non-null  float6410  sex            564169 non-null  object 11  local          564169 non-null  object
dtypes: float64(4), int64(3), object(5)
memory usage: 51.7+ MB
df.isnull().sum()
Unnamed: 0            0
event_time            0
order_id              0
product_id            0
category_id           0
category_code    129370
brand             27224
price                 0
user_id               0
age                   0
sex                   0
local                 0
dtype: int64
# 删除含有空值的行
df = df.dropna(axis = 0, how = 'any')

处理数据类型

# 将'category_id', 'user_id', 'age'改为int64
df[['category_id', 'user_id', 'age']] = df[['category_id', 'user_id', 'age']].astype('int64')
df['event_time'] = pd.to_datetime(df['event_time'])
# 月
df['month'] = df['event_time'].dt.month
# 季
df['quater'] = df['event_time'].dt.to_period('Q') # 参数 M 表示月份,Q 表示季度,A 表示年度,D 表示按天
df.drop(df[df['quater'] == '1970Q1'].index, inplace=True) # 去除异常值
df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 419890 entries, 0 to 564168
Data columns (total 14 columns):#   Column         Non-Null Count   Dtype
---  ------         --------------   -----              0   Unnamed: 0     419890 non-null  int64              1   event_time     419890 non-null  datetime64[ns, UTC]2   order_id       419890 non-null  int64              3   product_id     419890 non-null  int64              4   category_id    419890 non-null  int64              5   category_code  419890 non-null  object             6   brand          419890 non-null  object             7   price          419890 non-null  float64            8   user_id        419890 non-null  int64              9   age            419890 non-null  int64              10  sex            419890 non-null  object             11  local          419890 non-null  object             12  month          419890 non-null  int64              13  quater         419890 non-null  period[Q-DEC]
dtypes: datetime64[ns, UTC](1), float64(1), int64(7), object(4), period[Q-DEC](1)
memory usage: 48.1+ MB

处理年龄组

bins = [16, 20, 30, 40, 60]
labels = ['16-19', '20-29', '30-39', '40-60']
df['agegroup'] = pd.cut(df['age'], bins, right = False, labels = labels)

查看数据

df.describe()
Unnamed: 0 order_id product_id category_id price user_id age month
count 4.198900e+05 4.198900e+05 4.198900e+05 4.198900e+05 419890.000000 4.198900e+05 419890.000000 419890.000000
mean 1.799809e+06 2.370509e+18 1.676753e+18 2.274301e+18 254.281619 1.515916e+18 33.144069 7.754607
std 7.529273e+05 2.014144e+16 3.171234e+17 2.438523e+16 321.167613 2.372070e+07 10.119800 2.448404
min 0.000000e+00 2.294360e+18 1.515966e+18 2.268105e+18 0.000000 1.515916e+18 16.000000 1.000000
25% 1.669817e+06 2.354505e+18 1.515966e+18 2.268105e+18 39.330000 1.515916e+18 24.000000 7.000000
50% 1.854132e+06 2.375487e+18 1.515966e+18 2.268105e+18 138.870000 1.515916e+18 33.000000 8.000000
75% 2.463694e+06 2.388441e+18 1.515966e+18 2.268105e+18 347.200000 1.515916e+18 42.000000 10.000000
max 2.633520e+06 2.388441e+18 2.388434e+18 2.374499e+18 11574.050000 1.515916e+18 50.000000 11.000000

price的均值在254.28元,中位数在138.87元,可能存在极值影响 年龄的平均值、中位数均在33岁,说明该数据服从正态分布或近似正态分布

数据分析

查看全年销售额的增长率

# 销售额数据分组汇总
sales_month = df.groupby(['month'])['price'].sum()
# 计算2-11月销售增长率
sales_rate_2 = sales_month[2] / sales_month[1] - 1
sales_rate_3 = sales_month[3] / sales_month[2] - 1
sales_rate_4 = sales_month[4] / sales_month[3] - 1
sales_rate_5 = sales_month[5] / sales_month[4] - 1
sales_rate_6 = sales_month[6] / sales_month[5] - 1
sales_rate_7 = sales_month[7] / sales_month[6] - 1
sales_rate_8 = sales_month[8] / sales_month[7] - 1
sales_rate_9 = sales_month[9] / sales_month[8] - 1
sales_rate_10 = sales_month[10] / sales_month[9] - 1
sales_rate_11 = sales_month[11] / sales_month[10] - 1
# 设置2-11月的增长率标签
sales_rate_2_label = '%.2f%%' % (sales_rate_2 * 100)
sales_rate_3_label = '%.2f%%' % (sales_rate_3 * 100)
sales_rate_4_label = '%.2f%%' % (sales_rate_4 * 100)
sales_rate_5_label = '%.2f%%' % (sales_rate_5 * 100)
sales_rate_6_label = '%.2f%%' % (sales_rate_6 * 100)
sales_rate_7_label = '%.2f%%' % (sales_rate_7 * 100)
sales_rate_8_label = '%.2f%%' % (sales_rate_8 * 100)
sales_rate_9_label = '%.2f%%' % (sales_rate_9 * 100)
sales_rate_10_label = '%.2f%%' % (sales_rate_10 * 100)
sales_rate_11_label = '%.2f%%' % (sales_rate_11 * 100)
# 将1-11月的销售额以及增长率转换为DataFrame
sales = pd.DataFrame({'sales_month':sales_month,'sales_rate':[0, sales_rate_2, sales_rate_3, sales_rate_4, sales_rate_5, sales_rate_6, sales_rate_7, sales_rate_8, sales_rate_9, sales_rate_10, sales_rate_11],'sales_rate_label':['0.00%', sales_rate_2_label, sales_rate_3_label, sales_rate_4_label, sales_rate_5_label, sales_rate_6_label, sales_rate_7_label, sales_rate_8_label, sales_rate_9_label, sales_rate_10_label, sales_rate_11_label]
})
# 绘制图形
from matplotlib import ticker
# 设置中文字符
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
# 设置背景样式
plt.style.use('ggplot')
# x轴数据
x = ['{}月'.format(values) for values in sales.index.tolist()]
# y轴数据
y1 = sales['sales_month']
y2 = sales['sales_rate']
# 创建画布
fig = plt.figure(figsize = (20, 8), dpi = 80)
ax1 = fig.add_subplot(111)
ax2 = ax1.twinx()
# 绘制图形
ax1.bar(x, y1, color = 'pink', label = '销售额')
ax2.plot(x, y2, color = 'black',marker = '*', label = '增长率')
ax1.set_xticks(x)
ax1.set_ylim(0, 30000000)
ax2.yaxis.set_major_formatter(ticker.PercentFormatter(xmax=1, decimals=1))
ax1.set_xlabel('月份')
ax1.set_ylabel('销售额')
ax2.set_ylabel('增长率')
ax1.set_title("销售额与增长率")
plt.legend()
plt.show()

各省销售情况

各省销售占比

# 按省分类
sales_area = df.groupby('local')['price'].sum()
# 绘图
sales_area.plot(figsize=(20,8),kind = 'pie',autopct='%1.1f%%',title='2020年总销售额占比')
# # 准备数据
# labels = sales_area.index
# size = sales_area.values
# # 设置画布
# plt.figure(figsize = (20, 8), dpi = 80)
# # 饼图属性
# plt.pie(size, labels = labels, autopct = '%.2f%%')
# # 长宽更改
# plt.axis('equal')
# plt.title('2020年总销售额占比', fontsize='x-large')
# plt.legend()
plt.show()

# 各地区每一年的销售额
month_sales_area = df.groupby(by=['local','month'])['price'].sum()
# 将分组后的多层索引转换为列数据
month_sales_area = month_sales_area.reset_index(level=[0, 1])
# 使用数据透视表重新整理数据
month_sales_area = pd.pivot_table(month_sales_area, index='local', columns='month', values='price')
# 绘制图形
month_sales_area.plot(figsize=(20, 8), kind='bar', title='2020年不同省份销售额对比')
plt.show()

各省8月份的销售额均大于其他月份,说明在8月份消费者更容易消费

前四个月的销售额很低迷,商家应针对不同月份退出不同优惠活动

各省份不同类别产品销售比

# 各省份不同类型产品的销售额
category_sales_area = df.groupby(by = ['local','category_code'])['price'].sum().reset_index().sort_values('price',ascending = False).head(50)
category_sales_area = category_sales_area.groupby(by=['local','category_code'])['price'].sum()
# 将分组后的多层索引设置为列数据
category_sales_area = category_sales_area.reset_index()
# 数据透视表整理数据
category_sales_area = pd.pivot_table(category_sales_area,index='local',columns='category_code',values='price')
# 绘制图形
category_sales_area.plot(figsize=(20, 8), kind ='bar', title='不同类别产品T50在各省份销售对比')
plt.show()

电子产品销售分析练习项目相关推荐

  1. 电子产品销售数据分析

    项目背景 本数据报告以某电子产品销售数据为数据集.以店铺和用户的角度进行探索式分析,从而了解在线销售业务的消费情况以及用户的消费行为,最终提出店铺销售建议. 数据清洗 #导入第三方库 import p ...

  2. 某在线商店电子产品销售数据可视化分析

    一.项目背景 目的:通过分析销售数据可以帮助商家了解在线销售业务的消费情况,进而分析顾客消费数据来分析顾客的消费行为和顾客特征,更好的为用户推荐相匹配的商品. 工具:Python.PowerBi 数据 ...

  3. Python 某电子产品销售数据分析报告及RFM模型(一)

    关注微信公共号:小程在线 关注CSDN博客:程志伟的博客 Python 3.7.6 (default, Jan  8 2020, 20:23:39) [MSC v.1916 64 bit (AMD64 ...

  4. 电子产品可靠性测试公司/报告/费用/机构

    电子产品可靠性测试项目及试验标准如下: 1.气候环境试验(GB2423,GJB150A,GJB4,IEC60068GJB1032,GJB322A,GJB360A,GJB548,GB4208,GJB89 ...

  5. Java项目:仿小米电子产品售卖商城系统(java+SpringBoot+Vue+MySQL+Redis+ElementUI)

    源码获取:博客首页 "资源" 里下载! 项目描述:这是一个基于SpringBoot+Vue框架开发的仿小米电子产品售卖商城系统.首先,这是一个前后端分离的项目,代码简洁规范,注释说 ...

  6. 优必选能开放软硬件源代码吗_四个项目供父母教孩子如何使用开放式硬件和电子产品...

    优必选能开放软硬件源代码吗 孩子们学得很快,并且拥有丰富的想象力. 与孩子一起进行电子或硬件项目时,要记住的最重要的事情是: 让事情变得有趣 . 只要他们的手陷入困境并且正在拆散东西,否则就有可能炸毁 ...

  7. ubuntu 串口调试工具推荐_升级版全系列视频第一个项目电子产品量产测试与烧录工具...

    第一章 前言 温馨提示:本文共10111字,预计阅读时间26分钟. 之前说过要开源100ASK_IMX6ULL批量测试GUI: 100ask_imx6ull批量测试神器即将开源 ,今天说到做到免费开源 ...

  8. 电子产品自动搜索比价系统设计与实现 项目愿景与范围

    a. 业务需求 a.1 背景 Internet的迅猛发展将人类带入了信息社会和网络经济时代,对企业发展和 个人生活都产生了深刻的影响.随着Internet的广泛应用,消费者不再受物理空 间的约束,并且 ...

  9. 基于Power BI Desktop的电子产品综合数据分析案例

    1.项目简介 2.数据理解 表1:2020年各省人口数量表: 地区:各个省份 人口数:2020年各个省份的人口数 表2:电子产品销售表: event_time:下单时间,包含其他内容,需要清洗: or ...

最新文章

  1. luogu P2596 [ZJOI2006]书架(平衡树、无旋treap(按排名分裂)一些更复杂的操作)
  2. ant导入Zookeeper到Eclipse错误path contains invalid character
  3. ajax后台如何把对象转为json_57. Django 2.1.7 查询数据返回json格式
  4. java8中-_java8中的Stream
  5. C#中的预处理指令详解
  6. 虚拟化精华问答 | 虚拟化会使管理更轻松吗?
  7. python来构建多层网络
  8. 跨网段加域的一个问题
  9. 华中科技大学计算机暑期夏令营,2019年华中科技大学计算机专业夏令营
  10. 周立功USBCAN资料分享
  11. 教案设计计算机,计算机应用基础教案设计
  12. win10中安装centos7双系统
  13. JavaScript: Checkbox onChange event is differently processed by IE and FF
  14. Android 桌面小组件 AppWidgetProvider
  15. ES — — elasticsearch初探
  16. C# 制作excel图表
  17. c++编程迷宫小游戏
  18. 计算机操作知识 p?p?t,计算机初级基本操作
  19. php调用接口及编写接口
  20. 多项式 商环 域(群论笔记)

热门文章

  1. 自实现微微型axios
  2. 2022-2028全球汽车自适应可变悬架系统行业调研及趋势分析报告
  3. 数据分析---pandas(一)
  4. 微信公众号开发教程(一)
  5. 00后专访:我是如何初中毕业年仅16岁便踏入北漂码农行业的(一)
  6. 如何使用python-docx第三方库,操作读写doc Word文档,快速制作数据报表
  7. SpringBoot+Vue实现前后端分离的旅游网站
  8. 浅谈空调冷冻机房设计注意事项
  9. 内存调试: GC_CONCURRENT freed
  10. Geometry创建