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.
Data-Science-For-Beginners/translations/nl/3-Data-Visualization/10-visualization-distributions
leestott 264ebcc9fd
🌐 Update translations via Co-op Translator
2 weeks ago
..
solution 🌐 Update translations via Co-op Translator 3 weeks ago
README.md 🌐 Update translations via Co-op Translator 2 weeks ago
assignment.md 🌐 Update translations via Co-op Translator 3 weeks ago
notebook.ipynb 🌐 Update translations via Co-op Translator 3 weeks ago

README.md

Visualiseren van Distributies

 Sketchnote door (@sketchthedocs)
Visualiseren van Distributies - Sketchnote door @nitya

In de vorige les heb je enkele interessante feiten geleerd over een dataset over de vogels van Minnesota. Je ontdekte foutieve gegevens door uitschieters te visualiseren en bekeek de verschillen tussen vogelcategorieën op basis van hun maximale lengte.

Quiz voorafgaand aan de les

Verken de vogeldataset

Een andere manier om gegevens te onderzoeken is door te kijken naar de verdeling ervan, of hoe de gegevens langs een as zijn georganiseerd. Misschien wil je bijvoorbeeld meer te weten komen over de algemene verdeling van de maximale spanwijdte of het maximale lichaamsgewicht van de vogels in Minnesota in deze dataset.

Laten we enkele feiten ontdekken over de verdelingen van gegevens in deze dataset. Importeer in het bestand notebook.ipynb in de hoofdmap van deze lesmap Pandas, Matplotlib en je gegevens:

import pandas as pd
import matplotlib.pyplot as plt
birds = pd.read_csv('../../data/birds.csv')
birds.head()
Naam WetenschappelijkeNaam Categorie Orde Familie Geslacht Beschermingsstatus MinLengte MaxLengte MinLichaamsgewicht MaxLichaamsgewicht MinSpanwijdte MaxSpanwijdte
0 Zwartbuikfluiteend Dendrocygna autumnalis Eenden/Ganzen/Watervogels Anseriformes Anatidae Dendrocygna LC 47 56 652 1020 76 94
1 Rosse fluiteend Dendrocygna bicolor Eenden/Ganzen/Watervogels Anseriformes Anatidae Dendrocygna LC 45 53 712 1050 85 93
2 Sneeuwgans Anser caerulescens Eenden/Ganzen/Watervogels Anseriformes Anatidae Anser LC 64 79 2050 4050 135 165
3 Ross' gans Anser rossii Eenden/Ganzen/Watervogels Anseriformes Anatidae Anser LC 57.3 64 1066 1567 113 116
4 Grote rietgans Anser albifrons Eenden/Ganzen/Watervogels Anseriformes Anatidae Anser LC 64 81 1930 3310 130 165

Over het algemeen kun je snel naar de verdeling van gegevens kijken door een scatterplot te gebruiken, zoals we in de vorige les deden:

birds.plot(kind='scatter',x='MaxLength',y='Order',figsize=(12,8))

plt.title('Max Length per Order')
plt.ylabel('Order')
plt.xlabel('Max Length')

plt.show()

max lengte per orde

Dit geeft een overzicht van de algemene verdeling van lichaamslengte per vogelorde, maar het is niet de optimale manier om echte verdelingen weer te geven. Die taak wordt meestal uitgevoerd door een histogram te maken.

Werken met histogrammen

Matplotlib biedt uitstekende manieren om gegevensverdelingen te visualiseren met behulp van histogrammen. Dit type grafiek lijkt op een staafdiagram waarbij de verdeling zichtbaar is via een stijging en daling van de staven. Om een histogram te maken, heb je numerieke gegevens nodig. Om een histogram te maken, kun je een grafiek plotten waarbij je het type instelt op 'hist' voor histogram. Deze grafiek toont de verdeling van MaxBodyMass voor het volledige bereik van numerieke gegevens in de dataset. Door de gegevensreeks op te splitsen in kleinere intervallen (bins), kan het de verdeling van de waarden weergeven:

birds['MaxBodyMass'].plot(kind = 'hist', bins = 10, figsize = (12,12))
plt.show()

verdeling over de hele dataset

Zoals je kunt zien, valt het merendeel van de 400+ vogels in deze dataset in het bereik van minder dan 2000 voor hun maximale lichaamsgewicht. Krijg meer inzicht in de gegevens door de parameter bins te verhogen naar bijvoorbeeld 30:

birds['MaxBodyMass'].plot(kind = 'hist', bins = 30, figsize = (12,12))
plt.show()

verdeling over de hele dataset met grotere bins

Deze grafiek toont de verdeling op een iets meer gedetailleerde manier. Een grafiek die minder naar links is scheefgetrokken, kan worden gemaakt door ervoor te zorgen dat je alleen gegevens binnen een bepaald bereik selecteert:

Filter je gegevens om alleen die vogels te krijgen waarvan het lichaamsgewicht onder de 60 ligt, en toon 40 bins:

filteredBirds = birds[(birds['MaxBodyMass'] > 1) & (birds['MaxBodyMass'] < 60)]      
filteredBirds['MaxBodyMass'].plot(kind = 'hist',bins = 40,figsize = (12,12))
plt.show()     

gefilterd histogram

Probeer enkele andere filters en gegevenspunten. Om de volledige verdeling van de gegevens te zien, verwijder je de ['MaxBodyMass']-filter om gelabelde verdelingen te tonen.

Het histogram biedt ook enkele leuke kleur- en labelverbeteringen om uit te proberen:

Maak een 2D-histogram om de relatie tussen twee verdelingen te vergelijken. Laten we MaxBodyMass vergelijken met MaxLength. Matplotlib biedt een ingebouwde manier om convergentie te tonen met behulp van helderdere kleuren:

x = filteredBirds['MaxBodyMass']
y = filteredBirds['MaxLength']

fig, ax = plt.subplots(tight_layout=True)
hist = ax.hist2d(x, y)

Er lijkt een verwachte correlatie te zijn tussen deze twee elementen langs een verwachte as, met één bijzonder sterk convergentiepunt:

2D-plot

Histogrammen werken standaard goed voor numerieke gegevens. Wat als je verdelingen wilt zien op basis van tekstgegevens?

Verken de dataset voor verdelingen met tekstgegevens

Deze dataset bevat ook goede informatie over de vogelcategorie en zijn geslacht, soort en familie, evenals zijn beschermingsstatus. Laten we deze beschermingsinformatie onderzoeken. Wat is de verdeling van de vogels volgens hun beschermingsstatus?

In de dataset worden verschillende acroniemen gebruikt om de beschermingsstatus te beschrijven. Deze acroniemen komen van de IUCN Rode Lijst Categorieën, een organisatie die de status van soorten catalogiseert.

  • CR: Kritiek Bedreigd
  • EN: Bedreigd
  • EX: Uitgestorven
  • LC: Minste Zorg
  • NT: Bijna Bedreigd
  • VU: Kwetsbaar

Dit zijn tekstgebaseerde waarden, dus je moet een transformatie uitvoeren om een histogram te maken. Gebruik de gefilterdeBirds-dataraam om de beschermingsstatus samen met de minimale spanwijdte weer te geven. Wat zie je?

x1 = filteredBirds.loc[filteredBirds.ConservationStatus=='EX', 'MinWingspan']
x2 = filteredBirds.loc[filteredBirds.ConservationStatus=='CR', 'MinWingspan']
x3 = filteredBirds.loc[filteredBirds.ConservationStatus=='EN', 'MinWingspan']
x4 = filteredBirds.loc[filteredBirds.ConservationStatus=='NT', 'MinWingspan']
x5 = filteredBirds.loc[filteredBirds.ConservationStatus=='VU', 'MinWingspan']
x6 = filteredBirds.loc[filteredBirds.ConservationStatus=='LC', 'MinWingspan']

kwargs = dict(alpha=0.5, bins=20)

plt.hist(x1, **kwargs, color='red', label='Extinct')
plt.hist(x2, **kwargs, color='orange', label='Critically Endangered')
plt.hist(x3, **kwargs, color='yellow', label='Endangered')
plt.hist(x4, **kwargs, color='green', label='Near Threatened')
plt.hist(x5, **kwargs, color='blue', label='Vulnerable')
plt.hist(x6, **kwargs, color='gray', label='Least Concern')

plt.gca().set(title='Conservation Status', ylabel='Min Wingspan')
plt.legend();

spanwijdte en beschermingsstatus

Er lijkt geen goede correlatie te zijn tussen minimale spanwijdte en beschermingsstatus. Test andere elementen van de dataset met deze methode. Je kunt ook verschillende filters proberen. Vind je enige correlatie?

Dichtheidsplots

Je hebt misschien gemerkt dat de histogrammen die we tot nu toe hebben bekeken 'getrapt' zijn en niet soepel in een boog verlopen. Om een vloeiender dichtheidsgrafiek te tonen, kun je een dichtheidsplot proberen.

Om met dichtheidsplots te werken, kun je jezelf vertrouwd maken met een nieuwe plotbibliotheek, Seaborn.

Laad Seaborn en probeer een eenvoudige dichtheidsplot:

import seaborn as sns
import matplotlib.pyplot as plt
sns.kdeplot(filteredBirds['MinWingspan'])
plt.show()

Dichtheidsplot

Je kunt zien hoe de plot de vorige voor minimale spanwijdte-gegevens weerspiegelt; het is alleen iets vloeiender. Volgens de documentatie van Seaborn: "In vergelijking met een histogram kan KDE een plot produceren die minder rommelig en beter interpreteerbaar is, vooral bij het tekenen van meerdere verdelingen. Maar het heeft het potentieel om vervormingen te introduceren als de onderliggende verdeling begrensd of niet vloeiend is. Net als een histogram hangt de kwaliteit van de representatie ook af van de selectie van goede gladheidsparameters." bron Met andere woorden, uitschieters zullen, zoals altijd, je grafieken negatief beïnvloeden.

Als je die grillige MaxBodyMass-lijn in de tweede grafiek die je hebt gemaakt opnieuw wilt bekijken, kun je deze heel goed gladstrijken door deze opnieuw te maken met deze methode:

sns.kdeplot(filteredBirds['MaxBodyMass'])
plt.show()

gladde lichaamsgewichtlijn

Als je een gladde, maar niet te gladde lijn wilt, pas je de parameter bw_adjust aan:

sns.kdeplot(filteredBirds['MaxBodyMass'], bw_adjust=.2)
plt.show()

minder gladde lichaamsgewichtlijn

Lees over de beschikbare parameters voor dit type plot en experimenteer!

Dit type grafiek biedt prachtig verklarende visualisaties. Met een paar regels code kun je bijvoorbeeld de dichtheid van het maximale lichaamsgewicht per vogelorde tonen:

sns.kdeplot(
   data=filteredBirds, x="MaxBodyMass", hue="Order",
   fill=True, common_norm=False, palette="crest",
   alpha=.5, linewidth=0,
)

lichaamsgewicht per orde

Je kunt ook de dichtheid van meerdere variabelen in één grafiek weergeven. Test de MaxLength en MinLength van een vogel in vergelijking met hun beschermingsstatus:

sns.kdeplot(data=filteredBirds, x="MinLength", y="MaxLength", hue="ConservationStatus")

meerdere dichtheden, over elkaar heen gelegd

Misschien is het de moeite waard om te onderzoeken of de cluster van 'Kwetsbare' vogels op basis van hun lengtes betekenisvol is of niet.

🚀 Uitdaging

Histogrammen zijn een geavanceerder type grafiek dan eenvoudige scatterplots, staafdiagrammen of lijndiagrammen. Zoek op internet naar goede voorbeelden van het gebruik van histogrammen. Hoe worden ze gebruikt, wat laten ze zien, en in welke vakgebieden of onderzoeksgebieden worden ze vaak gebruikt?

Quiz na de les

Herziening & Zelfstudie

In deze les heb je Matplotlib gebruikt en ben je begonnen met Seaborn om meer geavanceerde grafieken te maken. Doe wat onderzoek naar kdeplot in Seaborn, een "continue waarschijnlijkheidsdichtheidscurve in één of meer dimensies". Lees de documentatie om te begrijpen hoe het werkt.

Opdracht

Pas je vaardigheden toe


Disclaimer:
Dit document is vertaald met behulp van de AI-vertalingsservice Co-op Translator. Hoewel we streven naar nauwkeurigheid, willen we u erop wijzen dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in de oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor kritieke informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling.