You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

12 KiB

Wizualizacja Proporcji

 Sketchnote autorstwa (@sketchthedocs)
Wizualizacja Proporcji - Sketchnote autorstwa @nitya

W tej lekcji użyjesz innego zestawu danych związanego z naturą, aby wizualizować proporcje, na przykład ile różnych rodzajów grzybów znajduje się w danym zestawie danych o pieczarkach. Przyjrzyjmy się tym fascynującym grzybom, korzystając z zestawu danych pochodzącego z Audubon, zawierającego szczegóły dotyczące 23 gatunków grzybów blaszkowych z rodzin Agaricus i Lepiota. Będziesz eksperymentować z apetycznymi wizualizacjami, takimi jak:

  • Wykresy kołowe 🥧
  • Wykresy pierścieniowe 🍩
  • Wykresy "goferowe" 🧇

💡 Bardzo ciekawy projekt o nazwie Charticulator stworzony przez Microsoft Research oferuje darmowy interfejs typu "przeciągnij i upuść" do wizualizacji danych. W jednym z ich samouczków również używany jest ten zestaw danych o grzybach! Możesz więc jednocześnie eksplorować dane i uczyć się obsługi biblioteki: Samouczek Charticulator.

Quiz przed lekcją

Poznaj swoje grzyby 🍄

Grzyby są bardzo interesujące. Zaimportujmy zestaw danych, aby je zbadać:

import pandas as pd
import matplotlib.pyplot as plt
mushrooms = pd.read_csv('../../data/mushrooms.csv')
mushrooms.head()

Tabela zostaje wyświetlona z danymi idealnymi do analizy:

class cap-shape cap-surface cap-color bruises odor gill-attachment gill-spacing gill-size gill-color stalk-shape stalk-root stalk-surface-above-ring stalk-surface-below-ring stalk-color-above-ring stalk-color-below-ring veil-type veil-color ring-number ring-type spore-print-color population habitat
Trujący Wypukły Gładki Brązowy Siniaki Ostry Wolny Bliski Wąski Czarny Rozszerzający Równy Gładki Gładki Biały Biały Częściowy Biały Jeden Wiszący Czarny Rozproszony Miejski
Jadalny Wypukły Gładki Żółty Siniaki Migdałowy Wolny Bliski Szeroki Czarny Rozszerzający Maczugowaty Gładki Gładki Biały Biały Częściowy Biały Jeden Wiszący Brązowy Liczny Trawy
Jadalny Dzwonkowaty Gładki Biały Siniaki Anyżowy Wolny Bliski Szeroki Brązowy Rozszerzający Maczugowaty Gładki Gładki Biały Biały Częściowy Biały Jeden Wiszący Brązowy Liczny Łąki
Trujący Wypukły Łuskowaty Biały Siniaki Ostry Wolny Bliski Wąski Brązowy Rozszerzający Równy Gładki Gładki Biały Biały Częściowy Biały Jeden Wiszący Czarny Rozproszony Miejski

Od razu zauważasz, że wszystkie dane są tekstowe. Musisz je przekonwertować, aby móc użyć ich na wykresie. Większość danych jest w rzeczywistości reprezentowana jako obiekt:

print(mushrooms.select_dtypes(["object"]).columns)

Wynik to:

Index(['class', 'cap-shape', 'cap-surface', 'cap-color', 'bruises', 'odor',
       'gill-attachment', 'gill-spacing', 'gill-size', 'gill-color',
       'stalk-shape', 'stalk-root', 'stalk-surface-above-ring',
       'stalk-surface-below-ring', 'stalk-color-above-ring',
       'stalk-color-below-ring', 'veil-type', 'veil-color', 'ring-number',
       'ring-type', 'spore-print-color', 'population', 'habitat'],
      dtype='object')

Weź te dane i przekonwertuj kolumnę 'class' na kategorię:

cols = mushrooms.select_dtypes(["object"]).columns
mushrooms[cols] = mushrooms[cols].astype('category')
edibleclass=mushrooms.groupby(['class']).count()
edibleclass

Teraz, jeśli wyświetlisz dane o grzybach, zobaczysz, że zostały one pogrupowane w kategorie według klasy trujący/jadalny:

cap-shape cap-surface cap-color bruises odor gill-attachment gill-spacing gill-size gill-color stalk-shape ... stalk-surface-below-ring stalk-color-above-ring stalk-color-below-ring veil-type veil-color ring-number ring-type spore-print-color population habitat
class
Jadalny 4208 4208 4208 4208 4208 4208 4208 4208 4208 4208 ... 4208 4208 4208 4208 4208 4208 4208 4208 4208 4208
Trujący 3916 3916 3916 3916 3916 3916 3916 3916 3916 3916 ... 3916 3916 3916 3916 3916 3916 3916 3916 3916 3916

Jeśli postępujesz zgodnie z kolejnością przedstawioną w tej tabeli, aby stworzyć etykiety kategorii klasy, możesz stworzyć wykres kołowy:

Koło!

labels=['Edible','Poisonous']
plt.pie(edibleclass['population'],labels=labels,autopct='%.1f %%')
plt.title('Edible?')
plt.show()

Voila, wykres kołowy pokazujący proporcje tych danych według dwóch klas grzybów. Bardzo ważne jest, aby kolejność etykiet była poprawna, szczególnie tutaj, więc upewnij się, że weryfikujesz kolejność podczas budowania tablicy etykiet!

wykres kołowy

Pierścienie!

Nieco bardziej interesującym wizualnie wykresem kołowym jest wykres pierścieniowy, czyli wykres kołowy z dziurą w środku. Przyjrzyjmy się naszym danym za pomocą tej metody.

Spójrz na różne siedliska, w których rosną grzyby:

habitat=mushrooms.groupby(['habitat']).count()
habitat

Tutaj grupujesz dane według siedliska. Jest ich 7, więc użyj ich jako etykiet dla wykresu pierścieniowego:

labels=['Grasses','Leaves','Meadows','Paths','Urban','Waste','Wood']

plt.pie(habitat['class'], labels=labels,
        autopct='%1.1f%%', pctdistance=0.85)
  
center_circle = plt.Circle((0, 0), 0.40, fc='white')
fig = plt.gcf()

fig.gca().add_artist(center_circle)
  
plt.title('Mushroom Habitats')
  
plt.show()

wykres pierścieniowy

Ten kod rysuje wykres i środkowe koło, a następnie dodaje to koło do wykresu. Zmień szerokość środkowego koła, zmieniając 0.40 na inną wartość.

Wykresy pierścieniowe można dostosowywać na różne sposoby, aby zmieniać etykiety. Etykiety w szczególności można wyróżniać dla lepszej czytelności. Dowiedz się więcej w dokumentacji.

Teraz, gdy wiesz, jak grupować dane i wyświetlać je jako koło lub pierścień, możesz eksplorować inne rodzaje wykresów. Spróbuj wykresu "goferowego", który jest po prostu innym sposobem wizualizacji ilości.

Gofry!

Wykres typu "goferowego" to inny sposób wizualizacji ilości w postaci 2D tablicy kwadratów. Spróbuj zwizualizować różne ilości kolorów kapeluszy grzybów w tym zestawie danych. Aby to zrobić, musisz zainstalować bibliotekę pomocniczą o nazwie PyWaffle i użyć Matplotlib:

pip install pywaffle

Wybierz segment swoich danych do pogrupowania:

capcolor=mushrooms.groupby(['cap-color']).count()
capcolor

Stwórz wykres "goferowy", tworząc etykiety, a następnie grupując swoje dane:

import pandas as pd
import matplotlib.pyplot as plt
from pywaffle import Waffle
  
data ={'color': ['brown', 'buff', 'cinnamon', 'green', 'pink', 'purple', 'red', 'white', 'yellow'],
    'amount': capcolor['class']
     }
  
df = pd.DataFrame(data)
  
fig = plt.figure(
    FigureClass = Waffle,
    rows = 100,
    values = df.amount,
    labels = list(df.color),
    figsize = (30,30),
    colors=["brown", "tan", "maroon", "green", "pink", "purple", "red", "whitesmoke", "yellow"],
)

Za pomocą wykresu "goferowego" możesz wyraźnie zobaczyć proporcje kolorów kapeluszy w tym zestawie danych o grzybach. Co ciekawe, jest wiele grzybów z zielonymi kapeluszami!

wykres goferowy

Pywaffle obsługuje ikony w wykresach, które wykorzystują dowolne ikony dostępne w Font Awesome. Poeksperymentuj, aby stworzyć jeszcze ciekawszy wykres "goferowy" z ikonami zamiast kwadratów.

W tej lekcji nauczyłeś się trzech sposobów wizualizacji proporcji. Najpierw musisz pogrupować swoje dane w kategorie, a następnie zdecydować, który sposób ich wyświetlenia - koło, pierścień czy gofr - jest najlepszy. Wszystkie są "smaczne" i dostarczają użytkownikowi natychmiastowego wglądu w zestaw danych.

🚀 Wyzwanie

Spróbuj odtworzyć te apetyczne wykresy w Charticulator.

Quiz po lekcji

Przegląd i samodzielna nauka

Czasami nie jest oczywiste, kiedy użyć wykresu kołowego, pierścieniowego czy "goferowego". Oto kilka artykułów na ten temat:

https://www.beautiful.ai/blog/battle-of-the-charts-pie-chart-vs-donut-chart

https://medium.com/@hypsypops/pie-chart-vs-donut-chart-showdown-in-the-ring-5d24fd86a9ce

https://www.mit.edu/~mbarker/formula1/f1help/11-ch-c6.htm

https://medium.datadriveninvestor.com/data-visualization-done-the-right-way-with-tableau-waffle-chart-fdf2a19be402

Poszukaj więcej informacji na temat tego trudnego wyboru.

Zadanie

Spróbuj w Excelu

Zastrzeżenie:
Ten dokument został przetłumaczony za pomocą usługi tłumaczenia AI Co-op Translator. Chociaż dokładamy wszelkich starań, aby tłumaczenie było precyzyjne, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego rodzimym języku powinien być uznawany za wiarygodne źródło. W przypadku informacji o kluczowym znaczeniu zaleca się skorzystanie z profesjonalnego tłumaczenia przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.