基於馬爾科夫鏈的產品評估預測


馬爾可夫鏈

1、建立轉移概率矩陣:

  馬爾可夫鏈是一種時間離散、狀態離散、帶有記憶功能情況的隨機過程,是預測中常用到的一種數學模型。如果數據的本身的每一時刻的狀態僅僅取決於緊接在他前面的隨機變量的所處狀態,而與這之前的狀態無關,這就是馬爾可夫鏈的“無后效性”。

經過了解本文的銷量對於時間序列敏感性不高,具有“無后效性”的特點,因此可以根據唯品歷史以來的銷量進行其預測,可以得到下一次檔期每個商品的銷售狀態。

為了准確的計算整個目標系統的轉移概率矩陣是馬爾可夫鏈預測方法最常用到也是最基礎的內容,一般是經常是使用統計估算法,將其方法總結如下:

  假設我們所關注的序列片段存在狀態的個數為個,即狀態空間,將看作為轉移頻數生成的概率矩陣。第行,第行元素在這個轉移頻數矩陣的值除以全部元素和得到的值定義為“轉移概率”,用字母來表示,既有:

 

  由狀態經一步轉到狀態也可以用此公式來表示。因為穩定性好是頻率的一個特點,所以如果很大的時候,我們可以把頻率等價的看成是概率,因而可以用它來估算轉移概率。實際寫法上為了方便轉移頻率用符號來表示,並稱之為“轉移概率”,一步轉移概率也相應的表示為:

 

2、對離散型數列進行“馬氏性”檢驗:

  通常情況下選用離散型序列的馬爾可夫鏈來對變量具有隨機性的序列進行“馬氏性”檢驗,檢驗常用統計量。

  設研究的序列狀態個數為,用表示轉移頻數概率矩陣,把的各個列之和去除以的全部元素之和,就會得到“邊際概率”,用字母表示,其中:

 

很大時統計量:

 

  它將服從自由度為分布,現在給定顯著性水平為,經查表可得到的值(或者在excel表里面利用公式chiinv(, )計算得到)。如果,則拒絕零假設,可以認為序列具備“馬氏性”,反之,則這個序列不能當作馬爾可夫鏈來對待。

假設某一款商品的銷量是如下所示:

825058101

66

39

50

45

96

38

15

14

22

63

22

63

80

42

43

104

45

20

7

3

本文設定不同的銷售量有不同的狀態,即:

范圍

狀態

<20

滯銷

20<=and<40

平銷

40<=and<60

熱銷

>60

暢銷

由此可以得到上述商品的轉移過程的:

 

滯銷

平銷

熱銷

暢銷

滯銷

2

1

0

0

平銷

2

0

1

1

熱銷

0

1

2

2

暢銷

0

2

2

1

則該商品的為:

 

滯銷

平銷

熱銷

暢銷

4/18

4/18

5/18

5/18

 

則該商品的為:

 

滯銷

平銷

熱銷

暢銷

滯銷

0.67

0.33

0.00

0.00

平銷

0.50

0.00

0.25

0.25

熱銷

0.00

0.20

0.40

0.40

暢銷

0.00

0.40

0.40

0.20

將上述結果代入公式:

 

根據卡方分布的數據比較大小:

 

  該商品的卡方值為:大於0.1顯著水平下的,所以該商品是通過“馬氏性”檢驗的,因此該商品的轉移概率矩陣為:

 

滯銷

平銷

熱銷

暢銷

滯銷

0.6139

0.2211

0.0825

0.0825

平銷

0.335

0.315

0.2

0.15

熱銷

0.1

0.24

0.37

0.29

暢銷

0.2

0.16

0.34

0.3

 

該表格表示為:

(1)原來產品為滯銷狀態,下一次則有61.39%的概率還是滯銷狀態,有22.11%的概率變為平銷,有8.25%的概率變為熱銷,有8.25%的概率變為暢銷;

(2) 原來產品為平銷狀態,下一次則有33.50%的概率還是滯銷狀態,有31.50%的概率變為平銷,有20.00%的概率變為熱銷,有15.00%的概率變為暢銷;

(3) 原來產品為熱銷狀態,下一次則有10.00%的概率還是滯銷狀態,有24.00%的概率變為平銷,有37.00%的概率變為熱銷,有29.00%的概率變為暢銷;

(4) 原來產品為熱銷狀態,下一次則有20.00%的概率還是滯銷狀態,有16.00%的概率變為平銷,有34.00%的概率變為熱銷,有30.00%的概率變為暢銷。

 

-----------------------------------我是分割線-------------------------------

但是但是,這只是其中一個商品的預估

本店商品的其中一個

本店差不多有1700商品

怎么辦怎么辦?

首先將數據儲存出來

本文用python讀取數據

 

步驟1:excel表格的數據插入進去啊,這里是讀取表格

from openpyxl import load_workbook
1 if __name__ == '__main__':
2 
3     ##這里是打開excel將數據儲存到數組里面
4     wb = load_workbook(filename=r'C:\Users\Administrator\Desktop\data.xlsx')  ##讀取路徑
5     ws = wb.get_sheet_by_name("Sheet1")  ##讀取名字為Sheet1的sheet表
6     info_data_id = []
7     info_data_sales = []

 步驟2:表格讀取:

 1 2     for row_A in range(2, 1693):  ## 遍歷第2行到1692行
 3         id = ws.cell(row=row_A, column=1).value  ## 遍歷第2行到1692行,第1列
 4         info_data_id.append(id)
 5     for row_num_BtoU in range(2, len(info_data_id) + 2):  ## 遍歷第2行到1692行
 6         row_empty = []  ##建立一個空數組作為臨時儲存地,每次換行就被清空
 7         for i in range(2, 22):  ## 遍歷第2行到1692行,第2到21列
 8             data = ws.cell(row=row_num_BtoU, column=i).value
 9             if data == None:
10                 pass
11             else:
12                 row_empty.append(data)  ##將單元格信息儲存進去
13         info_data_sales.append(row_empty)  ##row_empty每次儲存完2到21列后壓給info_data_sales,然后row_empty被清空

 重點是建立了一個空的row_empty = []可以臨時儲存每一行的數據,等到下一次循環就被清空

表格數據樣式如下:

一共1692行22列應該,反正沒數

 步驟3:計算p.j

 1 ##這里是計算pj的
 2     info_pj = []
 3     for j in range(0, len(info_data_sales)):
 4         pj_zhixiao = 0
 5         pj_pingxiao = 0
 6         pj_rexiao = 0
 7         number = 0
 8         pj_empty = []
 9         for k in range(0, len(info_data_sales[j])):
10             number = number + 1
11             if info_data_sales[j][k] < 10:
12                 pj_zhixiao = pj_zhixiao + 1
13             elif info_data_sales[j][k] >= 10 and info_data_sales[j][k] < 30:
14                 pj_pingxiao = pj_pingxiao + 1
15             elif info_data_sales[j][k] >= 30:
16                 pj_rexiao = pj_rexiao + 1
17         chance_zhixiao = pj_zhixiao / number
18         chance_pingxiao = pj_pingxiao / number
19         chance_rexiao = pj_rexiao / number
20         pj_empty.append(chance_zhixiao)
21         pj_empty.append(chance_pingxiao)
22         pj_empty.append(chance_rexiao)
23         info_pj.append(pj_empty)  ##得到了pj初始概率

 

遍歷數組info_data_sales的每一個元素,根據我審定的判斷來計算各個狀態的出現概率:

范圍

狀態

<10

滯銷

10<=and<30

平銷

>30

熱銷

 步驟4:計算pij和fij:

 1  ##這里是計算fij和pij的
 2     info_fij = []
 3     info_pij = []
 4     for j in range(0, len(info_data_sales)):
 5         fij_zz = 0
 6         fij_zp = 0
 7         fij_zr = 0
 8         fij_pz = 0
 9         fij_pp = 0
10         fij_pr = 0
11         fij_rz = 0
12         fij_rp = 0
13         fij_rr = 0
14         fij_first = []
15         fij_second = []
16         fij_third = []
17         fij_empty = []
18         pij_first = []
19         pij_second = []
20         pij_third = []
21         pij_empty = []
22 
23         for k in range(0, len(info_data_sales[j])):
24             if k + 1 > len(info_data_sales[j]) - 1:
25                 pass
26             else:
27                 if info_data_sales[j][k] < 10 and info_data_sales[j][k + 1] < 10:
28                     fij_zz = fij_zz + 1
29                 elif info_data_sales[j][k] < 10 and info_data_sales[j][k + 1] < 30 and info_data_sales[j][k + 1] >= 10:
30                     fij_zp = fij_zp + 1
31                 elif info_data_sales[j][k] < 10 and info_data_sales[j][k + 1] >= 30:
32                     fij_zr = fij_zr + 1
33                 elif info_data_sales[j][k] < 30 and info_data_sales[j][k + 1] < 10:
34                     fij_pz = fij_pz + 1
35                 elif info_data_sales[j][k] < 30 and info_data_sales[j][k + 1] < 30 and info_data_sales[j][k + 1] >= 10:
36                     fij_pp = fij_pp + 1
37                 elif info_data_sales[j][k] < 30 and info_data_sales[j][k + 1] >= 30:
38                     fij_pr = fij_pr + 1
39                 elif info_data_sales[j][k] >= 30 and info_data_sales[j][k + 1] < 10:
40                     fij_rz = fij_rz + 1
41                 elif info_data_sales[j][k] >= 30 and info_data_sales[j][k + 1] < 30 and info_data_sales[j][k + 1] >= 10:
42                     fij_rp = fij_rp + 1
43                 elif info_data_sales[j][k] >= 30 and info_data_sales[j][k + 1] >= 30:
44                     fij_rr = fij_rr + 1
45 
46         ##這里計算fij
47         if fij_zz + fij_zp + fij_zr == 0:
48             fij_zz = 1
49         if fij_pz + fij_pp + fij_pr == 0:
50             fij_pp = 1
51         if fij_rz + fij_rp + fij_rr == 0:
52             fij_rr = 1
53         fij_first.append(fij_zz)
54         fij_first.append(fij_zp)
55         fij_first.append(fij_zr)
56         fij_second.append(fij_pz)
57         fij_second.append(fij_pp)
58         fij_second.append(fij_pr)
59         fij_third.append(fij_rz)
60         fij_third.append(fij_rp)
61         fij_third.append(fij_rr)
62         fij_empty.append(fij_first)
63         fij_empty.append(fij_second)
64         fij_empty.append(fij_third)
65         info_fij.append(fij_empty)
66         # print(info_fij)
67 
68         ##這里計算pij
69         pij_first.append(fij_zz / (fij_zz + fij_zp + fij_zr))
70         pij_first.append(fij_zp / (fij_zz + fij_zp + fij_zr))
71         pij_first.append(fij_zr / (fij_zz + fij_zp + fij_zr))
72         pij_second.append(fij_pz / (fij_pz + fij_pp + fij_pr))
73         pij_second.append(fij_pp / (fij_pz + fij_pp + fij_pr))
74         pij_second.append(fij_pr / (fij_pz + fij_pp + fij_pr))
75         pij_third.append(fij_rz / (fij_rz + fij_rp + fij_rr))
76         pij_third.append(fij_rp / (fij_rz + fij_rp + fij_rr))
77         pij_third.append(fij_rr / (fij_rz + fij_rp + fij_rr))
78 
79         pij_empty.append(pij_first)
80         pij_empty.append(pij_second)
81         pij_empty.append(pij_third)
82         info_pij.append(pij_empty)

 

先是統計各個狀態出現的概率

再壓入數組里面

步驟5:判斷馬氏性

什么數據又有了,那么就可以用公式計算了:

代碼如下:

 1   ##馬氏性判斷
 2     info_judge = []
 3     for m in range(0, len(info_pij)):
 4         sum = 0
 5         for n in range(0, len(info_pij[m])):
 6             sum_1 = 0
 7             sum_2 = 0
 8             sum_3 = 0
 9             if info_fij[m][n][0] == 0 or info_pij[m][n][0] == 0 or info_pj[m][0] == 0:
10                 sum_1 = 0
11             else:
12                 sum_1 = info_fij[m][n][0] * abs(math.log(info_pij[m][n][0] / info_pj[m][0], math.e))
13             if info_fij[m][n][1] == 0 or info_pij[m][n][1] == 0 or info_pj[m][1] == 0:
14                 sum_2 = 0
15             else:
16                 sum_2 = info_fij[m][n][1] * abs(math.log(info_pij[m][n][1] / info_pj[m][1], math.e))
17             if info_fij[m][n][2] == 0 or info_pij[m][n][2] == 0 or info_pj[m][2] == 0:
18                 sum_3 = 0
19             else:
20                 sum_3 = info_fij[m][n][2] * abs(math.log(info_pij[m][n][2] / info_pj[m][2], math.e))
21 
22             sum = sum + 2 * (sum_1 + sum_2 + sum_3)
23         info_judge.append(sum)

 

不要忘記了

import math

由於我的顯著性非常不明顯

所以用了0.2的顯著性判斷:

1     info_result = []
2     for a in info_judge:
3         if a > 5.988617:
4             info_result.append("具有馬氏性")
5         else:
6             info_result.append("")

 

 步驟6:壓回excel表格就行了

這里用到的是

import xlsxwriter
 1 first = ['是否具有馬氏性']
 2     workbook = xlsxwriter.Workbook('C:\\Users\\Administrator\\Desktop\\data1.xlsx')
 3     worksheet = workbook.add_worksheet()  # 創建一個工作表對象
 4     font = workbook.add_format(
 5         {'border': 1, 'align': 'center', 'font_size': 11, 'font_name': '微軟雅黑'})  ##字體居中,11號,微軟雅黑,給一般的信息用的
 6     worksheet.write(0, 1, '是否具有馬氏性')
 7     worksheet.write(0, 0, '貨號', font)
 8     worksheet.write(0, 2, '原狀態是', font)
 9     worksheet.write(0, 3, '滯銷', font)
10     worksheet.write(0, 4, '平銷', font)
11     worksheet.write(0, 5, '熱銷', font)

 

步驟7:記得利用矩陣計算啊,python自帶的矩陣運算是:

import numpy as np

 1 for x in range(0, len(info_result)):
 2         worksheet.write(x + 1, 1, info_result[x], font)  ##寫入馬氏性判斷結果
 3         worksheet.write(x + 1, 0, info_data_id[x], font)  ##寫入商品貨號
 4         matrix_a = info_pij[x]  ##單獨拿出第一個數組
 5         matrix_c = np.array(matrix_a)  ##將數組轉化為矩陣
 6         matrix = matrix_c * matrix_c  ##矩陣相乘
 7         row = 3
 8         if info_data_sales[x][len(info_data_sales[x]) - 1] < 10:
 9             worksheet.write(x + 1, 2, "滯銷", font)
10             for y in matrix[0]:
11                 worksheet.write(x + 1, row, y, font)
12                 row = row + 1
13         if info_data_sales[x][len(info_data_sales[x]) - 1] >= 10 and info_data_sales[x][
14                     len(info_data_sales[x]) - 1] < 30:
15             worksheet.write(x + 1, 2, "平銷", font)
16             for y in matrix[1]:
17                 worksheet.write(x + 1, row, y, font)
18                 row = row + 1
19         if info_data_sales[x][len(info_data_sales[x]) - 1] >= 30:
20             worksheet.write(x + 1, 2, "熱銷", font)
21             for y in matrix[2]:
22                 worksheet.write(x + 1, row, y, font)
23                 row = row + 1
24     workbook.close()

 

 最后做個好學生,不要忘記關掉excel表格

workbook.close()

 得到效果圖如下啊啊啊啊:

 

最后附上全部代碼:

python

Markov.py

  1 # -*- coding:utf-8 -*-
  2 from openpyxl import Workbook
  3 from openpyxl import load_workbook
  4 import math
  5 import xlsxwriter
  6 import numpy as np
  7 
  8 if __name__ == '__main__':
  9 
 10     ##這里是打開excel將數據儲存到數組里面
 11     wb = load_workbook(filename=r'C:\Users\Administrator\Desktop\data.xlsx')  ##讀取路徑
 12     ws = wb.get_sheet_by_name("Sheet1")  ##讀取名字為Sheet1的sheet表
 13     info_data_id = []
 14     info_data_sales = []
 15 
 16     a = 0
 17     for row_A in range(2, 1693):  ## 遍歷第2行到1692行
 18         id = ws.cell(row=row_A, column=1).value  ## 遍歷第2行到1692行,第1列
 19         info_data_id.append(id)
 20     for row_num_BtoU in range(2, len(info_data_id) + 2):  ## 遍歷第2行到1692行
 21         row_empty = []  ##建立一個空數組作為臨時儲存地,每次換行就被清空
 22         for i in range(2, 22):  ## 遍歷第2行到1692行,第2到21列
 23             data = ws.cell(row=row_num_BtoU, column=i).value
 24             if data == None:
 25                 pass
 26             else:
 27                 row_empty.append(data)  ##將單元格信息儲存進去
 28         info_data_sales.append(row_empty)  ##row_empty每次儲存完2到21列后壓給info_data_sales,然后row_empty被清空
 29 
 30     ##這里是計算pj的
 31     info_pj = []
 32     for j in range(0, len(info_data_sales)):
 33         pj_zhixiao = 0
 34         pj_pingxiao = 0
 35         pj_rexiao = 0
 36         number = 0
 37         pj_empty = []
 38         for k in range(0, len(info_data_sales[j])):
 39             number = number + 1
 40             if info_data_sales[j][k] < 10:
 41                 pj_zhixiao = pj_zhixiao + 1
 42             elif info_data_sales[j][k] >= 10 and info_data_sales[j][k] < 30:
 43                 pj_pingxiao = pj_pingxiao + 1
 44             elif info_data_sales[j][k] >= 30:
 45                 pj_rexiao = pj_rexiao + 1
 46         chance_zhixiao = pj_zhixiao / number
 47         chance_pingxiao = pj_pingxiao / number
 48         chance_rexiao = pj_rexiao / number
 49         pj_empty.append(chance_zhixiao)
 50         pj_empty.append(chance_pingxiao)
 51         pj_empty.append(chance_rexiao)
 52         info_pj.append(pj_empty)  ##得到了pj初始概率
 53     ##這里是計算fij和pij的
 54     info_fij = []
 55     info_pij = []
 56     for j in range(0, len(info_data_sales)):
 57         fij_zz = 0
 58         fij_zp = 0
 59         fij_zr = 0
 60         fij_pz = 0
 61         fij_pp = 0
 62         fij_pr = 0
 63         fij_rz = 0
 64         fij_rp = 0
 65         fij_rr = 0
 66         fij_first = []
 67         fij_second = []
 68         fij_third = []
 69         fij_empty = []
 70         pij_first = []
 71         pij_second = []
 72         pij_third = []
 73         pij_empty = []
 74 
 75         for k in range(0, len(info_data_sales[j])):
 76             if k + 1 > len(info_data_sales[j]) - 1:
 77                 pass
 78             else:
 79                 if info_data_sales[j][k] < 10 and info_data_sales[j][k + 1] < 10:
 80                     fij_zz = fij_zz + 1
 81                 elif info_data_sales[j][k] < 10 and info_data_sales[j][k + 1] < 30 and info_data_sales[j][k + 1] >= 10:
 82                     fij_zp = fij_zp + 1
 83                 elif info_data_sales[j][k] < 10 and info_data_sales[j][k + 1] >= 30:
 84                     fij_zr = fij_zr + 1
 85                 elif info_data_sales[j][k] < 30 and info_data_sales[j][k + 1] < 10:
 86                     fij_pz = fij_pz + 1
 87                 elif info_data_sales[j][k] < 30 and info_data_sales[j][k + 1] < 30 and info_data_sales[j][k + 1] >= 10:
 88                     fij_pp = fij_pp + 1
 89                 elif info_data_sales[j][k] < 30 and info_data_sales[j][k + 1] >= 30:
 90                     fij_pr = fij_pr + 1
 91                 elif info_data_sales[j][k] >= 30 and info_data_sales[j][k + 1] < 10:
 92                     fij_rz = fij_rz + 1
 93                 elif info_data_sales[j][k] >= 30 and info_data_sales[j][k + 1] < 30 and info_data_sales[j][k + 1] >= 10:
 94                     fij_rp = fij_rp + 1
 95                 elif info_data_sales[j][k] >= 30 and info_data_sales[j][k + 1] >= 30:
 96                     fij_rr = fij_rr + 1
 97 
 98         ##這里計算fij
 99         if fij_zz + fij_zp + fij_zr == 0:
100             fij_zz = 1
101         if fij_pz + fij_pp + fij_pr == 0:
102             fij_pp = 1
103         if fij_rz + fij_rp + fij_rr == 0:
104             fij_rr = 1
105         fij_first.append(fij_zz)
106         fij_first.append(fij_zp)
107         fij_first.append(fij_zr)
108         fij_second.append(fij_pz)
109         fij_second.append(fij_pp)
110         fij_second.append(fij_pr)
111         fij_third.append(fij_rz)
112         fij_third.append(fij_rp)
113         fij_third.append(fij_rr)
114         fij_empty.append(fij_first)
115         fij_empty.append(fij_second)
116         fij_empty.append(fij_third)
117         info_fij.append(fij_empty)
118         # print(info_fij)
119 
120         ##這里計算pij
121         pij_first.append(fij_zz / (fij_zz + fij_zp + fij_zr))
122         pij_first.append(fij_zp / (fij_zz + fij_zp + fij_zr))
123         pij_first.append(fij_zr / (fij_zz + fij_zp + fij_zr))
124         pij_second.append(fij_pz / (fij_pz + fij_pp + fij_pr))
125         pij_second.append(fij_pp / (fij_pz + fij_pp + fij_pr))
126         pij_second.append(fij_pr / (fij_pz + fij_pp + fij_pr))
127         pij_third.append(fij_rz / (fij_rz + fij_rp + fij_rr))
128         pij_third.append(fij_rp / (fij_rz + fij_rp + fij_rr))
129         pij_third.append(fij_rr / (fij_rz + fij_rp + fij_rr))
130 
131         pij_empty.append(pij_first)
132         pij_empty.append(pij_second)
133         pij_empty.append(pij_third)
134         info_pij.append(pij_empty)
135     # print(len(info_pij))
136 
137     ##馬氏性判斷
138     info_judge = []
139     for m in range(0, len(info_pij)):
140         sum = 0
141         for n in range(0, len(info_pij[m])):
142             sum_1 = 0
143             sum_2 = 0
144             sum_3 = 0
145             if info_fij[m][n][0] == 0 or info_pij[m][n][0] == 0 or info_pj[m][0] == 0:
146                 sum_1 = 0
147             else:
148                 sum_1 = info_fij[m][n][0] * abs(math.log(info_pij[m][n][0] / info_pj[m][0], math.e))
149             if info_fij[m][n][1] == 0 or info_pij[m][n][1] == 0 or info_pj[m][1] == 0:
150                 sum_2 = 0
151             else:
152                 sum_2 = info_fij[m][n][1] * abs(math.log(info_pij[m][n][1] / info_pj[m][1], math.e))
153             if info_fij[m][n][2] == 0 or info_pij[m][n][2] == 0 or info_pj[m][2] == 0:
154                 sum_3 = 0
155             else:
156                 sum_3 = info_fij[m][n][2] * abs(math.log(info_pij[m][n][2] / info_pj[m][2], math.e))
157 
158             sum = sum + 2 * (sum_1 + sum_2 + sum_3)
159         info_judge.append(sum)
160     # print(len(info_pij))
161     # print(len(info_pj))
162     # print(len(info_fij))
163     # print(info_judge)
164     # print(len(info_judge))
165     info_result = []
166     for a in info_judge:
167         if a > 5.988617:
168             info_result.append("具有馬氏性")
169         else:
170             info_result.append("")
171             # print(info_result)
172             # print(info_pij[0])
173 
174             ##下面是計算一階馬爾可夫鏈預測,即矩陣的運算的方法
175             # matrix_a = info_pij[0]
176             # matrix_c = np.array(matrix_a)
177             # matrix = matrix_c * matrix_c
178             # print(matrix)
179             # print(matrix_c)
180             # print(len(info_pij))
181             # print(len(info_data_sales))
182             # print(info_data_sales[0])
183             # if info_data_sales[0][len(info_data_sales[0]) - 1] < 10:
184             # print(info_data_sales[0][len(info_data_sales[0]) - 1])
185             # print('滯銷')
186             # print(matrix[1])
187 
188     ##下面是寫入excel表格
189     first = ['是否具有馬氏性']
190     workbook = xlsxwriter.Workbook('C:\\Users\\Administrator\\Desktop\\data1.xlsx')
191     worksheet = workbook.add_worksheet()  # 創建一個工作表對象
192     font = workbook.add_format(
193         {'border': 1, 'align': 'center', 'font_size': 11, 'font_name': '微軟雅黑'})  ##字體居中,11號,微軟雅黑,給一般的信息用的
194     worksheet.write(0, 1, '是否具有馬氏性')
195     worksheet.write(0, 0, '貨號', font)
196     worksheet.write(0, 2, '原狀態是', font)
197     worksheet.write(0, 3, '滯銷', font)
198     worksheet.write(0, 4, '平銷', font)
199     worksheet.write(0, 5, '熱銷', font)
200     for x in range(0, len(info_result)):
201         worksheet.write(x + 1, 1, info_result[x], font)  ##寫入馬氏性判斷結果
202         worksheet.write(x + 1, 0, info_data_id[x], font)  ##寫入商品貨號
203         matrix_a = info_pij[x]  ##單獨拿出第一個數組
204         matrix_c = np.array(matrix_a)  ##將數組轉化為矩陣
205         matrix = matrix_c * matrix_c  ##矩陣相乘
206         row = 3
207         if info_data_sales[x][len(info_data_sales[x]) - 1] < 10:
208             worksheet.write(x + 1, 2, "滯銷", font)
209             for y in matrix[0]:
210                 worksheet.write(x + 1, row, y, font)
211                 row = row + 1
212         if info_data_sales[x][len(info_data_sales[x]) - 1] >= 10 and info_data_sales[x][
213                     len(info_data_sales[x]) - 1] < 30:
214             worksheet.write(x + 1, 2, "平銷", font)
215             for y in matrix[1]:
216                 worksheet.write(x + 1, row, y, font)
217                 row = row + 1
218         if info_data_sales[x][len(info_data_sales[x]) - 1] >= 30:
219             worksheet.write(x + 1, 2, "熱銷", font)
220             for y in matrix[2]:
221                 worksheet.write(x + 1, row, y, font)
222                 row = row + 1
223     workbook.close()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM