Izvedene vrednosti

U našu tabelu želimo da dodamo kolone sa izvedenim vrednostima, tj. sa vrednostima koje se izračunavaju na osnovu već postojećih. Za početak, želimo da dodamo kolonu sa temperaturom u Farenhajtima.

Budući da nastavljamo da koristimo isti čet u ChatGPT-u, nije potrebno da iznova pružamo informacije o podacima sa kojima radimo. U poruci možemo jednostavno napisati:

Treba mi i temperatura u Farenhajtima

ChatGPT vam može dati sledeći odgovor:

Temperatura u Farenhajtima

Na osnovu prve rečenice odgovora, vidimo da je ChatGPT pravilno razumeo da želimo da dodamo kolonu u postojeću tabelu. U nastavku odgovora, data je formula za konverziju koja glasi:

\[F = C \times \frac{9}{5} + 32\]

Zatim je ta formula prevedena u oblik Python koda:

df['Temperatura_F'] = df['Temperatura_C'] * 9/5 + 32

Upoređujući matematičku formulu i Python kod, primećujemo da su \(F\) i \(C\) iz matematičke formule izraženi u kodu kao df['Temperatura_F'] i df['Temperatura_C']. Za razliku od ranijih primera sa aritmetičkim operacijama u kojima su učestvovali pojedinačni brojevi, u ovom primeru učestvuje kolona − df['Temperatura_C']. Kada kolonu množimo sa brojem, svaki njen element se množi tim brojem, što kao rezultat daje novu kolonu. Isti princip važi i prilikom sabiranja. S obzirom na to, rezultat izraza df['Temperatura_C'] * 9/5 + 32 jeste nova kolona sa vrednostima konvertovanim u Farenhajte.

Nova kolona se dodaje u tabelu pomoću sledeće forme naredbe za dodelu vrednosti:

df[naziv kolone] = izraz čiji je rezultat kolona

Napomena

U prethodno opisanoj formi naredbe za dodelu vrednosti, levu stranu ne treba tumačiti kao izraz koji nešto izdvaja iz data frame-a, već kao sastavni deo sintakse df[]=. Ovo je posebno važno istaći za one koji su se susretali (ili će se susretati) sa drugim programskim jezicima u kojima je ovaj detalj sintakse programskog jezika možda drugačiji.

U slučaju da smo već imali kolonu istog naziva, sadržaj te kolone bio bi zamenjen novim.

Kada gornju liniju koda izvršimo u Jupyter svesci, dobićemo:

Temperatura u Farenhajtima

Skrećemo vam pažnju na to da smo u ćeliju dodali liniju df kako bi se odmah prikazala vrednost data frame-a.

Vektorske operacije

Ovde se prvi put susrećemo sa aritmetičkim operacijama koje se izvršavaju nad celom kolonom. Operacije koje se odnose na celu kolonu zovemo vektorskim operacijama. Prethodno smo pominjali relacione i logičke operacije u kojima učestvuje cela kolona. U stvari, i to su vektorske operacije, jer proveravaju svaki element kolone i utvrđuju da li ispunjava određen uslov ili ne.

Kada u radu sa tabelarnim podacima koristite Python i biblioteku Pandas, preporučljivo je da se što više oslanjate na vektorske operacije.

Računanje HI indeksa vrućine

Sada ćemo dodati vrednost koja se računa po nešto složenijoj formuli. U pitanju je indeks vrućine (eng. heat index), koji računa subjektivan osećaj temperature uzimajući u obzir vlažnost vazduha. Formula se može naći u Vikipedijinom članku.

O indeksu vrućine na Vikipediji

Na prethodnoj slici je prikazan deo članka u kome je opisana formula.

Proverićemo da li je ChatGPT upoznat sa HI indeksom vrućine. U nastavku postojećeg četa, postavljamo sledeći zahtev:

sada mi treba HI indeks vrućine

Kada smo tražili konverziju u Farenhajte, mogli smo da budemo gotovo sigurni da ćemo dobiti tačan odgovor, jer su Farenhajti dovoljno prisutni u komunikaciji da je malo verovatno da ChatGPT „ne zna” ili pogrešno pretpostavi na šta mislimo. Za razliku od Celzijusa i Farenhajta, HI indeks se retko javlja u svakodnevnom kontekstu. Takođe, moguće je da postoje i drugi indeksi sličnog naziva, kao i različite varijante formule u različitim izvorima. Posebno ističemo nužnost provere, jer će ChatGPT uvek nešto odgovoriti − nezavisno od toga da li „zna” ili „ne zna” o čemu je reč. Kada se nađe u oblasti koju slabo poznaje, ChatGPT i dalje u samouverenom tonu nešto generiše, a to što generiše neretko bude pogrešno, odnosno besmisleno.

Na sledećoj slici prikazan je deo odgovora u kojem se objašnjava indeks vrućine.

Prvi deo odgovora o indeksu vrućine

Premda nam se čini da je objašnjenje dobro, moramo pažljivo proveriti formulu i koeficijente. Primetili ste da, pre nego što generiše kod, ChatGPT precizno definiše zadatak, navodeći pritom i matematičke formule kada je to potrebno. Ako je u objašnjenju sve pravilno povezano i interpretirano, povećava se verovatnoća da dalje generisani kod bude ispravan.

U drugom delu odgovora nalazi se kod:

 1# Prvo, proverite da li je kolona "Temperatura_F" dodata
 2if 'Temperatura_F' not in df.columns:
 3    df['Temperatura_F'] = df['Temperatura_C'] * 9/5 + 32
 4
 5# Koeficijenti
 6c1, c2, c3, c4, c5, c6, c7, c8, c9 = -42.379, 2.04901523, 10.14333127, -0.22475541, -0.00683783, -0.05481717, 0.00122874, 0.00085282, -0.00000199
 7
 8# Izračunavanje HI
 9T = df['Temperatura_F']
10R = df['Vlažnost']
11
12df['Heat_Index'] = (
13    c1 +
14    c2 * T +
15    c3 * R +
16    c4 * T * R +
17    c5 * T**2 +
18    c6 * R**2 +
19    c7 * T**2 * R +
20    c8 * T * R**2 +
21    c9 * T**2 * R**2
22)
23
24# Provera rezultata
25print(df[['Temperatura_C', 'Temperatura_F', 'Vlažnost', 'Heat_Index']])

Ovoga puta su pored linija koda prikazani i njihovi redni brojevi. Primećujemo da su linije 1−3 i linije 24−25 označene drugom bojom. Linije 1−3 konvertuju Celzijuse u Farenhajte, a linije 24−25 ispisuju rezultat pomoću print(). Pošto smo konverziju već obavili, a ispis pomoću print() nam je suvišan, označene linije koda nam neće biti potrebne.

U liniji 6 su definisane promenljive koje predstavljaju koeficijente. Pri tome, korišćena je višestruka dodela, kod koje se sa leve strane znaka = navodi više promenljivih, a sa desne strane više vrednosti.

Zatim su u linijama 9 i 10 definisane promenljive T i R. Promenljiva T je definisana kao kolona sa temperaturom u Farenhajtima, a promenljiva R kao kolona sa relativnom vlažnošću.

Matematičku formulu prepoznajemo u linijama 13−21. Dupla zvezdica (**) u Python-u označava stepenovanje.

I u ovom izrazu se koriste vektorske operacije, jer su T i R kolone. Samim tim, kao rezultat tog izraza dobićemo novu kolonu.

Izrazi u više linija

Izrazi u Python-u po pravilu ne mogu da se prelamaju u više linija. Međutim, postoje izuzeci. Naime, izraz koji je započet otvorenom zagradom u liniji 12, završava se zatvorenom zagradom u liniji 22. Dakle, ako želimo da nastavimo izraz u narednoj liniji koda, potrebno je da zagradu otvorimo u jednoj, a zatvorimo u nekoj drugoj liniji. U konkretnom slučaju, zagrade jedino tome i služe, a inače ne bi bile potrebne.

Kopiraćemo linije 5−22 u ćeliju Jupyter sveske. U ćeliju ćemo dodati još i liniju df kako bi se odmah prikazao data frame. Na sledećoj slici je prikazana nova tabela sa HI indeksom koja je nastala kao rezultat izvršavanja ćelije.

Tabela sa HI indeksom

Ako želimo HI indeks u Celzijusima, možemo ponovo pitati ChatGPT, a možemo i sami izvesti formulu za konverziju na osnovu ranije navedene formule za konverziju iz stepena Celzijusa u stepene Farenhajta.

Za vežbu

Primenjujući ono što ste do sada naučili i elementarno znanje iz matematike, pokušajte sami da izvedete formulu za konverziju HI indeksa iz Farenhajta u Celzijuse, kao i da otkucate liniju koda koja po toj formuli pravi novu kolonu. Rešenje imate u nastavku, pa uporedite.

Formula za konverziju iz Farenhajta u Celzijuse je:

\[HI_{C} = (HI_{F} - 32) \times \frac{5}{9}\]

A linija koda za kreiranje nove kolone je:

df['Heat_Index_C'] = (df['Heat_Index'] - 32) * 5/9

Na kraju, kada joj se doda nova kolona sa HI indeksom u Celzijusima, tabela u Jupyter svesci izgleda ovako:

Tabela sa HI indeksom u Celzijusima