{"id":548,"date":"2020-12-28T19:13:33","date_gmt":"2020-12-28T19:13:33","guid":{"rendered":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/?post_type=chapter&#038;p=548"},"modified":"2021-03-15T10:00:50","modified_gmt":"2021-03-15T10:00:50","slug":"csv-faili-lugemine","status":"publish","type":"chapter","link":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/chapter\/csv-faili-lugemine\/","title":{"raw":"CSV faili lugemine ja kirjutamine","rendered":"CSV faili lugemine ja kirjutamine"},"content":{"raw":"<h2>CSV failist lugemine<\/h2>\r\nAndmet\u00f6\u00f6tluses on eelnevalt vaja tabel failist sisse lugeda, mis on tihti CSV formaadis. NumPyga saab kasutada funktsiooni <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">genfromtxt<\/code>. Funktsiooni sulgudesse tuleb lisada faili nimi, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">delimiter<\/code> ehk eraldaja v\u00e4\u00e4rtus, mis eraldab andmeid teineteisest, ja parameeter <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">names=True<\/code>, mille abil saab veeru pealkirja kasutades v\u00e4ga lihtsalt tabelist terve veeru. N\u00e4iteks <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">tabel[\"sugu\"]<\/code> tagastab k\u00f5ik v\u00e4\u00e4rtused, mis asuvad veerus pealkirjaga <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">\"sugu\"<\/code>. Populaarsemad eraldajad on n\u00e4iteks t\u00fchik, koma v\u00f5i semikoolon. Vaatame n\u00e4idet. Olgu CSV faili sisu on selline:\r\n<pre>Esimene;Teine;Kolmas\r\n1;11;21\r\n2;12;22\r\n3;13;23\r\n4;14;24<\/pre>\r\n<span style=\"background-color: #f1c232\">\u00a0! <\/span><span style=\"background-color: #fff2cc\">\u00a0CSV failis ei tohi olla veeru nimedes t\u00fchikuid, need v\u00f5ib asendada _ -ga (alakriipsuga). N\u00e4iteks Keskmine hinne \u2192 Keskmine_hinne.<\/span>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\"># CSV faili sisselugemine\r\nimport numpy as np\r\n\r\ncsv = np.genfromtxt('fail.csv', delimiter=\";\", names=True, encoding = 'UTF-8')\r\n\r\n# Terve tabeli v\u00e4ljastamine\r\nprint(csv)<\/pre>\r\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n\u00a0 [(1., 11., 21.)\r\n   (2., 12., 22.)\r\n   (3., 13., 23.)\r\n   (4., 14., 24.)]<\/pre>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\"># V\u00e4ljastame esimese veeru\r\nprint(\"Esimene veerg: \", csv[\"Esimene\"])<\/pre>\r\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n\u00a0 Esimene veerg: [1. 2. 3. 4.]<\/pre>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\"># V\u00e4ljastame teise rea\r\nprint(\"Teine rida: \", csv[1])<\/pre>\r\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n\u00a0 Teine rida: (2., 12., 22.)<\/pre>\r\nN\u00e4eme, et v\u00e4ljund ei ole t\u00fc\u00fcpilisel Numpy kahem\u00f5\u00f5tmelise j\u00e4rjendi kujul, sest elementideks oleks justkui ennikud. Tegelikult on tegemist record array t\u00fc\u00fcpi j\u00e4rjendiga, mis \u00fcks Numpy j\u00e4rjendi t\u00fc\u00fcpidest, mis lubabki veeru eralda, selle nime j\u00e4rgi. Proovi \u00e4ra v\u00f5tta <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">names = True<\/code> argument ja v\u00e4ljasta kogu tabel. Mis juhtub? Kas tulemus oli midagi sellist?\r\n<pre>[[nan nan nan]\r\n [ 1. 11. 21.]\r\n [ 2. 12. 22.]\r\n [ 3. 13. 23.]\r\n [ 4. 14. 24.]]<\/pre>\r\nNimelt on v\u00f5ib Numpy \u00fcheks puuduseks pidada seda, et tabelis olevad v\u00e4\u00e4rtused peavad olema sama t\u00fc\u00fcpi. Vaikimisi on failist loetud tabel alati ujukomaarvu t\u00fc\u00fcpi ja kui tabelis on ka teksti, siis need on Numpy jaoks tundmatud, mis t\u00e4histatakse <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">nan <\/code>(not a number, tundmatu).\r\n\r\nJuhul kui on vaja anal\u00fc\u00fcsida tabelit, kus on erinevat t\u00fc\u00fcpi andmeid, siis on kolm v\u00f5imalust, kuidas ikkagi andmeid sobilikul kujul kasutada. Esimene v\u00f5imalus on failist lugemisel m\u00e4\u00e4rata \u00e4ra iga veeru andmet\u00fc\u00fcp.\r\n\r\nOlgu meil j\u00e4rgmised andmed.\r\n<pre>Nimi;Vanus;Punktid\r\nTiina;11;21\r\nKalle;12;42\r\nKustav;13;23\r\nSalme;14;34\r\n\u00d6rli;11;23<\/pre>\r\nN\u00e4eme, et esimese veeru andmed on s\u00f5ned ja teise ning kolmanda veerud andmed on t\u00e4isarvud.\r\n\r\nLoeme andmed, kasutades eelnevalt demonstreeritud funktsiooni <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">genfromtxt<\/code>. Erinevalt eelmisest n\u00e4itest, lisame juurde ka <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">dtype<\/code> argumendi, mille v\u00e4\u00e4rtuseks on j\u00e4rjend, kus iga element t\u00e4histab veeru t\u00fc\u00fcpi, kasutades t\u00fc\u00fcpide koode. Tekstina esitatud nimed m\u00e4\u00e4rame tabelis UNICODE s\u00f5ne t\u00fc\u00fcpi. Me ei kasuta tavalist s\u00f5ne t\u00fc\u00fcpi (str v\u00f5i \"S\"), sest faili kodeering on UTF-8, siis selleks, et NumPy oskaks kuvada failis olevaid nimesid \u00f5igesti, tuleb kasutada UNICODE s\u00f5ne t\u00fc\u00fcpi.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">csv = np.genfromtxt('fail.csv', delimiter=\";\", encoding = 'UTF-8', dtype=[\"U25\", \"i4\", \"i4\"], names=True)\r\n\r\nprint(csv[\"Nimi\"])\r\nprint(csv[\"Vanus\"])<\/pre>\r\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n  ['Tiina' 'Kalle' 'Kustav' 'Salme' '\u00d6rli']\r\n  [11 12 13 14 11]<\/pre>\r\nTeine v\u00f5imalus on muuta kogu tabel s\u00f5ne t\u00fc\u00fcpi. Selleks m\u00e4\u00e4rame parameetri <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">dtype<\/code> v\u00e4\u00e4rtuseks <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">srt<\/code>. Samuti lisame parameetri <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">skip_header<\/code>, mille v\u00e4\u00e4rtuseks on <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">1<\/code>. Selle tulemusel ei ole tabelis enam veeru pealkirjade rida.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">csv = np.genfromtxt('fail.csv', delimiter=\";\", encoding = 'UTF-8', dtype=str, skip_header=1)\r\n\r\n# Terve tabeli v\u00e4ljastamine\r\nprint(csv)<\/pre>\r\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n  [['Tiina' '11' '21']\r\n   ['Kalle' '12' '42']\r\n   ['Kustav' '13' '23']\r\n   ['Salme' '14' '34']\r\n   ['\u00d6rli' '11' '23']]<\/pre>\r\nN\u00fc\u00fcd kui soovime leida n\u00e4iteks keskmist vanust, tuleks kasutada t\u00fckeldamist ja saadud veeru t\u00fc\u00fcp teisendada ujukomaarvuks.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">teine_veerg = csv[:, 1]\r\nprint(teine_veerg)\r\n\r\nvanus = teine_veerg.astype(float)\r\nprint(\"Keskmine vanus:\", np.mean(vanus))<\/pre>\r\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n  ['11' '12' '13' '14' '11']\r\n  Keskmine vanus: 12.2<\/pre>\r\nKolmas v\u00f5imalus on kasutada Pandase moodulit (loe lisa Pandase kohta peat\u00fckist Pandas) CSV failide lugemiseks, sest sel juhul ei ole vaja muretseda, et andmed on tabelis erinevat t\u00fc\u00fcpi. See on v\u00e4ga hea viis kasutada \u00e4ra m\u00f5lema mooduli head k\u00fcljed. Esmalt tuleb aga Pandase moodul importida.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">import pandas as pd<\/pre>\r\nLoeme andmed failist kasutades Pandase <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">read_csv<\/code> funktsiooni.\r\n<div align=\"left\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">x = pd.read_csv(\"fail.csv\", sep=\";\").values\r\nprint(x)<\/pre>\r\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n  [['Tiina' 11 21]\r\n   ['Kalle' 12 42]\r\n  \u00a0['Kustav' 13 23]\r\n   ['Salme' 14 34]\r\n   ['\u00d6rli' 11 23]]<\/pre>\r\nAndmed v\u00f5ib lugeda ka veebist. Lisades juurde mooduli URLLib, millega saab faile veebist lugeda ning kasutada veebilinki, kus andmed asuvad.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">from urllib.request import urlopen\r\n\r\n# Andmed\r\nurl = 'http:\/\/kodu.ut.ee\/~merka123\/plotly\/haigusjuhtumid.csv'\r\nandmed = urlopen(url)\r\ncsv = np.genfromtxt(andmed, delimiter=\";\", names=True, encoding = 'UTF-8', dtype=['U20', 'i4', 'i4', 'i4', 'i4','i4'])<\/pre>\r\n<\/div>\r\n<h2>CSV faili salvestamine<\/h2>\r\nNumPyga saab salvestada informatsiooni tekstifaili vaid \u00fche reaga. Selle jaoks on olemas funktsioon: <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">np.savetxt(fail, sisu, eraldaja)<\/code>. Vaatame n\u00e4idet, kus salvestame kahem\u00f5\u00f5tmelise j\u00e4rjendi faili ning seej\u00e4rel avame selle faili ning v\u00e4ljastame sisu.\r\n\r\n# Tekstifaili salvestamine ja selle sisu v\u00e4ljastamine\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">import numpy as np\r\n\r\n\r\n\r\n# Loome \u00fche kahem\u00f5\u00f5tmelise j\u00e4rjendi\r\n\r\nsisu = np.array([[1, 11, 21],[2, 12, 22],[3, 13, 23],[4, 14, 24]])\r\n\r\n# Salvestame sisu faili fail.csv, eraldajaks m\u00e4\u00e4rame semikooloni\r\n\r\nnp.savetxt('fail.csv', sisu, delimiter=';')\r\n\r\n\r\n\r\n# N\u00fc\u00fcd avame faili fail.txt\r\n\r\nfail = np.genfromtxt('fail.csv', delimiter=\";\", encoding = 'UTF-8')\r\n\r\n# V\u00e4ljastame sisu\u00a0\r\n\r\nprint(fail)<\/pre>\r\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n  [[ 1. 11. 21.]\r\n    [ 2. 12. 22.]\r\n    [ 3. 13. 23.]\r\n    [ 4. 14. 24.]]<\/pre>","rendered":"<h2>CSV failist lugemine<\/h2>\n<p>Andmet\u00f6\u00f6tluses on eelnevalt vaja tabel failist sisse lugeda, mis on tihti CSV formaadis. NumPyga saab kasutada funktsiooni <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">genfromtxt<\/code>. Funktsiooni sulgudesse tuleb lisada faili nimi, <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">delimiter<\/code> ehk eraldaja v\u00e4\u00e4rtus, mis eraldab andmeid teineteisest, ja parameeter <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">names=True<\/code>, mille abil saab veeru pealkirja kasutades v\u00e4ga lihtsalt tabelist terve veeru. N\u00e4iteks <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">tabel[\"sugu\"]<\/code> tagastab k\u00f5ik v\u00e4\u00e4rtused, mis asuvad veerus pealkirjaga <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">\"sugu\"<\/code>. Populaarsemad eraldajad on n\u00e4iteks t\u00fchik, koma v\u00f5i semikoolon. Vaatame n\u00e4idet. Olgu CSV faili sisu on selline:<\/p>\n<pre>Esimene;Teine;Kolmas\r\n1;11;21\r\n2;12;22\r\n3;13;23\r\n4;14;24<\/pre>\n<p><span style=\"background-color: #f1c232\">\u00a0! <\/span><span style=\"background-color: #fff2cc\">\u00a0CSV failis ei tohi olla veeru nimedes t\u00fchikuid, need v\u00f5ib asendada _ -ga (alakriipsuga). N\u00e4iteks Keskmine hinne \u2192 Keskmine_hinne.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\"># CSV faili sisselugemine\r\nimport numpy as np\r\n\r\ncsv = np.genfromtxt('fail.csv', delimiter=\";\", names=True, encoding = 'UTF-8')\r\n\r\n# Terve tabeli v\u00e4ljastamine\r\nprint(csv)<\/pre>\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n\u00a0 [(1., 11., 21.)\r\n   (2., 12., 22.)\r\n   (3., 13., 23.)\r\n   (4., 14., 24.)]<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\"># V\u00e4ljastame esimese veeru\r\nprint(\"Esimene veerg: \", csv[\"Esimene\"])<\/pre>\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n\u00a0 Esimene veerg: [1. 2. 3. 4.]<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\"># V\u00e4ljastame teise rea\r\nprint(\"Teine rida: \", csv[1])<\/pre>\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n\u00a0 Teine rida: (2., 12., 22.)<\/pre>\n<p>N\u00e4eme, et v\u00e4ljund ei ole t\u00fc\u00fcpilisel Numpy kahem\u00f5\u00f5tmelise j\u00e4rjendi kujul, sest elementideks oleks justkui ennikud. Tegelikult on tegemist record array t\u00fc\u00fcpi j\u00e4rjendiga, mis \u00fcks Numpy j\u00e4rjendi t\u00fc\u00fcpidest, mis lubabki veeru eralda, selle nime j\u00e4rgi. Proovi \u00e4ra v\u00f5tta <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">names = True<\/code> argument ja v\u00e4ljasta kogu tabel. Mis juhtub? Kas tulemus oli midagi sellist?<\/p>\n<pre>[[nan nan nan]\r\n [ 1. 11. 21.]\r\n [ 2. 12. 22.]\r\n [ 3. 13. 23.]\r\n [ 4. 14. 24.]]<\/pre>\n<p>Nimelt on v\u00f5ib Numpy \u00fcheks puuduseks pidada seda, et tabelis olevad v\u00e4\u00e4rtused peavad olema sama t\u00fc\u00fcpi. Vaikimisi on failist loetud tabel alati ujukomaarvu t\u00fc\u00fcpi ja kui tabelis on ka teksti, siis need on Numpy jaoks tundmatud, mis t\u00e4histatakse <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">nan <\/code>(not a number, tundmatu).<\/p>\n<p>Juhul kui on vaja anal\u00fc\u00fcsida tabelit, kus on erinevat t\u00fc\u00fcpi andmeid, siis on kolm v\u00f5imalust, kuidas ikkagi andmeid sobilikul kujul kasutada. Esimene v\u00f5imalus on failist lugemisel m\u00e4\u00e4rata \u00e4ra iga veeru andmet\u00fc\u00fcp.<\/p>\n<p>Olgu meil j\u00e4rgmised andmed.<\/p>\n<pre>Nimi;Vanus;Punktid\r\nTiina;11;21\r\nKalle;12;42\r\nKustav;13;23\r\nSalme;14;34\r\n\u00d6rli;11;23<\/pre>\n<p>N\u00e4eme, et esimese veeru andmed on s\u00f5ned ja teise ning kolmanda veerud andmed on t\u00e4isarvud.<\/p>\n<p>Loeme andmed, kasutades eelnevalt demonstreeritud funktsiooni <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">genfromtxt<\/code>. Erinevalt eelmisest n\u00e4itest, lisame juurde ka <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">dtype<\/code> argumendi, mille v\u00e4\u00e4rtuseks on j\u00e4rjend, kus iga element t\u00e4histab veeru t\u00fc\u00fcpi, kasutades t\u00fc\u00fcpide koode. Tekstina esitatud nimed m\u00e4\u00e4rame tabelis UNICODE s\u00f5ne t\u00fc\u00fcpi. Me ei kasuta tavalist s\u00f5ne t\u00fc\u00fcpi (str v\u00f5i &#8220;S&#8221;), sest faili kodeering on UTF-8, siis selleks, et NumPy oskaks kuvada failis olevaid nimesid \u00f5igesti, tuleb kasutada UNICODE s\u00f5ne t\u00fc\u00fcpi.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">csv = np.genfromtxt('fail.csv', delimiter=\";\", encoding = 'UTF-8', dtype=[\"U25\", \"i4\", \"i4\"], names=True)\r\n\r\nprint(csv[\"Nimi\"])\r\nprint(csv[\"Vanus\"])<\/pre>\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n  ['Tiina' 'Kalle' 'Kustav' 'Salme' '\u00d6rli']\r\n  [11 12 13 14 11]<\/pre>\n<p>Teine v\u00f5imalus on muuta kogu tabel s\u00f5ne t\u00fc\u00fcpi. Selleks m\u00e4\u00e4rame parameetri <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">dtype<\/code> v\u00e4\u00e4rtuseks <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">srt<\/code>. Samuti lisame parameetri <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">skip_header<\/code>, mille v\u00e4\u00e4rtuseks on <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">1<\/code>. Selle tulemusel ei ole tabelis enam veeru pealkirjade rida.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">csv = np.genfromtxt('fail.csv', delimiter=\";\", encoding = 'UTF-8', dtype=str, skip_header=1)\r\n\r\n# Terve tabeli v\u00e4ljastamine\r\nprint(csv)<\/pre>\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n  [['Tiina' '11' '21']\r\n   ['Kalle' '12' '42']\r\n   ['Kustav' '13' '23']\r\n   ['Salme' '14' '34']\r\n   ['\u00d6rli' '11' '23']]<\/pre>\n<p>N\u00fc\u00fcd kui soovime leida n\u00e4iteks keskmist vanust, tuleks kasutada t\u00fckeldamist ja saadud veeru t\u00fc\u00fcp teisendada ujukomaarvuks.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">teine_veerg = csv[:, 1]\r\nprint(teine_veerg)\r\n\r\nvanus = teine_veerg.astype(float)\r\nprint(\"Keskmine vanus:\", np.mean(vanus))<\/pre>\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n  ['11' '12' '13' '14' '11']\r\n  Keskmine vanus: 12.2<\/pre>\n<p>Kolmas v\u00f5imalus on kasutada Pandase moodulit (loe lisa Pandase kohta peat\u00fckist Pandas) CSV failide lugemiseks, sest sel juhul ei ole vaja muretseda, et andmed on tabelis erinevat t\u00fc\u00fcpi. See on v\u00e4ga hea viis kasutada \u00e4ra m\u00f5lema mooduli head k\u00fcljed. Esmalt tuleb aga Pandase moodul importida.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">import pandas as pd<\/pre>\n<p>Loeme andmed failist kasutades Pandase <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">read_csv<\/code> funktsiooni.<\/p>\n<div style=\"text-align: left;\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">x = pd.read_csv(\"fail.csv\", sep=\";\").values\r\nprint(x)<\/pre>\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n  [['Tiina' 11 21]\r\n   ['Kalle' 12 42]\r\n  \u00a0['Kustav' 13 23]\r\n   ['Salme' 14 34]\r\n   ['\u00d6rli' 11 23]]<\/pre>\n<p>Andmed v\u00f5ib lugeda ka veebist. Lisades juurde mooduli URLLib, millega saab faile veebist lugeda ning kasutada veebilinki, kus andmed asuvad.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">from urllib.request import urlopen\r\n\r\n# Andmed\r\nurl = 'http:\/\/kodu.ut.ee\/~merka123\/plotly\/haigusjuhtumid.csv'\r\nandmed = urlopen(url)\r\ncsv = np.genfromtxt(andmed, delimiter=\";\", names=True, encoding = 'UTF-8', dtype=['U20', 'i4', 'i4', 'i4', 'i4','i4'])<\/pre>\n<\/div>\n<h2>CSV faili salvestamine<\/h2>\n<p>NumPyga saab salvestada informatsiooni tekstifaili vaid \u00fche reaga. Selle jaoks on olemas funktsioon: <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\">np.savetxt(fail, sisu, eraldaja)<\/code>. Vaatame n\u00e4idet, kus salvestame kahem\u00f5\u00f5tmelise j\u00e4rjendi faili ning seej\u00e4rel avame selle faili ning v\u00e4ljastame sisu.<\/p>\n<p># Tekstifaili salvestamine ja selle sisu v\u00e4ljastamine<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">import numpy as np\r\n\r\n\r\n\r\n# Loome \u00fche kahem\u00f5\u00f5tmelise j\u00e4rjendi\r\n\r\nsisu = np.array([[1, 11, 21],[2, 12, 22],[3, 13, 23],[4, 14, 24]])\r\n\r\n# Salvestame sisu faili fail.csv, eraldajaks m\u00e4\u00e4rame semikooloni\r\n\r\nnp.savetxt('fail.csv', sisu, delimiter=';')\r\n\r\n\r\n\r\n# N\u00fc\u00fcd avame faili fail.txt\r\n\r\nfail = np.genfromtxt('fail.csv', delimiter=\";\", encoding = 'UTF-8')\r\n\r\n# V\u00e4ljastame sisu\u00a0\r\n\r\nprint(fail)<\/pre>\n<pre><span style=\"color: #3366ff\"><strong>&gt;&gt;&gt;<\/strong><\/span> <span style=\"color: #999999\">%Run guido.py<\/span>\r\n  [[ 1. 11. 21.]\r\n    [ 2. 12. 22.]\r\n    [ 3. 13. 23.]\r\n    [ 4. 14. 24.]]<\/pre>\n","protected":false},"author":16,"menu_order":10,"template":"","meta":{"pb_show_title":"on","pb_short_title":"","pb_subtitle":"","pb_authors":[],"pb_section_license":""},"chapter-type":[],"contributor":[],"license":[],"class_list":["post-548","chapter","type-chapter","status-publish","hentry"],"part":90,"_links":{"self":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/548","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters"}],"about":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/types\/chapter"}],"author":[{"embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/users\/16"}],"version-history":[{"count":5,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/548\/revisions"}],"predecessor-version":[{"id":743,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/548\/revisions\/743"}],"part":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/parts\/90"}],"metadata":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/548\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/media?parent=548"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapter-type?post=548"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/contributor?post=548"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/license?post=548"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}