用Python實(shí)現(xiàn)的數(shù)據(jù)化運(yùn)營(yíng)分析實(shí)例——銷(xiāo)售預(yù)測(cè)

1. 案例概述

1.1 案例場(chǎng)景

每個(gè)銷(xiāo)售型公司都有一定的促銷(xiāo)費(fèi)用,促銷(xiāo)費(fèi)用可以帶來(lái)銷(xiāo)售量的顯著提升;
當(dāng)給出一定的促銷(xiāo)費(fèi)用時(shí),預(yù)計(jì)會(huì)帶來(lái)多大的銷(xiāo)售量?

1.2 數(shù)據(jù)概況
  • 來(lái)源:生成的模擬數(shù)據(jù),非真實(shí)數(shù)據(jù)
  • 維度數(shù)量:1
  • 記錄數(shù):100
  • 字段變量:第一列是促銷(xiāo)費(fèi)用,第二列是商品銷(xiāo)售量
  • 數(shù)據(jù)類(lèi)型:浮點(diǎn)數(shù)值型
  • 是否有缺失值:否
  • 數(shù)據(jù):


    image.png
1.3 案例過(guò)程

會(huì)使用的4個(gè)庫(kù)

  • Re:正則表達(dá)式,程序中通過(guò)該庫(kù)來(lái)實(shí)現(xiàn)字符串分割
  • Numpy:數(shù)組操作和處理庫(kù),程序中用來(lái)做格式轉(zhuǎn)換和預(yù)處理
  • Sklearn:算法模型庫(kù),程序中使用了線性回歸方法linear-model
  • Matplotlib:圖形展示庫(kù),用來(lái)在建模前做多個(gè)字段關(guān)系分析

2. 代碼詳解

# 導(dǎo)入庫(kù)
import re
import numpy
from sklearn import linear_model
from matplotlib import pyplot as plt

# 導(dǎo)入數(shù)據(jù)
fn = open('data.txt', 'r')    # 打開(kāi)名為“data.txt”的文件,文件模式是只讀,并創(chuàng)建一個(gè)名為fn的文件對(duì)象
all_data = fn.readlines()    # 從fn中讀取的行記錄,并保存到一個(gè)名為all_data的列表中
#print(all_data[0])    # 查看該列表的第一個(gè)數(shù)據(jù)  輸出:28192.0    68980.0
fn.close()    # 關(guān)閉文件對(duì)象的占用

# 數(shù)據(jù)預(yù)處理
x = []
y = []    # 創(chuàng)建兩個(gè)空列表
for single_data in all_data:    # 通過(guò)一個(gè)for循環(huán)每次從列表all_data中讀取一條數(shù)據(jù),并賦值給single_data
    tmp_data = re.split('\t|\n', single_data)    # 分別使用\t 和\n 作為分隔符,對(duì)single_data進(jìn)行數(shù)據(jù)分割,分割結(jié)果賦值為tmp_data
    x.append(float(tmp_data[0]))
    y.append(float(tmp_data[1]))    # 將tmp_data的第一個(gè)值和第二個(gè)值分別追加到列表x和y中。追加前,先將每個(gè)數(shù)據(jù)通過(guò)float方法設(shè)為浮點(diǎn)型(數(shù)值型)

x = numpy.array(x).reshape([100, 1])
y = numpy.array(y).reshape([100, 1])    # 將x和y由列表類(lèi)型轉(zhuǎn)換為數(shù)組類(lèi)型,同時(shí)數(shù)組的形狀是100行1列

# 數(shù)據(jù)分析展示
plt.scatter(x, y)    # 用散點(diǎn)圖展示x和y
plt.show()    # 展示圖形
散點(diǎn)圖

通過(guò)散點(diǎn)圖發(fā)現(xiàn),x和y的關(guān)系呈現(xiàn)明顯的線性關(guān)系:
x增大時(shí),y增大;x減小時(shí),y減小。
初步判斷可以選擇線性回歸進(jìn)行模型擬合。

# 數(shù)據(jù)建模
model = linear_model.LinearRegression()    # 創(chuàng)建一個(gè)模型對(duì)象
model.fit(x, y)    # 將x和y分別作為自變量和因變量輸入模型進(jìn)行訓(xùn)練

# 模型評(píng)估
model_coef = model.coef_    # 獲取模型的自變量系數(shù)并賦值為 model_coef
model_intercept = model.intercept_    # 獲取模型的截距并賦值為 model_intercept
r2 = model.score(x, y)    # 獲取模型的決定系數(shù)R的平方
# print(model_coef,model_intercept,r2)    # 輸出:(array([[2.09463661]]), array([13175.36904199]), 0.7876414684758954)

即 y = 2.09463661 * x + 13175.36904199
決定系數(shù)為 0.7876414684758954,整體擬合效果不錯(cuò)。

# 銷(xiāo)售預(yù)測(cè)
new_x = 84610    # 創(chuàng)建促銷(xiāo)費(fèi)用常量
pre_y = model.predict( numpy.array(new_x).reshape(-1, 1))    # 對(duì)促銷(xiāo)費(fèi)用常量new_x輸入模型進(jìn)行預(yù)測(cè)
print (pre_y)    # 輸出:[[190402.57234225]]
print (round (pre_y))    #  四舍五入,輸出:190403.0

3. 總結(jié)

本文實(shí)現(xiàn)了導(dǎo)入庫(kù)、獲取數(shù)據(jù)、數(shù)據(jù)預(yù)處理、數(shù)據(jù)展示分析、數(shù)據(jù)建模、模型評(píng)估、銷(xiāo)售預(yù)測(cè) 7個(gè)步驟。

用到的知識(shí):

  • Python文件讀取
  • Python基本操作(新建、追加)、for循環(huán)、變量賦值、字符串分割、數(shù)值轉(zhuǎn)換
  • Numpy數(shù)組操作:列表轉(zhuǎn)數(shù)組、重新設(shè)置數(shù)組形狀
  • 使用Matplotlib進(jìn)行散點(diǎn)圖展示
  • 使用Sklearn進(jìn)行線性回歸的訓(xùn)練和預(yù)測(cè)
  • 用print輸出指定數(shù)據(jù)

內(nèi)容來(lái)自:《Python數(shù)據(jù)分析與數(shù)據(jù)化運(yùn)營(yíng)》——宋天龍

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容