methods

Jupyter-työkirjat kansalliskirjastoissa

Jupyter-työkirjat ovat matalan kynnyksen työkalu ohjelmointiin. Ne edistävät tutkimuksen analyysien toistettavuutta ja mahdollistavat isojen digitaalisten aineistojen käsittelyn myös kevyemmillä ohjelmointitaidoilla. Tässä tekstissä pohditaan työkirjojen mahdollisuuksia ja haasteita erityisesti kansalliskirjastojen aineistojen käytössä.

Jupyter-työkirjat (Jupyter Notebooks) mahdollistavat interaktiivisen kirjallisen ohjelmoinnin (literate programming)[1]. Kirjallisessa ohjelmoinnissa pyritään tuomaan suoritettava koodi, koodin suorituksesta syntyvät tulokset, koodin toimintaa ja käsiteltävää asiaa kuvaava teksti yhteen tiedostoon. Perinteisessä ohjelmistokehityksessä koodi ja kehitettävän työkalun ominaisuuksia ja koodin toimintaa kuvaavaa tarkempi dokumentaatio on tavallisesti eriytetty toisistaan erillisiin tiedostoihin.

Työkirjan kautta voi ajaa koodia ja havaita, mitä tuloksia koodin suorituksesta tulee (ks. Kuva 1). Koodi on muokattavissa suoraan työkirjassa, joten käyttäjä voi kokeilla, miten koodiin tehtävät muutokset vaikuttavat työkirjassa näkyviin tuloksiin [2]. Lisäksi ajetun koodin tuloksia voidaan havainnollistaa suoraan työkirjassa tiedon visualisoinnin avulla.

Jupyter-työkirjat kehitettiin alun perin mahdollistamaan tiedon analysoinnin helpompi dokumentoitavuus, toistettavuus ja jaettavuus muille käyttäjille, kuten tutkijoille [1].  Jupyter-työkirjojen avulla voidaan käyttää yli 40 ohjelmointikieltä (esimerkiksi Python, Scala, Julia, R). Työkirjoja voidaan käyttää verkon yli palvelimelle asennettuna tai omalle koneelle asennettuna.

Tämä teksti pohtii työkirjojen mahdollisuuksia ja ongelmia tutkimuskäytössä ja erityisesti työkaluna kansalliskirjastojen kokoelmien hyödyntämisessä.

Kuva 1: Näkymä DAM-hankkeessa päivitetystä Jupyter-työkirjasta.

Kuvassa 1 näkyy Digitaalinen avoin muisti (DAM) -hankkeessa päivitetty, aiemmassa hankkeessa kehitetty, tutkimuksen työkaluksi tarkoitettu Kansalliskirjaston Jupyter-työkirja. Työkirjan kautta on mahdollista ladata tekstiaineistoja rajapinnan kautta ja myös analysoida ladattua aineistoa. Kuvassa on sinisellä rajattuna yksi työkirjan sisältämistä, käsiteltävää asiaa ja alla olevan koodin toimintaa kuvaavista tekstisoluista. (markdown cell). Oranssilla on rajattu yksi työkirjan koodia sisältävistä soluista (code cell). Soluja voi työkirjassa suorittaa/ajaa yksi kerrallaan, kuten tällä työkirjan käyttöä tarkemmin esittävällä videolla näkyy.

Jupyter-työkirjojen mahdollisuudet ja haasteet tutkijoille

Työkirjat soveltuvat tekniseltä taustaltaan erilaisille käyttäjille opetus- ja tutkimustarkoituksiin. Vähemmän ohjelmointia hallitseva käyttäjä voi ajaa työkirjassa olevaa valmista koodia ja tarkastella suoraan tuloksia. Enemmän ohjelmointitaitoja hallitseva käyttäjä voi tehdä laajempia muutoksia työkirjan koodiin ja soveltaa sitä omaan tutkimukseensa [2]. Jotta Jupyter-työkirjojen käyttö onnistuu, käyttäjältä vaaditaan kuitenkin teknisiä taitoja, halua perehtyä koodin toimintaan ja ymmärrystä siitä, missä järjestyksessä työkirjassa oleva koodi tulee ajaa, jotta työkirjan suoritus etenee oikein. Jos käyttäjä haluaa lähteä tekemään enemmän muutoksia työkirjan sisältämään koodiin, hänen täytyy hallita syvällisemmin koodausta ja osata esimerkiksi asentaa ja ottaa työkirjassa käyttöön Pythonin kirjastoja [2]. Edistyneiden käyttäjien täytyy lisäksi tuntea työkirjassa hyödyntämänsä aineiston rakenne, jotta he pystyvät tekemään vaaditut muutokset työkirjan sisältämään koodin.

Peruskäyttäjät voivat halutessaan tyytyä työkirjan oletuksena tarjoamiin aineistoihin ja sen sisältämiin koodiesimerkkeihin, ja saada näin yleiskuvan käsiteltävästä aineistosta sekä koodin tarjoamista mahdollisuuksista aineistoanalyysiin. Työkirjaa hyödyntävä tutkija mahdollistaa työkirjan avulla tutkimuksen helpomman toistettavuuden, koska työkirja voidaan jakaa muille tutkijoille. Heidän on mahdollista havaita, kuinka aineistoa on tutkimuksessa käsitelty ja millaisia tuloksia siitä on saatu, tai jopa suorittaa työkirjan sisältämää koodia [3,1]. Lisäksi hyvin tehdyt työkirjat sisältävät tutkimusta ja koodin avulla suoritettua aineistoanalyysia kuvaavaa tekstiä eli dokumentaatiota kirjallisen ohjelmoinnin periaatteen mukaisesti. Hyvin toteutettuna työkirja tarjoaa yhdessä näkymässä selkeän kuvan suoritetusta tutkimuksesta ja aineistoanalyysistä.

Jupyter-työkirjojen hyödyntämiseen liittyy myös haasteita, jotka täytyy huomioida niiden toteutuksessa. Kehitettyjen työkirjojen on esimerkiksi havaittu sisältävän puutteita, jotka vaikeuttavat niiden käyttöä ja tehdyn aineistoanalyysin toistettavuutta [1]. Työkirjoissa on havaittu ongelmia koodin laadussa: työkirjojen sisältämä koodi ei ole noudattanut suositeltuja koodauskäytäntöjä ja vähäinen koodin testaaminen on voinut jättää koodiin virheitä. Tekstisisällön osalta puutteet ovat liittyneet vähäiseen koodin toimintaa kuvaavaan dokumentaatioon tai dokumentaation epäselvyyteen. Ongelmia on aiheutunut myös siitä, miten työkirjan hyödyntämät ulkopuoliset kirjastot ja aineistot on otettu käyttöön [1,4]. Työkirjoja täytyy myös ylläpitää ja päivittää erityisesti tilanteissa, joissa työkirjan hyödyntämiin ulkopuolisiin aineistolähteisiin, kuten aineistopaketteihin tai rajapintoihin, tulee muutoksia.

Havaitut haasteet ja puutteet ovat tunnettuja jo perinteisestä ohjelmistokehityksestä, mutta korostuvat Jupyter-työkirjojen kohdalla, jossa yhtenä pyrkimyksenä on tutkimuksessa suoritetun aineistoanalyysin toistettavuus ja työkirjan käytön mahdollistaminen tekniseltä taustaltaan laajalle joukolle käyttäjiä esimerkiksi opetustarkoituksiin.

Jupyter-työkirjat kansalliskirjastoissa

Kansalliskirjastot ja muut kulttuuriperintöorganisaatiot pyrkivät muuntamaan kokoelmiansa dataksi (collections as data), minkä lisäksi tutkijoiden keskuudessa on korostunut tarve tutkimuksen avoimuudelle ja toistettavuudelle [3]. Näihin pyrkimyksiin Jupyter-työkirjat tarjoavat ratkaisuja huolimatta työkirjoihin liittyvistä ongelmista.

Työkirjoissa olevat esimerkit ja niiden kautta ajettava koodi mahdollistavat monipuolisen aineistojen analyysin ja tarjoavat uusia keinoja päästä käsiksi aineistoihin esimerkiksi rajapintojen kautta. DAM-hankkeessa toteutetussa kansainvälisten library labien tarkastelussa havaittiin, että muiden työkalujen ohella useissa kansalliskirjastoissa ja niihin liittyvissä kirjastojen innovaatiotoiminnan keskittymissä eli library labeissa on myös toteutettu Jupyter-työkirjoja, joista osassa opastetaan juuri rajapintojen käyttöä.

Työkirjoja käytetään kuitenkin lähinnä vain labeissa tapahtuvassa kehitystyössä, eikä niiden käyttö ja ylläpito kuulu kirjastojen tarjoamiin peruspalveluihin [3]. Kirjaston vakituisella henkilöstöllä ei välttämättä ole vaadittavaa osaamista uusien teknisten ratkaisujen kehittämiseen [3]. Työkirjan kehittäminen voi vaatia myös laajempaa yhteistyötä esimerkiksi työkirjan kehittäjien ja työkirjassa käsiteltävän aineiston tuntevien henkilöiden välillä, jotta esimerkiksi tiedon visualisointi tulee toteutetuksi oikealla tavalla [2]. Lisäksi työkirjassa hyödynnettäviin aineistoihin mahdollisesti liittyvät tekijänoikeudelliset ongelmat voivat muodostaa haasteen työkirjan kehitykselle.

Osa kirjastoista voi myös suosia Jupyter-työkirjojen sijaan perinteisempiä menetelmiä, joiden kautta on pääsy aineistoihin ja joiden avulla esimerkiksi kirjaston tarjoamien avoimien rajapintojen käyttöä opastetaan [3]. Perinteisiä menetelmiä ovat esimerkiksi valmiit käyttöliittymät, jotka mahdollistavat aineistojen haun ja tarkastelun verkossa. Kirjastojen verkkopalveluiden kautta on myös tarjolla kirjastojen avoimien rajapintojen dokumentaatiota, datapaketteja ja erilaisia verkossa käytettäviä tai käyttäjän koneelle ladattavia työkaluja.

DAM-hankkeen selvitys osoitti, että tarjolla olevat työkirjat ovat monipuolisia. Kirjastoissa toteutetut kirjastojen avoimien rajapintojen käyttöä opastavat työkirjat keskittyvät enimmäkseen tiettyihin, keskeisimpiin rajapintoihin. Niissä käsitellään tyypillisesti JSON- ja CSV-formaateissa olevaa tietoa. Työkirjat ovat pääasiassa Python-kieltä ja hyvin kommentoituja. Niissä on hyödynnetty erilaisia valmiita Python-kirjastoja esimerkiksi rajapintojen kautta ladatun tiedon visualisoinnissa.

Työkirjojen mahdollisuudet ovat monipuolisia ja esimerkiksi kansalliskirjastoissa niitä on hyödynnetty opastamaan rajapintojen käyttöä. Itävallan kansalliskirjasto tarjoaa Pythonilla toteutetun työkirjan, jolla voi ladata vanhoja postikortteja IIIF-rajapintaa hyödyntäen ja selvittää postikorttien väripaletti. Itävallan kansalliskirjaston toteuttamassa toisessa työkirjassa opastetaan OAI-PMH rajapintojen haravointiin kehitetyn Sickle-kirjaston käyttöä ja kansalliskirjaston kokoelmien metatiedon käsittelyä. Biblioteca Virtual Miguel de Cervantesin toteuttamalla työkirjalla ladataan teokseen liittyviä metatietoja ja saadut metatiedot tallennetaan CSV-formaatissa olevaan tiedostoon, jonka jälkeen tietoja visualisoidaan. Australian Kansalliskirjastossa on toteutettu Tim Sherrattin GLAM Workbench-projektissa useita erilaisia työkirjoja, joiden avulla on esimerkiksi mahdollista suorittaa erilaisia hakuja aineistoihin, visualisoida saatuja tuloksia ja ladata kokonaisia sanomalehtien sivukuvia. Sherrattia voi pitää yhtenä keskeisimpänä kirjasto- ja arkistoaineistoja hyödyntävien Jupyter-työkirjojen kehittäjänä.

Lopuksi

Työkirjojen toimintaan ja käyttöön pääsee tutustumaan tarkemmin esimerkiksi Tim Sherratin GLAM Workbench-projektin ohjeiden avulla. Monet työkirjoja tarjoavista sivuista, kuten GLAM Workbench, hyödyntävät työkirjojen suorittamisessa Binder-palvelua, jonka kautta työkirjoja on mahdollista käyttää selaimen kautta. Työkirjojen käyttäminen ja niiden tarjoamat mahdollisuudet selviävät tarkemmin rohkeasti työkirjoihin tutustumalla.

Kirjoittajat:
Erno Liukkonen, tietojärjestelemäasiantuntija, Kansalliskirjasto
Liisa Näpärä, tietoasiantuntija, Kansalliskirjasto

Lähteitä

[1] Pimentel, J.F., Murta, L., Braganholo, V., & Freire, J. (2019). A Large-Scale Study About Quality and Reproducibility of Jupyter Notebooks. 2019 IEEE/ACM 16th International Conference on Mining Software Repositories (MSR), 507-517. https://doi.org/10.1109/MSR.2019.00077 
[2] Wigham, M., Melgar Estrada, L. & Ordelman, R.J.F. (2019) Jupyter Notebooks for Generous Archive Interfaces. 2766-2774. 2018 IEEE International Conference on Big Data (Big Data)
[3] Candela, G., Dolores Sáez, M., Escobar Esteban, M. & Marco-Such, M. (2020) Reusing digital collections from GLAM institutions. Journal of Information Science. 46:5, 1 –17, DOI: 10.1177/0165551520950246.
[4] Wang, J., Li, L., and Zeller, A., (2020) Better code, better sharing: on the need of analyzing jupyter notebooks. In Proceedings of the ACM/IEEE 42nd International Conference on Software Engineering: New Ideas and Emerging Results (ICSE-NIER ’20). Association for Computing Machinery, New York, NY, USA, 53–56. DOI:https://doi.org/10.1145/3377816.3381724   

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: