緊接方案一
由於方案一每次輸出乙個權重最高結點,然原始網路規模達100w,到假設一秒輸出乙個結點也約需要277小時,到中間階段,有很多結點具有相同的權重。
因此做效能優化,每次輸出權重最大的全部結點,預計可以吧時間縮短在3小時以內。
缺點是同屬最大權重的結點間可能相關,導致結果不是特別精準,尤其隨著權重變小,規模變大,尤其明顯,所以設定當最大權重為5的時候停止輸出。
實現**:
library(dplyr)
library(rmysql) # 載入rmysql包
conn <- dbconnect(mysql(),dbname = "networks",username = "root") # 建立資料庫連線
dbsendquery(conn, "set @@sql_mode=ansi;") # 啟動非嚴格模式
dbsendquery(conn, "set names gbk") # win7環境下如果漢字亂碼,就執行這條命令
res <- dbsendquery(conn, "select * from nodeweight1")
dat <- dbfetch(res, n=-1) #n=-1表示取所有資料,n=2表示取2條資料
res1 <- dbsendquery(conn, "select * from nodemap1")
dat1 <- dbfetch(res1, n=-1) #n=-1表示取所有資料,n=2表示取2條資料
output <- data.frame(nodeid = 0,weight = 0,seq = 0) #建立空的輸出序列
output <- output[-1,] #清空資料
node_cnt <- 0 #已經輸出的結點數量
for (i in 1:nrow(dat))
node_del <- dat$nodeid[dat$weight==max_weight] #權重最大的結點編號,有多個全部輸出
node_rel <- data.frame(nodeid = 0,weight = 0) #初始化
node_rel <- node_rel[-1,]
#迴圈刪除最大權重結點資訊
for (m in 1:length(node_del))
node_rel <- summarise(group_by(node_rel, nodeid),count = n()) #group by
#迴圈更新關聯結點權重
for (n in 1:length(node_rel))
output <- rbind(output, cbind(nodeid=node_del, weight=max_weight, seq=i) ) #輸出本輪最大結點資訊
node_cnt = node_cnt+m
cat("weight:",max_weight,"\tnode number:",m,"\tnode count:",node_cnt,"\tnode release:",nrow(dat),"\n") #頁面輸出
if (max_weight <= 35) #當權重小於35時才儲存檔案
}
R語言入門(二)
今天看到乙個好的系列部落格,在此推薦 這部分主要介紹r語言的幾種資料結構。r語言的資料結構為向量 矩陣 陣列 資料框 列表。向量主要是用來儲存數值型 1,2,3 字元型 abc efg 或者邏輯型 true false 資料的一維陣列。我們可以用函式c 來建立向量。如下 a c 1,2,3,3,4,...
R語言筆記(二
因子 factor 元素型別可以不同 df data.frame id c 1,2,3,4 name c a b c d df id name 1 1 a 2 2 b 3 3 c 4 4 d nrow df 1 4 ncol df 1 2 data.matrix df 轉換為矩陣 id name 1...
R語言第二講
web packages有一些錯誤是r的初學者和經驗豐富的r程式設計師都可能常犯的。如果程式出錯了,請檢查 以下幾方面。使用了錯誤的大小寫。help help 和help 是三個不同的函式 只有第乙個 是正確的 忘記使用必要的引號。install.packages gclus 能夠正常執行,然而in...