Feladatok

  • Minden feladatot feladatszámnak mgefelelő számú megoldásnotebookban oldd meg. Azaz az első feladatot az 1_feladat.html notebookban.
  • A halálfejes (☠) feladatokhoz, hozz létre a kötelező feladatokhoz hasonlóan egy új notebookot a MEGOLDÁSOK könyvtárban.
  • Csak azok a feladatok kerülnek elbírálásra amelyek a MEGOLDASOK mappában vannak!
  • A megoldás tartalmazza a megoldandó feladat szövegét a megoldás notebook első markdown cellájában!
  • Kommentekkel illetve markdown cellákkal magyarázd hogy éppen mit csinál az adott kódrészlet!
    Magyarázat nélkül a beküldött feladatok csak fél feladatnak számítanak!
  • Az elkészített ábrák minden esetben rendelkezzenek ábrafeliratokkal (cím, tengelyfeliratok és amennyiben indokolt jelmagyarázat)! Amennyiben a beadott ábrákon nincsenek feliratok az adott feladat automatikusan csak fél feladatnak számít!

1. feladat

Klasszikus fájlbeolvasás

Olvassuk be a data/szeptember_vegen.txt fájlt, és mondjuk meg hány karakterből áll a fájl tartalma.

2. feladat

Karakterkeresés

Írjunk meg a saját grep függvényünket!

Kérjen egy fájlnevet, illetve egy karakterláncot, majd írja ki azokat a sorokat, amikben a karakterlánc megtalálható. A grep parancshoz hasonlóan a függvény ne használjon sok memóriát gigantikus fájlok esetén sem!

A feladat megoldása során a numpy csomag loadtxt() parancsa nem használható!

In [ ]:
def grep(fn,s):
    """Keresd meg stringet a fajlban, es ird ki a sort amiben megvan."""

3. feladat

Klasszikus adatbeolvasás - I.

A data/ebola.txt file tartalmazza a 2014-es Ebola járvány fertőzöttségi és kumulatív (adott napig hányan haltak meg összesen) halálozási adatait.

  • Ábrázoljuk a file-ban szereplő összes országra külön-külön az elhalálozottak számát az idő függvényében!
  • A járványterjedések jó közelítéssel exponenciális függvényalakkal jellemezhetőek, azaz az alábbi függvény $$f(t)=A e^{\alpha t} $$ jól szokott illeni ezen adatokra. Átlagképzés és numerikus deriválás segítségével határozzuk meg az $A$ és $\alpha$ együtthatókat az összes elhalálozások számából! Mivel $$\frac{\mathrm{d}f}{\mathrm{d}t}=\alpha f(t)$$ ezért $\alpha$ a halálozási idősor és annak idő-deriváltjának hányadosának az átlagával közelíthető. Az $\alpha$ ráta ismeretében az $A$ együtható értékét becsüljük meg az adatsor utolsó napjához tartozó adatokból!
  • Ábrázoljuk a meghatározott paraméter értékek segítségével az $f(t)$ függvényt és az adatokat egyszerre!

4. feladat

Fits fájlok - I.

Adott a data/hf.fits állomány. A tanult módon olvasd be a pythonba, majd végezd el a következő feladatokat:

  • Listázd ki a fájlban levő HDU-kat.
  • Válaszd ki a 'BAT_IMAGE_2' nevő blokkot
  • A kiválasztott blokk fejlécéből olvasd ki a következő változók értékét: "E_MIN", "E_MAX", "EXPOSURE", "TSTART", TSTOP", "DATE-OBS"
  • Add meg, hogy a kiválaszott adattömb, hanyadik energiabinnek felel meg, az "EBOUNDS" hdu adatai alapján.
  • Ábrázold (imshow) a kiválaszott adatsort égi kordinátarendszerben a következő paraméterekkel: cmap="jet", origin='lower', vmin=-0.001, vmax=0.001

5. feladat

Adott a data/hf.hdf5 állomány. A tanult módon olvasd be a pythonba, majd végezd el a következő feladatokat:

  • Keresd meg benne a csoportok neveit!
  • Keresd meg azt az adattömböt, melynek dimenziói: 64x64x64
  • Ábrázold ennek a tömbnek a 3. koordináta szerinti 32.-dik szeletét
  • Az ábra az imshow használatával, "viridis" színséma beállítással készüljön.

☠ 6. feladat

Fits fájlok - II.

Adott a data/source.fits állomány. A tanult módon olvasd be a pythonba, majd végezd el a következő feladatokat:

  • Listázd ki a fájlban levő HDU-kat.
  • Válaszd ki azt az extension-t, ami adatokat tárol!
  • Írasd ki a "NAME" adatokat, és a unique parancs segítségével derítsd ki hány különböző objektum található az adattáblában.
  • Válogasd le azokat a sorokat, melyek neve "FRB".
  • A kiválogatott adatsorokból a "RATE" adatokat keresd meg, majd ábrázold a következő módon:
    1. A vízszintes tengely 0-tól az FRB adatok hosszáig menjen
    2. A függőleges tengelyen legyen ábrázolva az előbb kiválogatott RATE, sorbarendezés után.
    3. Az ábra címe legyen "Kumulatív eloszlás".

☠ 7. feladat

Adatbeolvasás saját függvénnyel

Írjunk meg a saját adatbeolvasó függvényünket!

Kérjen egy fájlnevet, és olvassa be a whitespace-el elválasztott adatokat. Egy numpy tömbbel térjen vissza.

Teszteljük le a megírt függvényünk sebességét a beolvasott sorok számának függvényében. Próbáljunk olyan megoldást írni, aminek a futásideje lineárisan függ a sorok számától.

  • A sebességtesztet 20 oszlopos fájlokkal végezzük.
  • A fájlok hossza 4000 sorig fusson 200-asával.

A feladat megoldása során a numpy csomag loadtxt() parancsa nem használható!

In [1]:
def read_txt(fn):
    """Olvasd be fn szöveges adatfájlt egy tömbbe."""

☠ 8. feladat

Joblib/Pickle

Hasonlítsuk össze a Joblib és a Pickle csomagok hatékonyságát.

A feladat megoldásához telepíteni kell a joblib modult!

!pip install joblib --user

Vizsgáljuk meg az alábbi 3 fajta adatstruktúra írási sebességét és a kapott fájlok méretét az adatstruktúra dimenziójának (N) függvényében!

  1. Egész számok sorozata: 0 és N között
  2. Random számok: N darab normál eloszlású valós szám
  3. sin(x) mintavételezése: N és k periódus mintavételezés ($ k=1, k=5, k=20, k=100$)

Az N értéke rendre legyen: $10^2$,$10^3$,$10^4$,$10^5$,$10^6$

☠ 9. feladat

Mekegünk vagy nem mekegünk?

Gyakran mondják, hogy a magyar nyelv aránytalanul sok e-betűt használ, idegen hallgatóság úgy érzékeli, mintha sokat "mekegnénk".

  • Vizsgáljuk meg, mi a 10 leggyakoribb magyar betű Mikszáth Kálmán A fekete város c. regényében (data/fekete_varos.txt)!
  • Figyeljünk arra, hogy számlálás közben mindent kisbetűssé alakítsunk.
  • Benne van-e az első 10 betű között az "e"?
  • A két- és háromjegyű mássalhangzókat most kezeljük két külön betűnek.

☠ 10. feladat

Rímdetektor

  • Olvassuk be Petőfi Sándor Szeptember végén c. versének sorait egy listába (data/szeptember_vegen.txt)!
  • Írjunk egy függvényt, amelynek ha beadunk két sort, akkor "megméri", hogy azok mennyire rímelnek!
  • A "mérés" úgy történik, hogy vesszük mindkét sor utolsó szavát, majd a két szó közös karaktereinek számának a kétszeresét elosztjuk a két szó hosszának összegével.
  • A mérés előtt a szavakből távolítsuk el az írásjeleket!
  • Ezután vizsgáljuk meg, hogy a versen végigmenve a rímdetektor páros rímre (aabb) vagy keresztrímre (abab) ad-e nagyobb átlagos "rímmértéket"!