本文分享知识:

  1. os 模块获取上一级目录的绝对地址
  2. pands 读取 sqlite3 数据库中的数据
  3. 用sklearn中的线性回归模型预测销售额数据
  4. 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对不同的商品销售数据进行预测分析的更多相关文章

  1. 第二章:python基础,数据类型

    """第二章:python基础,数据类型2.1 变量及身份运算补充2.2 二进制数2.3 字符编码每8位所占的空间位一个比特,这是计算机中最小的表示单位.每8个比特组成一 ...

  2. Python中利用LSTM模型进行时间序列预测分析

    时间序列模型 时间序列预测分析就是利用过去一段时间内某事件时间的特征来预测未来一段时间内该事件的特征.这是一类相对比较复杂的预测建模问题,和回归分析模型的预测不同,时间序列模型是依赖于事件发生的先后顺 ...

  3. 第二章:Python基础の快速认识基本数据类型和操作实战

    本课主题 字符串和操作实战 二进制操作实战 List 列表和操作实战 Tuple 元組和操作实战 Dict 字典和操作实战 作業需求 引言 这遍文章简单介绍了 Python 字符串和集合的方法和应用, ...

  4. 【Learning Python】【第二章】Python基础类型和基础操作

    基础类型: 整型: py 3.0解决了整数溢出的问题,意味着整型不必考虑32位,64位,有无符号等问题,你写一个1亿亿亿,就是1亿亿亿,不会溢出 a = 10 ** 240 print(a) 执行以上 ...

  5. python入门课程 第二章 安装Python

    2-1 选择python版本首先python2.7和python3是不可以通用的目前丰富的类库都支持python2.7,所以选用Python2.7    选择python2.7版本2-2 window ...

  6. 第二章、Python基础

    @编程语言分类: a.从运行角度分: 编译型:代码本身不能运行,需要一个附加程序(编译器〉将其转换成由二进制代码组成的可执行文件,然后才可以运行. 如 c/c++ 特点: 开发效率低.执行速度快 解释 ...

  7. 统计学习导论:基于R应用——第二章习题

    目前在看统计学习导论:基于R应用,觉得这本书非常适合入门,打算把课后习题全部做一遍,记录在此博客中. 第二章习题 1. (a) 当样本量n非常大,预测变量数p很小时,这样容易欠拟合,所以一个光滑度更高 ...

  8. Python黑帽编程 2.0 第二章概述

    Python黑帽编程 2.0 第二章概述 于 20世纪80年代末,Guido van Rossum发明了Python,初衷据说是为了打发圣诞节的无趣,1991年首次发布,是ABC语言的继承,同时也是一 ...

  9. Python核心编程第三版第二章学习笔记

    第二章 网络编程 1.学习笔记 2.课后习题 答案是按照自己理解和查阅资料来的,不保证正确性.如由错误欢迎指出,谢谢 1. 套接字:A network socket is an endpoint of ...

  10. Python开发【第二章】:Python的数据类型

    基本数据类型 一.整型 如: 18.73.84 整型具备如下功能: class int(object): """ int(x=0) -> int or long i ...

随机推荐

  1. windows下搭建stm8s开发环境

    拓扑:windows -> st_link_v2 ->目标板,目标板不由st_link_v2供电 接线: st_link_v2: NRST GND SWIM 3V3 ↓ ↓ ↓ ↓ 目标板 ...

  2. python菜鸟学习 : 16 pymongo和openpyxl的联合使用

    # -*- coding: utf-8 -*-import pymongo, openpyxl, time# pymongo#条件删选mongodb数据def mongodb_expoter(db_n ...

  3. k8s Service yaml文件编写

    apiVersion: app/v1 #API的版本号,版本号可以用 kubectl api-versions 查询到 kind: Service #表明资源对象,例如Pod.RC.Service.N ...

  4. XenForo论坛安装

    1.下载安装程序,程序可以到qq群里面找,或者是联系我 2.域名+/install安装 3.汉化后台,访问https://www.cnxfans.com/resources/xenforo-2-x.1 ...

  5. Back Propagation - Python实现

    算法特征①. 统一看待线性运算与非线性运算; ②. 确定求导变量loss影响链路; ③. loss影响链路梯度逐级反向传播. 算法推导Part Ⅰ以如下简单正向传播链为例, 引入线性运算与非线性运算符 ...

  6. hex 函数

    python的内置函数. 一.作用: 用于将十进制数改为十六进制数,并以字符串的形式表示. 二.语法: hex(number)  # 其中number为十进制的整数. 三.返回值: 以字符串形式表示的 ...

  7. Elasticsearch 实战

    需求 假设现在有这么一个需求,系统接了很多的报文,需要提供全文检索,为了简化,报文目前只有类型,流水号,内容这三个字段. 索引设计 建立msg索引,映射规则如下 PUT /msg { "ma ...

  8. System.Data.Linq 无法引用的问题

    参考文章  https://www.bbsmax.com/A/1O5EM0G457/ 已经在工程中引用了system.data.linq,但是在代码中,输入 using System.Data.Lin ...

  9. maven加载本地的jar包

    方式1 ,通过scope = system的方式加载 <dependency> <groupId>com.sun.jna</groupId> <artifac ...

  10. linux系统过滤ip地址总结

    Perl模块用法 安装Perl模块 # 官网地址 https://metacpan.org/pod/Regexp::Common # 下载地址 https://cpan.metacpan.org/au ...