Uke 12 - matplotlib / CSV ========================= .. note:: matplotlib er et eksternt bibliotek som vi må installere først. Du kan bruke dette programmet .. literalinclude:: install.py :download:`install.py`. Matplotlib ---------- Du kan bruke matplotlib til å visualisere data. Slik som de fleste python-biblioteker, har matplotlib en veldig god dokumentasjon på nettet. Her skal vi bare se på noen enkle bruk av biblioteken. Les gjennom `Intro to pyplot `_. De bruker et annet eksternt bibliotek, numpy, i noen av eksemplene for å lage lister med verdier. Vi skal se på numpy neste uke, denne uken skal vi bare bruke vanlige lister som input. Om du er interessert kan du finne flere eksempler til bruk av matplotlib på `Sample Plots `_. Her er et enkelt eksempel på pyplot (:download:`eksempel_1.py`): .. literalinclude:: eksempel_1.py Denne koden produserer følgende plot: .. image:: eksempel_1.png Hva skjer om vi ikke har med den siste raden: ``plt.show()``? Her er et eksempel på flere grafer ved siden av hverandre (:download:`eksempel_2.py`): .. literalinclude:: eksempel_2.py Denne koden produserer følgende plot: .. image:: eksempel_2.png Jo flere datapunkter du bruker, desto høyere oppløsning får grafen din. Her er et eksempel på dette (:download:`eksempel_3.py`): .. literalinclude:: eksempel_3.py Denne koden produserer følgende plot: .. image:: eksempel_3.png Svar på følgende spørsmål om pyplot: * Hvordan lager du en plot? * Hvordan får du etiketter på x- og y-aksen i din plot? * Hvordan får du en titel høyest opp på din plot? * Hvordan bestemmer du farge og mønstre på grafen? * Hvordan får du flere grafer oppå hverandre? * Hvordan får du flere grafer ved siden av hverandre? Her er et større eksempel på bruk av matplotlib. .. toctree:: :maxdepth: 1 matplotlib/index .. _uke_12_oppgave_1: Oppgave 1 ......... Endre på koden i :download:`eksempel 1 ` slik at grafene tegnes med en annen farge og stil. Du kan velge farge og stil selv. .. note:: Filen du leverer skal hete ``uke_12_oppg_1.py`` og du skal også laste opp png-filen med plotten, med filnavnet ``uke_12_oppg_1.png``. .. _uke_12_oppgave_2: Oppgave 2 ......... Ta plottingen fra :download:`eksempel 1 ` og legg til minor ticks (undermerker) til x og y-aksen. .. note:: Filen du leverer skal hete ``uke_12_oppg_2.py`` og du skal også laste opp png-filen med plotten, med filnavnet ``uke_12_oppg_2.png``. **TIPPS:** Søk i dokumentasjonen til matplotlib for den enkleste løsning. Dette er mulig å løse med bare én kodelinje. .. _uke_12_oppgave_3: Oppgave 3 ......... Ta plottingen fra :download:`eksempel 1 ` og legg til en pil til det første interseksjon-punktet *etter* :math:`(0,0)` med kommenten: ``Første interseksjonen``. Du trenger ikke å regne ut posisjonen i programmet, du kan estimere den. Husk å søke på matplotlib-dokumentasjonen. **NB:** Filen du leverer skal hete ``uke_12_oppg_3.py`` og du skal også laste opp png-filen med plotten, med filnavnet ``uke_12_oppg_3.png``. CSV bibliotek ------------- CSV er et enkelt tekstbasert filformat for tabeller. Hver linje holder komma-separerte verdier (CSV: Comma-separated values). Vi skal bare gå gjennom et eksempel her, men "Automate"-boken har mer om CSV i `kapittel 16 `_ for de som er interessert. .. toctree:: :maxdepth: 1 csv/index CSV modulen er fortsett ganske "low-level", og mange skritt i dataanalyse må skrives for hånd. Den eksterne *pandas*-biblioteken som vi skal se litt på senere, tar bort mange av disse kjedelige oppgavene. .. _uke_12_oppgave_4: Oppgave 4 ......... I filen ``uke_12_oppg_4.py``, skriv en funsjon som heter ``read_first_col()`` og som skriver ut verdiene fra den første kolonnen i filen :download:`2019-06-01_Oslo.csv <2019-06-01_Oslo.csv>`. Eksempelkjøring: .. code-block:: text -5.141 12.7172 11431 ... .. _uke_12_oppgave_5: Oppgave 5 ......... I filen ``uke_12_oppg_5.py``, skriv en funksjon som heter ``write_to_csv()`` og som tar to argumenter: et filnavn og en liste med rader. Funksjonen skal lage en ny fil med filnavnet og skrive hver rad på en ny linje i csv-format. For eksempel, hvis vi har denne lista: .. code-block:: python rows = [ ["Come Together", 4, 20, "Lennon/McCartney"], ["Something", 3, 3, "Harrison"], ["Maxwell's Silver Hammer", 3, 27, "Lennon/McCartney"], ["Oh! Darling", 3, 26, "Lennon/McCartney"], ["Octopus's Garden", 2, 51, "Starr"], ["I want you", 7, 47, "Lennon/McCartney"], ] og kjører ``write_to_csv("Abbey_Road.csv", rows)`` skal vi lage en fil som heter ``Abbey_Road.csv`` og inneholder: .. code-block:: text Come Together,4,20,Lennon/McCartney Something,3,3,Harrison Maxwell's Silver Hammer,3,27,Lennon/McCartney Oh! Darling,3,26,Lennon/McCartney Octopus's Garden,2,51,Starr I want you,7,47,Lennon/McCartney .. _uke_12_oppgave_6: Oppgave 6 ......... Bruk datafilen fra :doc:`Handling CSV files ` a. Endre :download:`uke_12_oppg_6a.py ` og skriv ut antall bedrifter som produserer hver enkelt art (*ART*, kolonne 12), i alfabetisk rekkefølge. Eksempelkjøring: .. code-block:: text Abbor: 8 Acartia tonsa **(oppdrett): 4 Akkar: 1 Amerikansk hummer: 2 Arctic sea ice amphipod *: 1 Arktisk knurrulke: 1 ... b. Endre :download:`uke_12_oppg_6b.py ` og plott kun bedriftene som oppdrar *Laks* (*ART*, kolonne 12). Du må også levere png-filen med plotten, med filnavnet ``uke_12_oppg_6b.png``. c. Endre :download:`uke_12_oppg_6c.py ` og plott *FERSKVANN* og *SALTVANN* med ulike farger (se på *VANNMILJØ*, kolonne 20). Du må også levere png-filen med plotten, med filnavnet ``uke_12_oppg_6c.png``. d. Endre :download:`uke_12_oppg_6d.py ` og kom på et annet interessant spørsmål om datasettet og implementer det i plotten. Du må også levere png-filen med plotten, med filnavnet ``uke_12_oppg_6d.png``. **Testene i 6b, 6c og 6d sjekker bare at koden kjører, de ser ikke på outputet. Det skjer kun manuelt når vi retter.** Oppgaver -------- Oppgave 1 ......... Du finner :ref:`uke_12_oppgave_1` nedenfor eksemplene om matplotlib. Oppgave 2 ......... Du finner :ref:`uke_12_oppgave_2` nedenfor eksemplene om matplotlib. Oppgave 3 ......... Du finner :ref:`uke_12_oppgave_3` nedenfor eksemplene om matplotlib. Oppgave 4 ......... Du finner :ref:`uke_12_oppgave_4` nedenfor eksemplet om CSV-bibliteket. Oppgave 5 ......... Du finner :ref:`uke_12_oppgave_5` nedenfor eksemplet om CSV-bibliteket. Oppgave 6 ......... Du finner :ref:`uke_12_oppgave_6` nedenfor eksemplet om CSV-bibliteket.