ebSkola

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.

SR 2.3.6. (Datu vizualizācija un interpretācija)

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.

  1. Ielādē scores.json sarakstā top.
  2. Izrēķini punktu summu ar ciklu un mainīgo kopa.
  3. Izrēķini vidējo, dalot summu ar len(top).
  4. Izdrukā vidējo ar :.1f formatējumu.
  5. Izveido vārdnīcu, kas skaita, cik reižu katrs vārds parādās.
  6. 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.

  1. Ieraksti vārdnīcu statistika = {"Mežs": 15, "Ala": 8, "Pils": 3}.
  2. Uzraksti ciklu for vieta, skaits in statistika.items():.
  3. Izveido stabiņu ar stabins = "#" * skaits.
  4. Izdrukā print(f"{vieta:10} {stabins}").
  5. Palaid un pārbaudi, vai nosaukumi ir vienā kolonnā.
  6. Nomaini {vieta:10} uz {vieta} un palaid vēlreiz.
  7. 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.

  1. Atrodi kodā lielāko vērtību vārdnīcā.
  2. Izdrukā tās nosaukumu un skaitli.
  3. Izrēķini, cik procentu no visiem gadījumiem tā veido.
  4. Pieraksti vienu teikumu par to, ko šis skaitlis nozīmē spēlei.
  5. Pieraksti vienu ieteikumu, ko spēlē mainīt šī secinājuma dēļ.
  6. 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šā.

  1. Pārvērs vārdnīcu sarakstā ar sorted(statistika.items(), key=lambda x: x[1], reverse=True).
  2. Izdrukā sakārtoto sarakstu ciklā.
  3. Pārbaudi, vai lielākais stabiņš ir pirmais.
  4. Pievieno zem diagrammas kopsummas rindu.
  5. 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īs ZeroDivisionError kļū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 ar if nosacī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})")
--- LOKĀCIJU POPULARITĀTE ---
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?