Dato: 2024.04.26
Generator til eksamens mindstekrav HHX under opbygning, beta version her.: Mindstekravs Generator.
Dato: 2022.10.27
For at kunne databehandle de fundne Finanslove fra sideste uge er vi nød til at læse .pdf og konvertere dem til tekst, som data kan ekstraheres fra. Til formålet bruges Julias PDFIO pakke.
# PDFIO.jl pakken indlæses og initialiseres.
[1]: using Pkg
Pkg.add("PDFIO")
using PDFIO
# Arbejdsbiblioteket indstilles og bibliotekets indhold indlæses i et array
[2]: pwd()
cd("/Sund")
fl = filter(x -> endswith(lowercase(x), ".pdf"), readdir("./FinansLov",join=true))
Ideen er nu at læse iterere over biblioteket, læse hver fil og gemme den som .txt fil.
Problemet opstår blot med PDFIOs
pdPageExtractText(stdout, page)
kode, der genererer fejl ved nyere Finanslovs filer, der er indexerede og med nydelig fuldsidegrafik, hvorfor scriptet stopper.
Løsningen ligger i Julias
try/catch funktion.
[3]: try
sqrt(-1)
catch
println("Du kan ikke tage kvadratrod af et negativt tal.")
end
[3]: Du kan ikke tage kvadratrod af et negativt tal.
Dermed bliver det muligt at bygge en funktion til læsning af .pdf og skrivning af .txt filer.
# Input: src, sti og filnavn på .pdf kilde
# out, sti og filnavn på .txt output
[4]: function getPDFText(src, out)
# handle til brug for dokument operationre.
doc = pdDocOpen(src)
# Ekstraher dokument information
docinfo = pdDocGetInfo(doc)
open(out, "w") do io
# Antal side i dokumentet
npage = pdDocGetPageCount(doc)
for i=1:npage
# Handle for den specifikke side i dokumentet
page = pdDocGetPage(doc, i)
# Uddrag teksten fra siden, hvis det er muligt
try
pdPageExtractText(io, page)
catch
# Ved fejl foretag ignorer siden og fortsæt
1 == 1
end
end
end
# Luk dokumentets handle
pdDocClose(doc)
return docinfo
end
Afslutningsvis kan vi tage alle .pdf filerne fra Finanslovesbiblioteket og generere tekstfilerne bulk med et kald.
# Iterer over fil array og eksekver
[5]: for x in fl
getPDFText(x, split(x,".pd")[1]*".txt")
end
Kilder:
https://docs.julialang.org/en/v1/base/io-network/
https://docs.julialang.org/en/v1/manual/control-flow/
Dato: 2022.10.20
Når man skal følge pengene kan man entent starte fra toppen eller bunden. Fra bunden er devisen at pengene skal følge borgeren, hvilket selvfølgelig er en interessant vinkel og noget at et detektivarbejde at trevle sundhedsvæsnet op fra, men også en vinkel der umiddelbart gør det svært at skabe et overblik. Jeg har derfor valgt at starte så langt op det nu er muligt at komme, nemlig med Finansloven. Efter at have ledt lidt fandt jeg Finanslovene 2008-2022 tilgængelige for download i .pdf format primært fra Folketingets hjemmeside. For finanslove før 2008 og efter 2002 (02 ikke inkluderet) kan Finanslovsdatabasen hos Erhvers og Økonomiministeriet benyttes. Yderligere reseach for Finanslove før 2003 skal foretages.
Her følger en linkliste over Finanslovene 2008-2022
Kaninhullet er det koncentrerede, det nørdede. Det er her der virkelig bliver gravet og boret i dybden, en øvelse der selvsagt tager lang tid. Det første kaninhul vi hopper i er det danske sundhedsvæsen. Idag er det første afsnit af mange, der offetliggøres.
Dato: 2022.10.13
Engang for længe siden tilbage i 1990erne i et lille kongerige højt mod nord var der et sundhedsvæsen der fungerede næsten upåklageligt. Der hørtes enkelte pip om lidt lægemangel på grund af politikernes dårlige beslutninger 10 år tidliege, men ellers var der stille på fronten.
Efter årtusindeskiftet skete der dog noget i det lille kongerige; et universelt gult sygesikringsbevis gjaldt pludseligt ikke længere uden for landets grænser, sundhedsforsikringer blev indført, privathospitaler blev det nye sort, sygehuse og akutafdelinger blev nedlagt på stribe, hele 5 supersygehuse med enorme budgetoverskridelser skulle bygges på samme tid, lægevagter blev nedlagt, akuttelefoner blev overbelastet, fejlbehæftede IT systemer blev indført med store produktivitetsfald til følge, psykiatrien fik lov at hænge i laser, behandlingsgarantien blev overskredet med flere år og
sygeplejersker blev en direkte mangelvare. Dertil lægger vi selvfølgelig salget af Statens Serum Instituts vaccineproduktion direkte fulgt af Covid19 pandemien.
Det er som om ingen rigtigt længere har overblikket over, hvad der foregår, og den tidligere indenrigs-, sundheds- og statsminister, der stod bag mange af de katastrofale beslutninger, søger i 2022 folketingsvalgkampen at lancere sig som løsningen til det selvskabte problem.
Om folketingskandidaten har ret i sin løsningsmodel eller ej skal vi ikke kunne sige her på DataDivers.dk, men vi vil forsøge at skabe et overblik over det danske sundhedsvæsen - for ingen andre synes at være i besiddelse af det.
Ifølge WHOs målsætning er "sundhed en tilstand af fuld fysiske, mental og socialt velvære og ikke bare farvær af sygdom og svaghed" (1), videre følger det fra WHO at "et sundhedssystem består af alle organisationer, mennesker og handlinger, hvis primære aktivitet er at fremme, genoprette eller fastholde sundhed".
WHO gør derigennem brug af den brede definition af et sundhedsvæsen, en definition der indbefatter alle direkte sundhedsydelser såvel som sikring af rent drikkevand, bortskaffelse af forurening og mikroplast, nedbringning af trafikstøj, sikring af fødevarer osv osv.
Traditionelt gør vi i Danmark dog brug af den mere snævre definition af Roemer (2001) "sundhedsvæsen er en kombination af ressourcer, organisation, finansiering og styring, der resulterer i produktionen af sundhedsydelser til befolkningen" (3), en definition der går igen i Den Store Danske med ordene "Sundhedsvæsen, samfundets samlede indsats mhp. forebyggelse, diagnostik og behandling af sygdom og pleje af syge, både i offentligt og privat regi" (4).
Kilder:
1) https://www.who.int/about/governance/constitution
2) https://www.physio-pedia.com/Health_Care_Systems
3) https://sundhedsvaesenogsundhedspolitik-3udg.digi.munksgaard.dk/
4) https://denstoredanske.lex.dk/sundhedsv%C3%A6sen
Efter vor mening er Roemers definition fra 2001 et alt for snævert og utidssvarende perspektiv, der slet ikke tager højde for hverken globalisering eller den rivende udvikling inden for kommunikation og kunstig intelligens, der muliggør indsigter på tværs af traditionelle faglige og politisk administrative skel.
Vi vil derfor tage udgangspunkt i WHOs brede definition, men samtidigt vil vi søge at problematisere implikationerne af de demokratiske og frihedsindgribende konsekvenser den brede definition har. Er det eksempelvis samfundets opgave at påbyde motion og forbyde rygning, alkohol og slik eller har individet ret til selv oplyst at vælge, hvilke ikke sundhedsoptimerende aktiviteter personen foretager.
Det er derfor hensigten at skabe et overblik over såvel det Roemerske sundhedsvæsen samt krydsfeltet til det bredt definerede WHO sundhedsvæsen for derigennem, forhåbentligt, at kunne bidrage til et tidssvarende, efficient og effektivt sundhedsvæsen for såvel borgere som samfund.
Guldfisken en det korte koncentrationsspan, det er her jeg publicerer de små eksperimenter, observationer, undersøgelser og tiltag. Modsat Guldfisken finder du i Kaninhullet fordybelse, de større og mere krævende undersøgelser og tiltag. I essensen er Guldfisken forstudiet til Kaninhullet.
Dato: 2022.02.20
Indledningsvist skal det bemærkes at der selvfølglig er et såvel lovgivningsmæssigt, som etisk aspekt ved web-scraping. Derfor scrap kun de sider, hvor processen ikke kommer i konflikt med lovgivning eller, hvor du ikke kan stå inde for formålet med dit web scrape.
Når det er sagt er scraping af websider simplet med Julia. Primært skal der bruges to pakker HTTP.jl til indhentning af sider og siderkoder samt Gumbo.jl til arbejdet med det entede materiale.
I denne guldfisk vil fokus være på HTTP.jl pakken.
Til formålet åbnes et Jupyter Lab vindue gennem Anaconda-Navigator og på bare tre linjer er hjemmesidens kode hentet.
# Installation af HTTP.jl pakken med Pkg
[1]: import Pkg; Pkg.add("HTTP")
# HTTP.jl pakken aktiveres
[2]: using HHTP
# Hent hjemmesiden, i dette tilfælde denne side, og gem resultatet i variablen r
[3]: r = HTTP.get("http://trylmand.dk/")
[3]: HTTP.Messages.Response:
"""
HTTP/1.1 200 OK
Date: Sun, 20 Feb 2022 11:23:07 GMT
Server: Apache
Upgrade: h2
Connection: Upgrade
Vary: Accept-Encoding
X-Content-Type-Options: nosniff
SimplyCom-Server: Apache
Transfer-Encoding: chunked
Content-Type: text/html
<!DOCTYPE html>
<html lang="da" xmlns:m="http://www.w3.org/1998/Math/MathML">
<head>
<title>Trylmand</title>
"""
Til det lidt mere avancerede har HTTP
kommandoen har en standard opsætning med den originale stuktur er HTTP.request("GET", "http://trylmand.dk/"; retries=4, cookies=true)
, hvor metoden i kaldet har mulighederne
, hvilket kan simplificeres over i HTTP.get(.), HTTP.post(.), og HTTP.put(.), HTTP.open(.)
.
Hvor HTTP.open(.)
benyttes til streamning (gem eller gengiv). Følg kildelinket herunder til dokumentationen for uddybning.
Kilder: https://julia.school/julia/scraping/
https://juliaweb.github.io/HTTP.jl/stable/.
Dato: 2022.02.19
Anaconda er en data-science platform der gør det nemt og overskueligt at køre og installere akker og programmer på tværs af analyse platforme såsom R, Python og Julia.
Det er en fordel at have præinstalleret R, Python og Julia - så hvis du allerede har det kan du springe de respektive afsnit over.
Først systemopdatering så check for Python version. Hvis installation er nødvendigt an kan Python 3.10 nemt installeres Ubuntu 20.04|18.04 med brug af Apt-Repo - kudos til deadsnakes tilpassede PPA der gør det nemt at installere, vedligeholde g sikkerhedsopdatere.
KILDE: https://computingforgeeks.com/how-to-install-python-on-ubuntu-linux-system/ Jupyter notebook til brug med såvel Julia som Python installeres nemmest med PIP
KILDER: https://itsfoss.com/install-pip-ubuntu/ ; https://jupyter.org/install Nu skal Julia forbindes til Jupyter Notebook (for installation af Julia se tidligere Guldfisk). KILDE: https://datatofish.com/add-julia-to-jupyter/ Endelig er vi klar til at installere Anaconda, til det bruges Curl, hvorefter Anaconda installations proceduren gennemgåes. Installationen starter med at downloade seneste version af anaconda fra udviklers hjemmeside ved at kopiere
64-bit (x86) linket ind terminalvinduet. Så skal der lige køres et check og en update på anaconda. Så mangler vi kun at få installeret voila til Jupyter notebook og aktivere selvsamme i Anaconda Slutteligt starter vi Anacond navigator med kommandoen: Kilder:
https://anaconda.cloud/ Dato: 2022.02.06 Julia er efter sigende analysesproget for det 21nd århundrede, hurtigere og bedre end de såvel R og Python. Mere om sammenligningerne senere, her handler det om installation på Ubuntu. Først åbens et Terminal-vindue og Ubuntu klargøres ved at finde de nødvendige opdateringspakker for derefter at installere dem. Så findes den seneste version på GitHub og vi checker om der eksisterer en version installeret på computeren i forvejen. Dernæst downloades seneste version fra Julias hjemmeside. Vi skaber et bibliotek i Til sidst skaber vi et link til Julia i ~/.bashrc eller ~/.bash_profile filen ved at kopiere nedenstående kode ind. Kilder: Julia og Lindevs Blog Klassifikation er superviseret læring der har til hensigt at inddele de observerede identiteter i konkrete grupper med en betemt egenskab.
Det kan lige såvel dreje om planter vi ønsker at katalogisere til sikring af en leverances kvalitet, fisk der skal sorteres på trawlers transportbånd så bifangst undgåes eller kunder der skal identificeres som mulige churns. Du vil starte med at lære det simple tilfælde, hvor alene er to diskrete klasser skal identificeres i en beskrivende dimension, derfra øges antallet af til to, tre og op til en generalisering af dimensionerne. I processen vil du støde på begreberne
Først skal der dog styr på hele det matematiske hypotese apparatet, der muliggør en struktureret analyse af data.
lars$datadivers:~$ sudo apt-update
lars$datadivers:~$ sudo apt-upgrade
lars$datadivers:~$ sudo apt install software-properties-common -y
lars$datadivers:~$ sudo add-apt-repository ppa:deadsnakes/ppa
lars$datadivers:~$ sudo apt install python3.9
lars$datadivers:~$ python3 --version
Python 3.9.7
lars$datadivers:~$ sudo apt install python3-pip
lars$datadivers:~$ pip3 --version
pip 21.2.4 from ~/anaconda3/lib/python3.9/site-packages/pip (python 3.9)
lars$datadivers:~$ pip install jupyterlab
lars$datadivers:~$ pip install notebook
#Start Julia
lars$datadivers:~$ julia
lars$datadivers:~$ using Pkg
lars$datadivers:~$ Pkg.add("IJulia")
#Jupyter Notebook åbnes nu nemt i browser, bare klik og vælg Julia
lars$datadivers:~$ jupyter notebook
#Check Curl installation
lars$datadivers:~$ curl --version
#Hvis ikke installeret
lars$datadivers:~$ sudo apt-get install curl
Dette følges umiddelbart efter med at check for filens integritet, hvor reference koden findes gennem hash kode linket.
lars$datadivers:~$ wget https://repo.anaconda.com/archive/Anaconda3-2021.11-Linux-x86_64.sh
# Sammenlign hashsum
lars$datadivers:~$ sha256sum Anaconda3-2021.11-Linux-x86_64.sh
edf9e340039557f7b5e8a8a86affa9d299f5e9820144bd7b92ae9f7ee08ac60 Anaconda3-2021.11-Linux-x86_64.sh
#Installer med
lars$datadivers:~$ bash Anaconda3-2021.11-Linux-x86_64.sh
Welcome to Anaconda3 2021.05
In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
>>>
# Tryk Enter for at fortsætte installatione eller Esc for at afslutte
Do you accept the license terms? [yes|no]
>>>
# Hvis enig skriv "yes" ellers "no" og stop installation her
Anaconda3 will now be installed into this location:
/home/ourcodeworld/anaconda3
- Press ENTER to confirm the location
- Press CTRL-C to abort the installation
- Or specify a different location below
# Følg ovenstående besked
done
installation finished.
Do you wish the installer to initialize Anaconda3
by running conda init? [yes|no]
# Indtast yes for at afslutte installationen
==> For changes to take effect, close and re-open your current shell. <==
# Luk nu terminalvinduet således det installrede kan træde i kraft.
lars$datadivers:~$ conda info
active environment : base
active env location : /home/lars/anaconda3
...
offline mode : False
# For at opdatere Anaconda køre
lars$datadivers:~$ conda update conda
# Og så skal Anaconda pakkerne opdateres
lars$datadivers:~$ conda update anaconda
Proceed ([y]/n)?
# Tryk y for at fortsætte
lars$datadivers:~$ pip3 install voila
lars$datadivers:~$ conda install voila -c conda-forge
lars$datadivers:~$ anaconda-navigator
https://blog.jupyter.org/and-voil%C3%A0-f6a2c08a4a93
https://anaconda.cloud/pittsburgh-bikeshare
https://docs.anaconda.com/anaconda/navigator/tutorials/create-r-environment/
https://ourcodeworld.com/articles/read/1609/how-to-install-anaconda-in-ubuntu-2004
https://phoenixnap.com/kb/how-to-install-anaconda-ubuntu-18-04-or-20-04
https://blog.jupyter.org/and-voil%C3%A0-f6a2c08a4a93.Installation af Julia på Ubuntu 20.04
lars$datadivers:~$ sudo apt-get update
lars$datadivers:~$ sudo apt-get upgrade
lars$datadivers:~$ JULIA_VER=$(curl -s "https://api.github.com/repos/JuliaLang/julia/releases/latest" | grep -Po '"tag_name": "v\K[0-9.]+')
lars$datadivers:~$ JULIA_MINOR_VER=$(echo $JULIA_VER | grep -Po "^[0-9]+.[0-9]+")
lars$datadivers:~$ curl -o julia.tar.gz "https://julialang-s3.julialang.org/bin/linux/x64/${JULIA_MINOR_VER}/julia-${JULIA_VER}-linux-x86_64.tar.gz"
/opt/
biblioteket og pakker programmet ud.
lars$datadivers:~$ sudo mkdir /opt/julia
lars$datadivers:~$ sudo tar xf julia.tar.gz --strip-components=1 -C /opt/julia
lars$datadivers:~$ export PATH="$PATH:/opt/julia/bin"
# Programmet kan nu køres med kommandoen
lars$datadivers:~$ julia
Klassifikation
Mens det diskrete tilfælde fastholdes vil du lære at håndtere et øget antal klasser når 2 går til 3 til 4 osv inden fokus skiftes til kontinuerte klasser og dimensioner.
og værktøjerne
Hypotese apparatet
Høj | Vægt | Køn |
---|---|---|
\(x_{1,1}\) | \(x_{1,2}\) | \(x_{1,3}\) |
\(x_{2,1}\) | \(x_{2,2}\) | \(x_{2,3}\) |
\(x_{3,1}\) | \(x_{3,2}\) | \(x_{3,3}\) |
\(x_{4,1}\) | \(x_{4,2}\) | \(x_{4,3}\) |
\(x_{5,1}\) | \(x_{5,2}\) | \(x_{5,3}\) |
\(x_{6,1}\) | \(x_{6,2}\) | \(x_{6,3}\) |
\(x_{7,1}\) | \(x_{7,2}\) | \(x_{7,3}\) |
\(x_{8,1}\) | \(x_{8,2}\) | \(x_{8,3}\) |
\(x_{9,1}\) | \(x_{9,2}\) | \(x_{9,3}\) |
\(x_{10,1}\) | \(x_{10,2}\) | \(x_{10,3}\) |
\(x_{11,1}\) | \(x_{11,2}\) | \(x_{11,3}\) |
Antag vi har registreret 11 identiteter i tre dimensioner og vi nu ønsker nu at skabe en regel der kan forudsige den tredje dimension ud fra de to andre.
De 11 observationssæt ses afbildet herunder.
En observation består af tre registreringer \(x_{.1}, x_{.2}\) og \(x_{.3}\). I eksemplet fra før er det være højde, vægt og køn. Der er 11 observationer, hvorfor den første registrering kommer til at hedde \(x_{1,1}, x_{1,2}\) og \(x_{1,3}\). Dermed har vi en \(11\)x\(3\) matrice og i eksemplet er hver række en person og hver søjle er de informationer vi har registreret om personen, altså højde, vægt og køn.
I tilfældet med de 11 registreringer afbildet ses her der 7 kvinder markeret med \(O\) og 5 mænd markeret med \({\Delta}\).