Mit rontottam el ebben a python kódban miért nem akar lefutni?
Adott egy fájl ami számokat tartalmaz így
12100.5
10331.666666666666
9620.0
10304.0
11042.6
11139.125
13328.375
ebből a fájlból én szeretnék magamnak statisztikát csinálni bontásokban(átlag,összeg,darabszám stb...)
A kódot meg is írtam de valamiért nem jó
Miért nem fut le mit hibáztam el benne?
Vagy én értem teljesen félre a problémát, vagy teljesen rossz a script. Ha jól értem, van egy számsorod, amiket bin-ekre akarod osztani (ezt hívod bontásnak, ha jól értem), azaz ha 100-as bontással dolgozol, akkor csinálsz egy statisztikát az első 100 elemről, majd a második 100 elemről és így tovább. Ez nem történik. Egyáltalán.
De van pár teljesen banális hiba:
for y in lista: <- ennél a sornál már csökkenteni kell a behúzást, hiszen a file-t már beolvastad.
end=(start-bontas)-1
Ez nem jo: a start mindig nagyobb lesz, mint az end. Marginális megjegyzés, de nem tartom jó ötletnek a magyar es angol vátozónevek keverését.
stat[bontas,bontasindex,'START']
A stat egy dictionary, igy nem lehet használni. Valószínűleg valami ilyet akarsz: stat[bontas][bontasindex]['START'], de igy ez sem fog menni, mert itt olyan dictionary van, aminek dictionary-k az elemei. Ezeket vagy initializálod, vagy default-dict-et használsz.
Nem világos, hogy a végén hogy akarod reprezentálni ezt az egészet... Szóval lesz egy táblázatod, minden bontásra? ezeket ki akarod írni külön file-ba? Mindegy az a lényeg, hogy táblázatos adatod van, statisztikát akarsz rajta csinálni, akkor annak megfelelő eszközöket használj: pandas.
Itt egy megoldas (ha jol ertettem a feladatot): [link]
Én is nagyon arra tippelek, mint a #2-es hozzászóló gondol, hogy itt a beolvasott értékeket különböző osztályszélességű osztályokba akarja rendezni a kérdező (mint amikor hisztogramot - [link] - készít az ember).
Ha teljesen az alapokról, bármiféle modul hozzáadása nélkül akarod megcsinálni kedves kérdező a dolgot, akkor javaslom, hogy a statisztikát szervezd egy listába, ahol a lista egy eleme, dictionary típusú és az adott osztályszélességű osztályokat - az osztály intervallumával ("kezdet"/"vege"), gyakoriságával ("darab") - tartalmazza.
Szóval valahogy így (a JSON modul csak a formázott megjelenítés miatt kell) képzelném el:
ilyesmi kimenetet generál:
@3 "ilyesmi kimenetet generál:" -> [link]
Az nem teljesen vilagos, hogyha az "osztalyszelesseg": 100, hogy lehet a "darab": 3? Ennek az utolso elemet kiveve mindig 100-nak kellene lennie, nem? Illetve szerintem nem stimmelnek az ertekek sem. Az elso 100 elemnek az osszege joval meghaladja az "osszeg": 79.0-et. Vagy szintetikus adatokkal dolgoztal? (de meg ugy sem ertem a "darab": 3-at)
"Az nem teljesen vilagos, hogyha az "osztalyszelesseg": 100, hogy lehet a "darab": 3?"
Úgy, hogy az osztályszélesség (a részintervallum mérete, amit az x tengelyen ábrázolunk) nem azonos az osztálygyakorisággal (ami a "darab"). Lásd a belinkelt Wikipedia-cikket - főként a példát:
bár az osztályszélesség 100 illetve 200, az osztálygyakoriság (a "darab") 5-9-ig tart.
"Az elso 100 elemnek az osszege joval meghaladja az "osszeg": 79.0-et."
Nem az első 100 elemet nézzük, hanem a 0 és 99 értékek közé eső számok összegét.
#2 "A stat egy dictionary, igy nem lehet használni"
Most a kód hajmeresztőségét leszámítva, szintaktikailag semmi gond nincs a valami[valami1, valami2, valami3] kifejezéssel, ami egy __getitem__ hívás a (valami1, valami2, valami3) tuple-lel. Hogy messzebb ne menjünk, a pandas DataFrame .loc-ja is ugyanezt a szintaxist használja. Mivel a tuple hashelhető típus, nyugodtan lehet dictionary kulcsaként használni. Néha még hasznos is!
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!