Tomma poster
I förra inlägget diskuterade jag resultat som rapporterats från
PURE-studien, bl.a. att cancer blivit vanligare dödsorsak än
cirkulationssjukdom bland medelålders personer i höginkomstländer.
Resultaten har även kommenterats av Hake (2019), som är inne på delvis
samma saker som jag tog upp. Även om fler dör av cancer än av
cirkulationssjukdom i åldersgrupperna under 80 år i Sverige, och det
inte är någon direkt nyhet, gäller det inte befolkningen som helhet, där
de flesta dödsfall inträffar efter 80 års ålder. Samma sak gäller i
andra höginkomstländer med hög medellivslängd, och skribenten anser att
detta tydligare kunde ha klargjorts i artikeln i Lancet (Dagenais m.fl. 2019)
och utskickade pressmeddelanden, då det blivit väldigt många rubriker i
världens medier som förkunnat att
. Larsson (2019), som jag refererade till i förra
inlägget, är ett exempel på en sådan rubrik.cancer är en vanligare dödsorsak än
hjärta-kärlsjukdom
Av diagrammen i förra inlägget framgår att trenden med minskande kvot mellan antalet dödsfall i cirkulationssjukdom över tumörer i Sverige i åldersgrupperna under 75 år verkar ha planat ut sedan mitten av förra årtiondet. Kan en sådan utplaning även ses för hela åldersspannet? Hur ser trenden ut i olika delar av Sverige? Det är känt sedan länge att vissa delar av Sverige, t.ex. i Norrland och Svealands inland, har högre dödstal i cirkulationssjukdom än andra områden, som Stockholm, Uppsala och delar av Sydsverige. Är det kanske så att kvoten redan nått 1 i dessa senare områden?
Socialstyrelsens statistikdatabas för dödsorsaker innehåller data över orsaksspecifika dödstal i Sveriges län från 1997 och framåt (den tid ICD-10 använts), och innehållet i denna har dumpats i CSV-filer tillgängliga via Socialstyrelsen (2020). Filerna har nedanstående format.
Mått;År;Region;Diagnos;Kön;Ålder;Värde
1;1997;0;99;1;1;241
1;1997;0;99;1;2;53
I vissa avseenden är den information som finns tillgänglig via statistikdatabasen och filerna inte så detaljerad som kunde vara önskvärt. Framför allt görs grupperingen efter ålder fortfarande i femåriga åldersintervall upp till 80–84 år och ett öppet intervall 85- år, något som ter sig ganska märkligt när mer än hälften av dödsfallen bland kvinnor inträffar efter 85 års ålder, som jag skrev om den 25 augusti 2016. Något som kan te sig ännu märkligare är att varje årsfil innehåller mer än 2,4 miljoner rader, samtidigt som det inträffar ca 90 000 dödsfall per år i Sverige. En fil med mycket begränsad information innehåller alltså nära 30 gånger så många poster som vi skulle få om hela dödsorsaksregistret dumpades och publicerades rakt av (vilket förstås inte är juridiskt möjligt). Förklaringen är att de flesta raderna i de publicerade filerna utgörs av kombinationer av dödsorsaker, åldrar, kön och regioner där det inte inträffat några dödsfall, vilket gäller för majoriteten av alla dödsorsaker i låga åldersgrupper.
Hur skall dessa klumpiga dumpar hanteras för att kunna göra någorlunda smärtfria analyser? Här har jag låtit mig inspireras av Drake (2014), som handlar om hur enkla skalverktyg, som finns i Unixliknande system, kan användas för att göra sammanställningar av data i textfiler på några GB mycket snabbare än Big Data-verktyg som Hadoop. Exemplet i inlägget handlar om statistik för schackpartier.
I underkatalogen postdata/2019-10-12-tomma
i
bloggförrådet finns ett
skalskript propyrs_allreg.sh
, som kan användas för att sammanställa
kvoten mellan antalet dödsfall i två grupper av dödsorsaker per region,
kön, ålder och år. Skriptet använder sig av find för att hitta CSV-filer
i underkatalogen data
(det förutsätter att filerna med antalet
dödsfall per år från Socialstyrelsens ZIP-fil med årsvis data packats
upp där). Därefter används xargs för att skicka dessa filer till grep,
som sorterar ut de rader som innehåller relevanta data. Här görs, som i
Drakes exempel, parallellisering med argumentet -P4
, för att snabba
upp körningen. Utdata från grep filtreras sedan till awk, för att göra
själva sammanställningen. Nedanstående kommando ger kvoten mellan
antalet dödsfall i cirkulationssjukdom (ICD-10 I00–I99+F01) och tumör
(C00–D48) per region och kön för alla åldersgrupper.
./propyrs_allreg.sh [12] 99 "I00-I99|F01" "C00-D48"
Detta kommando, som alltså sammaställer information med reguljära uttryck från 22 CSV-filer med över 50 miljoner rader totalt, körs på 1,04 sekunder på min laptop (en ganska ny ThinkPad T580 med Arch Linux), efter att systemets sidcache rensats. Utdata är i följande format.
år;region;kön;antal orsak 1;antal orsak 2;(antal orsak 1)/(antal orsak 2)
2018;12;1;2019;1708;1.182
2018;12;2;2192;1480;1.481
2018;13;1;508;433;1.173
2018;13;2;493;356;1.385
Dessa utdata kan förstås sedan användas i program som Python eller Julia
för vidare analys eller visualisering. Skriptet sdb_reg.jl
använder
Julia för att generera fig. 1 och fig. 2, som visar utvecklingen av
kvoten för riket och de tre län som hade lägst och högst kvot 1997,
bland kvinnor och män i alla åldrar.
Län med initialt låg kvot har alltså haft en relativt långsam minskning, och kvoten har fortfarande inte nått 1. Kvoten för riket som helhet har närmat sig dessa län och kan möjligen ha planat ut bland män efter 2015. Det har skett kraftigare minskningar i flera län med initialt hög kvot, men i vissa fall har dessa också planat ut på en relativt hög nivå, som kvoten för män i Norrbottens län.