A statisztikai jellemzők definíciói egy számokból álló minta (adatsokaság) esetén:

  • Terjedelem: a legnagyobb és a legkisebb elem különbsége.
  • Egy adott elem gyakorisága: az elem hányszor fordul elő a mintában (pl. pénzdobáláskor a fej gyakorisága azt jelenti, hány fej jött ki).
  • Egy adott elem relatív gyakorisága: az elem előfordulása / elemek száma (pl. ha 100 kockadobálásból 20-szor lett kettes, akkor a kettes relatív gyakorisága 20/100 = 0,2 vagy 20%).
  • Gyakorisági táblázat: minden előforduló elemhez megadja, hányszor fordul elő az adatok között (pl. kockadobáláskor hány darab egyes, hány darab kettes… fordul elő).
  • Átlag: számok összege / darabszám (számtani közép).
  • Módusz: a leggyakoribb elem.
  • Medián: a nagyság szerint rendezett mintában páratlan elemszám esetén a középső szám, páros elemszám esetén a két középső átlaga.
  • Szórás: az adatok átlagtól való ingadozását méri, képlete: $\sigma=\sqrt{\frac{(\overline x-x_1)^2+(\overline x-x_2)^2+…+(\overline x-x_n)^2+}{n}}$
    ahol $\overline x$ a minta átlaga,  $n$ az elemek száma, $x_1,\ x2,\ …\ x_n$  az adatsokaság elemei. Pl. az  1, 2, 6 minta esetén az átlag $\overline x=4$, a szórás pedig $\sigma=\sqrt{\frac{(1-4)^2+(2-4)^2+…+(6-4)^2+}{3}}=$$\sqrt{\frac{9+4+4}{3}}=\sqrt{\frac{17}{3}}\approx2,38$
    A négyzetgyökvonás számításánál felhasználhatod, hogy egy szám négyzetgyöke egyenlő a 0,5-ödik hatványával, pl. $\sqrt{3}=3^{0,5}$

 

Készíts statisztikát egy véletlen számokból álló adatsokaságra! Az adatok bekérésénél és megjelenítésénél a minta alapján dolgozz! A kerekítéseknél mindenhol legfeljebb két tizedes jegy értékre kerekíts! A feladatok számát is írd ki a megoldások előtt! Azt se felejtsd el, hogy a programnak akkor is működnie kell, ha alacsony a darabszám és nagy intervallumból jöhetnek a számok.

Feladatok

  1. Kérd be a felhasználótól, hogy a minta hány számból álljon, és mi legyen a legnagyobb pozitív egész szám ($n$) az adatsokaságban (mintában)!
  2. Készítsd el és tárold el a mintát! A minta számai az $[1;n]$ intervallumból kerüljenek ki véletlenszerűen, és legyenek egész számok (pl. ha a felhasználó 5-öt adott meg, akkor az 1, 2, 3, 4, 5 halmazból lehetnek a számok a mintában). A továbbiakban figyelj arra, hogy nem biztos, hogy minden szám előfordul a mintában.
  3. Írasd ki a képernyőre a minta terjedelmét, legnagyobb és legkisebb elemét, átlagát! Az átlag legfeljebb két tizedes jegyre kerekítve szerepeljen. A legnagyobb és legkisebb elem kiírásának tagolásához használj tabulátort!
  4. Határozd meg a minta mediánját és írasd ki a képernyőre! Add meg, hogy az adatok hány százaléka kisebb, mint a medián!
  5. Írd ki a gyak.txt fájlba a gyakorisági táblázatot!
  6. Írasd ki a képernyőre a második legkisebb elem relatív gyakoriságát!
  7. Szemléltesd a gyakorisági táblázatot csillagokkal a minta alapján! A leghosszabb csillagsor kb. 50 csillagból álljon, és a csillagok száma az egyes elemek gyakoriságával legyen egyenes arányban.
  8. Határozd meg az adatok szórását és írja ki a képernyőre! A számítás minél pontosabb legyen, de a kiírás csak két tizedes jegyre történjen.

 

Minta:

1.feladat
Add meg az elemek darabszámát: 10000
Add meg a legnagyobb elemet: 10

3. feladat
A minta terjedelme: 9
A legkisebb elem: 1     a legnagyobb elem: 10
A minta átlaga: 5.49

4. feladat
A medián: 5.0
Az adatok 40.0%-a kisebb a mediánnál.

6. feladat
A második legkisebb elem: 2, relatív gyakorisága: 10.04%.

7.feladat
Szám      relatív gyakoriság
1   10.05% *************************************************
2   10.04% *************************************************
3   10.06% *************************************************
4   10.12% *************************************************
5   9.9%   ************************************************
6   10.27% **************************************************
7   9.65%  ***********************************************
8   10.08% *************************************************
9   9.88%  ************************************************
10  9.95%  ************************************************

8.feladat
A szórás: 2.87

 

A gyak.txt fájl mintája:

1: 1005 darab
2: 1004 darab
3: 1006 darab
4: 1012 darab
5: 990 darab
6: 1027 darab
7: 965 darab
8: 1008 darab
9: 988 darab
10: 995 darab

 

 

Megoldás

import random

print('1. feladat')
darab = int(input('Add meg az elemek darabszámát: '))
hatar = int(input('Add meg a legnagyobb elemet: '))

# 2. feladat
adatok = [random.randint(1,hatar) for i1 in range(darab)]

print('\n3. feladat')
print('A minta terjedelme:',max(adatok)-min(adatok))
print('A legkisebb elem:',min(adatok),’\ta legnagyobb elem:’,max(adatok))
print('A minta átlaga:',round(sum(adatok)/darab,2))

print('\n4. feladat')
adatok.sort() # a mediánhoz rendezni kell a mintát
if darab%2==1: # ha páratlan számú a minta, a középső elemre van szükség
     median = adatok[(darab//2)+1] # pl. 7 elemnél 7//2=3, és a 4. elem a középső
else:
     median = (adatok[int(darab/2)]+adatok[int(darab/2)+1])/2 # pl. 4 elemnél a 2.(=4/2) és 3.(=4/2 + 1) összegének a fele
print('A medián:',round(median,2))
kisebb = [szam for szam in adatok if szam<median]
print('Az adatok',str(100*round(len(kisebb)/darab,2))+'%-a kisebb a mediánnál.')

# 5. feladat
szamok = set(adatok) # minden szám csak egyszer lesz benne
fajl = open('gyak-vg.txt','w')
for szam in szamok:
     print(str(szam)+':', adatok.count(szam),'darab',file=fajl)
fajl.close()

print('\n6. feladat')
szamok = list(szamok) # rendezni nem lehet halmazt, ezért listává kell alakítani
szamok.sort()
print('A második legkisebb elem:',str(szamok[1])+', relatív gyakorisága:',str(round(adatok.count(szamok[1])/darab*100,2))+'%.')

print('\n7. feladat')
gyakorisag = [round(100*adatok.count(szam)/darab,2) for szam in szamok] # a számok relatív gyakorisága %-ban, kerekítve
arany = 50/max(gyakorisag)
print('Szám\trelatív gyakoriság')
for i1 in range(len(szamok)):
     print(str(szamok[i1])+'\t'+str(gyakorisag[i1])+'%\t','*'*round(arany*gyakorisag[i1]))

print('\n8. feladat')
atlag = sum(adatok)/darab # nincs kerekítve, így pontos a számítás
szoras = (sum([(adat-atlag)**2 for adat in adatok])/darab)**0.5
print('A szórás:',round(szoras,2))

News Reporter