Så gjordes kartan över integration i Sverige
Ni som läst senaste numret av Fokus, där vi rankade alla Sveriges kommuner efter hur bra de är på integration, kunde se en gul-röd sverigekarta bland tabellerna. Varje kommun på kartan har en unik färgnyans som illustrerar dess placering i rankningen.
Man skulle kunna tro att det är veckor av mödosamt handarbete som ligger bakom kartan, men i själva verket tog det sammanlagt 20 minuter.
Jag ska nu berätta hur det gjordes, och hur du kan använda samma tekniker för att göra egna datavisualiseringar med Applescript och Adobe Illustrator. Jag använde Illustrator cs3, men det borde gå lika bra med cs4 och cs5.
Vi kan börja med att hämta själva sverigekartan. På svenska Wikipedia finns en utmärkt cc-licensierad karta i SVG-format skapad av Lokal_Profil.
Öppna filen i Illustrator. I lagerpaletten kan man se att varje objekt är namngivet med en fyrsiffrig kod. Dessa är officiella kommunkoder från statistiska centralbyrån.
För att ta redan på vilken kod som är vilken kommun behöver vi SCBs lista som finns här.
Till vår karta behöver vi två datakolumner: kommunkoderna och kommunernas plats i rankningen. Så nu är det dags att öppna allas favoritprogram Excel (eller dess lite långsammare lillebror Google Docs).
Sortera datan så att det ser ut typ såhär:
Och var noga med att all data är rätt, annars kommer ju kartan att bli helt missvisande.
Nästa steg är att formatera om datan till applescript-variabler. Vi kommer att behöva två variabler, en för kommunkoderna och en för rankningen. Det finns många sätt att göra detta. Snabbast är nog att copypejsta kolumnen till en texteditor och sedan söka och ersätta radbrytningarna mot citat- och kommatecken så att du går från detta:
Till detta:
Observera att du behöver skriva till första och sista citattecknet manuellt ifall du gör såhär. Observera även att kommunkoderna behöver vara inom citattecken eftersom de ska korrespondera med namnen på SVG-filens objekt, som är textsträngar.
Rankningsvariabeln ska däremot sätta färg-värden i RGB. Dessa är inte textsträngar, utan heltal mellan 0 och 255. Således ska rankningsvariabelns värden inte vara inom citattecken.
När du är klar ska din kommunkodsvariabel se ut såhär (parantes och punkter betyder att det är en massa fler värden där, inta att du faktiskt ska skriva så i variabeln):
{"1440", "1489", (...), "2518"}
Och rankningsvariabeln såhär:
{231, 245, (...), 12}
Med all data i ordning är det dags att börja skripta, förslagsvis med OS X egna verktyg Skriptredigeraren. I sin helhet ser skriptet ut såhär. Studera det en stund.
-- Kommunernas banor i svg-filen är namngivna med dessa koder. Se http://www.scb.se/Pages/List____257281.aspx
set kommunKoder to {"1440", "1489", "0764", "0604", "1984", "2506", "2505", "1784", "1882", "2084", "1460", "2326", "2403", "1260", "2582", "1443", "2183", "0885", "2081", "1490", "0127", "0560", "1272", "2305", "1231", "1278", "1438", "0162", "1862", "2425", "1730", "0125", "0686", "0862", "0381", "0484", "1285", "1445", "1982", "1382", "1499", "2080", "1782", "0562", "0482", "1763", "1439", "2026", "0662", "0461", "0617", "0980", "1764", "1444", "1447", "2523", "2180", "1480", "1471", "0643", "1783", "1861", "1961", "1380", "1761", "0136", "2583", "0331", "2083", "1283", "1466", "1497", "2104", "0126", "2184", "0860", "1315", "0305", "1863", "2361", "2280", "1401", "1293", "1284", "0821", "1266", "1267", "2510", "0123", "0680", "2514", "0880", "1446", "1082", "1883", "1080", "1780", "0483", "1715", "0513", "2584", "1276", "0330", "2282", "1290", "1781", "2309", "1881", "1384", "1960", "1482", "1261", "1983", "1381", "1282", "1860", "1814", "2029", "1441", "0761", "0186", "1494", "1462", "1885", "0580", "0781", "2161", "1864", "1262", "2085", "2580", "1281", "2481", "1484", "1280", "2023", "2418", "1493", "1463", "0767", "1461", "0586", "2062", "0583", "0642", "1430", "1762", "1481", "0861", "0840", "0182", "1884", "1962", "2132", "2401", "0581", "0188", "2417", "0881", "0140", "0480", "0192", "0682", "2101", "1060", "2034", "1421", "1273", "0882", "2121", "0481", "2521", "1402", "1275", "2581", "2303", "2409", "1081", "2031", "1981", "0128", "2181", "0191", "1291", "1265", "1495", "2482", "1904", "1264", "1496", "2061", "2283", "0163", "0184", "2422", "1427", "1230", "1415", "0180", "1760", "2421", "0486", "1486", "2313", "0183", "2281", "1766", "1907", "1214", "1263", "1465", "1785", "2082", "0684", "2182", "0582", "0181", "1083", "1435", "1472", "1498", "0360", "2262", "0763", "1419", "1270", "1737", "0834", "1452", "0687", "1287", "1488", "0488", "0138", "0160", "1473", "1485", "1491", "2480", "0114", "0139", "0380", "0760", "0584", "0665", "0563", "0115", "2021", "1470", "1383", "0187", "1233", "0685", "2462", "0884", "2404", "0428", "1442", "1487", "2460", "0120", "0683", "0883", "1980", "0780", "0512", "1286", "1492", "2260", "2321", "1765", "2463", "1277", "0561", "0765", "2039", "0319", "2560", "1292", "1407", "0509", "1880", "1257", "2284", "2380", "0117", "0382", "1256", "2513", "2518"}
-- Kommunernas placering i rankningen
set kommunRank to {231, 245, 205, 153, 262, 127, 213, 228, 287, 62, 30, 260, 34, 248, 48, 73, 230, 274, 161, 70, 89, 42, 237, 188, 47, 168, 149, 170, 121, 178, 193, 49, 74, 93, 217, 181, 51, 288, 10, 197, 102, 84, 143, 105, 9, 265, 151, 96, 158, 243, 133, 82, 271, 131, 224, 17, 154, 257, 244, 52, 186, 24, 53, 187, 277, 163, 212, 103, 76, 251, 242, 164, 27, 90, 117, 33, 111, 26, 100, 129, 123, 59, 85, 211, 20, 226, 194, 21, 80, 169, 240, 201, 290, 278, 171, 32, 159, 118, 221, 35, 18, 275, 4, 258, 218, 65, 45, 146, 115, 31, 182, 281, 72, 227, 206, 128, 282, 162, 79, 141, 60, 279, 264, 28, 91, 234, 71, 223, 126, 6, 86, 183, 147, 92, 64, 155, 88, 222, 191, 13, 249, 160, 56, 68, 14, 150, 81, 179, 220, 157, 112, 1, 77, 261, 208, 216, 132, 286, 189, 37, 61, 94, 44, 138, 57, 87, 67, 195, 108, 116, 214, 3, 124, 113, 266, 109, 99, 252, 256, 184, 7, 66, 152, 280, 267, 229, 225, 210, 207, 173, 134, 235, 135, 106, 263, 63, 253, 78, 139, 19, 140, 144, 69, 203, 114, 198, 270, 8, 75, 177, 50, 202, 136, 29, 272, 156, 55, 232, 259, 38, 192, 250, 145, 175, 83, 273, 284, 204, 269, 142, 137, 130, 5, 122, 125, 276, 98, 209, 107, 15, 58, 219, 16, 283, 36, 11, 25, 110, 285, 241, 40, 174, 246, 289, 97, 233, 43, 2, 199, 172, 46, 190, 148, 119, 104, 23, 254, 54, 236, 176, 247, 185, 166, 268, 41, 239, 165, 238, 255, 95, 101, 200, 180, 196, 120, 22, 215, 167, 39, 12}
-- En räknare som håller koll på var vi är
set i to 1
-- Snacka med illustrator
tell application "Adobe Illustrator"
-- Upprepa med varje kommunkod
repeat with kommunKod in kommunKoder
-- Blanda färgen efter rankningen
if item i of kommunRank is greater than 255 then
set theGreen to 255
set theRed to 255
set theBlue to ((item i of kommunRank) - 255)
else
set theGreen to 255 - (item i of kommunRank)
set theRed to 255
set theBlue to 0
end if
-- Sätt färgen på objektet till färgblandningen
try
set properties of path item kommunKod of document 1 to ¬
{fill color:{red:theRed, blue:theBlue, green:theGreen}}
end try
-- Räkna upp räknaren
set i to i + 1
end repeat
end tell
För varje kommunkod kollar vi vilken plats den kommunen har i rankningen ( item i of kommunRank), vi blandar till en färg baserat på rankningen och färglägger objektet med kommunkodens namn med den färgen.
Det enda som är lite speciellt här är att det finns 290 kommuner, men bara 255 steg i varje färgkanal. För de kommuner som är på plats 256 och efter i listan kan vi alltså inte bara kasta in rankningssiffran som färgvärde. Därav "if item i of kommunRank is greater than 255 then" -satsen.
Vad som händer i den är att vi maxar de röda och gröna kanalerna och skjuter över differensen mellan 255 och rankningen i den blåa kanalen. Kommunerna som är större än 255 går således mot en grön nyans. Alla andra kommuner har maximalt med rött och 255 - rankningen i gröna kanalen och blir således mindre gula ju högre de är rankade.
Det var allt. Hoppas ni har lärt er något! Och eftersom vi på Fokus har gjort det här med att ranka kommuner till något av en paradgren finns det massvis med data här på fokus.se att testa med. Varför inte göra en karta över var det är bäst att bo till exempel?
Missa heller inte att läsa det fantastiska reportaget om integration, kartan och en hel del annat smått och gott finns bara i den tryckta versionen av Fokus, men den utmärkta texten kan läsas även här på hemsidan.
Förslag, förbättringar, förmaningar etc. mottages som vanligt tacksamt i kommentarsfältet!