04 - Przetwarzanie danych numerycznych z wykorzystaniem bibliotek NumPy oraz pandas
Podstawy przetwarzania danych
Politechnika Poznańska, Instytut Robotyki i Inteligencji Maszynowej
Ćwiczenie laboratoryjne 4: przetwarzanie danych numerycznych z wykorzystaniem bibliotek NumPy oraz pandas
Powrót do spisu treści ćwiczeń laboratoryjnych
Wprowadzenie
Celem tego laboratorium jest praktyczne zapoznanie się z podstawowymi
operacjami w bibliotekach NumPy i
Pandas, które są podstawowymi narzędziami do pracy z
danymi w Pythonie. Biblioteka NumPy oferuje szybkie w
obsłudze wielowymiarowe tablice i różnorodne funkcje matematyczne do
operowania na nich, dzięki czemu można ją wykorzystać do sprawnego
działania na danych macierzowych. Pandas dostarcza
wygodnych struktur danych (takich jak DataFrame),
umożliwiając łatwe wczytywanie, przetwarzanie i analizę danych
ustrukturyzowanych - tabelarycznych.
Przygotowanie środowiska
Zaimportuj do swojego programu niezbędne biblioteki:
import numpy as np
import pandas as pdJeśli coś nie działa, upewnij się, że masz zainstalowane biblioteki
numpy oraz pandas:
pip install numpy pandasNumPy – Podstawy
Dlaczego NumPy?
NumPy dostarcza wielowymiarowy typ tablicowy ndarray,
który jest znacznie bardziej efektywny pod względem zajętości pamięci i
szybkości wykonywania operacji niż standardowe listy Pythona. NumPy
pozwala na:
- Szybkie operacje wektorowe na całych tablicach (bez konieczności używania pętli).
- Łatwe wczytywanie i zapisywanie danych.
- Bogaty zestaw funkcji matematycznych i statystycznych.
Tworzenie tablic NumPy
Tworzenie tablic może odbywać się na wiele sposobów:
# Tworzenie tablicy z listy Pythona
lista = [1, 2, 3, 4, 5]
tablica = np.array(lista)
print(tablica)
# Tworzenie tablicy z zakresu wartości
tab_od_0_do_9 = np.arange(10)
print(tab_od_0_do_9)
# Tablica wielowymiarowa (2D)
tab_2d = np.array([[1, 2, 3],
[4, 5, 6]])
print(tab_2d)Rozmiar, kształt i typ danych
Tablice NumPy mają atrybuty takie jak shape (kształt
tablicy) czy dtype (typ danych):
print("Kształt tab_2d:", tab_2d.shape)
print("Typ danych:", tab_2d.dtype)
print("Liczba wymiarów:", tab_2d.ndim)Indeksowanie i wycinanie (slicing)
Podobnie jak w listach, tablice NumPy można indeksować oraz “wycinać” fragmenty:
tab = np.arange(10) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print("Element o indeksie 3:", tab[3])
print("Fragment od indeksu 2 do 5:", tab[2:6])Dla tablic wielowymiarowych:
tab_2d = np.array([[10, 20, 30],
[40, 50, 60],
[70, 80, 90]])
print("Drugi wiersz:", tab_2d[1])
print("Element w 3. wierszu, 2. kolumnie:", tab_2d[2, 1])
print("Fragment - pierwsze dwa wiersze i dwie pierwsze kolumny:\n", tab_2d[:2, :2])Modyfikacja kształtu tablic
Czasem potrzebujemy zmienić kształt (rozmiar w wymiarach) tablicy:
tab = np.arange(12) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
tab_reshaped = tab.reshape(3, 4)
print(tab_reshaped)Podstawowe operacje matematyczne
NumPy umożliwia operacje arytmetyczne na całych tablicach:
tab = np.array([1, 2, 3])
print("Dodawanie +10:", tab + 10)
print("Mnożenie *2:", tab * 2)
print("Podniesienie do kwadratu:", tab ** 2)
# Funkcje matematyczne
print("Suma:", np.sum(tab))
print("Średnia:", np.mean(tab))
print("Mediana:", np.median(tab))
print("Odchylenie standardowe:", np.std(tab))NumPy ma wybudowanych bardzo wiele innych przydatnych funkcji, a więcej informacji znajdziesz na stronie z dokumentacją biblioteki
Operacje logiczne i filtrowanie
Możemy też stosować operacje logiczne, aby wybrać elementy spełniające określony warunek:
tab = np.arange(10)
filtrowane = tab[tab > 5] # Wybieramy elementy większe niż 5
print(filtrowane)Operacje logiczne można łączyć w bardziej złożone konstrukcje.
Zadania do samodzielnego wykonania – NumPy
💥 Zadanie 1 💥
Utwórz tablicę NumPy zawierającą liczby od 100 do 109.
Wyświetl jej zawartość, a następnie wyświetl tylko elementy o indeksach
od 2 do 5.
💥 Zadanie 2 💥
Utwórz dwuwymiarową tablicę NumPy (3x3) zawierającą liczby od 1 do
9.
Wyświetl drugi wiersz oraz trzeci element z pierwszego wiersza.
💥 Zadanie 3 💥
Mając tablicę tab = np.array([4, 8, 15, 16, 23, 42]),
oblicz sumę, średnią i medianę tej tablicy.
Następnie wyświetl tylko te elementy tej tablicy, które są większe niż
10.
💥 Zadanie 4 💥
Utwórz tablicę o nazwie data zawierającą 10 losowych liczb
(np. użyj np.random.rand(10)) i oblicz wartość maksymalną
oraz minimalną. Wyświetl wyniki.
💥 Zadanie 5: 💥
Utwórz tablicę o kształcie (2,6) z liczbami od 0 do 11. Zmień jej
kształt (reshape) na (3,4) i wyświetl nową tablicę.
Pandas – Podstawy
Dlaczego Pandas?
Pandas upraszcza pracę z danymi tabelarycznymi poprzez:
- Struktury danych
Series(1D) iDataFrame(2D), które są wygodniejsze od list i słowników. - Łatwe wczytywanie danych z różnych formatów (CSV, Excel, SQL).
- Szeroki zakres funkcji do czyszczenia, filtrowania, grupowania i podsumowywania danych.
Tworzenie obiektów Series i DataFrame
# Tworzenie Series
ser = pd.Series([10, 20, 30], index=["a", "b", "c"])
print(ser)
# Tworzenie DataFrame z słownika
data = {
"imie": ["Jan", "Anna", "Kasia"],
"wiek": [28, 22, 35],
"miasto": ["Warszawa", "Kraków", "Gdańsk"]
}
df = pd.DataFrame(data)
print(df)Podstawowe informacje o DataFrame
Każdy DataFrame posiada atrybuty i metody pozwalające
uzyskać informacje o danych:
print("Pierwsze wiersze:\n", df.head())
print("Ostatnie wiersze:\n", df.tail())
print("Informacje o DataFrame:\n", df.info())
print("Statystyki:\n", df.describe())Wczytywanie danych z pliku CSV
Załóżmy, że masz plik dane.csv z następującą
zawartością:
produkt,cena,ilosc
jabłko,2.5,10
banan,3.0,5
pomarańcza,4.0,7
Wczytanie takiego pliku do Pandas:
df_csv = pd.read_csv("dane.csv")
print(df_csv)Wybieranie kolumn i wierszy
Wybieranie kolumn:
print(df_csv["produkt"])
print(df_csv[["produkt", "cena"]])Wybieranie wierszy za pomocą indeksów:
locużywany jest do wyboru wierszy/kolumn wg etykiet (nazw indeksów).ilocużywany jest do wyboru wierszy/kolumn wg pozycji (indeksów liczbowych).
print("Pierwszy wiersz:\n", df_csv.iloc[0])
print("Dane produktów od 2. do 3. wiersza:\n", df_csv.iloc[1:3])Filtrowanie danych
Możemy filtrować DataFrame na podstawie warunków logicznych:
# Produkty z ceną powyżej 40
drozsze = df_csv[df_csv["cena"] > 40]
print(drozsze)Warunki logiczne można łączyć wykorzystując operatory języka Python w celu uzyskania bardziej złożonych efektów.
Podstawowe operacje statystyczne
print("Średnia cena:", df_csv["cena"].mean())
print("Maksymalna ilość:", df_csv["ilosc"].max())Biblioteka Pandas ma wybudowanych bardzo wiele innych przydatnych funkcji, a więcej informacji znajdziesz na stronie z dokumentacją biblioteki
Dodawanie nowych kolumn i modyfikacje
Możemy dodawać nowe kolumny, wykonując operacje na istniejących:
df_csv["wartosc_sprzedazy"] = df_csv["cena"] * df_csv["ilosc"]
print(df_csv)Zadania do samodzielnego wykonania – Pandas
💥 Zadanie 1 💥
Utwórz własny DataFrame df_students zawierający kolumny:
imie, ocena, miasto.
Dodaj przynajmniej 4 wiersze z danymi (ręcznie).
Wyświetl utworzony DataFrame oraz jego podstawowe statystyki
(df_students.describe()).
💥 Zadanie 2 💥
Korzystając z DataFrame df_students, wyświetl tylko kolumnę
ocena.
💥 Zadanie 3 💥
Wyświetl z df_students tylko te wiersze, dla których
ocena jest większa niż 3.5.
💥 Zadanie 4 💥
Oblicz średnią ocen dla wszystkich studentów w df_students
i wyświetl ją.
💥 Zadanie 5 💥
Dodaj do df_students nową kolumnę status –
jeśli ocena jest powyżej 3.0, wpisz zaliczony, w przeciwnym
przypadku niezaliczony. Skorzystaj z filtrowania i
przypisywania wartości do wybranych wierszy.
💥 Zadanie 6 💥
Stwórz plik sales.csv, w którym znajdują się kolumny:
produkt, sprzedaz, cena i
wypełnij minimum pięć linii danymi przykładowymi.
Wczytaj plik do DataFrame df_sales, a następnie:
- Wyświetl wiersze, w których sprzedaż (
sprzedaz) jest większa niż 50.
- Oblicz średnią cenę produktów.
- Dodaj nową kolumnę
przychod = sprzedaz * cenai oblicz sumaryczny przychód ze wszystkich produktów.
💥 Zadanie 7 💥
Korzystając z df_sales, posortuj dane według kolumny
cena rosnąco i wyświetl wynik.