Załóżmy, że mamy takie oto dane:
Year | Number of items | Number of another items |
2001 | 100 | 1000 |
2002 | 101 | 1001 |
2003 | 102 | 1002 |
2004 | 103 | 1003 |
Wszystko to znajduje się w pliku csv o nazwie data.csv i chcemy je sobie wczytać do jakiejś zmiennej. W czystym Pythonie musimy zrobić coś takiego:
with open('data.csv', 'r') as csvfile: reader = csv.reader(csvfile) data = [] for row in reader: data.append(row) |
Kiedyś już wspominałam o tym, że w ramach zapoznawania się z tematem data science uczę się również NumPy czyli pakietu szeroko stosowanego w przetwarzaniu danych w Pythonie. I tak jakbyśmy chcieli wykorzystać NumPy by uzyskać to samo co powyżej musielibyśmy napisać coś takiego:
import numpy data = numpy.genfromtxt('data.csv', delimiter=',', dtype="U75") |
Dużo mniej kodu prawda?
NumPy pozwala nam od razu z pliku zrobić sobie tablicę. Nie musimy pisać pętli by dane z pliku sobie do tablicy przypisać. Co znaczą te tajemicze ustawienia – delimiter i dtype? Otóż pierwsze z nich to ustawienie znaku którym oddzielane są poszczególne kolumny w naszym pliku. Natomiast drugie to ustawienie które powoduje, że wszystkie wczytywane wartości zostaną zinterpretowane jako 75 bajtowy unicode. Umożliwia nam to wówczas pracę nie tylko z danymi liczbowymi, ale również poprawne wczytanie tekstów.
Kolejna rzecz jaką często robi się przy przetwarzaniu danych to wyciągniecie wartości z wyłącznie jednej kolumny w naszym zbiorze danych.
By zrobić to w czystym Pythonie musimy napisać:
number_of_items = [] for item in data: number_of_items.append(data[1]) |
Natomiast korzystając z NumPy:
number_of_items = data[:,0:1] |
Podobnie na przykład możemy z pomocą NumPy wyciągnąć prosto wartości 2 i 3 kolumny tylko dla 1 i 2 wiersza. Robimy to w następujący sposób:
number_of_items = data[1:2,0:1] |
Notacja z dwukropkiem jest również w czystym Pythonie, ale nie daje nam aż takich możliwości. Pozwala na wyciągniecie zakresu pewnych wartości. Przykładowo
otherdata[a:b] |
zwróci nam wartości z tablicy jednowymiarowej other_data o indeksach od a włącznie do b wyłącznie. Z kolei jeśli zapiszemy:
otherdata[a:] |
zwróci nam wartości o indeksach zaczynających się od a włącznie.
Tymczasem:
otherdata[:b] |
zwróci nam wartości o indeksach od 0 do b wyłącznie.
Pingback: Kolejne fajne rzeczy w NumPy | Programistka Iwona()