**Wprowadzenie do Biblioteki NumPy

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.

Learning Objectives

  • Zainstalować i zaimportować bibliotekę NumPy.
  • Tworzyć i manipulować tablicami NumPy (ndarrays).
  • Wykorzystywać podstawowe funkcje NumPy do operacji arytmetycznych i transformacji danych.
  • Zrozumieć różnice między tablicami NumPy a listami Pythona.

Lesson Content

Wprowadzenie do NumPy

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.

Tworzenie Tablic NumPy (ndarrays)

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)

Podstawowe Operacje na Tablicach

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)

Różnice między NumPy a Listami Pythona

Listy Pythona są bardziej uniwersalne, ale NumPy jest zoptymalizowane do operacji numerycznych. Oto kilka kluczowych różnic:

  • Efektywność: NumPy jest znacznie szybsze dla obliczeń numerycznych ze względu na optymalizację i wykorzystanie wektoryzacji (wykonywanie operacji na całych tablicach jednocześnie).
  • Typy danych: Tablice NumPy przechowują dane tego samego typu, podczas gdy listy mogą przechowywać dane różnych typów. Ograniczenie typów danych w NumPy pozwala na efektywniejsze przechowywanie i przetwarzanie.
  • Funkcjonalność: NumPy oferuje bogaty zestaw funkcji do operacji matematycznych, statystycznych, algebry liniowej i transformacji danych, czego brakuje w standardowych listach Pythona.

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")

Deep Dive

Explore advanced insights, examples, and bonus exercises to deepen understanding.

Rozszerzona Nauka: NumPy – Dzień 4

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!

Głębokie Zanurzenie: Zaawansowane Manipulacje i Optymalizacja

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]
            
        

Dodatkowe Ćwiczenia

Ć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.

Połączenia z Rzeczywistością

NumPy jest wszechobecny w świecie analizy danych. Używany jest w:

  • Analizie finansowej: Do obliczania wskaźników, modelowania portfela i analizy trendów.
  • Przetwarzaniu obrazów: Obrazy reprezentowane są jako tablice NumPy. Operacje na obrazach, takie jak filtrowanie i transformacje, są wykonywane przy użyciu NumPy.
  • Analizie danych medycznych: Do analizy danych z badań, danych pacjentów i obrazowania medycznego.
  • Symulacjach naukowych: Do modelowania zjawisk fizycznych, chemicznych i biologicznych.

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.

Sprawdź się! (Wyzwanie)

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).

Dalsza Nauka

  • Pandas: Biblioteka zbudowana na NumPy, która oferuje potężne struktury danych (np. DataFrame) do analizy danych.
  • SciPy: Biblioteka naukowych obliczeń, która zawiera zaawansowane funkcje matematyczne, statystyczne i naukowe, w tym optymalizację, integrację i przetwarzanie sygnałów.
  • Matplotlib i Seaborn: Biblioteki do wizualizacji danych, które często używają NumPy do operacji na danych.

Zapoznaj się z dokumentacją NumPy: https://numpy.org/doc/stable/

Interactive Exercises

Ćwiczenie 1: Tworzenie Tablicy i Podstawowe Operacje

Utwórz tablicę NumPy z listą `[10, 20, 30, 40, 50]`. Następnie oblicz sumę, średnią i odchylenie standardowe elementów tablicy. Wydrukuj wyniki.

Ćwiczenie 2: Indeksowanie i Slicing

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.

Ćwiczenie 3: Zastosowanie np.arange i np.reshape

Użyj `np.arange` do stworzenia tablicy liczb od 1 do 12. Następnie zmień kształt tablicy na macierz 3x4 i wydrukuj wynik.

Knowledge Check

Question 1: Która z poniższych instrukcji poprawnie importuje bibliotekę NumPy?

Question 2: Która funkcja NumPy służy do stworzenia tablicy wypełnionej zerami o danym kształcie?

Question 3: Jakiej komendy użyjesz, aby obliczyć średnią wartość wszystkich elementów w tablicy NumPy `a`?

Question 4: Która cecha najlepiej opisuje przewagę NumPy nad listami Pythona w kontekście operacji numerycznych?

Question 5: Jakiego typu danych domyślnie używa NumPy do przechowywania liczb całkowitych, jeśli nie zostanie określony typ?

Practical Application

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.

Key Takeaways

Next Steps

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.

Your Progress is Being Saved!

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.

Next Lesson (Day 5)