Școala Româno-Britanică
Modulul 2 Clasa a IX-a | Python

Ora 8: Probleme aplicative cu liste - analiza datelor

Ce vei învăța astăzi: Aplicarea parcurgerii cu memorare pentru analiza unor date reale stocate în liste (note, vânzări, temperaturi)

Rezultat practic: Analizezi o listă de valori reale: medie, minim, maxim, valori peste medie, și tragi concluzii (Competența 3.1).

Competența 3.1 Săptămâna 11

Înainte de a începe

De ce contează? Analiza datelor (prelucrarea unor valori, cum sunt notele, vânzările sau temperaturile, pentru a extrage concluzii) este parcurgerea cu memorare în acțiune: fără listă nu putem calcula media (suma valorilor împărțită la numărul lor) și apoi compara fiecare valoare cu ea. Aceasta este exact abilitatea cerută la test și la proiect.

Ce știi deja?

În lecția anterioară, „Recapitulare și test", ai recapitulat cum să alegi instrumentul potrivit într-o problemă. Îți amintești ce funcții Python calculează suma, minimul și maximul unei liste?

Ideea-cheie: Analiza unei liste de date reale cere memorarea: calculăm media, minimul și maximul, apoi numărăm valorile peste medie, fiecare indicator folosind aceeași listă stocată.
SINTEZĂ TEORETICĂ ȘI EXEMPLE GHIDATE

Ce vei învăța astăzi?

În această lecție aplicăm parcurgerea cu memorare pentru a analiza date reale stocate în liste: calculăm media, minimul, maximul, numărăm valorile de peste medie și interpretăm rezultatele.

De ce stocăm datele în listă (parcurgere cu memorare)
Calculul mediei cu sum() și len()
Determinarea minimului și maximului
Numărarea valorilor peste medie și concluzii

Parcurgerea cu memorare - de ce stocăm datele în listă?

Definiție: Parcurgerea cu memorare presupune să citim toate datele și să le stocăm într-o listă, pentru a putea parcurge valorile de mai multe ori sau pentru a le compara între ele.

De exemplu, pentru a afla câte note sunt peste medie, trebuie mai întâi să cunoaștem media, deci avem nevoie de toate notele stocate. O singură citire, fără listă, nu ne-ar permite acest lucru.

Analogie: registrul zilnic al numărului de clienți

Patronul unui magazin notează în fiecare seară, în registru, numărul de clienți din ziua respectivă. Abia la finalul săptămânii deschide registrul și parcurge valorile notate pentru a calcula media zilnică, ziua cu cei mai mulți clienți și zilele cu un număr peste medie.

  • Notele din registru corespund elementelor listei
  • Parcurgerea registrului corespunde parcurgerii listei cu for
  • Fără registru, patronul nu ar putea compara zilele între ele

Analiza notelor unei clase

Vrem să analizăm notele obținute de o clasă la un test: media, nota minimă, nota maximă și numărul de note peste medie. Toate aceste rezultate se obțin din aceeași listă de note.

Exemplu complet: notele clasei

note = [7, 9, 5, 8, 10, 6, 4, 9] media = SUMA(note) / NUMAR(note) AFISEAZA media AFISEAZA MINIM(note) AFISEAZA MAXIM(note) cnt = 0 PENTRU fiecare x din note: DACA x > media ATUNCI cnt = cnt + 1 AFISEAZA cnt
Analiza notelor: medie, min, max, note peste medie
note = [7, 9, 5, 8, 10, 6, 4, 9]

media = sum(note) / len(note)
print("Media clasei:", media)
print("Nota minima:", min(note))
print("Nota maxima:", max(note))

cnt = 0
for x in note:
    if x > media:
        cnt += 1

print("Numar note peste medie:", cnt)

Observă: calculăm media cu sum(note) / len(note), minimul cu min(note), maximul cu max(note). Apoi, într-o a doua parcurgere cu for, numărăm notele mai mari decât media. De aceea aveam nevoie de lista stocată!

Analiza vânzărilor lunare

Analizăm vânzările unui magazin pe cele 12 luni ale anului. Dorim să aflăm valoarea maximă a vânzărilor, luna în care apare prima dată maximul și media lunară, pentru a observa variațiile.

Exemplu complet: vânzările pe luni

vanzari = [12 valori, cate una pe luna] maxim = MAXIM(vanzari) luna = POZITIA(maxim) + 1 // prima aparitie, numerotata de la 1 media = SUMA(vanzari) / NUMAR(vanzari) AFISEAZA maxim, luna, media PENTRU i de la 0 la NUMAR(vanzari) - 1: variatie = vanzari[i] - media AFISEAZA luna i+1, variatie
Analiza vânzărilor: maxim, luna, media, variații
vanzari = [1200, 980, 1450, 1600, 1380, 1750,
           900, 1100, 1520, 1680, 1450, 1900]

maxim = max(vanzari)
luna = vanzari.index(maxim) + 1
media = sum(vanzari) / len(vanzari)

print("Vanzi maxime:", maxim)
print("Luna cu cele mai mari vanzari:", luna)
print("Media vanzarilor lunare:", round(media, 2))

for i in range(len(vanzari)):
    variatie = vanzari[i] - media
    print("Luna", i + 1, ": variatie =", round(variatie, 2))

Observă: vanzari.index(maxim) ne dă poziția primei apariții a maximului, începând cu 0. Adăugăm 1 pentru a obține numărul lunii (1-12). Comparând fiecare lună cu media calculăm variațiile (diferențele dintre fiecare valoare și medie).

Indicator Valoare Interpretare
Vânzările maxime 1900 cea mai mare valoare din listă
Luna cu maximul 12 poziția primei apariții a maximului (indice 11 + 1)
Media vânzărilor lunare 1409.17 (aproximativ) suma împărțită la numărul de luni
Variația față de medie vanzari[i] - media pozitivă peste medie, negativă sub medie

Exercițiu de completare 1

Completează enunțul despre analiza datelor cu cuvintele potrivite:

Pentru a analiza datele, le stocăm într-o ______ și le parcurgem de mai multe ori. Media o calculăm cu ______(v) împărțit la ______(v). Cea mai mare valoare o găsim cu funcția ______(v). Pentru a număra valorile peste medie, verificăm dacă fiecare x este ______ decât media.

Bancă de cuvinte:
listă sum len max mai mare

Exercițiu de completare 2

Completează fragmentul de program care analizează notele:
note = [7, 9, 5, 8, 10]
media = ______(note) / ______(note)
cnt = 0
for x in note:
    if x ______ media:
        cnt ______ 1
print(media, cnt)
Bancă de cuvinte:
sum len > +=

Test de înțelegere

Test rapid - analiza datelor:

1. Pentru a număra notele mai mari decât media clasei, este necesar ca notele să fie:

2. Media aritmetică a elementelor unei liste v se calculează cu:

3. Pentru a afla luna (poziția 1-12) cu cele mai mari vânzări, folosim:

Ai grijă la: compară valorile cu media exactă, calculată ca sum(v) / len(v), nu cu media rotunjită la afișare cu round(); altfel, o valoare apropiată de media rotunjită poate fi numărată greșit.

Aprofundare

Media cu valori reale. Atunci când datele sunt numere reale (temperaturi, vânzări în lei), media poate avea multe zecimale. Pentru afișare folosim round(media, 2), iar la compararea elementelor cu media trebuie să fim atenți: o valoare „peste medie" se compară cu media nerotunjită, nu cu cea afișată.

Valoarea mediană versus media. Media aritmetică este sensibilă la valori extreme: o singură vânzare uriașă „trage" media în sus. Mediana (valoarea din mijlocul listei sortate) nu este afectată de extreme și, în statistică, oferă o imagine mai fidelă a centrului datelor. Pentru a o calcula, sortăm lista și citim elementul din mijloc: v[len(v) // 2] pentru un număr impar de elemente.

De ce memorăm datele. Analiza statistică reală (raportul anual al unei firme, media notelor pe semestru) presupune mai multe parcurgeri ale acelorași date: o parcurgere pentru medie, alta pentru minim și maxim, alta pentru valori peste medie. Fără memorarea în listă, fiecare indicator ar necesita recitirea datelor. De aceea analiza datelor este exemplul clasic de parcurgere cu memorare.

Comparații statistice suplimentare. Pe lângă medie, minim și maxim, putem calcula: amplitudinea (max(v) - min(v)), numărul de valori sub medie, procentul valorilor peste medie (cnt / len(v) * 100) sau frecvența fiecărei valori cu o listă de frecvențe. Toate folosesc aceeași listă memorată.

Atenție la date incomplete. În aplicații reale, unele valori pot lipsi sau fi eronate (o zi fără înregistrare). Înainte de analiză, datele trebuie verificate: valori negative la stocuri, temperaturi absurde etc. Programul robust fie le semnalează, fie le exclude din calcule.

APLICARE ȘI REZOLVARE DE PROBLEME

PbInfo - Note peste medie

Enunț:

Cerință: Se citește numărul natural n, apoi n note. Să se afișeze media notelor și câte note sunt peste medie.

Date de intrare:

Programul citește de la tastatură numărul n, apoi pe linia următoare cele n note, separate prin spații.

Date de ieșire:

Programul va afișa pe ecran media notelor și numărul de note mai mari decât media.

Restricții și precizări:

n este un număr natural, cu 1 <= n <= 1000, iar notele sunt numere întregi de la 1 la 10.

Exemplu:

Intrare:

8
7 9 5 8 10 6 4 9

Ieșire:

7.25 4
Cum gândim soluția:
  1. Citim n și notele în lista v
  2. Calculăm media cu sum(v) / n
  3. Parcurgem lista și numărăm notele mai mari decât media
  4. Afișăm media și contorul
Scrie soluția în Python:
Soluție corectă:
n = int(input())
v = list(map(int, input().split()))

med = sum(v) / n
cnt = 0
for x in v:
    if x > med:
        cnt += 1

print(med, cnt)

Ce învățăm: stocăm notele în listă, calculăm media cu sum(v) / n, apoi, într-o a doua parcurgere cu for, numărăm notele mai mari decât media.

PbInfo - Luna cu cele mai mari vânzări

Enunț:

Cerință: Se citesc 12 valori, reprezentând vânzările lunare ale unui magazin. Să se afișeze valoarea maximă a vânzărilor și luna (poziția de la 1 la 12) în care aceasta apare prima dată.

Date de intrare:

Programul citește de la tastatură cele 12 valori, separate prin spații.

Date de ieșire:

Programul va afișa valoarea maximă și numărul lunii în care apare prima dată maximul.

Restricții și precizări:

Se citesc exact 12 valori, numere întregi pozitive, corespunzătoare lunilor 1-12 ale anului.

Exemplu:

Intrare:

1200 980 1450 1600 1380 1750 900 1100 1520 1680 1450 1900

Ieșire:

1900 12
Cum gândim soluția:
  1. Citim cele 12 valori în lista v
  2. Determinăm maximul cu max(v)
  3. Găsim poziția primei apariții cu v.index(m) și adăugăm 1
  4. Afișăm maximul și numărul lunii
Scrie soluția în Python:
Soluție corectă:
v = list(map(int, input().split()))

m = max(v)
poz = v.index(m) + 1

print(m, poz)

Ce învățăm: v.index(m) returnează poziția primei apariții a maximului, începând cu 0. Adăugăm 1 pentru a obține numărul lunii, de la 1 la 12.

EXERCIȚII PRACTICE

Exercițiul Practic: Analiza datelor reale

Sarcini de lucru

Completează următoarele sarcini pentru a-ți consolida cunoștințele despre analiza datelor stocate în liste

Sarcina 1: Temperaturile unei săptămâni

Cerință: Scrie un program care citește temperaturile unei săptămâni (7 valori) și afișează media, minimul și maximul acestora.

Soluție pentru Sarcina 1:
t = list(map(float, input().split()))

media = sum(t) / len(t)
print("Media:", media)
print("Minim:", min(t))
print("Maxim:", max(t))

Verifică: stocăm temperaturile în lista t, apoi calculăm media cu sum(t) / len(t), iar minimul și maximul cu min(t) și max(t).

Sarcina 2: Notele mai mari decât media clasei

Cerință: Scrie un program care citește o listă de note și afișează notele mai mari decât media clasei.

Soluție pentru Sarcina 2:
n = int(input())
note = list(map(int, input().split()))

media = sum(note) / len(note)
print("Media:", media)

for x in note:
    if x > media:
        print(x, end=" ")

Verifică: memorăm notele în listă, calculăm media, apoi, într-o a doua parcurgere, afișăm notele mai mari decât media.

Scrie pe caiet - De reținut

Titlul lecției

Ora 8: Probleme aplicative cu liste - analiza datelor

Definiția lecției

Analiza datelor este prelucrarea unor valori reale, cum sunt notele, vânzările sau temperaturile, pentru a extrage concluzii: media, minimul, maximul, numărul valorilor peste medie și variațiile. Toate aceste indicatoare se calculează din aceeași listă stocată, deci analiza datelor este parcurgerea cu memorare în acțiune: memorăm valorile, apoi facem câte o parcurgere pentru fiecare indicator. Media aritmetică se calculează cu sum(v) / len(v), iar variația unei valori față de medie este v[i] - media: pozitivă peste medie, negativă sub medie. Un exemplu real: patronul unui magazin notează zilnic numărul de clienți și, la finalul săptămânii, calculează media și zilele cu vânzări peste medie.

Definiții esențiale

Algoritmul cheie - pseudocod

CITESTE n CITESTE datele in lista v media = SUMA(v) / n AFISEAZA media, MINIM(v), MAXIM(v) cnt = 0 PENTRU fiecare x din v: DACA x > media ATUNCI cnt = cnt + 1 AFISEAZA cnt

Algoritmul cheie - cod Python

n = int(input())
v = list(map(int, input().split()))

media = sum(v) / n
print("Media:", round(media, 2))
print("Minim:", min(v))
print("Maxim:", max(v))

cnt = 0
for x in v:
    if x > media:
        cnt += 1

print("Valori peste medie:", cnt)

Greșeli comune de evitat

Sfaturi practice și trucuri

Exemplu practic

De unde întâlnim analiza datelor în viața reală? Un magazin înregistrează vânzările zilnice pe o săptămână. Programul calculează media și arată zilele cu vânzări peste medie:

vanzari = [120, 90, 150, 80, 130, 160, 110]
media = sum(vanzari) / len(vanzari)
print("Media zilnica:", round(media, 2))
for i in range(7):
    if vanzari[i] > media:
        print("Ziua", i + 1, "cu", vanzari[i])

Programul afișează media vânzărilor și zilele în care s-au vândut mai multe produse decât media.