Drop hier links of afbeeldingen om ze aan de editor toe te voegen.

Pokémontrainers zijn bijna even gek op data als op hun team. In deze oefening analyseer je een CSV-bestand met Pokémon-statistieken met behulp van pandas en visualiseer je de sterkste Pokémon met matplotlib.

In je werkmap staan vier CSV-bestanden. Elke rij beschrijft één Pokémon met de volgende kolommen:

KolomBeschrijving
nameNaam van de Pokémon
type1Primair type (bv. Fire, Water, Grass)
type2Secundair type, mag leeg zijn
hpLevenspunten
attackFysieke aanval
defenseFysieke verdediging
sp_attackSpeciale aanval
sp_defenseSpeciale verdediging
speedSnelheid

De totale stats van een Pokémon zijn de som van de zes numerieke waarden (hp + attack + defense + sp_attack + sp_defense + speed).

De vier bestanden zijn:

Te schrijven functies

In de editor staan reeds stubs voor elke functie die je moet implementeren, gevolgd door een klein if __name__ == "sandbox":-blok dat ze oproept op pokemon.csv en de grafiek toont. Vervang elke raise NotImplementedError door je eigen implementatie — als je dan op Run klikt, zie je de tekstuele resultaten en wordt de staafgrafiek in de sandbox getekend. De if __name__ == "sandbox":-bewaking zorgt ervoor dat dit blok enkel uitgevoerd wordt als je op Run klikt; tijdens automatische tests wordt het overgeslagen.

Je mag pandas en matplotlib.pyplot importeren.

load_pokemon(filename)

Lees het opgegeven CSV-bestand in en geef de resulterende pandas.DataFrame terug. De andere functies mogen op deze hulpfunctie steunen.

number_of_pokemon(filename)

Geeft het aantal Pokémon in het bestand terug (een int).

>>> number_of_pokemon('pokemon.csv')
20
>>> number_of_pokemon('legendary.csv')
1

all_types(filename)

Geeft de gesorteerde lijst terug met unieke primaire types (type1) die in het bestand voorkomen.

>>> all_types('starters.csv')
['Fire', 'Grass', 'Water']
>>> all_types('legendary.csv')
['Psychic']

strongest_pokemon(filename)

Geeft de naam terug van de Pokémon met de hoogste totale stats. Als meerdere Pokémon dezelfde hoogste totale stats hebben, geef dan diegene terug die eerst in het bestand voorkomt.

>>> strongest_pokemon('pokemon.csv')
'Mewtwo'
>>> strongest_pokemon('starters.csv')
'Charizard'

strongest_per_type(filename)

Geeft een dictionary terug die elk primair type koppelt aan de naam van de sterkste Pokémon van dat type (degene met de hoogste totale stats binnen dat type). Bij gelijke totalen binnen één type kies je de Pokémon die eerst in het bestand voorkomt.

>>> strongest_per_type('starters.csv')
{'Fire': 'Charizard', 'Grass': 'Venusaur', 'Water': 'Blastoise'}

plot_top_pokemon(filename, n)

Bouw een matplotlib-staafdiagram van de top n Pokémon op basis van totale stats (hoogste eerst) en geef de resulterende Figure terug. Het label van elke staaf is de naam van de Pokémon, de hoogte is de totale stats. Het diagram moet de volgende eigenschappen hebben:

import matplotlib.pyplot as plt

fig = plot_top_pokemon('starters.csv', 3)
plt.show()  # toont de grafiek

De staven moeten gesorteerd zijn van hoogste naar laagste totale stats — bij ex aequo komen Pokémon die eerst in het bestand staan eerst.

Enkel de titel, de astitels, het aantal staven, de hoogtes en de volgorde worden gecontroleerd, dus je mag de grafiek naar wens opmaken. De voorbeeldoplossing kleurt elke staaf volgens het primaire type van de Pokémon en zet er het totaal als label bij.

Wanneer je indient, vangt de judge de Figure op die je teruggeeft en toont ze meteen in de feedback, zodat je precies ziet hoe je grafiek eruitziet.