Domanda

I miei dati (l'uscita doc-argomenti da un argomento modello di MALLET) ha la seguente forma:

0   000cbac90fcc47efad081a929d74ab4c    0   0.3571185904395461  19  0.3113396339935042  4   0.12325835735304397 10  0.10409710001928904 8   0.04929547912982593 1   0.026833654459159112    2   0.01605333272832067 6   0.0048677134975701405   11  0.0019476615596546681   17  0.001908921062167065    14  0.0016877826048433426   5   5.256520178505095E-4    12  2.6155079718746636E-4   15  2.1354275518902175E-4   16  1.4885824861864537E-4   18  1.0362646846573807E-4   3   9.802082006786611E-5    9   9.641623707017035E-5    13  9.348016118039801E-5    7   5.0625647445916464E-5   
1   002d2e8fbf8f40399fb52c12fe6d79a1    2   0.4893657941273363  19  0.31683989601254264 5   0.14250187050440621 4   0.020578111489117222    8   0.012792452390528172    10  0.012232805681991418    11  9.110846196785881E-4    17  8.170410538631972E-4    12  6.349213666458032E-4    15  5.18380595356186E-4 0   4.750799583739948E-4    6   3.65757686209981E-4 16  3.613572723378424E-4    14  2.8022169390809563E-4   1   2.5184798205700335E-4   18  2.5155594892638147E-4   3   2.3794809156182638E-4   9   2.3405292457801712E-4   13  2.2692552394855585E-4   7   1.228950766326711E-4    
2   0046e05d3731491da4d9bab51d6ea36a    16  0.652945776661391   8   0.07953971245258269 0   0.06617734607073089 19  0.059407148715209045    4   0.02302855863782211 5   0.019674895033989195    11  0.014047819199510685    17  0.01259778154009113 2   0.012346407436534609    10  0.012058449719318621    12  0.009789716972385079    15  0.0079927997057698  6   0.005639539660456337    14  0.004320678460350115    1   0.0038831902561877263   18  0.0038786874597068794   3   0.0036688708127993316   9   0.003608812064842682    13  0.0034989161965088794   7   0.001894892943813293    
etc...

Ogni riga (che rappresenta un documento) ha una colonna di indice, una colonna id, e 40 più colonne che rappresentano il 20 argomenti presente.

La forma che sto cercando di ottenere è quella in cui ogni numero è argomento di essa la propria colonna e righe contengono solo l'indice, id, e le proporzioni argomento, per esempio:.

i   id                                  0                   1                   2
0   000cbac90fcc47efad081a929d74ab4c    0.3571185904395461  0.2346339935042     0.1884010001928904
etc...

Sembra che questo potrebbe essere realizzato con perni, ma i numeri all'argomento trattato fuori ordine (ordinati per rilevanza in righe) fa di questo una testa scratcher ...

Come si potrebbe realizzare questo?

È stato utile?

Soluzione

Quindi un modo per farlo è quello di utilizzare gli operatori fetta di pitone per afferrare ogni altro valore nella linea e zip (insieme con il nome del file) in 3-tuple, per esempio:.

data = []
malletOutput = open('doc-topics','r').readlines()

for line in malletOutput:
    line = line.split('\t')[1:-1] # slicing out useless leading index and trailing \n
    _id = line[0]

    tIndicies = map(int,line[1::2])
    tVals = map(float, line[2::2])
    topics = sorted(zip(tIndicies, tVals))
    topics = [t + tuple([_id]) for t in topics] # add _id
    for t in topics:
        data.append(t)

Ora avete un elenco di 3-tuple cui è possibile aggiungere a una dataframe. Un semplice perno da lì risultati nella forma desiderata:

df = pd.DataFrame(data)
df = df.pivot(index=2,columns=0,values=1)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top