#!/usr/bin/env python
# coding: utf-8
# Ligger også som Jupyter notebook på https://github.com/janbrus/ssb-api-python-examples
# # Hente CSV fra SSB API til Pandas
# ## Konjunkturtendensene (KT) prognoser
# ### Henter datasett [Utvalgte prognoser](https://data.ssb.no/api/v0/dataset/934516) som CSV fra SSBs API:ferdige datasett
# Importerer Python pandas for å kunne lage dataframe
import pandas as pd
# pd.read_csv() henter innholdet fra API-et og legger det i dataframe df.
# De norske datasettene her er semikolonseparert og med komma som desimaltegn.
# CSV er ikke UTF-8, så vi må angi parameteren encoding for å få æøå riktig.
df = pd.read_csv("https://data.ssb.no/api/v0/dataset/934516.csv?lang=no", sep=';', decimal=',', encoding = "ISO-8859-1" )
# Sjekker at datatypen Pandas dataframe
df.info()
# 12 første linjer av datasettet
df.head(12)
# Evt. enkel endring til datoformat. Ikke strengt nødvendig. Ta vekk kommentaren når du skjønner hva som skjer.
#df['år'] = pd.to_datetime(df['år'], format='%Y', errors='coerce')
# Lager linjediagrammer med Pandas plot. Vi angir x og y aksen og grupperer med .groupby
df.groupby('statistikkvariabel').plot(x='år',
y='12880: Makroøkonomiske hovedstørrelser. Regnskap og prognoser, etter år og statistikkvariabel', figsize=(12, 6), color ='g')
# For å få alle linjene i en figur i Pandas plot er det best å pivotere tabellen. Oppretter derfor en ny dataframe df2, med år som index.
df2 = df.pivot(index='år', columns='statistikkvariabel',
values='12880: Makroøkonomiske hovedstørrelser. Regnskap og prognoser, etter år og statistikkvariabel')
# df2 er 'wide' i stedet for 'long'
df2
# Pandas plot av df2 med størrelse, datamarkør og tittel som parametre
df2.plot(figsize=(16, 10), marker='v', title='Konjunkturtendensene, prognoser, 4 år')
# ### Plot med [Plotly](https://plotly.com/python/). Her bruker jeg det enklere Plotly express.
#
import plotly.express as px # px her er standard angivelse for Plotly express. Har ikke noe å gjøre med Statistikkbank px
fig = px.line(df, x='år', y='12880: Makroøkonomiske hovedstørrelser. Regnskap og prognoser, etter år og statistikkvariabel')
# Merk at her er input den opprinnelige df, som er 'long'. Det blir ikke bra, uten gruppering.
fig.show()
# Plotly Express har argumentet 'line_group', for gruppering. Her legger jeg også på tittel og tekst til y-aksen.
px.line(df, x=('år'), y='12880: Makroøkonomiske hovedstørrelser. Regnskap og prognoser, etter år og statistikkvariabel',
color='statistikkvariabel',
line_group='statistikkvariabel',
title='Konjunkturtendensene, utvalgte prognoser 4 år',
labels={'12880: Makroøkonomiske hovedstørrelser. Regnskap og prognoser, etter år og statistikkvariabel':'Endring / Nivå'})
# ### Med Plotly Express > 4.8
# Etter vedrsjon versjon 4.8, 26. mai 2020 støttes nå wide'.
# Nå kan vi lage samme plot med df2 som er 'wide'
df2.head(2)
fig2 = px.line(df2, x=df2.index, y=df2.columns, line_group='statistikkvariabel')
fig2.show()
# Det er nå mulig å sette plotly som Pandas .plot, istedet for Matplotlib
pd.options.plotting.backend = "plotly"
# Da fungerer Plotly plot av df2, uten parametre
df2.plot()
# med Plotly template
df2.plot.area(facet_col='statistikkvariabel', facet_col_wrap=2, template='none', )
# Et tips til slutt: Prøv å lage ditt eget datasett i stedet. Du kan også benytte det rikere JSON-stat og biblioteket pyjstat framfor CSV.