2012-03-08 11 views
22

Ho familiarità con i titolari di dati R come vettori, dataframe, ecc. Ma ho bisogno di fare qualche analisi del testo e sembra che Python abbia delle buone impostazioni per farlo. La mia domanda è dove posso trovare una spiegazione di come Python trattiene i dati.Passando a Python da R, qual è l'equivalente python di un frame di dati?

In particolare, ho un set di dati in un file separato da tabulazioni in cui il testo si trova nella terza colonna e il punteggio dei dati di cui ho bisogno si trova nella quarta colonna.

id1   id2   text        score 
123   889  "This is the text I need to read..."  88 
234   778  "This is the text I need to read..."  78 
345   667  "This is the text I need to read..."  91 

In R avevo appena caricarlo in una cornice di dati denominato df1 e quando ho voluto chiamare una colonna userei df1 $ testo o df1[,3] e se volevo una cella specifica che potevo usare df1[1,3].

Mi viene un'idea di come leggere i dati in python ma non come gestire strutture simili a tabelle.

Come suggeriresti di lavorare con questo per un principiante di Python?

+0

Python non ha equivalenti al il frame dati –

+4

@DavidHeffernan Che dire di quello [panda] (http://pandas.pydata.org/) roba? Non è questo (destinato a essere) vicino? – joran

+2

@joran Questa è la terza parte. Suppongo che volevo dire che non c'è nulla di integrato nel modo in cui il frame di dati R è integrato. –

risposta

8

Non sono sicuro di quanto bene questo si traduce in 'R', che non ho mai usato, ma in Python questo è come vorrei affrontarlo:

lines = list() 
with open('data.txt','r') as f: 
    for line in f: 
     lines.append(line.split()) 

che leggerà tutto in una lista python. Gli elenchi sono a base zero. Per ottenere la colonna di testo dalla seconda linea:

print lines[1][2] 

Il punteggio per quella linea:

print lines[1][3] 
4

Una possibilità che ho usato in passato è csv.DictReader, che consente di fare riferimento i dati in una fila nome (ogni riga diventa un dict): Portata

import csv 
with open('data.txt') as f: 
    reader = csv.DictReader(f, delimiter = '\t') 
    for row in reader: 
     print row 

:

{'text': 'This is the text I need to read...', 'score': '88', 'id2': '889', 'id1': '123'} 
{'text': 'This is the text I need to read...', 'score': '78', 'id2': '778', 'id1': '234'} 
{'text': 'This is the text I need to read...', 'score': '91', 'id2': '667', 'id1': '345'} 
11

La risposta di Ullrich all'uso della libreria pandas è l'approccio più vicino al frame di dati R. Tuttavia, è possibile ottenere funzionalità estremamente simili utilizzando numpy array, con il tipo di dati impostato su object se necessario. Le versioni più recenti di numpy hanno lo field name capabilities simile a un data.frame, la sua indicizzazione è in realtà un po 'più potente di R, e la sua capacità di contenere oggetti va ben oltre ciò che R può fare.

Io uso sia R che NumPy, a seconda del compito in corso. R è molto meglio con le formule e le statistiche integrate. Il codice Python è più manutenibile e più facile da collegare ad altri sistemi.

Modificato: nota che NumPy ora dispone di funzionalità di nome campo aggiunto

+0

R 'data.frame' può contenere colonne' list'. Ogni elemento di una colonna 'list' può essere qualsiasi cosa tu voglia includere oggetti dati, funzioni, ecc. È questo che intendi? –

0

L'equivalente di R in pitone è Pandas

È intialise un dataframe come di seguito

import pandas as pd 
df = pd.read_csv("filename") 

print df.head() 
Problemi correlati