Python数据分析与数据化运营

1.4 第一个用Python实现的数据化运营分析实例-销售预测

Author
宋天龙
发布于 2018-02-06
2380 次阅读
0 次赞
0 次分享
1.4 第一个用Python实现的数据化运营分析实例-销售预测
AI 智能核心导读

以促销费用预测商品销售量为业务场景,完整演示使用Python进行数据化运营分析的端到端流程。核心涵盖数据读取与预处理、散点图分布观察、基于sklearn构建线性回归模型、模型效果评估及最终预测输出7个关键步骤,并补充了Python代码的执行与调试方法,提供基础的数据分析实战指南。

说明:本文节选自《Python 数据分析与数据化运营》中的“1.4 第一个用 Python 实现的数据化运营分析实例-销售预测”。

第一个用 Python 实现的数据化运营分析实例:销售预测

一、 案例概述

本节通过一个简单的案例,来介绍如何使用 Python 进行数据化运营分析。

案例场景:每个销售型公司都有一定的促销费用,促销费用可以带来销售量的显著提升。当给出一定的促销费用时,预计会带来多大的商品销售量?

在“附件-chapter1”中,data.txt 存储了建模所需的原始数据,get_started_example.py 是案例完整代码。以下是原始数据概况:

  • 来源:生成的模拟数据,非真实数据
  • 用途:用来做第一个销售预测案例
  • 维度数量:1
  • 记录数:100
  • 字段变量:第一列是促销费用,第二列是商品销售量
  • 数据类型:全部是浮点数值型
  • 是否有缺失值:否

二、 案例过程

下面逐步解析整个分析和实践过程。

第一步:导入库

本案例中,我们会使用四个核心库:

  • re:正则表达式库,程序中通过该库来实现字符串分割。
  • numpy:数组操作和处理库,程序中用来做格式转换和预处理。
  • sklearn:算法模型库,程序中使用了线性回归方法 linear_model
  • matplotlib:图形展示库,用来在建模前做多个字段关系分析。

代码如下:

python
1import re 2import numpy 3from sklearn import linear_model 4from matplotlib import pyplot as plt

💡 相关知识点:Python 导入库的两种方式

  1. 直接导入库:方法是 import [库名],例如 import numpy。对于名称较长的库,通常使用 as 赋予别名以方便后续使用,例如 import numpy as np
  2. 导入库中的指定函数:方法是 from [库名] import [函数名],例如 from sklearn import linear_model。这种情况下也可以使用 as 命名别名,例如 from matplotlib import pyplot as plt

第二步:导入数据

本案例中的数据为 txt 文件,我们使用 Python 默认的读取文件方法。代码如下:

python
1fn = open('data.txt', 'r') 2all_data = fn.readlines() 3fn.close()
  1. 打开文件fn = open('data.txt', 'r') 的作用是打开名为 data.txt 的文件,文件模式是只读r),并创建一个名为 fn 的文件对象,后续所有关于该文件的操作都通过 fn 执行。
    • 路径说明:由于程序文件和数据文件处于同一个目录下,因此无需指定路径。也可以通过相对路径(如 '../data/data.txt')或绝对路径(如 'd:/python_data/data/data.txt')来设置。注意绝对路径推荐使用正斜杠 /,若使用 Windows 默认的反斜杠 \,则需要写成转义字符形式 'd:\\python_data\\data\\data.txt'
  2. 读取数据all_data = fn.readlines() 的意思是,从 fn 中读取所有的行记录,并保存到一个名为 all_data 的列表中。
  3. 关闭文件fn.close() 的意思是关闭文件对象的占用。

⚠️ 提示:及时释放资源 不仅是文件对象,包括数据库游标、数据库连接等资源,在使用完成后都需要及时关闭,以减少对资源的无效占用,并防止其他模块操作该文件时因被占用而报错。

我们可以通过 all_data[0] 来查看该列表的第一个数据(Python 中的数据索引从 0 开始):

python
1In[3]: all_data[0] 2Out[3]: '28192.0\t68980.0\n'

通过查看第一个数据,我们发现这是一个由数字、水平制表符(\t)和回车符(\n)组成的字符串。这为后续的数据预处理提供了思路。

💡 相关知识点:常用转义字符 在 Python 中,反斜杠 \ 作为转义字符存在。

  • \\:反斜杠符号
  • \n:换行符
  • \t:水平制表符
  • \r:回车符

第三步:数据预处理

本阶段主要对读取的列表数据进行清洗转换,以满足数据分析展示和数据建模的需要。代码如下:

python
1x = [] 2y = [] 3for single_data in all_data: 4 tmp_data = re.split('\t|\n', single_data) 5 x.append(float(tmp_data[0])) 6 y.append(float(tmp_data[1])) 7 8x = numpy.array(x).reshape([-1, 1]) # 转换为 N 行 1 列的矩阵 9y = numpy.array(y).reshape([-1, 1]) # 转换为 N 行 1 列的矩阵
  • 创建空列表x = []y = [] 用来存放自变量和因变量数据。
  • 循环读取for single_data in all_data 通过循环每次从列表中读取一条数据。
  • 数据分割re.split('\t|\n', single_data) 分别使用 \t\n 作为分割符,将字符串进行分割。
  • 类型转换与追加x.append(float(tmp_data[0])) 将分割后的第一个值转换为浮点型并追加到列表 x 中,y 同理。
  • 矩阵转换numpy.array(x).reshape([-1, 1]) 将列表转换为数组类型,并重塑为 N 行 1 列的矩阵。

💡 提示:关于 reshape 在使用 reshape 做矩阵单行或单列的转换时,可直接使用 reshape([-1, 1]) 转换为一列,或使用 reshape([1, -1]) 转换为一行,而不必具体指定行或列的绝对数量。

第四步:数据分析

现在我们已经拥有了格式化的数据,为了确定使用哪种模型,先通过散点图来观察数据分布。代码如下:

python
1plt.scatter(x, y) 2plt.show()

代码执行后会弹出如图 1-9 所示的散点图。

图1-9散点图
图1-9散点图
图 1-9 散点图

通过散点图发现,xy 呈现明显的线性关系:当 x 增大时,y 增大;当 x 减小时,y 减小。初步判断可以选择线性回归进行模型拟合。

第五步:数据建模

建模阶段我们使用 sklearn 中的线性回归模块实现,代码如下:

python
1model = linear_model.LinearRegression() 2model.fit(x, y)
  • 创建模型model = linear_model.LinearRegression() 创建一个线性回归模型对象。
  • 模型训练model.fit(x, y)xy 分别作为自变量和因变量输入模型进行训练。

第六步:模型评估

模型创建完成后,需要进行模型拟合的校验和评估,代码如下:

python
1model_coef = model.coef_ 2model_intercept = model.intercept_ 3r2 = model.score(x, y)
  • 获取系数model.coef_ 获取模型的自变量系数。
  • 获取截距model.intercept_ 获取模型的截距。
  • 决定系数model.score(x, y) 获取模型的决定系数 R 的平方

通过上述步骤,我们可以获得线性回归方程:y = 2.09463661 * x + 13175.36904199。该回归方程的决定系数 R 的平方是 0.7876,整体拟合效果不错。

第七步:销售预测

我们已经拥有了一个可以预测的模型,现在给定促销费用(x)为 84610,进行销售预测:

python
1new_x = 84610 2pre_y = model.predict(new_x) 3print(pre_y)
  • 创建常量new_x = 84610 创建促销费用常量。
  • 输入预测model.predict(new_x) 将常量输入模型进行预测。
  • 打印结果print(pre_y) 输出销售预测值。

代码执行后,会输出 [[190402.57234225]],这就是预测的销售量。为了符合实际销量必须是整数的特点,后续可以使用 round(pre_y) 对数据做四舍五入,获得预测的整数销量。


三、 补充知识点:如何执行 Python 代码

对第一次接触 Python 的读者来讲,了解代码的执行方式是必要的。Python 代码既可以只执行特定代码行/段,也可以执行整个代码文件。

场景 1:执行特定代码行 / 段

这种方式通常是以调试的方式,逐行/模块运行代码,大多应用在单功能、模块的开发、调试和测试。

  • 在 Python 命令行中执行:打开系统终端,输入 python 进入命令行界面,逐行输入代码。
  • 在 IPython 命令行中执行:打开系统终端,输入 ipython 进入交互界面,逐行输入代码。
  • 在 PyCharm 中执行(推荐):PyCharm 是本书推荐使用的 Python IDE。

PyCharm 调试指南

  1. 第一次需要新建一个项目,Location(位置)指向本书的“附件”根目录,点击 Create(创建)。

    图1-10 在PyCharm中新建Python项目
    图1-10 在PyCharm中新建Python项目
    图 1-10 在 PyCharm 中新建 Python 项目

  2. PyCharm 界面分为 4 部分:项目/结构区代码区调试区智能提示区

    图1-11 PyCharm项目界面概览
    图1-11 PyCharm项目界面概览
    图 1-11 PyCharm 项目界面概览

  3. 在代码区,用鼠标选中要调试的程序,直接输入快捷组合键 ALT + Shift + E,即可在调试区看到代码执行状态。

    图1-12程序调试执行结果
    图1-12程序调试执行结果
    图 1-12 程序调试执行结果

场景 2:执行整个代码文件

这种方式通常在单个功能或模块开发完成后,做整体测试或程序间调用时使用。

💡 为什么推荐 PyCharm? 在 PyCharm 中已经集成了 IPython 命令行(Python Console)和系统终端窗口(Terminal)功能。在一个工具里可以实现不同的调试场景:安装第三方库、使用友好的交互提示、进行完整的项目资源管理与代码审查。


四、 案例小结

本案例看似篇幅很长,其实代码本身只用了 40 多行,完整演示了从输入数据到输出结果的整个过程。我们实现了 7 个关键步骤:导入库、获取数据、数据预处理、数据展示分析、数据建模、模型评估和销售预测。

其中,我们用到了以下基础知识:

  • Python 文件的读取
  • Python 基本操作:列表(新建、追加)、for 循环、变量赋值、字符串分割、数值转换
  • Numpy 数组操作:列表转数组、重新设置数组形状
  • 使用 Matplotlib 进行散点图展示
  • 使用 sklearn 进行线性回归的训练和预测
  • 使用 print 输出指定数据

这是本书的第一个完整案例,目的是引导读者快速进入使用 Python 进行数据化运营的场景。以下内容供读者作拓展思考之用:

  1. 通过散点图初步判断线性回归是比较好的拟合模型,是否有其他回归方法会得到更好的效果?(例如广义线性回归、SVR、CART 等)
  2. 通过图形法观察数据模型只适合用于二维数据,如果数据输入的维度超过 2 个或 2 个以上呢?
  3. 本案例中的数据量比较小,如果数据量比较大(假如有一千万条),如何进行数据归约?
  4. 回归模型除了案例中的评估指标外,还有哪些指标可以做效果评估?
分享
最后修订: 2018-02-06