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 pd
Jeśli coś nie działa, upewnij się, że masz zainstalowane biblioteki
numpy
oraz pandas
:
pip install numpy pandas
NumPy – 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
= [1, 2, 3, 4, 5]
lista = np.array(lista)
tablica print(tablica)
# Tworzenie tablicy z zakresu wartości
= np.arange(10)
tab_od_0_do_9 print(tab_od_0_do_9)
# Tablica wielowymiarowa (2D)
= np.array([[1, 2, 3],
tab_2d 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:
= np.arange(10) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
tab print("Element o indeksie 3:", tab[3])
print("Fragment od indeksu 2 do 5:", tab[2:6])
Dla tablic wielowymiarowych:
= np.array([[10, 20, 30],
tab_2d 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:
= np.arange(12) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
tab = tab.reshape(3, 4)
tab_reshaped print(tab_reshaped)
Podstawowe operacje matematyczne
NumPy umożliwia operacje arytmetyczne na całych tablicach:
= np.array([1, 2, 3])
tab 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:
= np.arange(10)
tab = tab[tab > 5] # Wybieramy elementy większe niż 5
filtrowane 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
= pd.Series([10, 20, 30], index=["a", "b", "c"])
ser print(ser)
# Tworzenie DataFrame z słownika
= {
data "imie": ["Jan", "Anna", "Kasia"],
"wiek": [28, 22, 35],
"miasto": ["Warszawa", "Kraków", "Gdańsk"]
}= pd.DataFrame(data)
df 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:
= pd.read_csv("dane.csv")
df_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:
loc
używany jest do wyboru wierszy/kolumn wg etykiet (nazw indeksów).iloc
uż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
= df_csv[df_csv["cena"] > 40]
drozsze 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:
"wartosc_sprzedazy"] = df_csv["cena"] * df_csv["ilosc"]
df_csv[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 * cena
i 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.