Agregiranje u pivot tabeli

Želimo da prosečan broj učenika u odeljenju prikažemo ukršteno po okruzima i razredima, slično kao što smo to uradili u Excel-u u pivot tabeli. U nastavku postojećeg četa, ChatGPT-u zadajemo sledeći upit:

Sada mi treba kod za tabelu gde je od statistike samo prosek, u redovima su okruzi, a u kolonama razredi

ChatGPT vam može dati sledeći odgovor:

Odgovor za pivot tabelu

Ako izuzmemo deo sa ace_tools, generisan je sledeći kod:

# Pivot tabela: prosečan broj učenika po odeljenju za svaki razred u svakom okrugu
prosek_po_okrugu_razredu = df2024.pivot_table(
    index="Okrug",
    columns="Razred",
    values="Broj ucenika",
    aggfunc="mean"
)

Koristi se metoda pivot_table(). Sve je analogno pivot tabeli u Excel-u, samo što ovde koristimo imenovane argumente da rasporedimo kolone i odredimo agregatnu funkciju koja se primenjuje. Nakon što je generisao kod, ChatGPT je dao kratko i jasno objašnjenje svih njegovih delova, koje možete pročitati na kraju slike.

Generisani kod pejstujemo u ćeliju Jupyter sveske i dodajemo na kraju liniju prosek_po_okrugu_razredu. Kada ovu ćeliju izvršimo, dobijamo:

Pivot tabela u Jupyter svesci

Sada želimo da ovu tabelu sortiramo po koloni za osmi razred. Ako sledimo obrazac koji smo prethodno koristili da sortiramo po proseku, možemo i sami da napišemo liniju koda u kojoj primenjujemo metodu sort_values(). Ipak, iskoristićemo pomoć ChatGPT-a u ovom trenutku. Naš zahtev formulisaćemo na sledeći način:

Dodaj u kod sortiranje pivot tabele po koloni „VIII разред” opadajuće

Primetite da smo u zahtevu naveli tačan naziv kolone. To smo uradili jer ChatGPT nema načina da iz prethodne prepiske zaključi kako se tačno zove kolona za osmi razred. Naime, prilikom kreiranja pivot tabele, nazivi redova i kolona preuzeti su iz podataka u kojima su navedeni okruzi i razredi. A ti podaci su ostali kod nas, tj. nismo ih podelili sa ChatGPT-em. U principu, mogli smo da izvršimo prosek_po_okrugu_razredu.info(), pa da rezultat pošaljemo ChatGPT-u, ali nam je bilo jednostavnije da kopiramo i pejstujemo samo naziv konkretne kolone.

Na naš zahtev, ChatGPT može dati sledeći odgovor:

Odgovor za pivot tabelu sa sortiranjem

Dodate su sledeće linije koda:

# Sortiranje po koloni "VIII разред" opadajuće
if "VIII разред" in prosek_po_okrugu_razredu.columns:
    prosek_po_okrugu_razredu = prosek_po_okrugu_razredu.sort_values(by="VIII разред", ascending=False)

Ovaj kod znači „sortiraj po koloni VIII разред ako ta kolona postoji”. To, između ostalog, potvrđuje ono što smo prethodno objašnjavali − da ChatGPT „ne zna” koje kolone će se dobiti u pivot tabeli.

U prethodnom delu ove lekcije, if smo koristili kao deo uslovnog izraza, dok ga ovde koristimo kao zasebnu naredbu. Sintaksa naredbe if je:

if uslov:
    blok koda koji se izvršava ukoliko je uslov ispunjen

Blok koda čini jedna ili više linija koda koje su uvučene. Blok će se izvršiti samo ako je uslov ispunjen. U ovom slučaju, uslov glasi:

"VIII разред" in prosek_po_okrugu_razredu.columns

Operator pripadnosti in proverava da li se vrednost nalazi u kolekciji. Ovde je u pitanju kolekcija kolona tabele. Već smo se susretali sa atributom columns kada smo proveravali tačne nazive kolona.

Naš blok sastoji se iz jedne linije koda u kojoj se koristi metoda sort_values():

sort_values(by="VIII разред", ascending=False)

S obzirom na to da znamo da kolona postoji, naredba if nam nije potrebna. Međutim, pre nego što smo došli do tog zaključka, bilo je potrebno da razumemo ulogu koju if ima u kodu. U našu ćeliju ćemo dodati samo prethodan poziv metode, slično kao što smo uradili u prethodnom primeru. Nakon toga, ponovo ćemo izvršiti ćeliju da bismo videli sortiranu pivot tabelu:

Pivot tabela u Jupyter svesci sa sortiranjem

Nacrtaćemo i grafikon. ChatGPT-u zadajemo sledeći upit:

Treba mi kod koji crta stubicasti grafikon iz prosek_po_okrugu_razredu

Naveli smo naziv promenljive prosek_po_okrugu_razredu da bi ChatGPT lakše povezao naš novi zahtev sa prethodnom prepiskom.

U prvom delu odgovora, dat je kod za crtanje grafikona:

import matplotlib.pyplot as plt

# Kreiranje stubičastog grafikona
prosek_po_okrugu_razredu.plot(kind="bar", figsize=(12, 6))

# Dodavanje naslova i oznaka osa
plt.title("Prosečan broj učenika po okrugu i razredu")
plt.xlabel("Okrug")
plt.ylabel("Prosečan broj učenika")
plt.xticks(rotation=45, ha="right")  # Rotacija oznaka okruga za bolju čitljivost
plt.legend(title="Razred")  # Legenda za razrede
plt.grid(axis="y", linestyle="--", alpha=0.7)  # Dodavanje mreže za bolju čitljivost

# Prikaz grafikona
plt.show()

U drugom delu odgovora, dato je detaljno objašnjenje tog koda:

Odgovor u vezi crtanja grafikona

Kada kopiramo kod u ćeliju Jupyter sveske i izvršimo ga, dobijamo grafikon:

Grafikon za pivot tabelu