6.5 Analīze un Vizualizācija
Stundas uzdevums: Ieraudzīt "kopbildi". Apgūsi, kā aprēķināt statistiku no saviem JSON/CSV failiem un izveidot vizuālas diagrammas (pat ja tās sākotnēji ir tikai terminālī). Tas palīdzēs saprast, vai Tava spēle ir par vieglu, par grūtu un kuras izvēles spēlētājiem patīk visvairāk.
70 min plāns: Teorija un paraugs (~10 min) · 1. uzdevums (~15 min) - izrēķini summu, vidējo un biežumu · 2. uzdevums (~25 min) - uzzīmē stabiņu diagrammu ar simboliem · 3. uzdevums (~20 min) - izdari secinājumu par datiem. Papildu uzdevumu sāc tikai tad, ja pārējie trīs ir gatavi.
Pirms sāc: atver VS Code un savu scores.json no 6.4 stundas. Ja tajā ir mazāk par 5 ierakstiem, pievieno tos ar roku.
Teorija: No skaitļiem uz secinājumiem
Datu analīze nav tikai matemātika - tā ir spēja pieņemt lēmumus, balstoties uz reāliem faktiem. Programmēšanā mēs izmantojam divus galvenos jēdzienus:
- Agregācija: Daudzu datu apvienošana vienā rādītājā (vidējais, summa, skaits). Vidējo vērtību aprēķina, izmantojot formulu: $$\bar{x} = \frac{\sum \text{punkti}}{n}$$
- Frekvence (Biežums): Cik bieži konkrēts notikums (piemēram, "Game Over" lokācijā "Mežs") atkārtojas liela skaita spēlētāju vidū.
Kāpēc tas noder spēļu izstrādē?
Ja Tava statistika rāda, ka 90% spēlētāju izvēlas "ātro pogu", tas nozīmē, ka "prezentācijas pults" ir vai nu pārāk vāja, vai garlaicīga. Izmantojot šos datus, mēs veicam Game Balancing (spēles līdzsvarošanu).
import matplotlib.pyplot as plt
vardi = ["Anna", "Jānis", "Eva"]
punkti = [120, 95, 145]
plt.bar(vardi, punkti, color="#FFB142")
plt.title("TOP 3 spēlētāji")
plt.savefig("rezultati.png")
plt.show()
Praktiskie uzdevumi
1. uzdevums -
Izrēķini summu, vidējo un biežumu
Beigās tu no daudziem skaitļiem iegūsi trīs rādītājus.
- Ielādē
scores.jsonsarakstātop. - Izrēķini punktu summu ar ciklu un mainīgo
kopa. - Izrēķini vidējo, dalot summu ar
len(top). - Izdrukā vidējo ar
:.1fformatējumu. - Izveido vārdnīcu, kas skaita, cik reižu katrs vārds parādās.
- Izdrukā šo vārdnīcu ar
.items().
Gatavs, kad: izdrukājas summa, vidējais ar vienu ciparu aiz punkta un katra vārda biežums.
2. uzdevums -
Uzzīmē stabiņu diagrammu ar simboliem
Beigās skaitļi kļūs par attēlu, ko var uzreiz nolasīt.
- Ieraksti vārdnīcu
statistika = {"Mežs": 15, "Ala": 8, "Pils": 3}. - Uzraksti ciklu
for vieta, skaits in statistika.items():. - Izveido stabiņu ar
stabins = "#" * skaits. - Izdrukā
print(f"{vieta:10} {stabins}"). - Palaid un pārbaudi, vai nosaukumi ir vienā kolonnā.
- Nomaini
{vieta:10}uz{vieta}un palaid vēlreiz. - Pieraksti, ko dara skaitlis aiz kola.
Gatavs, kad: ar :10 stabiņi sākas vienā līnijā, bez tā - izlec no vietas.
3. uzdevums -
Izdari secinājumu par datiem
Beigās tev būs viens apgalvojums, kas balstīts skaitļos.
- Atrodi kodā lielāko vērtību vārdnīcā.
- Izdrukā tās nosaukumu un skaitli.
- Izrēķini, cik procentu no visiem gadījumiem tā veido.
- Pieraksti vienu teikumu par to, ko šis skaitlis nozīmē spēlei.
- Pieraksti vienu ieteikumu, ko spēlē mainīt šī secinājuma dēļ.
- Pārbaudi, vai tavs secinājums tiešām izriet no skaitļiem, nevis no sajūtas.
Gatavs, kad: tavs secinājums nosauc konkrētu skaitli un konkrētu izmaiņu, ko tā dēļ veiktu.
Papildu uzdevums - Sakārto diagrammu pēc lieluma
Ja pamatdarbs ir gatavs, liec garākajam stabiņam būt augšā.
- Pārvērs vārdnīcu sarakstā ar
sorted(statistika.items(), key=lambda x: x[1], reverse=True). - Izdrukā sakārtoto sarakstu ciklā.
- Pārbaudi, vai lielākais stabiņš ir pirmais.
- Pievieno zem diagrammas kopsummas rindu.
- Palaid un salīdzini ar nesakārtoto variantu.
Gatavs, kad: diagramma sākas ar garāko stabiņu un beidzas ar īsāko.
Biežākās kļūdas datu analīzē:
1. Dalīšana ar nulli: Ja neviens vēl nav spēlējis spēli (saraksts ir tukšs), mēģinājums aprēķināt vidējo punktu skaitu izraisīsZeroDivisionErrorkļūdu. Vienmēr pārbaudi:if len(dati) > 0:!
2. Datu "troksnis": Testa ieraksti (piemēram, vārds "Asdf" ar 0 punktiem) bojā Tavu statistiku. Pirms analīzes dati ir jāiztīra arifnosacījumiem.
3. Nepareizs grafiks: Nelieto sektoru diagrammu, ja Tev ir 50 dažādas vērtības - tajā nekas nebūs saskatāms. Izmanto stabiņu diagrammu (Bar chart) lielākam datu apjomam.
Koda piemērs
statistika = {"Mežs": 15, "Ala": 8, "Pils": 3}
print("--- LOKĀCIJU POPULARITĀTE ---")
for vieta, skaits in statistika.items():
# Reizinām simbolu ar skaitli, lai izveidotu vizuālu stabiņu
stabins = "#" * skaits
# {:10} nodrošina, ka lokāciju nosaukumi izlīdzinās glītā kolonnā
print(f"{vieta:10} | {stabins} ({skaits})")
Mežs | ############### (15)
Ala | ######## (8)
Pils | ### (3)
Padoms: Skaties uz datiem kā uz spēlētāju sarunu ar Tevi. Ja viņi visi "mirst" vienā un tajā pašā vietā, varbūt ir laiks to padarīt nedaudz vieglāku?