Kutakuinkin 40000 henkilöä ja noin 310000 yhteyttä

Finmarc 600-kentän datan yhteyksiä  hieman lähempää Datasetin reuna-alueita

Vaski-kirjastot julkaisivat luettelotietokantansa avoimena datana menneen viikon perjantaina - oiva tilaisuus testata, selviääkö vastikään lisämuistilla terästetty (2GB->8GB) työjuhtani koko ~1.7 miljoonan tietueen datasetin pyörittelystä kerrallaan.

Kohteekseni otin FINMARC-luettelointioppaasta bongaamani 600 Kohdehenkilö-kentän, jonka määritys kuuluu: "Kenttään tallennettavat tiedot kohdehenkilöstä liittyvät teoksen sisältöön. Henkilön nimi on asiasanana.". Oppaasta mainittiin myös, että kenttään saatetaan tallentaa myös teoksen kohteena olevan suvun tjms. tietoja -- mielenkiintoista! Päätin katsoa, millaisia verkostoja tähän kenttään tallennettujen henkilöiden ja henkilöjoukkojen välille muodostuu. Nyt alkuvaiheessa tarkoituksenani ei ollut tehdä näistä verkostoista sen kummempia analyysejä, kunhan saisin datan sopivaan muotoon myöhempiä analyysejä varten ja pari nättiä kuvaa tänne verkkoon näytille :)

Harjoituksen vuoksi noudatin tavanomaisesta poikkeavaa työkulkua. Tällä kertaa pidin käsittelemäni tiedot alusta loppuun XML-muodossa. Lähtöpäässä oleva tieto näytti tältä:

<record xmlns="info:lc/xmlns/marcxchange-v1">
  <datafield tag="600" ind1="1" ind2=" ">
    <subfield code="a">Lehtonen</subfield>
    <subfield code="h">J. V.</subfield>
    <subfield code="x">juhlajulkaisu</subfield>
  </datafield>
  <datafield tag="600" ind1="1" ind2=" ">
    <subfield code="a">Sillanpää</subfield>
    <subfield code="h">F. E.</subfield>
    <subfield code="t">Nuorena nukkunut</subfield>
  </datafield>
  <datafield tag="600" ind1="1" ind2=" ">
    <subfield code="a">Lassila</subfield>
    <subfield code="h">Maiju</subfield>
    <subfield code="x">kirjallinen jäämistö</subfield>
  </datafield>
  <datafield tag="600" ind1="1" ind2=" ">
    <subfield code="a">Kivi</subfield>
    <subfield code="h">Aleksis</subfield>
    <subfield code="t">Canzio</subfield>
  </datafield>
  <datafield tag="600" ind1="1" ind2=" ">
    <subfield code="a">Richelieu</subfield>
    <subfield code="h">Armand Jean du Plessis de</subfield>
  </datafield>
</record>

..ja putken päästä, XQueryn avulla tehdyn mankeloinnin jälkeen ulos tuli tällaista, Gephi-visualisointityökalun ymmärtämää GEXF-muotoista XML:ää .

<?xml version="1.0" encoding="UTF-8"?>
<gexf xmlns="http://www.gexf.net/1.1draft" version="1.1" xmlns:viz="http://www.gexf.net/1.1draft/viz" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gexf.net/1.1draft http://www.gexf.net/1.1draft/gexf.xsd">
  <meta lastmodifieddate="2011-10-02">
    <creator>Matti Lassila</creator>
    <description>Co-occurencies of names in Vaski-database</description>
  </meta>
  <graph defaultedgetype="mixed" mode="static">
  <attributes class="node">
      <attribute id="role" title="role" type="string"/>
  </attributes>
        <nodes>
            <node id="aleksis_kivi" label="Aleksis Kivi">
                <attvalues>
                    <attvalue for="role" value="person"/>
                </attvalues>
                <viz:size xmlns:viz="http://www.gexf.net/1.1draft/viz" value="232"/>
            </node>
            <node id="maria_jotuni" label="Maria Jotuni">
                <attvalues>
                    <attvalue for="role" value="person"/>
                </attvalues>
                <viz:size xmlns:viz="http://www.gexf.net/1.1draft/viz" value="44"/>
            </node>
            <node id="anakreon" label="Anakreon">
                <attvalues>
                    <attvalue for="role" value="person"/>
                </attvalues>
                <viz:size xmlns:viz="http://www.gexf.net/1.1draft/viz" value="3"/>
            </node>
        </nodes>
        <edges>
            <edge source="minna_canth" target="aleksis_kivi"/>
            <edge source="minna_canth" target="juhani_aho"/>
            <edge source="minna_canth" target="teuvo_pakkala"/>
            <edge source="minna_canth" target="ilmari_kianto"/>
        </edges>
  </graph>
</gexf>

En vielä nykyisillä XQuery-taidoillani saanut tehtyä muunnosta yhdellä loitsulla, vaan suodattelin ja yhdistelin datasettiä aina pienempiin ja pienempiin osiin. Loppuvaiheen koostamisen ennen Gephiin siirtymistä tein editorissa, eli laitoin yhteen tiedostoon mukaan erikseen luomani henkilö-solmut ja toisessa tiedostossa olevat henkilö-solmujen väliset yhteydet.

Nyt kun datasetti on oikeassa muodossa ja siistitty, työläin työvaihe on takanapäin. Jahka aikaa on, tutkiskelen mitä datasetistä saa irti. Samalla koitan kirjoittaa lyhyesti auki, mitä työvaiheita MARCXML-muotoisten FINMARC-tietueiden mankelointi Gephin ymmärtämään muotoon vaati.