Kódím.cz
7

Komplexní příklad

Podíváme se na komplexnější příklad, ve kterém propojíme probírané koncepty

Počet útočníků v Pandas

Počet útočníků můžeme spočítat i pomocí modulu pandas. Zkusme nejprve využít pouze sloupec attacker_1. V takovém případě lze aplikovat pouze agregaci typu count() nebo size().

import pandas

data = pandas.read_csv("battles.tsv", sep="\t")
data = data.groupby("attacker_1").size()
print(data)

My ale potřebujeme započítat i útočníky z dalších sloupců. Jak na to? Můžeme například postupovat tak, že ze všech čtyř sloupců (sérií) uděláme jeden dlouhý sloupec (sérii), který poté agregujeme. Jedná se o operaci spojení (v pandas označovaná jako concat, v SQL UNION), tj. vložení jednotlivých sérií pod sebe. Můžeme využít funkci concat(), která umí spojit série úplně stejně jako tabulky.

data = pandas.concat([data["attacker_1"], data["attacker_2"], data["attacker_3"], data["attacker_4"]])

Jak ale nyní provést agregaci? Metoda groupby() se nám nyní příliš nehodí. Sice je možné ji použít i pro sérii, ale používá se spíše ve spojení s indexem. Zkusme si tedy odpověď vyhledat.

Můžeme začít využitím vyhledávače, například Google. Na začátku musíme dobře strukturovat dotaz, abychom se nedostali k řešení jiných (byť podobných) problémů. V našem dotazu bychom měli mít zmíněné následující důležité věci:

  • Výraz pandas. Počet hodnot ve sloupci (v sérii) je problém řešený ve spoustě prostředí, ale nás aktuálně zajímá právě pandas.
  • Co chceme udělat. Potřebujeme zjistit počet (anglicky count) hodnot (anglicky values). Dále je důležité uvést, že to provádíme pro sloupec (anglicky column) nebo sérii (anglicky series), jinak bychom se pravděpodobně dostali k návodu pro tabuku.

Google běžně zobrazuje různé výsledky pro různé uživatele a též v závislosti na tom, zda použijeme slovo column nebo series. V rámci výsledků se ale pravděpodobně zobrazí následující odkazy:

Tyto weby zmiňují právě využití metody value_counts. Všechny z nich (včetně dokumentace) ukazují na jednoduchých datech, jak metodu použít a jaké jsou výsledky.

Další možností je použití chatovacího bota ChatGPT. Jeho určitou výhodou je, že s námi umí komunikovat v češtině. Nevýhodou je, že výsledky jsou často velmi nespolehlivé, protože se jedná o aplikaci, která je stále v počátečních fázích vývoje.

Zkusme položit dotaz: "Používám modul pandas a mám data uložená v sérii. Jak můžu spočítat, kolikrát se tam každá hodnota vyskytuje?" Výsledek je vidět na obrázcích níže. ChatGPT nám nejprve doporučí použití metody value_counts(), což je stejná metoda, kterou nám doporučují i výsledky ve vyhledávači. Zdá se tedy, že jdeme správným směrem. Dále pro nás ChatGPT vytvořil ukázkový kód.

A nakonec zobrazí i výsledky, které ukázkový kód vypíše.

Oba zdroje nás tedy navedkou k tomu, že použití metody value_counts() je velmi jednoduché, stačí pouze napsat

data = data.value_counts()
print(data)

Vidíme tedy, že nejútočnějším rodem je rod Lannisterů (což nás jistě moc nepřekvapí).