53 Jooniste loomine seeriaid kasutades
Sageli on vaja andmeid ka visuaalselt esitada, et saada parem ülevaade. Selleks saab kasutada erinevat tüüpi diagramme, näiteks tulpdiagramm. Diagrammi tüübi valik oleneb sellest, mis tüüpi on andmed ja mis on visualiseerimise eesmärk. Näiteks on sobilik kasutada joondiagrammi, kui eesmärgiks on näidata mingi tunnuse muutust.
Python pakub mitmeid mooduleid andmete visualiseerimiseks. Meie tutvustame üht kõige populaarsemat moodulit Matplotlib ja moodulit Plotly, millega on võimalik teha interaktiivseid jooniseid.
Matplotlib
Pandase mooduli on integreeritud Matplotlib mooduliga. Selle tulemusel on jooniseid lihtsam koostada, sest Pandas oskab näiteks joonise teljed automaatselt tuvastada ja eraldi ei pea kasutama selleks Matplotlib mooduli vastavat funktsiooni. Selleks, et saaks jooniseid luua, tuleb Matplotlib moodul installeerida ja importida.
import matplotlib.pyplot as plt
! plt on levinud lühend Matplotlib kasutamiseks.
Teeme lihtsa joondiagrammi, millel on kaks telge (x-telg ja y-telg). Joondiagramme kasutatakse sageli selleks, et näidata muutust ajas. Teeme joondiagrammi olmejäätmete tekkimise kohta aastast 2010 kuni 2018 (allikas: Statistikaamet). Meil on andmed olmejäätmete tekkimisest elaniku kohta kilogrammides seerias jäätmed
.
import pandas as pd import matplotlib.pyplot as plt jäätmed = pd.Series({2010: 305, 2011: 301, 2012: 280, 2013: 293, 2014: 357, 2015: 359, 2016: 376, 2017: 390, 2018: 405}) # x- ja y- telje andmed määratakse automaatselt # x-telje väärtused on vaikimisi sildid # y- teljele lisatakse väärtused jäätmed.plot.line() # Joonise kuvamiseks peab kasutama show() Matplotlib moodulist plt.show()
Joonise saab lihtsalt salvestada pildina (PNG), kui klõpsata salvestamine nupul .
Jooniste eesmärk on kuvada kontsentreeritult ja arusaadavalt infot. Eelneval joonisel on puudu joonise pealkiri ja telgede nimed. Ilma nendeta ei ole aru saada, mida täpsemalt joonisel kuvatakse. Lisame joonisele pealkirja ja ka telgedele nimed. Selleks saab line
funktsiooni väljakutsel lisada parameetritele xlabel
(x-telje pealkiri), ylabel
(y-telje pealkiri) ja title
(joonise pealkiri) sobilikud väärtused.
import pandas as pd import matplotlib.pyplot as plt jäätmed = pd.Series({2010: 305, 2011: 301, 2012: 280, 2013: 293, 2014: 357, 2015: 359, 2016: 376, 2017: 390, 2018: 405}) jäätmed.plot.line(xlabel="Aastad", ylabel="Olmejäätmete tekkimine elaniku kohta, kg", title="Olmejäätmete tekkimine 2010-2018") plt.show()
Matplotlib mooduliga on võimalik teha erinevat tüüpi diagramme, näiteks tulp- ja sektordiagramme, aga ka histogramme ja hajuvusdiagramme. Lisaks on palju võimalusi joonise vormindamiseks ja stiili muutmiseks.
Järgnevalt teeme tulpdiagrammi. Tulpdiagramme kasutatakse peamiselt siis, kui soovitakse võrrelda erinevaid gruppe, näiteks mehi ja naisi, riike jne. Sageli on andmed sel juhul diskreetsed (täisarvud), näiteks igasugused loenduse andmed. Järgmises näites kasutame Eurostati andmeid interneti kasutuse kohta aastast 2019. Seeria loome aga NumPy järjendeid kasutades.
import matplotlib.pyplot as plt import numpy as np import pandas as pd internet = np.array([99, 98, 98, 97, 95, 90, 86, 82]) riigid = np.array(["Island", "Norra", "Rootsi", "Taani", "Soome", "Eesti", "Läti", "Leedu"]) internet_riigid = pd.Series(internet, index=riigid) # Loome tulpdiagrammi, mille x-teljel on riigid ja y-teljel interneti kasutus # Muudame tulpade värve, kasutada saab HEX värvi koode või värvi nimesid, nt "red". # Iga tulba saab eraldi värvida --> järjend värvidega värvid = ["#ffcc99", "#ffccff", "#99ccff", "#99e699", "#cc99ff", "#ff5050", "#0066ff", "#33cc33"] internet_riigid.plot.bar(xlabel="Riik", ylabel="Inimeste osakaal kogu rahvastikust, %", title="Interneti kasutamine Balti- ja Põhjamaades 2019", color=värvid) # Joonise kuvamiseks peab kindlasti kasutama show käsku plt.show()
Plotly
Lisaks Matplotlibile on veel mitmeid Pythoni mooduleid, millega andmeid visualiseerida. Mõned neist pakuvad ka interaktiivsete jooniste tegemist. Uurime meiegi üht neist. Plotly on Pythoni moodul, millega saab teha interaktiivseid jooniseid. Näiteks on Plotly mooduli võimalusi kasutanud koroonaviiruse analüüsivahendites, mis on loodud Tartu Ülikooli teadlaste poolt. Rohkem võib uurida koroona.ut.ee.
Kirjutame programmi, mis eelnenud näiteandmetel teeb interaktiivse joondiagrammi.
Esmalt peame installeerima ja importima ka Plotly mooduli.
Järgnevalt kasutame samu andmeid olmejäätmete kohta.
import pandas as pd import plotly.graph_objects as go jäätmed = pd.Series({2010: 305, 2011: 301, 2012: 280, 2013: 293, 2014: 357, 2015: 359, 2016: 376, 2017: 390, 2018: 405}) # Lisame x- ja y-telje andmed fig = go.Figure(data=go.Scatter(x=jäätmed.index, y=jäätmed.values)) # Joonise kuvamiseks peab show käsku kasutama fig.show()
🌌 Joonise näide (klõpsa lingil): http://kodu.ut.ee/~merka123/plotly/plotly1.html |
Lisame juurde ka pealkirjad telgedele ja joonisele.
import pandas as pd import plotly.graph_objects as go jäätmed = pd.Series({2010: 305, 2011: 301, 2012: 280, 2013: 293, 2014: 357, 2015: 359, 2016: 376, 2017: 390, 2018: 405}) # Lisame x- ja y-telje andmed fig = go.Figure(data=go.Scatter(x=jäätmed.index, y=jäätmed.values)) # Lisame juurde käsu update_layout, mis lisab joonisele # pealkirja --> parameeter title # x-telje pealkirja --> parameeter xaxis_title # y-telje pealkirja --> parameeter yaxis_title fig.update_layout( title="Olmejäätmete tekkimine 2010-2018", xaxis_title="Aasta", yaxis_title="Olmejäätmete tekkimine elaniku kohta, kg" ) fig.show()
🌌 Joonise näide (klõpsa lingil): http://kodu.ut.ee/~merka123/plotly/plotly2.html |
Ka Plotlyga on võimalik teha erinevat tüüpi diagramme ja neid ka vastavalt oma äranägemise järgi kujundada. Järgnevalt teeme lihtsa sektordiagrammi, mida kasutatakse peamiselt osakaalu esitamiseks protsentides, näiteks kui palju metsa uuendatakse igas maakonnas kogu metsa uuendamisest (allikas: Statistikaamet). Samuti kasutame joonisel juba defineeritud värvipalette, mida pakub nii Plotly kui ka Matplotlib moodul. Värvipalette on mugav kasutada siis, kui ei oska ise värve välja valida. Värvipalettide kohta loe: https://plotly.com/python/builtin-colorscales/. Pandase seeria loome NumPy järjendeid kasutades (tegelikult võib NumPy järjendeid kasutada ka otse jooniste tegemiseks, ilma seeriaks loomiseta).
import pandas as pd import numpy as np import plotly.express as px maakonnad = np.array(["Hiiu maakond", "Viljandi maakond", "Pärnu maakond", "Jõgeva maakond", "Valga maakond", "Saare maakond", "Lääne maakond", "Rapla maakond", "Harju maakond", "Põlva maakond", "Võru maakond", "Ida-Viru maakond", "Lääne-Viru maakond", "Järva maakond", "Tartu maakond"]) # Metsa uuendamine hektarites metsa_uuendamine = ([282.79, 685.84, 1153.38, 789.95, 581.72, 168.31, 255.63, 645.86, 641.09, 647.64, 622.19, 1284.23, 781.41, 614.54, 676.34]) seeria = pd.Series(metsa_uuendamine, index=maakonnad) # Kasutame värvipalettidest Sequental palettide hulka kuuluvat Viridist --> # parameeter color_discrete_sequence fig = px.pie(names=seeria.index, values=seeria.values, color_discrete_sequence=px.colors.sequential.Viridis) fig.update_layout( title="Metsa uuendamine 2019" ) fig.show()
🌌 Joonise näide (klõpsa lingil): http://kodu.ut.ee/~merka123/plotly/plotly5.html |