论文引发的思考
寫在前面的話 ????
?????? 我的畢業論文寫的是項目進度風險管理,其實基本的路子就是大家都熟悉的,根據項目的生命周期,利用很多方法對風險進行識別---風險評估--? 風險管理監控等等,當然這都不是重點。重點是風險評估,利用什么方法進行評估,以及數據處理。 當然我這邊用了dematel、層次分析法與模糊綜合評價法。
??????? 因為我的數據量實在是太大了。讓大家看個我一個小小節的數據,這個是結果,但是大家可以看到,這就有18個要素進行分析,實在是很頭疼。因此我就想到了用python寫代碼來實現我的數據分析。今天的文章沒有太多的干貨,只是我自己覺得有意思,就寫一下,我自己也是因為需要學習的,算是一個入門,不精通。寫出來一個是讓自己有所輸入有所輸出,其次是希望愛好的同學,大家一起學習,爭取能學友所有,為自己平時的工作學習生活帶來便利。
一、DEMATEL
????????下面是百度百科截圖的部分解釋。
????????DEMATEL也有翻譯成決策與試驗評價實驗室,或者簡稱實驗室法。由于中文比較拗口,一般情況下,念[de mei tel] 或者念 [di mie tel]。
????????1971年在日內瓦的一次會議上美國Battelle實驗室的學者A. Gabus和E. Fontela提出的為了解現實世界中復雜、困難的問題而提出的方法論,是一種運用圖論和矩陣工具的系統分析的方法。
????????通過系統中各要素之間的邏輯關系和直接影響矩陣,可以計算出每個要素對其它要素的影響度以及被影響度,從而計算出每個要素的原因度與中心度,作為構造模型的依據,從而確定要素間的因果關系和每個要素在系統中的地位。
????????具體的也可以看我附上的鏈接? http://www.huaxuejia.cn/ism/DEMATEL_online.php
那么這么多的要素,如何用代碼實現呢?
1、安裝numpy以及matplotlib
pip install numpy
pip install matplotlib
2、根據dematel方法實施步驟代碼編寫
這里就不透露我的原始數據了,我就隨機生成幾個數據方便下面的計算吧。
2.1 確定初始影響矩陣
各因素的影響矩陣通過隨機生成,現在我們生成一個10*10的10階初始影響矩陣
W = np.random.randint(0,10,(10,10))
print(W)
運行結果:
[[4 7 0 0 0 9 4 1 4 0]
?[0 4 4 1 9 2 7 3 5 1]
?[4 9 8 9 7 0 7 9 2 3]
?[5 8 3 7 3 0 9 4 8 0]
?[4 6 3 8 6 0 6 7 8 7]
?[0 0 9 3 9 2 7 1 4 4]
?[3 2 5 8 2 7 1 4 9 7]
?[7 7 8 9 8 5 0 0 2 4]
?[7 4 8 7 6 9 2 1 4 5]
?[5 9 5 0 6 7 7 5 7 9]]
2.2.規范化初始影響矩陣
1.按行求和
Q1=W.sum(axis=1)2.矩陣按行除以按行求和的值
公式:
?
? Q = np.zeros(shape=(10,10))
for i in range(10):Q[i] = np.divide(W[i],Q1[i])?? print(Q) 運行結果: [[0.29032258 0.???????? 0.19354839 0.25806452 0.12903226 0. 0.???????? 0.???????? 0.12903226 0.??????? ] [0.19047619 0.14285714 0.07142857 0.21428571 0.07142857 0.04761905?0.16666667 0.???????? 0.04761905 0.04761905] [0.04347826 0.10869565 0.06521739 0.04347826 0.15217391 0.17391304?0.???????? 0.19565217 0.15217391 0.06521739][0.1875???? 0.0625???? 0.03125??? 0.09375??? 0.09375??? 0.09375?0.15625??? 0.03125??? 0.15625??? 0.09375?? ]? [0.06122449 0.16326531 0.16326531 0.12244898 0.16326531 0.06122449?0.14285714 0.04081633 0.02040816 0.06122449]? [0.06818182 0.09090909 0.20454545 0.???????? 0.???????? 0.18181818?0.18181818 0.13636364 0.09090909 0.04545455] [0.05128205 0.05128205 0.02564103 0.20512821 0.17948718 0.05128205 0.12820513 0.05128205 0.17948718 0.07692308]? [0.19565217 0.17391304 0.15217391 0.06521739 0.15217391 0.10869565?0.02173913 0.02173913 0.04347826 0.06521739]? [0.03448276 0.24137931 0.06896552 0.03448276 0.10344828 0.24137931 0.???????? 0.17241379 0. 06896552 0.03448276] [0.2195122? 0.17073171 0.09756098 0.17073171 0.14634146 0. 0.04878049 0.???????? 0.14634146 0.??????? ]]?? 2.3計算綜合影響矩陣?
公式:
I指的是單位矩陣
I=np.identity(10)#單位矩陣 np.linalg.inv(I-Q)#I-Q逆矩陣 T=Q*np.linalg.inv(I-Q)2.4計算影響度、被影響度、中心度與原因度
C=T.sum(axis=0)#被影響度 D=T.sum(axis=1)#影響度 R=D-C#原因度 M=C+D#中心度?2.5生成圖表
import matplotlib.pyplot as plt l=["A","B","C",'D','E',"F","G","H","I","J","K","L","M","N"] plt.figure() plt.rcParams['font.sans-serif']=['SimHei']#plt.title顯示中文的問題 plt.rcParams['axes.unicode_minus'] = False plt.plot(M, R,color='green',linestyle="-",marker='o') plt.xlabel("中心度") plt.ylabel("原因度") plt.title("中心度原因度二維圖") i=0 for a, b in zip(M, R):str_label = l[i]i=i+1plt.text(a, b, str_label, ha='center', va='bottom', fontsize=10)#為每一個點打標簽 plt.show() plt.savefig("easyplot.jpg")#保存生成的二維圖?最后生成的圖:
二、AHP(層次分析法)
層次分析法也是對照著方法的思路進行編寫代碼即可.
模糊綜合評價也是如此.就不放代碼了.思路跟上面的dematel一樣.
寫在最后:
1.其實還有更好的架包讓我們使用,比如pandas等
2.在我寫論文的時候,只是覺得數據量太大,需要處理,就百度搜索,一步一步完成的.并不是很完美,但是起碼結果出來了.目前準備入坑學習一下這部分.
當然附上numpy的菜鳥鏈接 https://www.runoob.com/numpy/numpy-tutorial.html
感興趣的可以學習一番
3.原始數據都會有保留,代碼也可以通過讀excel的方式,將原始數據拿到進行處理.并將得到的最后結果寫入到excel中.
?
總結
- 上一篇: “野火FreeRTOS教程”第7章补充知
- 下一篇: 自编自适应中值滤波器