{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "anaconda-cloud": {}, "hide_input": false, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" }, "latex_envs": { "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 0 }, "name": "mintapelda03.ipynb", "colab": { "name": "kl_py_szovek_feldolgozas.ipynb", "provenance": [], "collapsed_sections": [ "rKxMJyNJbv6m", "J3LVLNNebv6_" ], "include_colab_link": true } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "view-in-github", "colab_type": "text" }, "source": [ "\"Open" ] }, { "cell_type": "markdown", "metadata": { "id": "iy3rxFX2bv5g", "colab_type": "text" }, "source": [ "# File-ok feldolgozása\n", "\n", "\n", "Nagy mennyiségű adatok feldolgozásánál elengedthetetlen dolog a számítógépek memóriáján (RAM) kívűl a külső tárolókon (merevlemezek, egyéb adathordozók) tárolt file-ok megfelelő használata is.\n", "\n", "Az alábbiakban a python alapértelmezett filekezelő függvényeivel ismerkedünk meg, \n", "majd a `numpy` csomag filekezelő rutinjaival barátkozunk meg.\n", "\n" ] }, { "cell_type": "code", "metadata": { "id": "6bDUFhTRbv5j", "colab_type": "code", "colab": {}, "outputId": "e1be4345-f0a6-4bc4-bf0f-733c4d0d432b" }, "source": [ "%pylab inline" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "tsEcLupCbv5m", "colab_type": "text" }, "source": [ "---\n", "\n", "## A python beépített filekezelő függvényei\n", "\n", "Ebben a fejezetben a `python` egyéb moduloktól független, alapvető fileműveleteket biztosító függvényeivel fogunk megismerkedni. Ezen függvények egy file tartalmát többnyire karakterláncok formájában kezelik, ezért konkrét formátumú adatok beolvasása, illetve kiírása némi bonyodalommal jár, melyeket legtöbbször valamilyen specifikusan az adott feladatra megírt függvény tesz lehetővé. Az alábbi részben a történelmi napfoltszám-megfigyelések [adatainak](http://www.sidc.be/silso/datafiles) az elemzésén keresztül ismerkedünk meg ezekkel a függvényekkel. " ] }, { "cell_type": "markdown", "metadata": { "id": "Q-Z0jT9Pbv5n", "colab_type": "text" }, "source": [ "### File-ok beolvasása" ] }, { "cell_type": "markdown", "metadata": { "id": "an4ufTNxbv5n", "colab_type": "text" }, "source": [ "Egész file beolvasása egyetlen karakterláncba az alábbiak szerint történik. \n", "\n", "Előszöris az `open()` függvény segítségével megnyitjuk a beolvasni kívánt file-t. Az `open()` függvény egy előkészítő függvény, amely arra készíti fel a rendszert, hogy az adott merevelemezen (vagy más adattárolón) fellelhető file-lal dolgozni tudjunk. Legegyszerűbb esetben ez a file nevének a megadásával történik." ] }, { "cell_type": "code", "metadata": { "id": "i1mxF5c9bv5o", "colab_type": "code", "colab": {} }, "source": [ "file1 = open('SN_m_tot_V2.0.txt')" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "UpOkj9CEbv5q", "colab_type": "text" }, "source": [ "A fenti kódsor hatására a `file1` változón keresztül férhetünk hozzá a file tartalmához. A file teljes tartalmát például a következő utasítással tölthetjük be egy karakterlánc formájában az `egeszfile` változóba:" ] }, { "cell_type": "code", "metadata": { "id": "qEUrOfJLbv5r", "colab_type": "code", "colab": {} }, "source": [ "egeszfile=file1.read()" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "xxjLeXpDbv5s", "colab_type": "text" }, "source": [ "Figyelem, ne keverjük össze a `file1` és az `egeszfile` változókat! Amint azt fent is említettük, az `egeszfile` egy karakterlánc, a `file1` pedig a file-ból való olvasást, illetve a file-ba való írást segítő segédobjektum, amelyet szokás esetenként (adat)folyam-nak vagy angolul streamnek is nevezni." ] }, { "cell_type": "markdown", "metadata": { "id": "CeLlku3dbv5t", "colab_type": "text" }, "source": [ "Ha már minden olvasás és írás befejeződött, akkor a `close()` utasítással zárhatjuk be a folyamot, azaz ez a parancs szakítja meg a kommunikációt az adattárolóval." ] }, { "cell_type": "code", "metadata": { "id": "eKFDo8qNbv5u", "colab_type": "code", "colab": {} }, "source": [ "file1.close()" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "paOipvH_bv5v", "colab_type": "text" }, "source": [ "Mivel fent betöltöttük a file tartalmát az `egeszfile` stringbe, ezért ennek segítségével bele is pillanthatunk, vizsgáljuk meg például az első 100 karaktert a file-ból:" ] }, { "cell_type": "code", "metadata": { "id": "_18VFKXVbv5w", "colab_type": "code", "colab": {}, "outputId": "33117eae-8500-43f2-aa98-12efe7f20ccb" }, "source": [ "egeszfile[:100]" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "'#1. oszlop ev ho T[ev] napfolt_szam\\n#2. oszlop honap\\n#3. oszlop az ido evben merve \\n#4. oszlop Na'" ] }, "metadata": { "tags": [] }, "execution_count": 5 } ] }, { "cell_type": "markdown", "metadata": { "id": "tcPWxcSQbv5y", "colab_type": "text" }, "source": [ "Ha megnézzük magát a [file](data/NAPFOLT/SN_m_tot_V2.0.txt)-t, akkor látható hogy tényleg ezek a dolgok vannak benne. Figyeljük meg hogy a sor vége helyett a `\\n` karakter szerepel! " ] }, { "cell_type": "markdown", "metadata": { "id": "yglFZl1Dbv5z", "colab_type": "text" }, "source": [ "A `read()` függvény előre specifikált számú karakter olvasását is lehetővé teszi. Nyissuk meg ismét az előző file-t ismét:" ] }, { "cell_type": "code", "metadata": { "id": "dyGxLmNebv5z", "colab_type": "code", "colab": {} }, "source": [ "file1 = open('SN_m_tot_V2.0.txt')" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "FForOyPubv51", "colab_type": "text" }, "source": [ "Olvassunk be 10 karaktert a fileból az alábbi módon:" ] }, { "cell_type": "code", "metadata": { "id": "Qf5LtbvXbv53", "colab_type": "code", "colab": {} }, "source": [ "karakterek1=file1.read(10)" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "EqF3JYgnbv55", "colab_type": "text" }, "source": [ "A `karakterek1` változó ezután a file első 10 karakterét tartalmazza (vessük össze ezt az `egeszfile[:100]` parancs kimenetével): " ] }, { "cell_type": "code", "metadata": { "id": "Sn00QFfMbv56", "colab_type": "code", "colab": {}, "outputId": "5184753d-4118-4c91-ca46-a125cdad2f83" }, "source": [ "karakterek1" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "'#1. oszlop'" ] }, "metadata": { "tags": [] }, "execution_count": 8 } ] }, { "cell_type": "markdown", "metadata": { "id": "Rv2YIM-Jbv58", "colab_type": "text" }, "source": [ "Ha ismét meghívjuk a `file1` változó `read()` függvényét, akkor az a következő 10 karaktert olvassa be:" ] }, { "cell_type": "code", "metadata": { "id": "3vUI1je0bv58", "colab_type": "code", "colab": {} }, "source": [ "karakterek2=file1.read(10)" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "yzouL_lebv5-", "colab_type": "code", "colab": {}, "outputId": "b8d649bd-bc9d-4804-b50b-39c25031f26b" }, "source": [ "karakterek2" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "' ev ho T'" ] }, "metadata": { "tags": [] }, "execution_count": 10 } ] }, { "cell_type": "markdown", "metadata": { "id": "7DHh84hYbv6A", "colab_type": "text" }, "source": [ "Látjuk tehát hogy a `read()` utasítás hatására könyörtelenül haladunk végig a file karakterein: úgy tűnhet, ha már egyszer valamit beolvastunk, akkor azt többé már nem tudjuk! Szerencsére ez nem így van, mivel a `tell()` és a `seek()` függvények segítségével kérdezhetjük le, illetve állíthatjuk be egy megnyitott filefolyam aktuális pozicióját." ] }, { "cell_type": "markdown", "metadata": { "id": "hJ-dk2pCbv6A", "colab_type": "text" }, "source": [ "A `tell()` függvényt alkalmazva a `file1` változóra megkaphatjuk az aktuális folyampoziciót. Ami a jelen esetben 20, hiszen az előző két read parancs 10 karaktert olvasott be!" ] }, { "cell_type": "code", "metadata": { "id": "Iv8CR_Jubv6B", "colab_type": "code", "colab": {}, "outputId": "af302d73-f974-4d9a-fde5-a233a82efbb9" }, "source": [ "file1.tell()" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "20" ] }, "metadata": { "tags": [] }, "execution_count": 11 } ] }, { "cell_type": "markdown", "metadata": { "id": "YSgClLrdbv6C", "colab_type": "text" }, "source": [ "A `seek()` parancs segítségével a file egy teszőleges helyére ugorhatunk. A `seek(n)` függvény alkalmazásával a file `n`-edik karakterére ugrunk. Ha ezután alkalmazzuk a `read()` függvényt, akkor a file tartalmát ettől a poziciótól olvassuk." ] }, { "cell_type": "code", "metadata": { "id": "kNDcCOTYbv6D", "colab_type": "code", "colab": {}, "outputId": "505b0785-30b4-419b-f518-1196f89c169d" }, "source": [ "file1.seek(5)" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "5" ] }, "metadata": { "tags": [] }, "execution_count": 12 } ] }, { "cell_type": "markdown", "metadata": { "id": "bDVrq6uYbv6F", "colab_type": "text" }, "source": [ "Az alábbi parancs tehát a 5. karaktertől olvas be újabb 10 darab karaktert. " ] }, { "cell_type": "code", "metadata": { "id": "a8EgE1owbv6F", "colab_type": "code", "colab": {} }, "source": [ "karakterek3=file1.read(10)" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "ZagAi6l3bv6H", "colab_type": "code", "colab": {}, "outputId": "ea87c98c-c874-49c0-ccec-4c0add7aaafb" }, "source": [ "karakterek3" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "'szlop ev '" ] }, "metadata": { "tags": [] }, "execution_count": 14 } ] }, { "cell_type": "markdown", "metadata": { "id": "xXcX3nIrbv6J", "colab_type": "text" }, "source": [ "Zárjuk ismét be a file-t!" ] }, { "cell_type": "code", "metadata": { "id": "glJVt_sMbv6J", "colab_type": "code", "colab": {} }, "source": [ "file1.close()" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "ZXaJIpeIbv6N", "colab_type": "text" }, "source": [ "Nagyon sok esetben az adatfile-okban hordozott információ táblázatszerűen vannak rendezve. Az file minden sora hasonló tagolással csoportosítja a számunkra értékes adatokat. \n", "Egy megnyitott file minden sorát - mint soronkénti karakterláncok listáját - a readlines függvény segítségével gyárthatjuk le." ] }, { "cell_type": "code", "metadata": { "id": "6hJrq6N9bv6O", "colab_type": "code", "colab": {} }, "source": [ "file1 = open('SN_m_tot_V2.0.txt') " ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "4CCN3pzjbv6Q", "colab_type": "code", "colab": {} }, "source": [ "sorok = file1.readlines()" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "0cp2I6EBbv6S", "colab_type": "text" }, "source": [ "Mivel már nincs szükség a a file-ra ezért be is csukjuk azt!" ] }, { "cell_type": "code", "metadata": { "id": "5CMiIHpHbv6S", "colab_type": "code", "colab": {} }, "source": [ "file1.close() " ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "KvFHOXbVbv6U", "colab_type": "text" }, "source": [ "A sorok lista minden eleme most tehát egy egy sor a file-ból, vizsgáljuk meg például az első 10 sort:" ] }, { "cell_type": "code", "metadata": { "id": "STtYu9Lmbv6U", "colab_type": "code", "colab": {}, "outputId": "1dccd3d7-b071-4c7e-fa50-7db2d6fe63b0" }, "source": [ "sorok[0:10]" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "['#1. oszlop ev ho T[ev] napfolt_szam\\n',\n", " '#2. oszlop honap\\n',\n", " '#3. oszlop az ido evben merve \\n',\n", " '#4. oszlop Napfoltok szamanak atlaga\\n',\n", " '#5. oszlop Napfoltok szamanak szorasa, negativ ertekek azt jelentik hogy az informacio nem all rendelkezesre!\\n',\n", " '#6. oszlop Napfolt meresek szama, negativ ertekek azt jelentik hogy az informacio nem all rendelkezesre!\\n',\n", " '1749 01 1749.042 96.7 -1.0 -1 \\n',\n", " '1749 02 1749.123 104.3 -1.0 -1 \\n',\n", " '1749 03 1749.204 116.7 -1.0 -1 \\n',\n", " '1749 04 1749.288 92.8 -1.0 -1 \\n']" ] }, "metadata": { "tags": [] }, "execution_count": 15 } ] }, { "cell_type": "markdown", "metadata": { "id": "VGx2BlWVbv6X", "colab_type": "text" }, "source": [ "Amint látjuk, az első hat sor a '#' karakterrel kezdődik, és minden ilyen sor azt mondja meg hogy a tényleges adatok megfelelő oszlopa mit tartalmaz. A hetedik sortól lefelé viszont szóközökkel elválasztott számok vannak, ez maga a hőn áhitott adat, de sajnos még mindig karakterláncok formájában! " ] }, { "cell_type": "markdown", "metadata": { "id": "AZsUxiofbv6X", "colab_type": "text" }, "source": [ "Az első értékes adatsor a file 7.-sora:" ] }, { "cell_type": "code", "metadata": { "id": "tZPo_3q-bv6Y", "colab_type": "code", "colab": {}, "outputId": "d6b2be48-d111-47f7-e8b7-fff1f2fb6ba3" }, "source": [ "sorok[6]" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "'1749 01 1749.042 96.7 -1.0 -1 \\n'" ] }, "metadata": { "tags": [] }, "execution_count": 20 } ] }, { "cell_type": "markdown", "metadata": { "id": "MI53c003bv6a", "colab_type": "text" }, "source": [ "Egy karakterláncot a `split()` parancs segítségével adott karakterek mentén fel tudunk vágni egy listába. A `split()` parancs alapértelmezésben szóközök szerint vágja fel a megjelölt karakterláncot, így az első értékes adatsor oszlopokra szabása az alábbiak szerint történik:" ] }, { "cell_type": "code", "metadata": { "id": "2UV6niefbv6b", "colab_type": "code", "colab": {}, "outputId": "6b3019a3-a53e-47ca-a35e-5430f8930d50" }, "source": [ "sorok[6].split()" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "['1749', '01', '1749.042', '96.7', '-1.0', '-1']" ] }, "metadata": { "tags": [] }, "execution_count": 21 } ] }, { "cell_type": "markdown", "metadata": { "id": "ydicI8Tmbv6d", "colab_type": "text" }, "source": [ "Az eredmény tehát egy lista mely tartalmazza az értékes adatokat, ugyan még mindig karakterláncok formájában! \n", "Az egyes elemeket lebegőpontos számmá a már ismert `float()` függvénnyel konvertálhatjuk. Tehát az első adatsor negyedik oszlopából a következő módon készíthetünk hús-vér számot:" ] }, { "cell_type": "code", "metadata": { "id": "94oh9Nh3bv6e", "colab_type": "code", "colab": {}, "outputId": "4f862e2c-19bd-4477-a23f-5315f16ab252" }, "source": [ "float(sorok[6].split()[3])" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "96.7" ] }, "metadata": { "tags": [] }, "execution_count": 22 } ] }, { "cell_type": "markdown", "metadata": { "id": "GjlouhWwbv6f", "colab_type": "text" }, "source": [ "Ha már egy elemet számmá tudunk konvertálni, akkor egy `for` ciklus segítségével számokat tartalmazó listákba tudjuk rendezni az adatokat a már megszokott módon:" ] }, { "cell_type": "code", "metadata": { "id": "YFTfOLIwbv6g", "colab_type": "code", "colab": {} }, "source": [ "num_napfolt=[]\n", "meresi_ido=[]\n", "for sor in sorok[6:]:\n", " num_napfolt.append( float(sor.split()[3]) )\n", " meresi_ido.append( float(sor.split()[2]) )" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "PpgqWwTMbv6j", "colab_type": "text" }, "source": [ "Ábrázoljuk végül a napfoltok számát az évek függvényében:" ] }, { "cell_type": "code", "metadata": { "id": "fVODObsDbv6k", "colab_type": "code", "colab": {}, "outputId": "935ac63b-c896-4ac1-fb95-cb3eb4cd03fa" }, "source": [ "plot(meresi_ido,num_napfolt)\n", "xlabel('T[ev]')\n", "ylabel('Napfoltszam')" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 24 }, { "output_type": "display_data", "data": { "image/png": "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\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "markdown", "metadata": { "id": "rKxMJyNJbv6m", "colab_type": "text" }, "source": [ "### Mentés\n", "\n", "Az adatok beolvasása mellett sokszor lehet szükség a feldolgozott információ újbóli kiírására. Erre a `python` az adatfolyam típusú változókra alkalmazott `write()` függvényt kínálja. Vizsgáljuk meg, hogy hogy működik a fileírás, egy egyszerű példán! Nyissunk meg egy file-t, amelybe írni szeretnénk, ezt az `open()` függvény `mode` kulcsszavas paraméterén keresztül tudjuk jelezni a `mode='w'` beállítással. Itt a `w` az írási módot jelenti." ] }, { "cell_type": "code", "metadata": { "id": "B269Nr3Cbv6m", "colab_type": "code", "colab": {} }, "source": [ "file2=open('mentes1.dat',mode='w')" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "okemJHdLbv6n", "colab_type": "text" }, "source": [ "A `file2` folyamba a `write()` függvény segítségével tudunk karakterláncokat írni:" ] }, { "cell_type": "code", "metadata": { "id": "IfybAFO-bv6o", "colab_type": "code", "colab": {}, "outputId": "bf9131db-8688-495b-98e9-8a3da316acc1" }, "source": [ "file2.write('#Ez az elso kiirt fileom!\\n')" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "26" ] }, "metadata": { "tags": [] }, "execution_count": 26 } ] }, { "cell_type": "markdown", "metadata": { "id": "xol8rg1Wbv6p", "colab_type": "text" }, "source": [ "A write fügvény alapértelmezett visszatérési értéke a file-ba kiírt karakterek száma. A biztonság kedvéért zárjuk be a file-t!" ] }, { "cell_type": "code", "metadata": { "collapsed": true, "id": "upkJ09Pbbv6q", "colab_type": "code", "colab": {} }, "source": [ "file2.close()" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "hzLoZnygbv6r", "colab_type": "text" }, "source": [ "Ha már meglévő file-hoz szeretnénk további karaktereket fűzni, akkor az `open()` függvény `mode` paraméterének `mode='a'` beállításával jelezzük ezt. Az `'a'` karakter itt az append angol szó rövidítése, mely ismerős lehet már számunkra egy, a listákra vonatkozó függvény nevéből." ] }, { "cell_type": "code", "metadata": { "collapsed": true, "id": "idtyAVFhbv6s", "colab_type": "code", "colab": {} }, "source": [ "file2=open('data/mentes1.dat',mode='a')" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "N2Qr21oYbv6u", "colab_type": "text" }, "source": [ "Írjuk ki a mérési idő (`meresi_ido`) és a napfoltok számát tartalmazó (`num_napfolt`) adatokat a már fent létrehozott `data/mentes1.dat` file-ba. \n", "Ezt egy `for` ciklus segítségével fogjuk megtenni:" ] }, { "cell_type": "code", "metadata": { "collapsed": true, "id": "GNELSZtjbv6u", "colab_type": "code", "colab": {} }, "source": [ "for i in range(len(meresi_ido)):\n", " file2.write(str(meresi_ido[i])+' '+str(num_napfolt[i])+'\\n')" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "YrK3_l_kbv6x", "colab_type": "text" }, "source": [ "A `write()` függvény hasába írt karakterlánc a `meresi_ido` és `num_napfolt` tömbök megfelelő sorában lévő elemet tartalmazza szóközzel elválasztva, illetve a sor végét egy sortörés `'\\n'` -el jelezve." ] }, { "cell_type": "markdown", "metadata": { "id": "-yBUqbnSbv6y", "colab_type": "text" }, "source": [ "Zárjuk ismét be a file-t:" ] }, { "cell_type": "code", "metadata": { "collapsed": true, "id": "7owsOpRKbv6y", "colab_type": "code", "colab": {} }, "source": [ "file2.close()" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "yVwYGydTbv60", "colab_type": "text" }, "source": [ "A beolvasáshoz hasonlóan a kiíratásnál is van lehetőség egész sorok kiírására. Ezt, talán nem túl meglepő módon a `writelines()` függvény valósítja meg. Ez a függvény karakterláncok listáját írja ki egy file-ba egy megnyitott filefolyamon keresztül. " ] }, { "cell_type": "code", "metadata": { "id": "h0Wo5Wn5bv61", "colab_type": "code", "colab": {} }, "source": [ "file3=open('data/mentes2.dat',mode='w')" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "h3sWNYcqbv63", "colab_type": "text" }, "source": [ "Ha a lista minden karakterlánca `'\\n'` karakterre végződik, akkor a kiíratás során a file-ban minden listaelem egy-egy külön sorba kerül:" ] }, { "cell_type": "code", "metadata": { "collapsed": true, "id": "N8ynQX8Nbv64", "colab_type": "code", "colab": {} }, "source": [ "sorok=['Ez az elso sor\\n','Ez a masodik sor\\n'];" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "D7aPKhUMbv66", "colab_type": "code", "colab": {} }, "source": [ "file3.writelines(sorok)" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "kDTQX6Zwbv67", "colab_type": "text" }, "source": [ "Mi történik, ha lemarad a `'\\n'` ? " ] }, { "cell_type": "code", "metadata": { "collapsed": true, "id": "OH-wQNSzbv67", "colab_type": "code", "colab": {} }, "source": [ "sorok=['Ez az harmadik','Ez hova kerult?\\n'];" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "collapsed": true, "id": "5j94C02Bbv68", "colab_type": "code", "colab": {} }, "source": [ "file3.writelines(sorok)" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "collapsed": true, "id": "Y1sTf-vxbv6-", "colab_type": "code", "colab": {} }, "source": [ "file3.close()" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "bOtqfaCabv6_", "colab_type": "text" }, "source": [ "Vizsgáljuk meg magát a file-t!" ] }, { "cell_type": "markdown", "metadata": { "id": "J3LVLNNebv6_", "colab_type": "text" }, "source": [ "### Különös karakterek karakterláncokban\n", "\n", "A fentiekben már többször is találkoztunk a sortörést jelölő `'\\n' ` karakterrel. Ehhez hasonlóan van néhány más úgynevezett [literális](https://docs.python.org/2.0/ref/strings.html) karakter, amelynek speciális jelentése van. Ezek közül az alábbi táblázatban összefoglalunk néhányat:" ] }, { "cell_type": "markdown", "metadata": { "id": "gTdKj-aubv7A", "colab_type": "text" }, "source": [ "\n", "karakter |\tjelentés\n", "-|-\n", "\\n|\tsortörés\n", "\\r|\tkocsi vissza\n", "\\t|\tvízszintes kihagyás (TAB)\n", "\\v| függőleges kihagyás (TAB)\n", "\\xhh..| hexadecimális karakter hh.. értékkel\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "id": "pXDTNkHnbv7A", "colab_type": "text" }, "source": [ "A print függvény segítségével az alábbi példán demonstráljuk a `'\\r'`, `'\\t'`, és a már ismert `'\\n'` hatását:" ] }, { "cell_type": "code", "metadata": { "id": "crHIHbgqbv7B", "colab_type": "code", "colab": {}, "outputId": "cf96c8dc-1785-448a-a38b-8df8e178e761" }, "source": [ "print(\"EZEK ITT NAGYBETUKezek itt kisbetuk\")" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "EZEK ITT NAGYBETUKezek itt kisbetuk\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "pjuQ2m6sbv7D", "colab_type": "code", "colab": {}, "outputId": "29271d27-6be7-4c18-df7d-0dfb27b765d9" }, "source": [ "print(\"EZEK ITT NAGYBETUK\\rezek itt kisbetuk\")" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "EZEK ITT NAGYBETUK\rezek itt kisbetuk\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "sT1GhzlWbv7G", "colab_type": "code", "colab": {}, "outputId": "4155de81-ea09-4beb-c0e0-6083c8b26a95" }, "source": [ "print(\"EZEK ITT NAGYBETUK\\tezek itt kisbetuk\")" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "EZEK ITT NAGYBETUK\tezek itt kisbetuk\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "hHee6oP3bv7I", "colab_type": "code", "colab": {}, "outputId": "05e90a28-7e82-4197-b600-d6425b31be20" }, "source": [ "print(\"EZEK ITT NAGYBETUK\\nezek itt kisbetuk\")" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "EZEK ITT NAGYBETUK\n", "ezek itt kisbetuk\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "vKRURUJGbv7J", "colab_type": "text" }, "source": [ "Ezek a karakterek file-ba való írás közben is hasonlóan viselkednek!" ] }, { "cell_type": "markdown", "metadata": { "id": "5jDlCQSxbv7J", "colab_type": "text" }, "source": [ "---\n", "\n", "## Numpy filekezelő rutinok" ] }, { "cell_type": "markdown", "metadata": { "id": "8KyeJAorbv7K", "colab_type": "text" }, "source": [ "Amint korábbiakban is láthattuk, a `numpy` csomag `array` típusú változói számos előnyös tulajdonsággal rendelkeznek a sima `list` típusú változókhoz képest. \n", "\n", "A `numpy` csomag biztosít néhány hasznos filekezelő rutint, melyek az `array` tipusú változók file-ba kiírására, illetve file-okból történő beolvasására használhatóak. Az alábbiakban két érdekes példán keresztül fogjuk megvizsgálni ezeket a függvényeket.\n", "\n", "\n", "Elemezzük Felix Baumgartner ugrásának adatait. \n", "Az ugrás megtett út$--$idő adatait a `data/BAUMGARTNER/h_vs_t` file-ban találjuk. \n", "\n", "A file két oszlopnyi számot tartalmaz. Az első oszlop az idő s-ban, a második oszlop az adott időben mért magasság m-ben. \n", "Ilyen jellegű egyszerű struktúrájú file-ok beolvasására és az adatok array-ba való töltésére a `numpy` csomag `loadtxt` függvényét használhatjuk:" ] }, { "cell_type": "code", "metadata": { "id": "TbiqsvYPbv7K", "colab_type": "code", "colab": {} }, "source": [ "baum_data=loadtxt('h_vs_t.txt')" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "nc-4dNA7bv7L", "colab_type": "text" }, "source": [ "A `baum_data` tömb első oszlopát a a `t` változóba, a második oszlopát pedig a `h` változóba tároljuk:" ] }, { "cell_type": "code", "metadata": { "id": "6_HN5rDsbv7M", "colab_type": "code", "colab": {} }, "source": [ "t=baum_data[:,0] # idő\n", "h=baum_data[:,1] # magasság" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "Z4TtdnzYbv7N", "colab_type": "text" }, "source": [ "Ábrázoljuk az adatokat! A tengelyfeliratok természetesen nem maradhatnak el!" ] }, { "cell_type": "code", "metadata": { "id": "rOJq4Rsnbv7N", "colab_type": "code", "colab": {}, "outputId": "1696d6e4-0836-42e3-9251-affe62ef142b" }, "source": [ "plot(t,h)\n", "xlabel('Ido [s]')\n", "ylabel('Magassag [m]')" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "Text(0, 0.5, 'Magassag [m]')" ] }, "metadata": { "tags": [] }, "execution_count": 19 }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "markdown", "metadata": { "id": "TFrmwBo3bv7O", "colab_type": "text" }, "source": [ "Az ugrással kapcsolatban egy igen fontos kérdés volt, hogy vajon sikerült-e szabadesésben átlépni a hangsebességet? Vizsgáljuk meg, hogy ezen adatok alapján vajon átlépte-e Felix Baumgartner a hanghatárt! Először is szükség van a sebesség időfüggésére. Ezt a magasság$--$idő függvény numerikus deriváltjával fogjuk most meghatározni. \n", "Ha egy $y(x)$ függvényt mintavételezésével véges darab $x_i,y_i$ párt kapunk, akkor az $y(x)$ függvény numerikus deriváltját a következő differencia hányadossal közelíthetjük:\n", "\n", "\n", " $$\\left . \\frac{\\mathrm{d}y}{\\mathrm{d}x}\\right|_{x_i} =\\frac{y_{i+1}-y_i}{x_{i+1}-x_i} $$" ] }, { "cell_type": "markdown", "metadata": { "id": "wzcT-7k1bv7P", "colab_type": "text" }, "source": [ "Definiáljunk most egy függvényt, mely két ugyanolyan hosszúságú tömb `x` és `y` adataiból legenerálja a két tömb numerikus derviáltját. Figyeljük meg, hogy az utolsó és az első adatpontban a fenti képlettől egy kicsit eltérő módon járunk el." ] }, { "cell_type": "code", "metadata": { "id": "ASvWLbsCbv7P", "colab_type": "code", "colab": {} }, "source": [ "# numerikus derivált függvény\n", "def nderiv(y,x):\n", " \"Első szomszéd differenciál\"\n", " n = len(y) # adatpontok száma\n", " d = zeros(n) # változó inicializálás. A zeros() függvény tetszőleges alakú és 0-kat tartalmazó arrayt gyárt\n", " # mivel a legegyszerűbb numerikus differenciálás nem szimmetrikus a végpontokat\n", " # kicsit másképp kezeljük mint a tömb belsejében lévő pontokat\n", " for i in range(1,n-1):\n", " d[i] = (y[i+1]-y[i])/(x[i+1]-x[i]) #egy általános pont deriváltja\n", " d[0] = (y[1]-y[0])/(x[1]-x[0]) #az első pont deriváltja\n", " d[n-1] = (y[n-1]-y[n-2])/(x[n-1]-x[n-2]) # az utolsó pont deriváltja\n", " return d\n" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "7FOP-jDGbv7Q", "colab_type": "text" }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "id": "DvPOcTf7bv7Q", "colab_type": "text" }, "source": [ "Az nderiv függvény segítségével a sebesség meghatározható." ] }, { "cell_type": "code", "metadata": { "id": "mrzctshRbv7R", "colab_type": "code", "colab": {} }, "source": [ "v=nderiv(h,t) # Figyelem az első változó a h a második a t!!!" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "zWzEBcwzbv7S", "colab_type": "text" }, "source": [ "Vizsgáljuk meg a sebesség$--$idő függvényt!" ] }, { "cell_type": "code", "metadata": { "id": "a0m1Zs21bv7T", "colab_type": "code", "colab": {}, "outputId": "66639477-a413-4174-b4e2-eb77d23d06cd" }, "source": [ "plot(t,v)\n", "xlabel('Ido [s]')\n", "ylabel('Sebesseg [m/s]')" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "Text(0, 0.5, 'Sebesseg [m/s]')" ] }, "metadata": { "tags": [] }, "execution_count": 22 }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "markdown", "metadata": { "id": "CfcDkUw5bv7X", "colab_type": "text" }, "source": [ "Mivel általában a hang terjedési sebessége függ a magasságtól, ezért annak érdekében, hogy megtudjuk, hogy sikerült-e áttörni a hanghatárt, célszerű a sebességet a magasság függvényében ábrázolni:" ] }, { "cell_type": "code", "metadata": { "id": "3s8B74rtbv7X", "colab_type": "code", "colab": {}, "outputId": "0ae415a7-71d1-4465-8320-d1d33d03a7f1" }, "source": [ "plot(h,abs(v))\n", "xlabel('Magassag [m]')\n", "ylabel('Sebesseg [m/s]')" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "Text(0, 0.5, 'Sebesseg [m/s]')" ] }, "metadata": { "tags": [] }, "execution_count": 23 }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "markdown", "metadata": { "id": "1CCzn3jfbv7a", "colab_type": "text" }, "source": [ "A wikipédián található [adatok](https://upload.wikimedia.org/wikipedia/commons/thumb/9/9d/Comparison_US_standard_atmosphere_1962.svg/2000px-Comparison_US_standard_atmosphere_1962.svg.png) alapján a hangsebesség 25km magasságban valamivel 300 m/s alatt van. Ezen a magasságon Felix sebessége 350 m/s körül mozgott, tehát a rekord - a mérési adatok alapján - sikerült!\n" ] }, { "cell_type": "markdown", "metadata": { "id": "GOpg0wxEbv7a", "colab_type": "text" }, "source": [ "Vizsgáljuk meg a `loadtxt()` függvény néhány paraméterét is! Ezt a feladatot a 2014-es ebola járvány statisztikai adatait tartalmazó file segítségével fogjuk megtenni." ] }, { "cell_type": "markdown", "metadata": { "id": "ON6nPrhtbv7b", "colab_type": "text" }, "source": [ "Próbáljuk meg betölteni a `'data/EBOLA/ebola_vesszoesszazalekjel.txt'` - filet!" ] }, { "cell_type": "code", "metadata": { "id": "Kxdqe2Q9bv7c", "colab_type": "code", "colab": {}, "outputId": "a87d9a48-e5fc-41aa-e51a-bad32b959e92" }, "source": [ "ebola_data=loadtxt('ebola_vesszoesszazalekjel.txt')" ], "execution_count": 0, "outputs": [ { "output_type": "error", "ename": "ValueError", "evalue": "could not convert string to float: '%'", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mebola_data\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mloadtxt\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'ebola_vesszoesszazalekjel.txt'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\numpy\\lib\\npyio.py\u001b[0m in \u001b[0;36mloadtxt\u001b[1;34m(fname, dtype, comments, delimiter, converters, skiprows, usecols, unpack, ndmin, encoding, max_rows)\u001b[0m\n\u001b[0;32m 1132\u001b[0m \u001b[1;31m# converting the data\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1133\u001b[0m \u001b[0mX\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1134\u001b[1;33m \u001b[1;32mfor\u001b[0m \u001b[0mx\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mread_data\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m_loadtxt_chunksize\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1135\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mX\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1136\u001b[0m \u001b[0mX\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0marray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\numpy\\lib\\npyio.py\u001b[0m in \u001b[0;36mread_data\u001b[1;34m(chunk_size)\u001b[0m\n\u001b[0;32m 1059\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1060\u001b[0m \u001b[1;31m# Convert each value according to its column and store\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1061\u001b[1;33m \u001b[0mitems\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mconv\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mval\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mconv\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mval\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mconverters\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvals\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1062\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1063\u001b[0m \u001b[1;31m# Then pack it according to the dtype's nesting\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\numpy\\lib\\npyio.py\u001b[0m in \u001b[0;36m\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 1059\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1060\u001b[0m \u001b[1;31m# Convert each value according to its column and store\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1061\u001b[1;33m \u001b[0mitems\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mconv\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mval\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mconv\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mval\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mconverters\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvals\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1062\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1063\u001b[0m \u001b[1;31m# Then pack it according to the dtype's nesting\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\numpy\\lib\\npyio.py\u001b[0m in \u001b[0;36mfloatconv\u001b[1;34m(x)\u001b[0m\n\u001b[0;32m 766\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;34m'0x'\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 767\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mfloat\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfromhex\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 768\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mfloat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 769\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 770\u001b[0m \u001b[0mtyp\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdtype\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtype\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mValueError\u001b[0m: could not convert string to float: '%'" ] } ] }, { "cell_type": "markdown", "metadata": { "id": "85p67cLKbv7d", "colab_type": "text" }, "source": [ "A szemfüles halgatók talán sikeresen ki tudják bogozni a fenti hibaüzenetet: \n", "\n", "*A '%' jelet nem tudom számmá konvertálni!*\n", "\n", "Ha megvizsgáljuk magát a file-t, akkor láthatjuk, hogy a napfoltadatoktól eltérő módon itt az adatokat szolgáltató személy a legtöbbször alkalmazott '#'-jel helyett a '%'-ot alkalmazta! Jelezzük ezt a függvénynek a `comments='%'` kapcsoló segítségével!" ] }, { "cell_type": "code", "metadata": { "id": "gShFsEI-bv7e", "colab_type": "code", "colab": {}, "outputId": "98259a3e-0787-45f3-c0ab-0549f590ee0c" }, "source": [ "ebola_data=loadtxt('ebola_vesszoesszazalekjel.txt',comments='%')" ], "execution_count": 0, "outputs": [ { "output_type": "error", "ename": "ValueError", "evalue": "could not convert string to float: '0,'", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mebola_data\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mloadtxt\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'ebola_vesszoesszazalekjel.txt'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mcomments\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'%'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\numpy\\lib\\npyio.py\u001b[0m in \u001b[0;36mloadtxt\u001b[1;34m(fname, dtype, comments, delimiter, converters, skiprows, usecols, unpack, ndmin, encoding, max_rows)\u001b[0m\n\u001b[0;32m 1132\u001b[0m \u001b[1;31m# converting the data\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1133\u001b[0m \u001b[0mX\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1134\u001b[1;33m \u001b[1;32mfor\u001b[0m \u001b[0mx\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mread_data\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m_loadtxt_chunksize\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1135\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mX\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1136\u001b[0m \u001b[0mX\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0marray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\numpy\\lib\\npyio.py\u001b[0m in \u001b[0;36mread_data\u001b[1;34m(chunk_size)\u001b[0m\n\u001b[0;32m 1059\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1060\u001b[0m \u001b[1;31m# Convert each value according to its column and store\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1061\u001b[1;33m \u001b[0mitems\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mconv\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mval\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mconv\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mval\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mconverters\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvals\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1062\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1063\u001b[0m \u001b[1;31m# Then pack it according to the dtype's nesting\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\numpy\\lib\\npyio.py\u001b[0m in \u001b[0;36m\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 1059\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1060\u001b[0m \u001b[1;31m# Convert each value according to its column and store\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1061\u001b[1;33m \u001b[0mitems\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mconv\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mval\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mconv\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mval\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mconverters\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvals\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1062\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1063\u001b[0m \u001b[1;31m# Then pack it according to the dtype's nesting\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\numpy\\lib\\npyio.py\u001b[0m in \u001b[0;36mfloatconv\u001b[1;34m(x)\u001b[0m\n\u001b[0;32m 766\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;34m'0x'\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 767\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mfloat\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfromhex\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 768\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mfloat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 769\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 770\u001b[0m \u001b[0mtyp\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdtype\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtype\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mValueError\u001b[0m: could not convert string to float: '0,'" ] } ] }, { "cell_type": "markdown", "metadata": { "id": "wyrlwzSVbv7g", "colab_type": "text" }, "source": [ "Ismét hiba üzenet:\n", "\n", " *a '0,' karakterláncot nem tudom számmá konvertálni !*\n", " \n", "Ha megnézzük a file-t akkor láthatjuk hogy most szóközök helyett az oszlopok bizony vesszővel, azaz a `','`-karakterrel vannak elválasztva! Jelezzük ezt a függvénynek a `delimiter=','` kapcsoló segítségével!" ] }, { "cell_type": "code", "metadata": { "id": "WCJvb-8Xbv7h", "colab_type": "code", "colab": {} }, "source": [ "ebola_data=loadtxt('ebola_vesszoesszazalekjel.txt',comments='%',delimiter=',')" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "W3t6-oWGbv7i", "colab_type": "text" }, "source": [ "Így most már be tudtuk tölteni a file-t!" ] }, { "cell_type": "markdown", "metadata": { "id": "jDPvk0Rcbv7i", "colab_type": "text" }, "source": [ "A `usecols` és az `unpack` kulcsszavak segítségével specifikálhatjuk azt, hogy melyik oszlopokra vagyunk kíváncsiak, illetve hogy kicsomagolható formában térjen vissza a függvény.\n", "Beleolvasva szemmel a file-ba felvilágosítást kaphatunk, hogy melyik oszlopban milyen adat szerepel.\n", "Az alábbi minta például a `Nap,GuinLab,LibLab,NigLab,SLLab` és `SenLab` tömbökbe tölti be az országonkénti laboratóriumban kivizsgált megbetegedések számát, illetve a járvány kitörése óta eltelt napok számát." ] }, { "cell_type": "code", "metadata": { "id": "w8AI8iGsbv7j", "colab_type": "code", "colab": {} }, "source": [ "Nap,GuinLab,LibLab,NigLab,SLLab,SenLab=loadtxt('data/EBOLA/ebola_vesszoesszazalekjel.txt',\n", " comments='%',\n", " usecols=(0,3,6,9,12,15),\n", " unpack=True,\n", " delimiter=',')" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "5D1kSEPsbv7k", "colab_type": "text" }, "source": [ "Ábrázoljuk a fenti adatok közzül a Guineában vizsgált fertőzések számát az idő függvényében:" ] }, { "cell_type": "code", "metadata": { "id": "IAWjp9XZbv7k", "colab_type": "code", "colab": {}, "outputId": "c34d401b-6f30-479f-abcb-3c325a4ff468" }, "source": [ "plot(Nap,GuinLab)\n", "xlabel('Nap')\n", "ylabel('Esetek szama')" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 59 }, { "output_type": "display_data", "data": { "image/png": "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\nAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "markdown", "metadata": { "id": "4fYrBw_Ubv7l", "colab_type": "text" }, "source": [ "A már korábban megismert `savetxt()` függvény segítségével tölthetjük a feldolgozott `array` formátumú változókat file-ba:" ] }, { "cell_type": "code", "metadata": { "id": "olD66jm4bv7l", "colab_type": "code", "colab": {} }, "source": [ "savetxt('data/mentes_ebola_Guinea.dat',GuinLab)" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "rpGY2tWObv7n", "colab_type": "text" }, "source": [ "A `savetxt()` a `loadtxt()` hez hasonlóan számos kulcsszavas paraméterrel bír. Ezek közül az alábbi példában bemutatjuk a `header=` és a `comments=` paraméterek használatát.\n", "Az alábbi példa azt is illusztrálja, hogy ha ugyanolyan hosszúságú adatokat akarunk egymás melletti oszlopokba írni akkor azokat zárójelben egymás után felsorolva tehetjük meg:" ] }, { "cell_type": "code", "metadata": { "id": "fF3P4JqRbv7n", "colab_type": "code", "colab": {} }, "source": [ "savetxt('data/mentes_ebola_Guinea_vs_time.dat',\n", " (Nap,GuinLab),\n", " header=' Guineai halalozasi adatok',\n", " comments='@')" ], "execution_count": 0, "outputs": [] } ] }