Python - wykresy
Zagadnienia
-
Wczytywanie danych w bibliotece Pandas i Numpy.
-
Radzenie sobie z brakującymi warotściami, zamiana brakujących wartości na dane liczbowe lub łańcuchy znaków.
-
Tworzenie prostych wykresów różnego typu, stylowanie wykresów.
-
Tworzenie kilku wykresów na jednym obrazku.
Wczytanie danych
W zależności od charakteru, przeznaczenia oraz potrzeb użytkowników istnieje wiele formatów przechowywania danych, które zostały zaprojektowane tak, aby zapewnić skuteczną organizację, szybki dostęp i wydajne przetwarzanie. Najczęściej dane są przechowywane w plikach tekstowych o określonym schemacie np.:
W bibliotece Numpy dostępne są funkcje przetwarzające pliki tekstowe na macierze:
https://numpy.org/doc/stable/reference/routines.io.html#text-files
oraz umożliwiające zapis macierzy numpy do pliku binarnego co umożliwia poźniej szybkie wczytanie danych:
https://numpy.org/doc/stable/reference/routines.io.html#text-files
O wiele więcej i prostszych w obsłudze funkcji do odczytu popularnych formatów przechowywania danych ma biblioteka Pandas:
https://pandas.pydata.org/pandas-docs/stable/reference/io.html
Zadanie
Następnie utwórz projekt Lab2 zawierający skrypt main.py. Następnie pobierz i dołącz do projektu (utwórz folder datasets gdzie wkleisz pobrane pliki) dwa zbiory danych:
https://archive.ics.uci.edu/dataset/27/credit+approval
https://archive.ics.uci.edu/dataset/53/iris
Wczytaj pliki najpierw za pomocą funkcji dostępnych w bibliotece numpy a następnie pandas. Wskaż problemy występujące podczas korzystania z bibliotek. Jeden ze zbiorów danych zawiera brakujące wartości. Jak z brakami radzą sobie obydwie biblioteki?
Znajdz ile występuje braków danych w każdej z kolumn. https://numpy.org/doc/stable/reference/generated/numpy.isnan.html
Wykresy
Jedną z najpopularniejszych opcji tworzenia wykresów jest biblioteka Matplotlib.
Zawiera najpopularniejsze typy wykresów 2D i 3D które można dostosować do własnych potrzeb:
Tworzenie wykresu - podstawy
Biblioteka matplotlib posiada dwa interfejsy wykorzystywane do tworzenia wykresów:
- Explict “Axes”:
- Zalety:
- Większa kontrola: Interfejs “Axes” daje większą kontrolę nad tworzeniem i dostosowywaniem wykresów, ponieważ umożliwia bezpośrednią interakcję z obiektami figury i osi.
- Zwięzłość kodu: Kod korzystający z interfejsu “Axes” często jest bardziej czytelny i zwięzły, ponieważ bezpośrednie odwołania do metod obiektów figury i osi pozwalają jasno określić, co się dzieje.
- Elastyczność: Interfejs “Axes” jest bardziej elastyczny i umożliwia bardziej zaawansowane modyfikacje wykresów, takie jak dodawanie dodatkowych elementów (np. tekstu, linii, punktów) lub manipulowanie atrybutami tych elementów.
- Wady:
- Więcej kodu: Czasami potrzebujesz więcej linii kodu, aby stworzyć wykres przy użyciu interfejsu “Axes”, ponieważ musisz wywołać więcej metod na obiektach figury i osi.
- Początkowy próg uczenia: Dla początkujących użytkowników Matplotlib interfejs “Axes” może wymagać więcej czasu na naukę, ponieważ wymaga zrozumienia struktury obiektów figury i osi.
- Implict “pyplot”:
- Zalety:
- Łatwość użycia: Interfejs “pyplot” jest łatwiejszy w użyciu dla początkujących użytkowników, ponieważ nie wymaga bezpośredniej interakcji z obiektami figury i osi. Użytkownik może po prostu użyć funkcji plt do tworzenia wykresów i dodawania do nich elementów.
- Szybkość prototypowania: Dzięki automatycznemu śledzeniu ostatniej figury i osi, interfejs “pyplot” pozwala szybko prototypować wykresy, ponieważ nie trzeba za każdym razem odwoływać się do obiektów figury i osi.
- Wady:
- Mniej elastyczność: Interfejs “pyplot” może być mniej elastyczny niż interfejs “Axes”, ponieważ niektóre zaawansowane operacje mogą być trudniejsze do wykonania.
- Mniej kontrola: Dla bardziej zaawansowanych scenariuszy wizualizacji, gdzie potrzebujesz większej kontroli nad wykresami, interfejs “pyplot” może być mniej odpowiedni.
Na początku programu należy zaimportować moduł matplotlib.pyplot, który umożliwia tworzenie wykresów i manipulację nimi. Zwykle importuje się go z aliasem plt, co ułatwia korzystanie z jego funkcji.
import matplotlib.pyplot as plt
Następnie należy przygotować dane, które chcemy przedstawić na wykresie. Może to być jedna lub więcej list, tablice NumPy lub dane wczytane z pliku.
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
Utwórz obiekt Figure oraz Axes za pomocą subplots()
Wybierz rodzaj wykresu, który chcesz stworzyć, na przykład wykres liniowy, punktowy, słupkowy itp., i użyj odpowiedniej funkcji do jego stworzenia.
ax.plot(x, y) # Wykres liniowy
ax.scatter(x, y) # Wykres punktowy
ax.bar(x, y) # Wykres słupkowy
Dodaj etykiety osi, tytuł wykresu, legendę i inne elementy, aby wykres był czytelny i przejrzysty.
ax.set_xlabel('Oś X')
ax.set_ylabel('Oś Y')
ax.set_title('Tytuł wykresu')
ax.legend(['Dane 1'])
Aby wyświetlić wykres, użyj funkcji show().
Zadania
Przeanalizuj przykłady ze strony:
https://matplotlib.org/stable/users/explain/quick_start.html
- Utwórz wykres rozproszenia (scatterplot) dla długości działek kielicha i płatków dla wszystkich trzech gatunków irysów:
- Umieść długość działek kielicha na osi x, a długość płatków na osi y.
- Użyj różnych kolorów lub markerów dla każdego gatunku irysów.
- Histogram dla długości działek kielicha dla każdego gatunku irysów:
- Stwórz trzy oddzielne histogramy, każdy dla jednego gatunku irysów.
- Osie x powinny reprezentować długość działek kielicha, a osie y liczbę wystąpień.
- Wykres pudełkowy dla szerokości i długości płatków oraz liści dla każdego gatunku irysów:
- Stwórz trzy wykresy, każdy dla innego gatunku irysów.
- Osie x powinny reprezentować nazwy gatunków, a osie y dane na temat danego gatunku np. szerokość płatków.
- podpisz każde z pudełek odpowiednią etykietą np. sepal-width
- Porównanie średnich szerokości płatków dla różnych gatunków irysów:
- Stwórz wykres słupkowy przedstawiający średnie szerokości płatków dla każdego gatunku irysów.
- Osie x powinny reprezentować nazwy gatunków, a osie y średnie szerokości płatków.
- Wykres kołowy przedstawiający procentowy udział każdego gatunku irysów w zbiorze danych:
- Stwórz wykres kołowy, gdzie każdy segment będzie reprezentować procentowy udział jednego z trzech gatunków irysów w całym zbiorze danych.
- Wykres wieloliniowy dla wszystkich trzech gatunków irysów, przedstawiający zmianę długości płatków w zależności od indeksu danych:
- Stwórz wykres z trzema liniami, gdzie na osi x będzie indeks danych, a na osi y wartości długości płatków dla każdego gatunku irysów.