2017-07-28 3 views
0

Ich versuche, eine Co-Occupancy-Matrix zu erstellen, um zu sehen, welche Keywords in meiner Datenbank häufig zusammen zugeordnet sind.Erstellen einer Co-Occupancy-Matrix aus einer .csv

Die Daten sehen so aus, es ist eine .csv-Datei.

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

Und ich möchte so etwas wie dieses

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

Das Ziel erreichen wäre dann d3.js zu verwenden, um die Matrix zu visualisieren.

Ich habe dies in der R-Tag veröffentlicht, weil ich es ein bisschen vorher für einige Klassen verwendet habe, also bin ich kein kompletter Neuling. Ich habe bei der Suche nach Lösungen gesehen, dass es auch möglich ist, Python zu verwenden, aber ich habe es nie in meinem Leben berührt.

+0

Ich fand [auf diese Weise] (https://www.r-bloggers.com/turning-keywords-into -a-co-occurrence-network /) es zu tun, das scheint perfekt zu funktionieren für das, was ich tun will! –

Antwort

1

Sie können die tidyr (und magrittr) Pakete und die table Funktion verwenden.

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")) 

Dies ist die richtigen Ebenen in Ihren Zeilen/Spaltennamen haben.

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)))) 

Sie können nun Tabelle verwenden (es ist nicht symmetrisch ist, so verwenden +)

> 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 (" Apfel; Birne "," Apfel; Kirsche "," Birne; Kirsche "," Apfel; Kirsche "))' Habe ich um die Keywords manuell einzugeben? In meinem Datenrahmen habe ich etwas mehr als 200, also wird es ein bisschen kompliziert. –

+1

Oh nein, es ist nur dein Beispiel zu verwenden. Verwenden Sie 'read.csv' dafür. – AntoineBic

+0

Ich werde es versuchen, danke! –

Verwandte Themen