9. Visualisering med Plotly#
Kapitlet bruker følgende datafiler: oda-master-thesis.csv folkebibl-2020-kommuner.csv |
I dette kapitlet går vi igjennom hvordan visualisere aggregerte mønstre i form av grafer, og gir en inngang til enkle statistiske oversikter.
Det finnes flere Python-moduler som kan brukes for å generere diagramer (stolpediagram, kakediagram, osv.). Noen av de meste kjente er Matplotlib[1], Seaborn[2] og Bokeh[3]. Her skal vi bruke Plotly. Det er også mulig å lage og eksportere csv-filer som kan brukes i eksterne visualiseringsprogrammer. Dette er alt fra verktøy som gir tilgang til hundrevis av tilpassbare måter å visualisere data som hos RawGraphs, til verkøy som er laget for spesifikke typer nettverksanalyser og -visualiseringer, som GephiLite.
En fordel med Plotly er at det lar deg lage interaktive diagramer direkte i Jupyter Notebooks.
Innlasting av modulene og tilrettelegging#
Data som brukes med Plotly kommer fra en Pandas dataframe. Vi må derfor importere både Plotly og Pandas.
1import pandas as pd
2import plotly.express as px
3import plotly.io as pio
4pio.renderers.default = 'notebook'
Plotly Express er en del av Plotly. Det er vanlig å referere til modulen som px, på samme måte som det er vanlig å referere til Pandas som pd. De to siste linjene, 3 og 4 trenges i visse situasjoner for at plottene skal vises. Vi skal nå gå gjennom enkle diagrammer som vi kan generere med Plotly
Stolpediagram#
I forrige kapittel så vi på et eksempel av data om masteroppgaver ved OsloMet. Vi starter ved å opprette dataframen fra csv-filen i data-katalogen, og ber den vise oss hvilke kolonner datasettet består av:
df_oda = pd.read_csv('data/oda-master-thesis.csv', sep = ',')
df_oda.columns
Index(['Title', 'Identifier', 'Creators', 'Supervisors', 'Lang', 'Subjects',
'SubjectsVDP', 'Date', 'Institute', 'FacultyShort', 'FacultyLong',
'InstituteShort', 'InstituteLong', 'MasterProg', 'LangNorm'],
dtype='object')
For helt grunnleggende statistikk er det viktig å kunne telle antall forekomster av verdier i diverse kolonner.
Nedenfor bruker vi funksjonen .value_counts()
til å telle antall oppgaver hvert institutt har i datasettet.
1df_oda['InstituteShort'].value_counts()
SHA 521
SF 499
HHS 478
GFU 275
YLU 263
EST 185
AV 167
IT 133
ABI 129
BLU 102
PD 93
BE 84
FYS 78
IST 70
NVH 42
JM 23
EO 7
Name: InstituteShort, dtype: int64
Vårt første plott blir et stolpediagram med disse fordelingen av språk på tvers av alle oppavene. For å bruke dette i Plotly må vi først gjør om resultatet av tellingen (.value_counts()
) til en dataframe.
1df_temp = df_oda['LangNorm'].value_counts().to_frame()
2df_temp
LangNorm | |
---|---|
nor | 2443 |
eng | 695 |
oth | 11 |
I cellen nedenfor gjør vi om den gamle rad-indeksen (kolonnen med språkene) til en vanlig kolonne og gir deretter kolonnene nye navn. Denne eksisterer nå som en ny dataframe.
1df_temp.reset_index(inplace = True)
2
3col_map = {
4 'index' : 'Språk',
5 'LangNorm' : 'Antall'
6}
7
8df_temp.rename(columns = col_map, inplace = True)
9df_temp
Språk | Antall | |
---|---|---|
0 | nor | 2443 |
1 | eng | 695 |
2 | oth | 11 |
Den resulterende dataframen, df_temp
, kan nå brukes for å lage stolpediagrammet. I cellen nedenfor opprettes en objektvariabel fig
som tilordnes resultatet av .bar()
-funskjonen fra Plotly Express. fig
representerer et objekt av typen Figure, som har mange funksjoner (også kalt metoder). Metoden show()
som brukes til slutt er den som driver mekanismen som viser diagrammet i tegneområdet. Metoden .bar()
som produserer og returnerer fig
-objektet kan ta mange parametre. De viktigste listes nedenfor:
* dataframen i eksempelet: `df_temp`
* tittelen gitt til horisontalaksen (x) i eksempelet: 'Språk'
* tittelen gitt til vertikalaksen (y) i eksempelet: 'Antall'
1import plotly.io as pio
2pio.renderers.default = 'notebook'
3fig = px.bar(
4 df_temp,
5 x = 'Språk',
6 y = 'Antall'
7)
8
9fig.show()