Dziś będzie o przetwarzaniu danych z wykorzystaniem NumPy.
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.