matplotlib运用:电商广告投入及销量预测【数据集+完整代码】

news2025/1/12 23:07:55

前期准备

数据准备

数据集有两个表

  1. 销售数据表
  2. 投放费用的广告费用表

文章源码获取方式 👉👉 点击文末名片

1. 分别按 日 和 月 分析销售收入

绘制子图

figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None,frameon=True)
	num:图像编号或名称.数字为编号,字符串为名称
    figsize:指定figure的宽和高.单位为英寸
    dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80 1英寸等于2.5cm,A4纸是21*30cm的纸张
	facecolor:背景颜色
	edgecolor:边框颜色
	frameon:是否显示边框

(1 ) subplot语法
subplot(nrows,ncols,sharex,sharey,subplot_kw.**fig_kw)

nrows       subplot的行数
ncols       subplot的列数
sharex      所有subplot应该使用相同的X轴刻度.(调节xlim将会影响所有subplot)
sharey      所有subplot应该使用相同的Y轴刻度(调节ylim将会影响所有subplot)
subplot_kw  用于创建各subplot的关键字字典
**fig_kw    创建figure时的其他关键字,如plt.subplots(2,2,figsize=(8,6))
import pandas as pd
import matplotlib.pyplot as plt

pd.set_option('display.unicode.east_asian_width', True) 


df = pd.read_excel('.\data\销售表.xlsx')  
df = df[['日期', '销售码洋']]  
df['日期'] = pd.to_datetime(df['日期'])  
df1 = df.set_index('日期')  
df_d = df1.resample('D').sum().to_period('D')  
df_d.to_excel(r'.\result\result1.xlsx')  

df_m = df1.resample('M').sum().to_period('M')  
df_m.to_excel(r'.\result\result2.xlsx')  

plt.rc('font', family='SimHei', size=10) 

fig = plt.figure(figsize=(9, 5)) 
ax = fig.subplots(1, 2) 

ax[0].set_title('按日分析销售收入')  # 设置图表标题
df_d.plot(kind='line', ax=ax[0], color='r')  

ax[1].set_title('按月分析销售收入')  # 设置图表标题
df_m.plot(kind='bar', ax=ax[1], color='g') 

plt.subplots_adjust(top=0.95, bottom=0.18)  
plt.savefig(r'.\result\01_sales.png')  # 保存图片
plt.show()

在这里插入图片描述

接着我们开始研究投放的广告费用与销量存在的相关关系,
如果相关度高,

我们即可以利用广告费用来预测销售量。

2. 按月份分析广告费用与销售收入

import pandas as pd
import matplotlib.pyplot as plt
源码领取+wx:xiaoyuanllsll
df1 = pd.read_excel('.\data\广告费.xlsx')
df2 = pd.read_excel('.\data\销售表.xlsx')

df2 = df2[['日期', '销售码洋']]  
# 将日期转换为日期格式
df1['投放日期'] = pd.to_datetime(df1['投放日期'])
df2['日期'] = pd.to_datetime(df2['日期'])
df1 = df1.set_index('投放日期') 
df2 = df2.set_index('日期')  

df_y1 = df1.resample('M').sum().to_period('M')  # 按月统计广告费
df_y2 = df2.resample('M').sum().to_period('M')  # 按月统计销售码洋

y1 = pd.DataFrame(df_y1['支出'])  # 广告费支出
y2 = pd.DataFrame(df_y2['销售码洋'])  # 销售码洋

plt.rc('font', family='SimHei', size=10)  

fig = plt.figure() 
ax1 = fig.add_subplot(111)  

plt.title('京东电商销售收入与广告费分析折线图')  

x_ticks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]   
x_label = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'] 
plt.xticks(x_ticks, x_label) 

ax1.plot(x_ticks, y1, color='orangered', linewidth=2, linestyle='-', marker='o', mfc='w', label='广告费')


plt.legend(loc='upper left')  

ax2 = ax1.twinx() 
ax2.plot(x_ticks, y2, color='g', linewidth=2, linestyle='-', marker='o', mfc='w', label='销售收入')
plt.legend(loc='upper center')  

plt.subplots_adjust(right=0.85)  
plt.savefig(r'.\result\02_line.png') 
plt.show()

在这里插入图片描述

从上图我们可以发现广告费和销量收入的走势基本相同,
下面我们还可以通过广告费用与销量收入的散点图来验证。

3. 广告费用与销量收入之间的散点图

import pandas as pd
import matplotlib.pyplot as plt

df1 = pd.read_excel('.\data\广告费.xlsx')
df2 = pd.read_excel('.\data\销售表.xlsx')

df2 = df2[['日期', '销售码洋']]  

df1['投放日期'] = pd.to_datetime(df1['投放日期'])
df2['日期'] = pd.to_datetime(df2['日期'])

df1 = df1.set_index('投放日期', drop=True)
df2 = df2.set_index('日期', drop=True)
df_x = df1.resample('M').sum().to_period('M')
df_y = df2.resample('M').sum().to_period('M')

x = pd.DataFrame(df_x['支出'])
y = pd.DataFrame(df_y['销售码洋'])

plt.rc('font', family='SimHei', size=11)  
plt.figure("京东电商销售收入与广告费分析散点图")  
plt.scatter(x, y, color='r')  
plt.xlabel('广告费(元)')  
plt.ylabel('销售收入(元)')
plt.subplots_adjust(left=0.15)  
plt.savefig(r'.\result\03_scatter.png')  
plt.show()

在这里插入图片描述

我们发现,

两者的确在一个线条区域上,

可以基本判别两者存在相关关系。

接下来我们就可以利用

线性回归方程

通过投放的广告费用来预测销售收入。

4. 线性回归方程通过投放的广告费用来预测销售收入

import pandas as pd
from sklearn import linear_model
import matplotlib.pyplot as plt
import numpy as np

df1 = pd.read_excel('.\data\广告费.xlsx')
df2 = pd.read_excel('.\data\销售表.xlsx')

df2 = df2[['日期', '销售码洋']]  
df1['投放日期'] = pd.to_datetime(df1['投放日期']) 
df2['日期'] = pd.to_datetime(df2['日期']) 

df1 = df1.set_index('投放日期', drop=True) 
df2 = df2.set_index('日期', drop=True) 
df_x = df1.resample('M').sum().to_period('M')
df_y = df2.resample('M').sum().to_period('M')

x = pd.DataFrame(df_x['支出'])
y = pd.DataFrame(df_y['销售码洋'])

clf = linear_model.LinearRegression() 
clf.fit(x, y)
k = clf.coef_  
b = clf.intercept_ 
print('回归系数k:', k, '截距b:', b)

x0 = np.array([120000, 130000, 150000, 180000, 200000, 250000])
x0 = x0.reshape(6, 1) 
y0 = clf.predict(x0)
print('预测销售收入:')
print(y0)

y_pred = clf.predict(x)

plt.rc('font', family='SimHei', size=11)  
plt.figure("京东电商销售数据分析与预测")
plt.scatter(x, y, color='r') 
plt.plot(x, y_pred, color='blue', linewidth=1.5) 
plt.xlabel('广告费(元)')  
plt.ylabel('销售收入(元)')
plt.subplots_adjust(left=0.15)  
plt.savefig(r'.\result\04_pred.png')  
plt.show()

from sklearn.metrics import r2_score

y_true = [360000, 450000, 600000, 800000, 920000, 1300000]  
score = r2_score(y_true, y0)  
print("预测评分")
print(score)

在这里插入图片描述

回归系数k: [[6.92235616]] 截距b: [-487521.71147034]
预测销售收入:
[[ 343161.02820353]
 [ 412384.58984301]
 [ 550831.71312199]
 [ 758502.39804046]
 [ 896949.52131943]
 [1243067.32951688]]
预测评分
0.9839200886906196

总结

最后我们对算法进行检验,
验证该算法的有效性。

利用带标签的数据,
与回归方程的预测值作比较。
常用的损失函数为:MSE(误差平方和)
最后得分为 0.9839200886906198(得分,也可做准确率)

说明这回归方程还是预测效果很好的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/560820.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

23岁大专零基础学网络安全能找到工作吗?

当然好找工作,如今在21世纪的信息时代,我们的生活与互联网越来越不可分割。但与此同时,信息安全事件也不时发生,网络安全越来越受到关注。譬如,近期360集团公布黑客帝国对我国进行长达10年的网络攻击;北京健…

MySQL调优方式

1. 选择合适的存储引擎: InnoDB 除非你的数据表使用来做只读或者全文检索 (相信现在提到全文检索,没人会用 MYSQL 了),你应该默认选择 InnoDB 。 你自己在测试的时候可能会发现 MyISAM 比 InnoDB 速度快,这是因为: MyISAM 只缓存索…

三、DRF关联表的序列化(通过主表,查询从表数据)

官方文档: Serializers - Django REST framework中文站点 上一章: 二、Django REST Framework (DRF)序列化&反序列化_做测试的喵酱的博客-CSDN博客 一、前提 models.py class MiaoClass(models.Model):id models.AutoField(primary_keyTrue, v…

Springboot +spring security,实现前后端分离,使用JSON数据格式登录(将表单提交方式改成json格式登录)

一.简介 在前面的文章中,我们使用表单方式完成登录提交,但是目前基本都是前后端分离项目,很少使用表单提交的方式,基本都是json方式,使用ajax提交,那么我们怎么将表单提交方式改成json格式登录呢&#xff…

语雀批量导出 mardown 文档(不需要 token)

推荐一个小工具:renyunkang/yuque-exporter ,可以不借助语雀超级会员的 token 实现批量导出 markdown 文档。我的语雀知识库又可以实现免费迁移了,点个小星星支持一下。 说明: 这是一个基于puppeteer 来模拟用户在浏览器的操作…

基于深度强化学习的目标驱动型视觉导航泛化模型

深度强化学习在目标驱动型视觉导航的泛化 参考论文《Towards Generalization in Target-Driven Visual Navigation by Using Deep Reinforcement Learning》 文章目录 深度强化学习在目标驱动型视觉导航的泛化1. 目标驱动型视觉导航问题2. 创新点和解决的问题2.1 创新点2.2 解…

随身WIFI折腾日记(四)---拓展USB接口读取U盘内容

五、USB行为控制 随身WIFI对外交互的接口只有WIFI和USB接口。如果要想接入其他硬件设备,拓展USB接口至关重要,对于USB接口的控制,参考如下链接: openstick项目官方教程:控制usb行为 HandsomeMod/gc: A Simple Tool To Control Usb Gadget …

Opencv C++图像处理:点多边形测试 + 矩 + 凸包 + 映射 + 反向投影

文章目录 1、点多边形测试1.1、计算像素点是在轮廓内部、外部或边界上:cv::pointPolygonTest()1.2、计算最小值和最大值及其位置:cv::minMaxLoc()1.3、实战案例 2、矩2.1、计算多边形或光栅化形状的三阶以下的所有力矩:cv::moments()2.2、计算…

Regularization

在图像中的特征处理: 平均亮度的去除 SVD Whiten PCA 参数初始化策略 数据归一化: 标准归一化缩放归一化PCA/SVD 数据归一化对梯度的影响 归一化后,可以更快的搜索到最优值点 正则化 数据增强与早停 图像数据的增强主要是通过算法…

测试新手如何去学习接口自动化测试 ?从这一套测试框架开始 。

接口自动化测试框架系列之整体介绍 1.接口自动化测试1.自动化框架概述2.搭建自动化测试框架3.测试框架中所使用到的技术 1.接口自动化测试 自动化测试虽然是测试中比较热的一门技术 ,但凡一个测试岗位,你几乎都能看到有自动化测试的要求 。但不得不说&a…

关于深度学习方面的一些概念

1、自学习(self-taught learning)与半监督学习   自学习(self-taughtlearning)是不要求未标注数据 X u X_u Xu​和已标注数据 X l X_l Xl​来自同样的分布。另外一种带限制性的方式也被称为半监督学习,它要求 X u X_u Xu​和 X l X_l Xl​服…

[快速入门前端17] CSS 选择器(6) 选择器总结

基本选择器 选择器说明语法通配符作用范围为所有标签,用于页面整体样式* { color: red }元素作用于同种标签,不能进行差异化样式设定p { color: red }类别作用于我们自行设定的类别,是使用频率最高的选择器.myClass { color: red }ID选取当前…

15JS06——流程控制-循环

目标: 1、循环 2、for循环 3、双重for循环 4、while循环 5、do while循环 6、continue break 7、命名规范以及语法格式 一、循环 1、循环的目的 可以重复执行某些代码 2、JS中的循环 for循环 while循环 do…while循环 二、for循环 在程序中,一…

机器学习 - 决策树

决策树是一种流程图,可以帮助我们根据以前的经验进行决策 比如,一个人将尝试决定他/她是否应该参加喜剧节目 下面是要用到的数据集 AgeExperienceRankNationalityGo36109UKNO42124USANO2346NNO5244USANO43218USAYES 读取并打印数据集 import pandas…

Transformer、Bert、Gpt对比系列,超详细介绍transformer的原理,bert和gpt的区别

一、Transformer架构图 Transformer 是一种用于序列到序列学习的神经网络模型,主要用于自然语言处理任务,如机器翻译、文本摘要等。它在2017年由 Google 提出,采用了注意力机制来对输入序列进行编码和解码。 Transformer 模型由编码器和解码…

随身WIFI折腾日记(五)---远程视频监控

六、远程视频监控 为了实现基于随身WIFI的网络摄像头,我参考了如下视频课程: 韦东山老师手把手带你从0开始自己做一个视频监控项目 系统由三部分组成:推流端(随身WIFI)、流媒体服务器(云服务器)、拉流端(浏览器/VLC播放器) 方案&#xff1…

NetworkInterface类

文章目录 1. 简介2. 工厂方法3. 获取方法 1. 简介 NetworkInterface类表示一个本地IP地址。这可以是一个物理接口,如额外的以太网卡(常见于防火墙和路由器),也可以是一个虚拟接口,与机器的其它IP地址绑定到同个物理硬…

ensp实践dhcp服务

ensp实践dhcp服务 1、dhcp接口分配模式2、dhcp接口地址池分配模式3、dhcp布拉布拉布拉 1、dhcp接口分配模式 1.1、路由器AR1配置dhcp动态获取 <Huawei>system-view [Huawei]interface g0/0/0 [Huawei-GigabitEthernet0/0/0]ip address 10.1.1.1 24 [Huawei-GigabitEthe…

PixiJS 源码解读:绘制矩形,底层都做了什么?

大家好&#xff0c;我是前端西瓜哥&#xff0c;今天带大家看一下 PixiJS 的源码实现。 PixiJS 是一个非常流行的 Canvas 库&#xff0c;start 数将近 4w。 使用 PixiJS 简单易用的 API&#xff0c;我们可以在浏览器页面的 Canvas 元素上高性能地绘制图形&#xff0c;实现流畅…

基于深度学习的交通标志检测和识别(从原理到环境配置/代码运行)

项目是一个基于Python和OpenCV的交通标志检测和识别项目,旨在使用计算机视觉和深度学习技术对交通标志进行检测和分类。本文将从介绍项目原理和框架开始,详细介绍该项目的实现过程和技术细节,最后给出项目的安装和使用方法。 前后结果对比 识别前 识别后 一、 项目原理和框…