Projekti
Iesaisties
Blogs
Par mums
Kontakti
← ATPAKAĻ

Datu analīze ar ChatGPT 4

2024-03-19

Autors: Aivis Brutānsdatu zinātnieks un “Datu skolas” aktīvists

OpenAI ChatGPT nav tikai rīks, kurš piedāvā ar lietotāju čatot, bet tas ir mākslīgā intelekta asistents (AI assistent), kurš palīdz veidot attēlus, kā arī analizēt datus. Aplūkosim, cik labas ir OpenAI ChatGPT 4 sniegtās datu analītikas spējas.

Vispirms jāatzīmē, ka ChatGPT 4 šobrīd ir maksas pakalpojums, kas izmaksā 20 USD mēnesī (https://openai.com/chatgpt/pricing). Taču, ja lietotājs nevēlas, lai OpenAI izmanto viņa uzvednes (prompts) modeļu trenēšanā, tad ir jāiegulda vēl vairāk: jāpieslēdz biznesa klientu komplekts “Teams” par 25 USD/mēnesī no katra lietotāja (minimālais lietotāju skaits: 2).

Datu analīzē izmantots atvērto datu portālā publicēts vispārējās vidējās izglītības centralizēto eksāmenu (CE) rezultātu kopvērtējums un līmeņu sadalījums pa skolām par 2022./2023. mācību gadu. Uzvednes rakstītas angļu valodā.


ChatGPT 4 datu analīzē izmanto Python programmēšanas valodu, tāpēc papildu datu analīzes skaidrojumiem chat.openai.com rīkā atspoguļots arī šīs programmas kods.

“Perform an exploratory data analysis about these data”

Pirmajā uzvednē augšuplādēju .csv failu ar CE rezultātiem un prasu lai sagatavo datu analīzi (exploratory data analysis). Jau datu nolasīšanā ChatGPT saskārās ar problēmu — tas nevar nolasīt .csv failu.

Rīks pats spēja atrast kļūdu — .csv failā kolonnu atdalītājs ir semikols (nevis komats), ChatGPT papildināja read_csv funkciju ar papildu parametru un faila datus nolasīt izdevās.

Pēc faila nolasīšanas rīks apraksta kādas kolonnas ir atspoguļotas failā:

Un datu analīzē piedāvā izpildīt sekojošus soļus:

Vidē, kurā tiek darbināts Python kods, decimālskaitļa atdalītājs ir punkts, tāpēc ChatGPT automātiski pārveido kolonnas “Vidējais, %” vērtības — aizvietojot komatu ar punktu:

Taču rīks šeit saskārās ar kārtējo problēmu —kolonnā “Vidējais, %” ir ieraksts ar vērtību ‘#DIV/0!’ un, tādējādi, nevar šo vērtību pārvērst decimālskaitlī. Bet ar to viņš tiek galā, papildinot Python kodu, kas šādas vērtības aizvieto ar specifisku datu tipu NaN (not a number):

Rīks tālāk apraksta “Vidējais, %” un “Kārtotāju skaits” amplitūdas un vidējos rādītājus. ChatGPT nezina saistības starp šīm kolonnām, tāpēc “Vidējais, %” vidējo rezultātu aprēķina nepareizi — to vajag svērt ar kolonnas “Kārtotāju skaits” vērtībām:

Lai redzētu sakarību starp kārtotāju skaitu un vidējo eksāmena vērtējumu, ChatGPT izveidoja grafikus. Jāņem vērā, ka viņš grafikā apkopojis informāciju par visu priekšmetu centralizētajiem eksāmeniem:

Arī izveidotajā histogrammā visi CE priekšmetu rezultāti atspoguļoti kopā:

Novēroju, ka nākamajā dienā grafiki vairs nav pieejami:

Pirmās uzvednes aprakstu ChatGPT noslēdz ar iepriekšējo grafiku skaidrojumu:

Tālāk rīks piedāvā analizēt jau konkrētus eksāmenus vai pašvaldības, identificēt “izlecējus” un trendu:

Rīks neizprot sakarības starp kolonnām, tāpēc korektai vidējā CE rezultāta aprēķināšanai turpmākajos soļos precizēts, ka šis rezultāts ir jāsver.

Prepare list of TOP 5 `Izsglītības iestādes nosaukums` which has a largest average `Vidējais, %` where `Pārbaudījums` LIKE `Eksāmens matemātikā%`. You need to weight average with `Kārtotāju skaits`

Frāze `Pārbaudījums` LIKE `Eksāmens matemātikā%` ir veidota SQL sintakses stilā, lai atlasītu visus gadījumus, kuros kolonnā “Pārbaudījums” vērtības sākas ar ‘Eksāmens matemātikā’. Šādu sintaksi norādīju uzvednē, cerot, ka tiks atlasīti visi iespējamie matemātikas eksāmenu pārbaudījuma veidi.

Rīks precīzi izpildīja komandu. Arī aprēķinā ir izmantots vidēji svērtais vidējais:

What about TOP 5 lowest scores?

Speciāli uzdevu šādu jautājumu, lai saprastu vai ChatGPT saprot, ka runa vēl joprojām ir par matemātikas CE. Saprata:

Why these schools has lowest scores in maths?

Provokatīvs jautājums, jo zinu, ka no datiem šo uzzināt nevar. Taču arī šeit ChatGPT nesamulst:

ChatGPT kā iespējamos zemo vērtējumus sasaista ar:

Lai saprastu precīzus zemā vērtējuma iemeslus, algoritms iesaka veikt papildu analīzi — intervijas, novērošanu, skolas politikas un prakses analīzi.

How strong is a correlation between maths scores and physics (`Pārbaudījums` like `Eksāmens fizikā%`) ?

Jāņem vērā, ka ne visās skolās tika kārtots gan matemātikas, gan fizikas CE. Tāpēc, atkarībā no datu apstrādes, var iegūt nepareizu rezultātu. Bet ar šo rīks tiek veiksmīgi galā —tas izmanto pandas merge funkciju, kur pēc noklusējuma datu savienošana ir pēc INNER JOIN principa.

Rezultātā tiek iegūts pareizs korelācijas koeficients:

Create a scatter plot with TOP 100 schools with highest scores in maths on x-axis and this schools’ scores in physics on y-axis. If school doesn’t have a score in physics then replace NaN with 0.

Šādu grafiku izveido bez problēmām:

Pēc grafika redzam skolas, kurās matemātikas CE vērtējums ir lielāks par 60 un skolā izglītojamie nav kārtojuši fizikas centralizēto eksāmenu. Noskaidrosim kuras ir šīs skolas.

Give me a list of schools which has an average maths score greater than 60, but doesn’t have score in physics. Add sum of `Kārtotāju skaits` in maths for each school.

Pēc iepriekšējā grafika informācijas, rīkam ir jāatlasa 4 skolas. Tā arī notiek:

Create a choropleth map which shows average score in maths in `Pašvaldība` (Latvian cities and municipalities).

Rīkam nav pieejas Latvijas pilsētu un novadu robežu datiem, tāpēc tas kartogrammu nespēj izveidot:

Here are GeoJSON data.

Izmantoju citus atvērtos datus, kuros ir administratīvo teritoriju robežu dati GeoJSON formātā. Tā kā rīks nespējs lejuplādēt robežu datus pa tiešo (..since I cannot access external files or services to download the necessary geospatial data..), augšuplādēju datus un prasu sagatavot karti, bet ChatGPT pirmo reizi saskaras ar problēmu, ko nevar atrisināt:

Rīks iesaka izmantot pēdējo versiju telpisko datu bibliotēkas (geospatial libraries). Pats ChatGPT savā vidē izmanto shapely pakotnes 1.7.1 versiju un iepriekš minētās kļūdas (“NotImplementedError: Multi-part geometries do not themselves provide the array interface”) atrisināšanai iesaka šo pakotni atjaunot, taču ChatGPT neparedz iespēju augšuplādēt Python pakotnes un tās aizvietot ar citām versijām.

Veicot visus tos pašus soļus uz lokālā datora, ar jaunāko shapely pakotnes versiju ir iespējams izveidot iepriekš prasīto kartogrammu (valstpilsētām neuzrādās dati, jo GeoJSON failā tie ir ar citādāku nosaukumu):

Uzdevu papildu jautājumus par datiem nākamajā dienā, bet ar to ChatGPT vairs netiek galā, jo ir beigusies sesija (laika intervāls, kurā ChatGPT apstrādā informāciju un sniedz atbildi uz lietotāja jautājumiem). Tas ir jāņem vērā veidojot datu analīzi. Varat rīkam likt apkopot visu iepriekš minēto Python kodu — pēc tam šo kodu izpildīt uz sava lokālā datora.

Kā ir ar latviešu valodu?

Vai ir iespējams visu iepriekš minēto analīzi prasīt latviešu valodā un visu vienā uzvednē? Jā ir:

Bet ir ļoti jāpiestrādā pie uzdevumu definēšanas, lai ChatGPT tos saprastu. Augstāk minētā uzvedne rakstīta ar otro piegājienu, taču rezultāts tāpat neatbilst prasītajam. Piemēram, šī uzdevuma “1) izveido vērtībamplitūdas diagrammu (box-whisker plot). Uz x-ass ir kolonnas PARB vērtības, uz y-ass ir “vidēji svērtais” eksāmena rezultāts. Katrs datu punkts norāda izglītības iestādes (`Izglītības iestādes nosaukums`) “vidēji svērto” vērtējumu.” sagaidāmais rezultāts:

1.uzdevuma sagaidāmais rezultāts

Bet ChatGPT sagatavoja grafiku tikai par četriem priekšmetiem (kas minēti uzdevuma 2.punktā un neattiecas uz 1.punktu):

1.uzdevuma iegūtais rezultāts

4.punkta sagaidāmais rezultāts — pašvaldība, kurai katrā pārbaudījumā ir sliktāks rezultāts nekā vidējais rādītājs valstī. Pēc šādiem kritērijiem atbilst tikai viena pašvaldība:

4.uzdevuma sagaidāmais rezultāts

Taču ChatGPT sagatavoja statistiku atkal tikai par 2.punkta priekšmetiem un TOP 3 veidoja no pārbaudījumiem, nevis pašvaldībām. Kritērijs — “..katrā no PARB eksāmeniem ir sliktāks par atbilstošo PARB veidu valstī.” vispār netika ievērots:

4.uzdevuma iegūtais rezultāts

Tātad ieteicams veidot vairākas īsākas uzvednes.

Which Python version are you using and list versions of Python packages that you have been imported?

Datu analīzē ChatGPT izmantoja sekojošas Python pakotņu versijas:

ChatGPT ģenerētie kodi ir pieejami arī GitHub.

Secinājumi


Oriģinālais raksts publicēts šeit.

DATU
SKOLA
Datu skola ir daļa no
SCHOOL OF DATA
Pierādījumā ir spēks!

Datu skola ir te, lai žurnālisti, nevalstisko organizāciju aktīvisti, un citi sabiedrības locekļi iegūst spējas efektīvi strādāt ar datiem.