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:
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:
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:
Skrećemo vam pažnju na to da smo u ćeliju dodali liniju df kako bi se odmah prikazala vrednost data frame-a.
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.
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.
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 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.
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:
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: