2017-07-28 163 views
0

我在創建一個共生矩陣來查看我的數據庫中經常關聯哪些關鍵字。從.csv創建一個共現矩陣

數據看起來像這樣,它是一個.csv文件。然後

id, keywords 
1,  apple;pear 
2,  apple;cherry 
3,  pear;cherry 
4,  apple;cherry 

而且我想獲得這樣的事情

  apple pear cherry 
apple  0  1  2 
pear  1  0  1 
cherry  2  1  0 

的目標是使用d3.js以可視化的矩陣。

我已經在R標籤中發佈了這個標籤,因爲我之前在某些類中使用過它,所以我不是一個完整的新手。我在尋找解決方案時看到,也可以使用python來做到這一點,但我從未碰過它。

+0

我發現[這樣](https://www.r-bloggers.com/turning-keywords-into一個共同發生的網絡/),這樣做似乎對我想做的事情完美無缺! –

回答

1

可以使用tidyr(和magrittr)包(S)和table功能。

library(tidyr) 
library(magrittr) 
df <- data.frame(id = 1:4, keywords = c("apple;pear", "apple;cherry", "pear;cherry", "apple;cherry")) 

df2 <- df %>% separate(keywords, sep = ";", into = c("F1", "F2")) 

這是要在您的行/列名稱中具有正確的級別。

df2$F1 %<>% factor() 
df2$F2 %<>% factor() 

df2$F1 <- factor(df2$F1, levels = unique(c(levels(df2$F1), levels(df2$F2)))) 
df2$F2 <- factor(df2$F2, levels = unique(c(levels(df2$F1), levels(df2$F2)))) 

您現在可以使用表(它不是對稱的,因此使用+

> table(df2$F1, df2$F2) + table(df2$F2, df2$F1) 

     apple pear cherry 
    apple  0 1  2 
    pear  1 0  1 
    cherry  2 1  0 
+0

'df < - data.frame(id = 1:4,keywords = c(「apple; pear」,「apple; cherry」,「pear; cherry」,「apple; cherry」))' 我有手動輸入關鍵字?在我的數據框中,我有200多個,所以會有點複雜。 –

+1

哦,不,這只是使用你的例子。爲此,使用'read.csv'。 – AntoineBic

+0

我要放手,謝謝! –