Spørsmål og svar for Dapla Lab

Hvor finner jeg dokumentasjonen til Dapla Lab tjenester der?

Her finner du Dokumentasjonen for Dapla Lab.

Dokumentasjon for tjenestene finner du i Dapla-manualen under Datatjenester/Dapla Lab tjenester.

Hvorfor får jeg feilmelding i Dapla Lab etter å ha vært borte fra datamaskinen min en stund?

I de fleste tilfeller vil dette løses seg ved at laster inn siden på nytt eller refresher siden.

Grunnen til at det skjer er at Dapla Lab bare er tilgjengelig for de som er logget på SSBs nettverk. Hvis du forlater maskinen med Dapla Lab åpnet i nettleseren over lang tid, så kan det være at du har falt ut av SSBs nettverk og Dapla Lab ikke oppdager at du er logget inn igjen.

Hva betyr det at tjenesten min er suspendert?

Tjenesteikon for Jupyter

At en tjeneste er suspendert betyr at tjenesten er satt på pause. I praksis vil det si at ressursene, f.eks. CPU og RAM, som tjenesten har reservert har blitt frigjort. Man kan starte tjenesten på nytt ved å trykke på Play-knappen i bildet til høyre, og man starter opp tjenesten på nytt med de samme ressursene. Alt som ble lagret i tjenestens lokale filsystem under /home/onyxia/work/blir også gjennopprettet, mens resten blir borte. Derfor bør alltid kode lagres under work-mappen.

Kan jeg jobbe med kildedata fra Dapla Lab?

Ja. Medlemmer av gruppen data-admins kan gi seg selv midlertidig tilgang til kildedata. Dette gjøres ved å bruke Just-in-Time Access (JIT) applikasjonen: https://jitaccess.dapla.ssb.no. Les manual-artikkelen om JIT for en veiledning.

Hvorfor kan jeg ikke jobbe med dataene til alle team jeg er med i fra tjenestene i Dapla Lab?

Mange ansatte i SSB er med i flere Dapla-team, og hvert av brukernes teammedlemskap gir ofte tilgang til data iht til formaålet for teamet. hver av teamene har tilgang til sine data og potensielt andres delt data. For å unngå for brede tilganger til data så innfører vi at en bruker må bestemme seg for hvilket team og tilgangsgruppe de skal representere før de starter arbeid med data i et programmeringsmiljø. Dette gjør at vi kan være sikker på at ingen kan koble data på tvers av team.

Hvordan jobber jeg med notebooks i VS Code?

For å jobbe med notebooks i VS Code kan du gjøre følgende:

  1. Åpne en ny Vscode-python
  2. Åpne en terminal under File/Terminal/New terminal
  3. Opprett et ssb-project som vanlig under mappen /home/onyxia/work/ ved å skrive ssb-project create <prosjektnavn>.
    • Dersom du allerede har et ssb-project, skriver du cd <prosjektnavn> etterfulgt av ssb-project build. Da blir prosjektets tilhørende pakker installert i en kernel med samme navn som prosjektet.
  4. Gå inn i mappen med cd <prosjektnavn>
  5. Installer ønskede pakker poetry add pandas, f.eks. Pandas.
  6. Velg prosjektmappen i filutforskeren ved å gå til File/Open folder/ og åpne prosjektmappen i boksen som vises.
  7. Opprett en notebook-fil og åpne den.
  8. Trykk Refresh på hele nettsiden for å få opp visningen av den nyopprettede kernels.
  9. Øverst til høyre i Notebooken kan du trykke på Select kernel og utforskeren velger du Jupyter kernels og deretter den som har samme navn som prosjektet ditt.
  10. Til slutt kan du teste at riktig Python-installasjon er valgt ved å importere pakken du akkurat installerte.

Du må kjøre en ssb-project build, som beskrevet over, hver gang en instans av Jupyter, eller VSCode blir startet. Hvis du isteden åpner en pauset (suspendert) instans, vil du kunne fortsette arbeidet fra forrige kjøring uten å måtte kjøre ssb-project build.

Hvordan kjører man en Dash-app?

Fra vscode-python tjenesten

Det fungerer best å kjøre Dash-apper i en egen fane i nettleseren. Inline-visning av figurer fungerer ikke enda.

Her er et eksempel på hvordan man lager en Dash-app i DaplaLab i en vscode tjeneste:

  1. Installer pandas og dash i et ssb-project.
  2. Opprett et python-script i prosjektet som f.eks. heter app.py.
  3. Kjør scriptet ved å kjøre følgende kommando fra terminalen: poetry run python ./app.py
  4. Deretter kommer det opp et dialog-vinduet hvor du velger Open in browser.

Her er et eksempel på script som fungerer i Vscode-python:

app.py
from dash import Dash, html, dcc, callback, Output, Input
import plotly.express as px
import pandas as pd

# Creating a sample dataset similar to the Gapminder dataset
data = {
    'country': ['Afghanistan', 'Afghanistan', 'Afghanistan', 'Brazil', 'Brazil', 'Brazil', 'China', 'China', 'China'],
    'continent': ['Asia', 'Asia', 'Asia', 'South America', 'South America', 'South America', 'Asia', 'Asia', 'Asia'],
    'year': [1952, 1977, 2007, 1952, 1977, 2007, 1952, 1977, 2007],
    'lifeExp': [28.801, 39.877, 43.828, 50.917, 59.504, 72.390, 44.000, 63.739, 72.961],
    'pop': [8425333, 12412311, 31889923, 56602560, 80461570, 190010647, 556263527, 862030000, 1318683096],
    'gdpPercap': [779.4453145, 786.11336, 974.5803384, 2108.944355, 5718.766744, 9065.800825, 400.448611, 1488.041713, 4959.114854]
}

# Creating DataFrame
df = pd.DataFrame(data)

# Creating the app
app = Dash(
    __name__,
    requests_pathname_prefix='/proxy/8050/', 
    serve_locally=True
)

app.layout = [
    html.H1(children='Title of Dash App', style={'textAlign':'center'}),
    dcc.Dropdown(df.country.unique(), 'Canada', id='dropdown-selection'),
    dcc.Graph(id='graph-content')
]

@callback(
    Output('graph-content', 'figure'),
    Input('dropdown-selection', 'value')
)
def update_graph(value):
    dff = df[df.country==value]
    return px.line(dff, x='year', y='pop')

if __name__ == '__main__':
    app.run(debug=True)

Fra jupyter tjenesten

Det fungerer best å kjøre Dash-apper i en egen fane i nettleseren, men inline-visning skal også være mulig i notebook.

Her er et eksempel på hvordan man lager en Dash-app i DaplaLab i en jupyter tjeneste:

  1. Installer pandas og dash i et ssb-project.
  2. Opprett en notebook i prosjektet som f.eks. heter app.ipynb.

Her er et eksempel på kode som fungerer i jupyter:

app.ipynb
# %%
# Notebook cell 1
from dash import Dash, html, dcc, callback, Output, Input
import plotly.express as px
import pandas as pd

# %%
# Notebook cell 2
# Creating a sample dataset similar to the Gapminder dataset
data = {
    'country': ['Afghanistan', 'Afghanistan', 'Afghanistan', 'Brazil', 'Brazil', 'Brazil', 'China', 'China', 'China'],
    'continent': ['Asia', 'Asia', 'Asia', 'South America', 'South America', 'South America', 'Asia', 'Asia', 'Asia'],
    'year': [1952, 1977, 2007, 1952, 1977, 2007, 1952, 1977, 2007],
    'lifeExp': [28.801, 39.877, 43.828, 50.917, 59.504, 72.390, 44.000, 63.739, 72.961],
    'pop': [8425333, 12412311, 31889923, 56602560, 80461570, 190010647, 556263527, 862030000, 1318683096],
    'gdpPercap': [779.4453145, 786.11336, 974.5803384, 2108.944355, 5718.766744, 9065.800825, 400.448611, 1488.041713, 4959.114854]
}

# Creating DataFrame
df = pd.DataFrame(data)

# Creating the app
port = 8050 # must be between 1024 and 9999
service_prefix = os.getenv('JUPYTERHUB_SERVICE_PREFIX', '/')
domain = os.getenv('JUPYTERHUB_HTTP_REFERER', None)

app = Dash(
    __name__,
    requests_pathname_prefix=f"{service_prefix}proxy/{port}/", 
    serve_locally=True
)

app.layout = [
    html.H1(children='Title of Dash App', style={'textAlign':'center'}),
    dcc.Dropdown(df.country.unique(), 'Canada', id='dropdown-selection'),
    dcc.Graph(id='graph-content')
]

@callback(
    Output('graph-content', 'figure'),
    Input('dropdown-selection', 'value')
)
def update_graph(value):
    dff = df[df.country==value]
    return px.line(dff, x='year', y='pop')

if __name__ == '__main__':
    # For jupyter_mode, choose between 'external' or 'inline'.
    # 'jupyterlab' should also be poosible, but doesn't seem to work...
    app.run(jupyter_mode="external", jupyter_server_url=domain, port=port)

Hvilke miljøvariabler er tilgjengelig i utviklingstjenestene?

Dette er miljøvariablene som alltid vil være tilgjengelig i Jupyterlab, Rstudio og VSCode:

Miljøvariabel Forklaring
DAPLA_ENVIRONMENT Hvilket dapla-lab miljø du kjører i f.eks PROD, TEST eller DEV
DAPLA_REGION Hvilket dapla miljø du kjører i f.eks. DAPLA_LAB eller BIP
DAPLA_USER Epostaddressen til den innloggede brukeren f.eks. obr@ssb.no
DAPLA_SERVICE Dapla tjenesten som er i bruk f.eks. JUPYTERLAB eller VS_CODE
STAT_TEMPLATE_DEFAULT_REFERENCE Hvilken versjon av ssb-project templatet som skal brukes f.eks. 1.1.8
PSEUDO_SERVICE_URL URL til pseudotjenesten for bruk til testing
STATBANK_BASE_URL URL til statistikkbanken
STATBANK_ENCRYPT_URL URL til ‘statbank-authenticator’ sitt krypteringsendepunkt