论文引发的思考
寫在前面的話 ????
?????? 我的畢業(yè)論文寫的是項(xiàng)目進(jìn)度風(fēng)險管理,其實(shí)基本的路子就是大家都熟悉的,根據(jù)項(xiàng)目的生命周期,利用很多方法對風(fēng)險進(jìn)行識別---風(fēng)險評估--? 風(fēng)險管理監(jiān)控等等,當(dāng)然這都不是重點(diǎn)。重點(diǎn)是風(fēng)險評估,利用什么方法進(jìn)行評估,以及數(shù)據(jù)處理。 當(dāng)然我這邊用了dematel、層次分析法與模糊綜合評價法。
??????? 因?yàn)槲业臄?shù)據(jù)量實(shí)在是太大了。讓大家看個我一個小小節(jié)的數(shù)據(jù),這個是結(jié)果,但是大家可以看到,這就有18個要素進(jìn)行分析,實(shí)在是很頭疼。因此我就想到了用python寫代碼來實(shí)現(xiàn)我的數(shù)據(jù)分析。今天的文章沒有太多的干貨,只是我自己覺得有意思,就寫一下,我自己也是因?yàn)樾枰獙W(xué)習(xí)的,算是一個入門,不精通。寫出來一個是讓自己有所輸入有所輸出,其次是希望愛好的同學(xué),大家一起學(xué)習(xí),爭取能學(xué)友所有,為自己平時的工作學(xué)習(xí)生活帶來便利。
一、DEMATEL
????????下面是百度百科截圖的部分解釋。
????????DEMATEL也有翻譯成決策與試驗(yàn)評價實(shí)驗(yàn)室,或者簡稱實(shí)驗(yàn)室法。由于中文比較拗口,一般情況下,念[de mei tel] 或者念 [di mie tel]。
????????1971年在日內(nèi)瓦的一次會議上美國Battelle實(shí)驗(yàn)室的學(xué)者A. Gabus和E. Fontela提出的為了解現(xiàn)實(shí)世界中復(fù)雜、困難的問題而提出的方法論,是一種運(yùn)用圖論和矩陣工具的系統(tǒng)分析的方法。
????????通過系統(tǒng)中各要素之間的邏輯關(guān)系和直接影響矩陣,可以計算出每個要素對其它要素的影響度以及被影響度,從而計算出每個要素的原因度與中心度,作為構(gòu)造模型的依據(jù),從而確定要素間的因果關(guān)系和每個要素在系統(tǒng)中的地位。
????????具體的也可以看我附上的鏈接? http://www.huaxuejia.cn/ism/DEMATEL_online.php
那么這么多的要素,如何用代碼實(shí)現(xiàn)呢?
1、安裝numpy以及matplotlib
pip install numpy
pip install matplotlib
2、根據(jù)dematel方法實(shí)施步驟代碼編寫
這里就不透露我的原始數(shù)據(jù)了,我就隨機(jī)生成幾個數(shù)據(jù)方便下面的計算吧。
2.1 確定初始影響矩陣
各因素的影響矩陣通過隨機(jī)生成,現(xiàn)在我們生成一個10*10的10階初始影響矩陣
W = np.random.randint(0,10,(10,10))
print(W)
運(yùn)行結(jié)果:
[[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.規(guī)范化初始影響矩陣
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) 運(yùn)行結(jié)果: [[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)#為每一個點(diǎn)打標(biāo)簽 plt.show() plt.savefig("easyplot.jpg")#保存生成的二維圖?最后生成的圖:
二、AHP(層次分析法)
層次分析法也是對照著方法的思路進(jìn)行編寫代碼即可.
模糊綜合評價也是如此.就不放代碼了.思路跟上面的dematel一樣.
寫在最后:
1.其實(shí)還有更好的架包讓我們使用,比如pandas等
2.在我寫論文的時候,只是覺得數(shù)據(jù)量太大,需要處理,就百度搜索,一步一步完成的.并不是很完美,但是起碼結(jié)果出來了.目前準(zhǔn)備入坑學(xué)習(xí)一下這部分.
當(dāng)然附上numpy的菜鳥鏈接 https://www.runoob.com/numpy/numpy-tutorial.html
感興趣的可以學(xué)習(xí)一番
3.原始數(shù)據(jù)都會有保留,代碼也可以通過讀excel的方式,將原始數(shù)據(jù)拿到進(jìn)行處理.并將得到的最后結(jié)果寫入到excel中.
?
總結(jié)
- 上一篇: “野火FreeRTOS教程”第7章补充知
- 下一篇: 自编自适应中值滤波器