2012-03-08 6 views
22

Jestem zaznajomiony z posiadaczami danych R, takimi jak wektory, ramka danych itd., Ale trzeba przeprowadzić analizę tekstu i wygląda na to, że pyton ma kilka dobrych ustawień. Moje pytanie brzmi: gdzie mogę znaleźć wyjaśnienie, w jaki sposób Python przechowuje dane.Przejście do Pythona z R, jaki jest odpowiednik ramki danych w pythonie?

W szczególności mam zestaw danych w pliku oddzielonym tabulatorami, w którym tekst znajduje się w trzeciej kolumnie, a punktacja potrzebnych danych znajduje się w czwartej kolumnie.

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 

W R bym po prostu załadować do ramki danych o nazwie df1 a gdy chciałem zadzwonić kolumnę użyję DF1 $ tekst lub df1[,3] i gdybym chciał konkretną komórkę I przydałby df1[1,3].

Czuję, jak czytać dane w pythonie, ale nie mam do czynienia z strukturami podobnymi do tabel.

Jak zasugerowałbyś pracę z tym dla początkującego pytona?

+0

Python ma równoważną ramka danych –

+4

@DavidHeffernan Co z tymi [pandami] (http://pandas.pydata.org/) rzeczy? Czy to nie ma być zamierzone? – joran

+2

@joran To trzecia strona. Przypuszczam, że chodzi mi o to, że nie ma nic wbudowanego w sposób, w jaki ramka danych R jest wbudowana. –

Odpowiedz

8

Nie jestem pewien, jak dobrze to przekłada się na „R”, które nigdy nie używane, ale w Pythonie jest to jak bym go podejść:

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

To będzie czytać wszystko na liście Pythona. Listy są oparte na zera. Aby uzyskać kolumnę tekstu z drugiej linii:

print lines[1][2] 

gola dla tej linii:

print lines[1][3] 
4

Jedną z opcji, które użyłem w przeszłości csv.DictReader, która pozwala odwoływać się do danych z rzędu przez Nazwa (każdy rząd zostaje dict)

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

wyjściowa:

{'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

Odpowiedź Ullricha na używanie biblioteki pandas jest najbliższym podejściem do ramki danych R. Jednak można uzyskać bardzo podobną funkcjonalność za pomocą numpy array, z typem danych ustawionym na object, jeśli to konieczne. Nowsze wersje numpy mają field name capabilities podobne do data.frame, jego indeksowanie jest w rzeczywistości nieco silniejsze niż R, a jego zdolność do zawarcia obiektów wykracza znacznie poza to, co R może zrobić.

Używam zarówno R jak i numpy, w zależności od wykonywanego zadania. R jest o wiele lepszy dzięki formułom i wbudowanym statystykom. Kod Pythona jest łatwiejszy w utrzymaniu i łatwiejszy do podłączenia do innych systemów.

Zmieniano: dodany do wiadomości, że NumPy teraz ma możliwości nazwa pola

+0

R 'data.frame' może zawierać kolumny' list'. Każdy element kolumny 'list' może być dowolny, w tym obiekty danych, funkcje itp. Czy to masz na myśli? –

0

Równowartość R w Pythonie jest Pandy

Ty intialise się DataFrame jak poniżej

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

print df.head() 
Powiązane problemy