HF 2 (15 pont)

  • Minden feladatot a feladatszámnak megfelelő számú megoldásnotebookban oldj meg! Az első feladatot az feladat01.ipynb notebookba és így tovább.
  • A megoldás tartalmazza a megoldandó feladat szövegét a megoldásnotebook 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!
  • A beadott notebookok Kernel -> Restart&Run All hatására a beadott formát reprodukálják!
  • A Feladatok megadott pontszámán túl a beadott feladatok külalakjáért összesen 3 pontot lehet szerezni!

Feladat 1 (2 pont)

Az XYZ kiterjesztés egy számítógépes kémiában használatos file formátum. Egy tipikus XYZ file magába foglalja egy molekula atomjainak elhelyezkedését egy derékszögű koordinátarendszerben. A file első sora tartalmazza, hogy hány darab atomból épül fel a molekula, a második sor általában komment, a következő sorok pedig 4 oszlopból állnak: elsőként az atom kémiai jele, a következő három oszlop pedig rendre az $x$, $y$, és $z$ koordinátája az adott elemű atomnak. Az egységek szokás szerint angströmben vannak megadva. Az atomok sorrendjének nincs jelentősége.

Például a metán molekula XYZ file-ja a következő lehet:

5
XYZ file generated by Avogadro.
C      0.00000    0.00000    0.00000
H      0.00000    0.00000    1.08900
H      1.02672    0.00000   -0.36300
H     -0.51336   -0.88916   -0.36300
H     -0.51336    0.88916   -0.36300

A feladatod egy szén nanocső molekula vizsgálata lesz a megadott cnt.xyz file segítségével.

  • Olvasd be a szén nanocső atomjainak koordinátáit és tárold el egy őket egy array-ben! Erre használhatod, de nem kötelező, a numpy modul loadtxt függvényét. Nézd meg a függvény dokumentációját, melyben megtalálhatsz néhány hasznos kulcsszavas argumentumot, például a dtype, comments, delimiter, skiprows, usecols, unpack vagy a max_rows amelyek segítségével gyorsan be tudod olvasni a vizsgálandó filet.
  • Milyen irányban áll a szén nanocső tengelye a megadott koordinátarendszerben? Ehhez számítsd ki az atomok által alkotott tehetetlenségi nyomatéki tenzort (minden atomot tekinthetjük azonos tömegűnek)! A tenzor három sajátirányához tartozó sajátvektorok közül kettő azonos, a harmadik sajátértékhez tartozó sajátvektor jelöli ki a szén nanocső tengelyének irányát. (Miért?) A tehetetlenségi nyomatéki tenzort a következőképpen lehet kiszámítani:
$$\mathbf{\Theta} \ \stackrel{\mathrm{def}}{=}\ \sum_{k=1}^{N} m_{k}\left(\|\mathbf{r}_k\|^{2}\mathbf{I}_{3\times 3} - \mathbf{r}_k \circ \mathbf{r}_k \right),$$

ahol $\mathbf{I}_{3\times 3}$ a $3\times 3$ egységoperátor, $\mathbf{r}_k \circ \mathbf{r}_k$ a $k$-dik atom helyvektorának önmagával képzett diadikus szorzata és $m_k$ a $k$-dik atom tömege.

  • Ábrázold a szén nanocső atomjait három darab kétdimenziós ábrán! Az első ábrán az atomok koordinátáinak x és y a másodikon az x és z a harmadikon pedig az y és z koordinátáit ábrázold. Mind a három ábrán jelöld be a kapott irányvektor megfelelő vetületét is! A sikeresen elvégzett feladat után az egyik ábrádnak hasonlítania kell ehhez:

  • Számítsd ki a szén nanocső sugarát! Ehhez használd az előző feladatban megkapott tengelyt és számítsd ki minden atom távolságát ettől a tengelytől! Az így kapott távolságok átlaga éppen a nanocső sugara. A távolság kiszámításához egy kis segítség: egy $\mathbf{n}$ irányvektorú egyenes és egy $\mathbf{p}$ pont távolsága három dimenzióban a következőképpen számítható:
$$\operatorname{d} = \frac{\left\|(\mathbf{a}-\mathbf{p}) \times \mathbf{n}\right\|}{\|\mathbf{n}\|},$$

ahol $\mathbf{a}$ egy pont az egyenesen. (Jó tanács: érdemes először az egész nanocső tömegközépppontját eltolni az origóba, akkor biztosak lehetünk benne, hogy az origó egy olyan pont, ami rajta lesz a tengelyünkön.)

1db ☠ -ért:

  • Ne használj for ciklust! Sehol.

  • Mennyi két szomszédos szénatom között átlagosan a távolság?

  • A kapott távolság segítségével készítsük el a nanocső szomszédsági mátrixát! A szomszédsági mátrix sajátértékei segítségével pedig ábrázoljuk a rendszer állapotsűrűségét!

Feladat 2 (2 pont)

A COVID_cases.txt fájl tartalmazza országonként külön-külön a COVID-19 fertőzésben újonnan megfertőződtek és elhunytak számát napi bontásban. A fileban az információk oszlopokba vannak rendezve, az oszlopok közötti elválasztó karakter pedig a TAB, azaz a '\t' speciális string! Ha ezen file tartalmát soronként dolgozzuk fel akkor a stringek felhasítására használt split metódus argumentumának megadásakor ez fontos lehet!

  1. Olvassuk be a fájlt és minden országra számoljuk ki az elhunytak összes számát. Melyik öt ország vezeti a halálozási ranglistát?

A country_data.txt fájl országonként tartalmazza az adott ország népességét és az egy főre jutó GDP értékét USD-ben megadva. Figyelem ebben a fileban is TAB-al vannak elválasztva az oszlopok!

  1. Olvassuk be a fájlt, és az előbb kiszámolt halálozási adatok segítségével ábrázoljuk külön ábrán
    • az elhunytak összes számát a népesség függvényében,
    • az elhunytak összes számát az egy főre jutó GDP függvényében.
  1. Mindkét ábrán címkézzük fel az országnevekkel azokat a pontokat, ahol a halálesetek száma meghaladja a 100 ezret vagy a népesség az 1 milliárdot.

  2. Látunk-e valamilyen összefüggést a halálesetek száma és a népesség vagy az egy főre jutó GDP között? Mekkora a két esetben az értékek közti korreláció? Két mennyiség közti korrelációt a numpy corrcoef függvénye segítségével határozhatjuk meg, mely két array típusú változó korrelációs mátrixát határozza meg. A korrelációs mátrix nem diagonális elemei a korrelációk, míg a diagonális elemei definíció szerint 1-et adnak. Ha két mennyiség közötti korreláció 0.1 alatt van akkor tekintsük ezen mennyiségek közötti korrelációt elhanyagolhatónak. Ha a korreláció 0.1 és 0.5 közötti akkor a mennyiségek gyengén 0.5 felett erősen korreláltak.

  3. Számoljuk ki minden országra az 1 főre jutó halálesetek számát és ezt ábrázoljuk az egy főre jutó GDP függvényében. Csak azokat az országokat ábrázoljuk, ahol az egy főre jutó halálesetek száma a [0, 0.002] intervallumba esik.

  4. Jelöljük az ábrán a Magyarországhoz tartozó pontot más színnel, mint a többit és írjuk mellé az ország nevét is.

  5. Számoljuk ki az egy főre jutó halálesetek és az egy főre jutó GDP közötti korrelációt! Most is csak azokat az országokat vegyük figyelembe, ahol az egy főre jutó halálesetek száma a [0, 0.002] intervallumba esik. Megváltozott-e a korreláció értéke a népességre történő normálás hatására? Vajon miért?

Feladat 3 (2 pont)

A lidarscan.pkl fájl egy pickle modullal elmentett python objektum. Az objektum egy LIDAR szkennerrel készített felvétel sorozat, amit az Etológia Tanszék robotja készített egy teremben. Az adat egy python dict formájában van tárolva. A header kulcs alatt a LIDAR jellemzőt találod szintén egy dict formájában aminek az alábbi kulcsai vannak:

  • 'range_min': legkisebb mérhető távolság
  • 'range_max': legnagyobb mérhető távolság
  • 'time_increment': egy mérési soron belül a pontok közötti idő
  • 'angle_min': legkisebb mérhető szög
  • 'angle_max': legnagyobb mérhető szög
  • 'angle_increment': egy mérési soron belül az adatpontok közötti szögkülönbség

A data kulcs alatt egy listát fogsz találni, ahol a lista elemei (időrendben) egy-egy mérés a LIDARRAL. Egy mérés pedig egy numpy.array a mért távolságok a legkisebb szögtől a legnagyobb szög irányába. A távolságok méterben, a szögek radiánban vannak megadva. A szkenner körülbelül 25 cm magasan van elhelyezve és vízszintesen mér.

  • Olvasd be az adatokat !
  • Ábrázold a felvételeket valós térben egy interaktív 2D ábrán. Egy csúszkával lehessen beállítani, hogy melyik időpont jelenik meg.

Saját szavaiddal foglamazd meg hogy szerinted mi történik a felvételen?

Egy adott időpontra az alábbihoz hasonló ábrákat kell kapnotok:

lezer

Feladat 4 (2 pont)

Brown-mozgás vizsgálatához rendelkezésedre áll 100 pillanatkép a mozgó részecskéről jpg formátumban. A képeken egy pixel mérete 1 mm.

  • A képek file0.jpg ... file99.jpg fileokban találhatóak. Olvasd be egymás után a képeket!
  • Az egyes képeken való azonosítás során keresd meg az összes piros színű pixelt. Egy pixelt tekints pirosnak, hogyha a piros csatorna értéke 240 felett, a kék és a zöld csatorna értéke pedig 50 alatti. A kiválasztás során ne használj for ciklusokat, hanem a numpy modul where függvényét! (segítség lehet ez a bejegyzés). A részecske pontos helye a piros színű pixelek koordinátáinak átlaga legyen (piros folt közepe).
  • A fényképek egyikén jelöld meg a részecske által bejárt helyeket piros pontokkal, amiket piros vonallal köss is össze!
  • Határozd meg a részecske elmozdulásának négyzetét minden időpontban (azaz a különböző képeken), majd ábrázold az eltelt idő függvényében (a képek másodpercenként készültek egymás után). Igaz-e, hogy az elmozdulás négyzete lineárisan függ az eltelt időtől? Megfelelő függvény illesztésével bizonyítsd!

Feladat 5 (2 pont)

Ebben a feladatban megint a COVID_cases.txt fájlt fogjuk vizsgálni mely tartalmazza országonként külön-külön a COVID-19 fertőzésben megfertőződtek és elhunytak számát napi bontásban. Az alábbi feladatban a következő, angol nyelven megnevezett, országok COVID-19 statisztikáit vizsgáljuk: Hungary, United States, United Kingdom, India, Mexico, Brazil, China, Italy, France, Germany, Israel.

  1. Olvassuk be a fájlt és ábrázoljuk egy közös ábrán, de külön görbéken a fenti 11 országra a kumulatív halálozásokat a dátum függvényében. A datetime modul datetime típusa segíthet a dátumok kezelésében. Figyeljünk rá, hogy a dátumok időben visszamenőleg szerepelnek a fájlban. Ha az x változóban datetime típusú objektumok szerepelnek, y-ban pedig számok, akkor a plot(x,y) parancs egyszerűen a dátum függvényében ábrázolja az adatokat, ehhez hasonlóan.

  2. Tekintsük az Egyesült Királysághoz (United Kingdom) tartozó görbét a 2020 januárjától szeptemberéig tartó időintervallumban és illesszük az alábbi $f(x)$ függvényt az adatokra. Ábrázoljuk a mérési pontokat az illesztett függvénnyel együtt egy közös ábrán. Saját szavaiddal fogalmazd meg hogy a három illesztett paraméter, a,b illetve c mit jelenthetnek?

$$f(x) = \frac{a}{1+e^{-(x-b) \cdot c}}$$
  1. Ábrázoljuk a dátum függvényében a fenti 11 országban összesen aznap azonosított pozitív esetek számát! Figyeljünk rá, hogy nem minden országra ugyanazokra az időpontokra van adat.

  2. Láthatóan az új esetek száma fluktuál. Találunk-e valamilyen szisztematikus periodicitást az adatokban? Ábrázoljuk az összes új eset Fourier-transzformáltját. Jelöljük az ábrán függőleges vonalakkal az 1/7 (1/nap) és 2/7 (1/nap) értékeket. Mit figyelhetünk meg? (Az ábrázolást szűkítsük a pozitív frekvenciatartományra és a függőleges tengely viszonylag alacsony értékeire, hogy a nulla körüli frekvenciáknál megjelenő magas csúcs ne legyen zavaró az ábrán.)

Feladat 6 (2 pont)

Beethoven a járvány alatt Teams-en az alábbi kottát küldte diákjainak gyakorlás céljából. Úgy gondolta, hogy az egyik hangot nem tudják a diákok ezért ezt be kéne gyakorolniuk... Pistike otthon nekiállt lejátszani a kottát, s közben felvette a zongorájából kifacsart hangokat az áljfónjával. A rögzített hangot a waw3.waw file-ba elmentve visszaküldte Beethovennek kiértékelésre. Segítsünk a mesternek a kiértékelésben!

  • A scipy csomag io.wavfile almoduljának read függvénye segítségével olvasd be Pistike által gyártott wav-filet. A saját szavaiddal írd le, hogy a beolvasó rutin milyen visszatérési értékekkel rendelkezik. A visszatérési értékek típusából állapítsd meg hány csatornás volt a felvétel.
  • Készítsd el a Pistike által gyártott felvétel első csatornájának spektrogrammját. A spektrogrammot limitáld a [0-1500] Hz frekvencia tartományba! A spektrogrammon jelöld be azt a frekvenciát ami a mester szerint problémát okozott a nebulóknak. A zenei hangok frekvenciáiról itt és itt találhatsz bővebb információt. A spectrogram függvény nperseg paraméterét válasszuk úgy meg, hogy hozzávetőlegesen mind frekvenciában mind pedig időben ugyanannyi legyen az elkészített spektrogramm mintavételezése. Az elkészített spektrogramm ábrázolásakor a clim függvény segítségével úgy szorítsuk meg a colorbar határait, hogy a hangok felharmónikusai is jól kivehetők legyenek!

  • A saját szavaiddal foglamazd meg, a spektrogrammból leolvasott információk alapján, hogy vajon Pistikének sikerült-e jól lejátszania a mester által küldött kottát vagy sem! Ha szerinted hibát vétett akkor mond meg, hogy hol és hogyan rontotta el a játékot.

1db ☠-ért:

Segíts Pistikének! A rendelkezésedre álló információk és Pistike által feltöltött file alapján készíts egy wav file-t amit a mester kiválónak fog ítélni!