Organisera data från webben

På webben vimlar det av data som det kanske skulle gå att göra journalistik av om man bara kunde få lite ordning på den. Vissa myndigheter presenterar datan i ett format, andra i ett annat. Ibland står saker prydligt i tabeller – andra gånger är den betydligt svårare att få något grepp om.

Det är sådant här datajournalister ägnar sig åt. De samlar in stora datamängder, och försöker sedan presentera det snyggt så att det blir begripligt och lätt att ta del av. De gör säkert en massa andra bra saker också. Magi för oss oinvigda.

Men att testa lite är ju inte förbjudet för en lekman. I dagens instruktionsvideo ger jag mig på att försöka få in allsvenskans tabell från Text-TV in i ett kalkylblad. Det är en liten datamängd, vilket ger överblick. Det är oklart vad man ska göra med den – men då skymmer ju inte det sikten för det vi ska lära oss, nämligen det tekniska. Sedan får idéerna växa fram på redaktionerna. Eller i kommentarerna här nedanför.

Ny svensk resurs om datajournalistik

Har du gått på Gräv och lyssnat på Helena Bengtsson då hon pratat sig varm om Excel och blivit lite inspirerad? Eller hört talas om datajournalistik men inte vetat riktigt hur du ska komma igång?

Sedan några dagar tillbaka finns fullspäckade resurssajten Datajournalistik.se med tips, länkar och inspiration för den som vill närma sig ämnet.

Sajten Datajournalistik.se
Sajten Datajournalistik.se

Det är frilansjournalisten Jens Finnäs som ligger bakom sidan. Förutom att vara en hejare på datajournalistik är han också en av dem som är flitigast då det gäller att kommentera på Jornalisttips.se.

I andra avsnittet av den nystartade svenska journalistikpoddcasten som jag tipsade om häromdagen kan den som vill lyssna på Jens Finnäs syn på datajournalistik och redaktionernas oförmåga att använda webben kreativt.

För lite trial and error – eller är det tillräckligt med error?

Eftersom jag körde lite programmeringspepp här förra veckan, kände jag att jag ville dela med mig av ett intressant blogginlägg där författaren reflekterar över hur man lär ut programmering till just journalister.

De av hans elever som misslyckades kunde han dela upp i två kategorier – generalisterna som aldrig kom till skott då det gällde att tillämpa kunskaperna, och specialisterna som klarade av att göra exakt det de fått lära sig, men som sedan inte hade förmågan att komma vidare och tillämpa kunskaperna på nya situationer.

Det där med att verkligen lära in en massa saker som man sedan inte vet vad man ska ha det till beskriver han så fint: ”It was like learning the structure of the entire French language just so they could go to the corner shop and ask for a loaf of bread.”

Han för ett resonemang om att journalisterna är mer vana vid att hämta statiska kunskaper från böcker, medan programmerarna lever i en kultur där man hämtar lite grand ur läroböcker, men också dokumentation – och mycket trial and error.

Och dessa programmerare som ska lära ut programmeringen till journalisterna inser inte att de inte delar den kulturen.

Författaren började fundera på detta i samband med att han började författa läroboken Scraping for Journalists – en e-bok som faktiskt fortfarande skrivs och vars nya upplagor levereras via e-post så snart de är färdiga.

Vad tänker du om journalisters sätt att lära? Vi kanske inte har råd med så mycket error i trial and error för att det ska gå att tillämpa?

Programmeringsåret 2012

Hemsidan för Code Year 2012 med möjlighet till registrering. Än är det inte för sent.
Code Year 2012

Jag minns fortfarande den där krönikan i Journalisten, fast då jag nu googlar efter den är det två år sedan. ”Journalister måste bli programmerare” var rubriken. Det lät lite läskigt, men mest spännande!

Nu finns ju alla möjligheter för den som vill försöka. Just nu ligger jag lite efter, men eftersom jag deltar i Code Year 2012 får jag hela tiden påminnelser om nya lektioner och övningar. Steg för steg blir man allt bättre. Det är klurigt – men kul!

Kanske borde du också testa? Nog för att det här är en reporterblogg, men lite allmänbildning skadar ju inte.

Visst är det märkligt att allmänbildning alltid handlar om geografi och statsvetenskap, men aldrig om ordinära linjära differentialekvationer med konstanta koefficienter och polynom i högerledet, eller om HTML5?

Ta ditt ansvar här. Det är inte för sent.

Verktyget som skriver på kommando

Med AutoHotkey kan man automatisera mycket av det dagliga arbetet.
Med AutoHotkey kan man automatisera mycket av det dagliga arbetet.

Har du någon gång haft känslan av att du skriver samma saker om och om igen? Eller över huvud taget gör saker som borde gå att göra på ett enklare och effektivare sätt?

En del saker är onödigt krångliga, men datorer är ju som gjorda för att göra just trist, repetitivt arbete – som att skriva in diverse koder för namnskyltar (har du sett någon som blivit felaktig den senaste tiden?) eller underteckna ett e-brev. En del saker brukar finnas inbyggda i applikationerna (du har väl fixat din e-brevssignatur?), men annat kan vara praktiskt att lösa på systemnivå så att man kommer åt det överallt. ”Med vänlig hälsning” skriver du kanske i såväl Word som i Notes?

Det är här programmet AutoHotkey kommer in i bilden. Med det kan man koppla tangentbordskombinationer eller fraser till olika händelser som man vill att ska utföras. Till exempel kan man välja att ”mvh” automatiskt ska utvidgas till hela ens signatur. Eller att webbläsaren ska öppna Facebook då man klickar på Windows-tangenten och F.

Då du installerat programmet dyker det upp som ett stort H på grön botten nere vid klockan högerhörnet i Windows. Genom att högerklicka där får man upp en meny med olika alternativ.

Välj "Edit This Script" i högerklicksmenyn för att redigera skriptet.
Välj ”Edit This Script” i högerklicksmenyn för att redigera skriptet.

Med hjälp av ”Edit This Script” får man upp filen där man ställer in hur man vill att programmet ska uppföra sig. Filen i sig innehåller exempel som är lätta att förstå, och det finns också en tutorial på programmets hemsida. Då man redigerat klart och sparat måste man se till att AutoHotkey laddar in filen igen för att ändringarna ska börja gälla.

Välj sedan "Reload This Script" för att de ändringar du gjort ska verkställas.
Välj sedan ”Reload This Script” för att de ändringar du gjort ska verkställas.

Det gör man med hjälp av kommandot ”Reload This Script” som också återfinns i högerklicksmenyn.

För att undersöka om det var möjligt att automatisera simpel journalistik gjorde jag ett utkast till ett skript som skapar telegram eller notiser om trafikolyckor. Man får ett antal frågor och skriptet genererar utifrån svaren en ful och yxig text som möjligen skulle kunna göra en ekonomichef i spartider lite lycklig, men ingen annan.

Svara på enkla frågor om olyckan och få en telegramtext som ett brev på posten.
Svara på enkla frågor om olyckan och få en telegramtext som ett brev på posten.

Genom att svara på ett antal frågor av typen ovan får man till slut ett telegram:

En trafikolycka inträffade på riksväg 19 vid halv fyra-tiden. 2 personer dog och 5 skadades i olyckan. Polis har skickats till platsen. 2 ambulanser finns på plats för att hjälpa de skadade. 3 personer har skickats till sjukhus för undersökning.

Skriptet följer här nedanför. ”#o::” betyder att jag kopplat det till Windows-tangenten + o (som i olycka), så att man snabbt kan få igång det då olyckan är framme.

#o::
InputBox, tid, När inträffade olyckan?
InputBox, vag, På vilken väg inträffade olyckan?
Send En trafikolycka inträffade på %vag% vid %tid%-tiden.{Space} 
MsgBox, 4, ,Finns det uppgifter om antalet skadade eller döda?
IfMsgBox, No
 Send Det finns ännu inga uppgifter om läget för de inblandade.{Space}
else
{
 InputBox, antalSkadade, Hur många skadades?
 InputBox, antalDoda, Hur många dog?
 Send %antalDoda% personer dog och %antalSkadade% skadades i olyckan.{Space}
}
MsgBox, 4,, Har polis skickats till platsen?
IfMsgBox, Yes
 Send Polis har skickats till platsen.{Space}
MsgBox, 4,, Har ambulans skickats till platsen?
IfMsgBox, Yes
{
 InputBox, ambulanser, Hur många ambulanser har skickats?
 Send %ambulanser% ambulanser finns på plats för att hjälpa de skadade.{Space}
 InputBox, tillSjukhus, Hur många har skickats till sjukhus?
 Send %tillSjukhus% personer har skickats till sjukhus för undersökning.{Space}
}

Hur ser ditt dröm-journalist-skript i AutoHotkey ut? Vad gör det? Låt oss veta i kommentarerna.

Nördvägen till en e-postenkät

Listan över presskontakter innehåller inga utskrivna e-postadresser utan bara en länk att klicka på.
Adresslista över presskontakter

Ett gäng presskontakter över hela landet skulle kontaktas för en e-postenkät, men det tog förstås emot lite för reportern då de 119 personerna stod listade på ett sätt som säkert är begåvat om det är en av dem man vill nå.

Vill man däremot mejla allihop så blir det ganska mycket handpåläggning – och förmodligen musarm – innan man tagit sig igenom hela listan. Det innebär att högerklicka på varje länk, spara e-postadressen i Urklipp, växla till e-postprogrammet, klistra in adressen i adressfältet, lägga till ett kommatecken och därefter växla tillbaka till webbläsaren igen. Och sedan upprepa den processen 119 gånger.

Och nog för att envishet är en journalistisk dygd, men det finns säkert bättre sätt att använda den på.

Använd i stället webbläsarens funktion för att visa den rena html-koden för sidan. I exempelvis Google Chrome högerklickar man och väljer ”Visa sidkälla”.

Kommandot "Visa sidkälla" återfinns i Chrome i högerklicksmenyn.
Menyvalet ”Visa sidkälla” i Google Chrome

I html-filen finns nu e-postadresserna i länktaggarna.

E-postadressen syns i html-taggarna i sidans källkod. Adressen är maskad.
E-postadresserna framgår av html-koden

Men det är fortfarande alldeles för mycket jobb att gå igenom hela koden och kopiera adresserna därifrån. I det här fallet var också sökresultatet uppdelat på sex olika undersidor, för att alla de 119 namnen inte skulle listas på en gång.

Vi behöver html-koden från de sex olika delsidorna. Det är fortfarande handpåläggning – men 6 (sidor) är betydligt mindre än 119 (namn). Kopiera alltså html-koden för de sex delsidorna och klistra in alla i ett textdokument (till exempel i Anteckningar).

Därefter gäller det att lyckas extrahera själva e-postadresserna ur detta sammelsurium av information. Det perfekta verktyget för sådant arbete är reguljära uttryck. Man kan säga att det är ett språk som man använder för att beskriva texter. Reguljära uttryck finns inbyggda i många programmeringsspråk och flera textredigerare. I vårt fall använder vi programmet RegexBuddy som är specialgjort för arbete med reguljära uttryck. Det kostar drygt 250 kronor och finns inte i någon gratis testversion. Däremot skriver de att man får pengarna tillbaka om man inte är nöjd.

Det finns tre viktiga avdelningar i RegexBuddys gränssnitt som du behöver ha koll på: där du skriver in ditt reguljära uttryck, där du klistrar in din text och där resultatet presenteras.
Gränssnittet i RegexBuddy

Klistra in koden i rätt ruta – så kan vi sätta igång och skriva in vårt reguljära uttryck! Det låter kanske avskräckande, men är inte så krångligt som det låter. Eftersom en e-postadress är något man ofta behöver känna igen i olika sammanhang, så finns ett sådant reguljärt uttryck redan färdigt i programmets bibliotek. I rutan nere till vänster finns fliken ”Library”. Scrolla ner i listan så hittar du e-postadresserna. Jag valde en som hette ”Email address: RFC 2822 (specific TLDs)”. Dubbelklickar du på den, så dyker den upp i rätt ruta, och nere till höger ser du att e-postadresserna valts ut. I rutan där du klistrat in html-koden är e-postadresserna markerade särskilt.

Sökresultaten listas i rutan längst ner till höger - dessvärre kommer varje adress två gånger.
Sökresultaten listas dubbelt

Orsaken hittar vi i html-koden: varje e-postadress listas faktiskt två gånger: en gång som värde åt ett title-attribut och en gång som värde åt href-attributet. Om vi kollar lite noggrannare ser vi att adressen i det senare fallet alltid föregås av ”mailto:”. Knepet är alltså att till exempel se till att man bara får en träff de gånger då e-postadressen föregås av den texten.

Vi kan inte bara skriva in ”mailto:” före uttrycket för e-postadressen – i så fall skulle ju ”mailto:” ingå i sökresultatet, och poängen från början var ju att få adressen så ren som möjligt. Knepet är i stället att skriva in ”(?<=mailto:)” (utan citattecken!) allra först i det reguljära uttrycket. Det betyder att vi vill titta tillbaka och se om uttrycket efter ”?<=” finns före vår träff – och bara då vill vi ha sökresultatet. Frågetecknet indikerar att ett särskilt kommando följer, ”<” kan ses som en vänsterpil som pekar tillbaka, och likhetstecknet anger att det ska vara lika. (Vill vi i stället titta framåt, och kolla så att något står efter vår träff, släpper vi pilen och får i stället ”?=”.) Nu får vi bara enkla träffar.

Nu kan vi bara kopiera e-postadresserna från listan och klistra in dem där vi vill ha dem. Vill vi ha en lista där alla adresserna kommer på en rad och är separerade med kommatecken, använder vi bara en vanlig sök- och ersätt-funktion. Vi ska då ersätta tecknet för ny rad med ett kommatecken. Men hur ”skriver man in” ett ”Enter” i sökrutan i Anteckningar? Programmet är lite för simpelt för det, men i gratisprogrammet Notepad++ kan man använda särskilda koder för ändamålet. ”\r\n” är koden för ny rad i textfiler i Windows. Skriv in den, och välj att ersätta med kommatecken. Glöm inte att välja något av de utökade söklägena.

Sök- och ersätt-funktionen i Notepad++ klarar vissa koder. "\r\n" betyder ny rad i textfiler i Windows.
Sök- och ersätt-funktionen i Notepad++ klarar vissa koder

Klart! Om du känner till något bra gratisalternativ till RegexBuddy får du gärna höra av dig i kommentarerna.

Uppdatering: @fluffis rekommenderar programmet The Regex Coach och Janne rekommenderar Regexpal.