W czwartym dniu kursu zgłębimy tajniki biblioteki NumPy, fundamentalnego narzędzia dla każdego data scientist. Nauczymy się, jak efektywnie manipulować danymi numerycznymi i przeprowadzać obliczenia w sposób zoptymalizowany, co stanowi fundament w analizie danych.
NumPy (Numerical Python) to biblioteka Pythona służąca do efektywnej pracy z danymi numerycznymi. Oferuje ona potężne tablice wielowymiarowe (ndarrays) oraz bogaty zestaw funkcji do wykonywania operacji matematycznych. Jest ona podstawą dla wielu innych bibliotek, takich jak Pandas, SciPy czy scikit-learn, dlatego zrozumienie NumPy jest kluczowe dla każdego, kto zajmuje się analizą danych.
Instalacja NumPy:
Przed rozpoczęciem upewnij się, że masz zainstalowany NumPy. Możesz to zrobić, uruchamiając w terminalu:
pip install numpy
Importowanie NumPy:
Po zainstalowaniu, zaimportuj NumPy do swojego skryptu Python:
import numpy as np
Używamy np
jako aliasu, co jest standardową konwencją i ułatwia pisanie kodu.
Podstawowym obiektem w NumPy jest tablica ndarray
. Możemy ją stworzyć na wiele sposobów, na przykład z list Pythona:
import numpy as np
# Z listy
lista = [1, 2, 3, 4, 5]
tablica = np.array(lista)
print(tablica)
print(type(tablica))
# Zagnieżdżona lista (macierz)
macierz = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(macierz)
print(macierz.shape) # Wyświetla kształt macierzy (wiersze, kolumny)
NumPy automatycznie przetwarza dane tak, aby były tego samego typu (np. int
lub float
). Jeśli podasz mieszane typy, NumPy spróbuje przekonwertować je na wspólny typ.
Inne sposoby tworzenia tablic:
np.zeros(kształt)
: tworzy tablicę wypełnioną zerami.np.ones(kształt)
: tworzy tablicę wypełnioną jedynkami.np.arange(początek, koniec, krok)
: tworzy tablicę z sekwencją liczb.np.linspace(początek, koniec, liczba_elementów)
: tworzy tablicę z równomiernie rozmieszczonymi liczbami.Przykład:
import numpy as np
zerowa = np.zeros((2, 3)) # tablica 2x3 wypełniona zerami
jedynkowa = np.ones((1, 4))
zakres = np.arange(0, 10, 2) # od 0 do 10 (bez 10) z krokiem 2
print(zerowa)
print(jedynkowa)
print(zakres)
NumPy pozwala na wykonywanie operacji arytmetycznych na całych tablicach jednocześnie, co jest znacznie szybsze niż iterowanie po elementach listy w Pythonie.
import numpy as np
tablica1 = np.array([1, 2, 3, 4])
tablica2 = np.array([5, 6, 7, 8])
# Dodawanie, odejmowanie, mnożenie, dzielenie
suma = tablica1 + tablica2
roznica = tablica1 - tablica2
mnozenie = tablica1 * tablica2
dzielenie = tablica1 / tablica2
print(suma)
print(roznica)
print(mnozenie)
print(dzielenie)
# Mnożenie tablicy przez skalar
mnozenie_przez_2 = tablica1 * 2
print(mnozenie_przez_2)
# Funkcje agregujące
print(np.sum(tablica1)) # Suma wszystkich elementów
print(np.mean(tablica1)) # Średnia
print(np.std(tablica1)) # Odchylenie standardowe
print(np.max(tablica1)) # Maksimum
print(np.min(tablica1)) # Minimum
Indeksowanie i Slicing:
Indeksowanie i slicing w NumPy są podobne do tych w listach Pythona, ale działają na wielu wymiarach.
import numpy as np
macierz = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# Dostęp do pojedynczego elementu
element = macierz[0, 1] # element w pierwszym wierszu i drugiej kolumnie (wynik: 2)
print(element)
# Slicing
wiersz_1_i_2 = macierz[0:2, :] # pierwszy i drugi wiersz
kolumny_1_i_2 = macierz[:, 0:2] # pierwsze i drugie kolumny
print(wiersz_1_i_2)
print(kolumny_1_i_2)
Listy Pythona są bardziej uniwersalne, ale NumPy jest zoptymalizowane do operacji numerycznych. Oto kilka kluczowych różnic:
Przykład demonstracji różnicy w prędkości:
import numpy as np
import time
rozmiar = 1000000
lista1 = list(range(rozmiar))
lista2 = list(range(rozmiar))
tablica1 = np.arange(rozmiar)
tablica2 = np.arange(rozmiar)
# Czas dla listy
start_czas = time.time()
wynik_lista = [x + y for x, y in zip(lista1, lista2)]
czas_lista = time.time() - start_czas
print(f"Czas dla listy: {czas_lista:.4f} sekund")
# Czas dla NumPy
start_czas = time.time()
wynik_numpy = tablica1 + tablica2
czas_numpy = time.time() - start_czas
print(f"Czas dla NumPy: {czas_numpy:.4f} sekund")
Explore advanced insights, examples, and bonus exercises to deepen understanding.
Dziś zagłębiamy się głębiej w świat NumPy! Po poznaniu podstaw, czas na bardziej zaawansowane techniki i sposoby wykorzystania tej potężnej biblioteki w analizie danych. Przygotujcie się na jeszcze więcej obliczeń i fascynujących możliwości!
Pamiętacie, jak mówiliśmy o różnicy między listami Pythona a tablicami NumPy? Klucz tkwi w wydajności i optymalizacji. NumPy wykorzystuje 'wektoryzację', co oznacza, że operacje są wykonywane równolegle na całych tablicach, a nie na pojedynczych elementach. To przyspiesza obliczenia i pozwala na efektywniejsze wykorzystanie zasobów komputera.
Broadcasting: Kolejnym potężnym narzędziem jest broadcasting. NumPy potrafi operować na tablicach o różnych kształtach, automatycznie dostosowując je do siebie. Na przykład, możemy dodać liczbę do całej kolumny w macierzy, bez konieczności pisania pętli. Przykład:
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([10, 20, 30])
c = a + b # Broadcasting: dodaje każdy element z b do odpowiedniej kolumny w a
print(c)
# Output: [[11 22 33], [14 25 36]]
Typy Danych: NumPy oferuje wiele typów danych dla optymalizacji pamięci. Możemy precyzyjnie określić, czy chcemy używać liczb całkowitych, zmiennoprzecinkowych, czy innych typów. Używanie odpowiedniego typu danych pozwala na oszczędność pamięci i szybsze obliczenia.
Maskowanie i Indeksowanie Boolean: Możemy selektywnie wybierać elementy tablicy spełniające określone kryteria. Jest to bardzo przydatne w analizie danych, kiedy chcemy analizować tylko pewną część zbioru danych. Przykład:
import numpy as np
dane = np.array([1, 2, 3, 4, 5, 6])
maska = dane > 3 # Tworzy tablicę boolowską
print(maska) # Output: [False False False True True True]
dane_powyzej_3 = dane[maska] # Wybieramy tylko te elementy, dla których maska jest True
print(dane_powyzej_3) # Output: [4 5 6]
Ćwiczenie 1: Stwórz tablicę NumPy 2D reprezentującą macierz 3x3 wypełnioną losowymi liczbami całkowitymi z zakresu od 0 do 100. Następnie oblicz średnią dla każdego wiersza i dla każdej kolumny.
Ćwiczenie 2: Masz tablicę danych reprezentującą wyniki badań, gdzie wartości poniżej 0 oznaczają błąd pomiaru. Użyj indeksowania boolean, aby odfiltrować wszystkie wartości błędne i oblicz średnią wartość pozostałych danych.
Ćwiczenie 3: Za pomocą broadcastingu, pomnóż tablicę 1D (np. [1, 2, 3]) przez tablicę 2D (np. [[4, 5, 6], [7, 8, 9]]), tak aby każdy wiersz tablicy 2D był pomnożony przez odpowiedni element z tablicy 1D.
NumPy jest wszechobecny w świecie analizy danych. Używany jest w:
Przykład z życia codziennego: Wyobraźmy sobie, że mamy dane pogodowe dla kilku miast (temperatury, opady, wiatr) przechowywane w tablicy NumPy. Korzystając z NumPy, możemy łatwo obliczyć średnią temperaturę dla każdego miasta, zidentyfikować najcieplejsze dni, czy przewidywać przyszłe warunki pogodowe na podstawie trendów.
Zaprojektuj algorytm do interpolacji liniowej danych za pomocą NumPy. Użyj NumPy do interpolacji brakujących wartości w szeregu danych. Zastanów się nad przypadkami brzegowymi (np. brakujące wartości na początku lub końcu szeregu).
Zapoznaj się z dokumentacją NumPy: https://numpy.org/doc/stable/
Utwórz tablicę NumPy z listą `[10, 20, 30, 40, 50]`. Następnie oblicz sumę, średnią i odchylenie standardowe elementów tablicy. Wydrukuj wyniki.
Utwórz tablicę NumPy 3x3 z wartościami od 1 do 9. Wybierz i wydrukuj: element w drugim wierszu i trzeciej kolumnie; pierwszy wiersz; kolumny 1 i 2.
Użyj `np.arange` do stworzenia tablicy liczb od 1 do 12. Następnie zmień kształt tablicy na macierz 3x4 i wydrukuj wynik.
Wyobraź sobie, że jesteś analitykiem danych w firmie sprzedającej produkty online. Dostajesz dane dotyczące zamówień (kwota zamówienia, data, id klienta) i musisz obliczyć średnią wartość zamówienia dla każdego miesiąca. Z użyciem NumPy, możesz łatwo analizować dane i wydajnie wykonywać obliczenia.
Przed następną lekcją spróbuj poeksperymentować z różnymi funkcjami NumPy. Zapoznaj się z dokumentacją NumPy dotyczącą takich tematów jak broadcasting i masking. Przygotuj się na poznanie biblioteki Pandas, która korzysta z NumPy pod spodem.
We're automatically tracking your progress. Sign up for free to keep your learning paths forever and unlock advanced features like detailed analytics and personalized recommendations.