第二章:用Python对不同的商品销售数据进行预测分析
本文分享知识:
- os 模块获取上一级目录的绝对地址
- pands 读取 sqlite3 数据库中的数据
- 用sklearn中的线性回归模型预测销售额数据
- pyecharts 绘制柱状图
项目背景
对于商品的销售额预测,小凡之前尝试过许多方法,比如:时间序列模型、线性回归模型等。
使用模型进行数据预测,需要考虑的因素有很多,需要耗费很大的精力,而且效果也不一定好,这里小凡总结了一些简单的方法以供参考:
1、根据销售额的柱形图判断是否需要模型
2、根据任务的重要性决定模型的复杂度
3、近3个月的加权平均值是最好的选择
导入pandas、numpy、sqlchemy库
import numpy as np
import pandas as pd
from sqlalchemy import create_engine
import os
获取数据
所使用的数据均放在 data.db 中,代码的上一级目录
# 数据库地址:数据库放在上一级目录下
db_path = os.path.join(os.path.dirname(os.getcwd()),"data.db")
engine_path = "sqlite:///"+db_path
# 获取数据函数,根据输入的SQL语句返回 DataFrame 类型数据
def link_sqlite(sql):
engine = create_engine(engine_path)
df = pd.read_sql(sql,con=engine)
return df
线性数据预测
小凡绘制出所有商品的柱状图后,观察这些柱状图发现:
shapid为1的商品在最近9个月内有上升的趋势,适合用线性回归来预测数据
sql = "select * from predictSalesSummary where shopid=1"
df = link_sqlite(sql)
df.tail()
from pyecharts import options as opts
from pyecharts.charts import Bar
x_names = df["month"].tolist()
tao_bao = df["amount"].tolist()
c = (
Bar()
.add_xaxis(x_names)
.add_yaxis("销售额", tao_bao)
.set_global_opts(
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=20)),
title_opts=opts.TitleOpts(title="商品每个月销售额"),
)
)
c.render_notebook()
# 从2021年2月份开始,数据呈现上升的线性趋势
df2 = df.iloc[3:,:]
# 数据复制一份,避免操作失误导致数据受损
df3 = df2.copy()
# 将月份作为自变量
df3["x"] = list(range(2,11))
df3
from sklearn import linear_model
from sklearn.metrics import mean_squared_error,r2_score
# 自变量数据
x = df3["x"].values.tolist()
# 因变量数据
y = df3["amount"].values.tolist()
# 由于自变量只有一个维度,需要改变一下数据结构
x_reshape = np.array(x).reshape(-1,1)
# 实例化一个线性模型
lr = linear_model.LinearRegression()
# 训练数据
lr.fit(x_reshape,y)
# 预测数据
x_predict = np.array([11]).reshape(-1,1)
lr.predict(x_predict)
# array([47636.39166667])
线性模型预测shopid为 1 的商品在2021年11月的销售额为47636万元,结合10月份的销售数据来看,11月份的销售额在 [44715,47636] 之间
非线性数据预测
shopid为2的商品,在近5个月有升有降的,用模型预测会耗费很大的精力,所以采用加权平均值代替预测值的方法
shop_2_sql = "select * from predictSalesSummary where shopid=2"
shop_2_df = link_sqlite(shop_2_sql)
shop_2_df
from pyecharts import options as opts
from pyecharts.charts import Bar
x_names = shop_2_df["month"].tolist()
tao_bao = shop_2_df["amount"].tolist()
c = (
Bar()
.add_xaxis(x_names)
.add_yaxis("销售额", tao_bao)
.set_global_opts(
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=20)),
title_opts=opts.TitleOpts(title="商品每个月销售额"),
)
)
c.render_notebook()
8月份、9月份、10月份的权重为0.2,0.2,0.6,计算得出11月份的销售额为2093万元,结合10月份的销售数据来看,11月份的销售额在 [2091,2094] 之间
np.sum(shop_2_df.iloc[4:,1]*np.array([0.2,0.2,0.6]))
# 2093.44
shop_2_df.iloc[4:,1].mean()
# 2094.47
源码地址
链接:https://pan.baidu.com/s/1KRDAKfgWTs14EOBap2UWng?pwd=jx0o
提取码:jx0o
第二章:用Python对不同的商品销售数据进行预测分析的更多相关文章
- 第二章:python基础,数据类型
"""第二章:python基础,数据类型2.1 变量及身份运算补充2.2 二进制数2.3 字符编码每8位所占的空间位一个比特,这是计算机中最小的表示单位.每8个比特组成一 ...
- Python中利用LSTM模型进行时间序列预测分析
时间序列模型 时间序列预测分析就是利用过去一段时间内某事件时间的特征来预测未来一段时间内该事件的特征.这是一类相对比较复杂的预测建模问题,和回归分析模型的预测不同,时间序列模型是依赖于事件发生的先后顺 ...
- 第二章:Python基础の快速认识基本数据类型和操作实战
本课主题 字符串和操作实战 二进制操作实战 List 列表和操作实战 Tuple 元組和操作实战 Dict 字典和操作实战 作業需求 引言 这遍文章简单介绍了 Python 字符串和集合的方法和应用, ...
- 【Learning Python】【第二章】Python基础类型和基础操作
基础类型: 整型: py 3.0解决了整数溢出的问题,意味着整型不必考虑32位,64位,有无符号等问题,你写一个1亿亿亿,就是1亿亿亿,不会溢出 a = 10 ** 240 print(a) 执行以上 ...
- python入门课程 第二章 安装Python
2-1 选择python版本首先python2.7和python3是不可以通用的目前丰富的类库都支持python2.7,所以选用Python2.7 选择python2.7版本2-2 window ...
- 第二章、Python基础
@编程语言分类: a.从运行角度分: 编译型:代码本身不能运行,需要一个附加程序(编译器〉将其转换成由二进制代码组成的可执行文件,然后才可以运行. 如 c/c++ 特点: 开发效率低.执行速度快 解释 ...
- 统计学习导论:基于R应用——第二章习题
目前在看统计学习导论:基于R应用,觉得这本书非常适合入门,打算把课后习题全部做一遍,记录在此博客中. 第二章习题 1. (a) 当样本量n非常大,预测变量数p很小时,这样容易欠拟合,所以一个光滑度更高 ...
- Python黑帽编程 2.0 第二章概述
Python黑帽编程 2.0 第二章概述 于 20世纪80年代末,Guido van Rossum发明了Python,初衷据说是为了打发圣诞节的无趣,1991年首次发布,是ABC语言的继承,同时也是一 ...
- Python核心编程第三版第二章学习笔记
第二章 网络编程 1.学习笔记 2.课后习题 答案是按照自己理解和查阅资料来的,不保证正确性.如由错误欢迎指出,谢谢 1. 套接字:A network socket is an endpoint of ...
- Python开发【第二章】:Python的数据类型
基本数据类型 一.整型 如: 18.73.84 整型具备如下功能: class int(object): """ int(x=0) -> int or long i ...
随机推荐
- 借助mapshaper的简化来修复geojson的拓扑错误
在使用turf.union方法合并面的时候,报错了.无法全部合并完成. 按照提示说是出现线的拓扑错误.至于哪里错误也看不出来. turf不提供拓扑修正功能的js包 难道有转到arcgis中去修复?好搓 ...
- QSS学习
padding:内边距 margin:外边距用法
- OS-lab2
OS-lab2 启动之后,我们的操作系统要能运行,需要一个载体,就是内存.内存的访问不是直接的,而是通过MMU完成.在完成MMU之前,我们先看看一些需要用到的宏定义和函数. include pmap. ...
- home条 防止误碰
某些界面需要隐藏home条,防止误触导致页面返回 - (UIRectEdge)preferredScreenEdgesDeferringSystemGestures { return UIRectEd ...
- 4、Hadoop初识
- Maven简答题
1.什么是Maven? 自动化构建工具,专注服务于Java平台的项目构建和依赖管理 2.使用Maven的好处以及原因? (1)大量的jar包反复复制,造成冗余.使用Maven后每个jar包只在本地仓库 ...
- 小白之Python-基础中的基础02
Python-基础中的基础02 继续整理笔记,反复练习!fighting! -----------------华丽的分界线-------------变量:第一次出现叫做定义变量,再次出现为为该变量赋值 ...
- WebSocket 使用记录
WebSocket 主要解决的问题是 后端数据更新主动像前端推送数据所需依赖<dependency> <groupId>org.springframework.boot< ...
- spring mvc @Configuration addConverterFactory 无效问题
spring 版本: 4.3.7 addFormatters(FormatterRegistry registry) 不生效 <!-- 此处与 @EnableWebmvc 冲突, 配置此处后 E ...
- [js函数] shallowEqual
const isBasicType = (t: any) => { return t === "number" || t === "string" || ...