集群的計算與疾病防禦之二

2021-06-26 10:00:49 字數 2469 閱讀 8801

有了上篇得到的兩個計算集群的模組,我們可以很輕鬆計算指定個數的集群了。那麼結果如何呈現呢?

老師給了一張美國地圖,大小(畫素)跟資料中的座標相符,於是我們就可以把結果呈現到圖上。嗯,也就是用matplotlib把點畫到已經存在的圖上。

首先是載入:

map_file = open(map_url)

map_img = plt.imread(map_file)

implot = plt.imshow(map_img)

只要呼叫一下plt.show()就可以顯示了。但是提前預覽一下就知道很小,我們要提高一下解析度,為了照顧好的長寬,我們可以找個把等比縮小一下,然後直接設定成figure的dpi。

ypixels, xpixels, bands = map_img.shape

dpi = 60.0 # adjust this constant to resize your plot

xinch = xpixels / dpi

yinch = ypixels / dpi

plt.figure(figsize=(xinch,yinch))

這樣圖看著就會舒服點,如果嫌圖太小,調低dpi即可。

後面的又是老師給出的小技巧。怎麼表示集群歸屬呢?

本來可以直接把集群直接按照人口的大小標準化之後作為圓的面積,繪到美國地圖上,但是那樣的話地圖上就剩下了乙個又乙個的大圓,不直觀,也毀了原來的資料。

老師建議把給定的資料原原本本的繪出來,然後使用相同的顏色表示同一集群,是不是更好?不能更認同了。

首先就是調整個合適的比例,使用圓的面積表示county的人口:

def circle_area(pop):

return math.pi * pop / (200.0 ** 2)

當初我們融合集群的時候,把fips_code合併成了乙個集合,也就是說,我們要把融合之後的集群中的fips_code取出來,然後繪成同一種顏色。於是建立乙個字典,根據fips_code,查詢county在原來資料(data_table)中的位置:

fips_to_line = {}

for line_idx in range(len(data_table)):

fips_to_line[data_table[line_idx][0]] = line_idx

然後我們就可以把資料繪在地圖上了:

for cluster_idx in range(len(cluster_list)):

cluster = cluster_list[cluster_idx]

cluster_color = colors[cluster_idx % len(colors)]

for fips_code in cluster.fips_codes():

line = data_table[fips_to_line[fips_code]]

plt.scatter(x = [line[1]], y = [line[2]], s = circle_area(line[3]), lw = 1,

facecolors = cluster_color, edgecolors = cluster_color)

其中,data_table是計算集群前的資料,cluster_list是計算集群後的資料。colors是乙個顏色的list,基本可以避免不同集群的顏色重疊。

結果也蠻炫的,hierarchical的結果為:(就是分離合併演算法)

而k-means演算法的結果為:(先隨便取點,然後迭代)

注意觀察左下角(洛杉磯?)和右下角的部分,二者所出現的不同。

hierarchical演算法的結果基本符合預期,那k-means演算法的誤差是如何得來的呢?

k-means演算法的初始值是取的人口最大的幾個county,如果恰好有兩個大county在一起,誤差就會出現,而且經過幾次的迭代,誤差也不會消除。因此k-means需要人工干預,通過取理想的初始值,來達到預期。

如果僅僅讓我自己去解決這個問題,恐怕我會把事情搞的無比複雜,而且最終的結果也並不一定如意。通過老師的引導,發現事情一下子就清晰明了。要解決乙個問題,一定要多去思考,看看是否有合適的路到達。

比如這個問題中的每組資料報含五個變數,不如就以此建個類。考慮到要做的運算,也提前內建好method。這樣就極大的簡化了整個過程。

另外,資料的呈現也不要太粗暴,比如我一開始想到的直接繪圓,實在不是什麼好點子。

long long way to go !

源**:github

計算機語言與程式發展之二

組合語言與程式是計算機語言與程式發展的第二個階段,組合語言是一種符號語言,它將難以記憶和辨認的二進位制指令 用有意義的英文單詞縮寫來代替,縮寫被稱為助記符,每個 助記符代表一條機器指令。列如,add表示加法,sub表示減法。組合語言改善了程式的可讀和記憶性,使程式設計序的人稍微輕鬆了一點。但組合語言...

計算機將症狀與疾病聯絡起來的能力有多強?

麻省理工學院的一項新研究發現,健康知識圖表 顯示症狀和疾病之間的關係,旨在幫助臨床診斷,但對於某些情況和患者群體來說可能會有所欠缺。結果還提出了提高他們表現的方法。健康知識圖表通常由專業臨床醫生手工編制,但這可能是乙個費力的過程。最近,研究人員嘗試從患者資料中自動生成這些知識圖表。麻省理工學院團隊一...

Linux集群的安裝與平行計算

linux集群的安裝與平行計算 2011年12月18日 1.linux安裝 安裝過程就不多說了。需要注意的是安裝時,如果機群不與外界聯網則可以不考慮安全方面的因素而把rsh選為可信賴的服務,注意安裝相應的軟體包 如果還要與外界保持聯網,出於安全需要應把ssh選為可信賴的服務。安裝以後,應該保證各節點...