Skip to content

Commit

Permalink
Begynne analyseprosjekt av masterfilene
Browse files Browse the repository at this point in the history
  • Loading branch information
mfmssb committed Nov 10, 2023
1 parent 5272a7a commit 985ff28
Showing 1 changed file with 227 additions and 15 deletions.
242 changes: 227 additions & 15 deletions experimental/analyse_av_populasjon.py
Original file line number Diff line number Diff line change
@@ -1,52 +1,218 @@
# -*- coding: utf-8 -*-
# # Prep

# ## Pakker og tilganger

# +
import pandas as pd
import cx_Oracle
from db1p import query_db1p

import getpass
import datetime as dt
import requests

from sqlalchemy import create_engine
import getpass

til_lagring = False # Sett til True, hvis du skal gjøre endringer i Databasen
# -

username = getpass.getuser()
password = getpass.getpass(prompt='Oracle-passord: ')
dsn = "DB1P"

# +
# conn = cx_Oracle.connect(getpass.getuser()+"/"+getpass.getpass(prompt='Oracle-passord: ')+"@DB1P")
engine = create_engine(f"oracle+cx_oracle://{username}:{password}@{dsn}")

# Opprett en tilkobling fra motoren
conn = engine.connect()
# -



aar4 = '2022'
aar2 = aar4[-2:]


def rapport_df(df):
display(df.info())
display(df.sample(2))


# ## Innlasting av filer

sti_akt = f"/ssb/stamme01/fylkhels/speshelse/aktivitet/{aar4}/masterfil/aktivitet_masterfil_{aar4}.parquet"
sti_rgn0x = f"/ssb/stamme01/fylkhels/speshelse/regnskap/{aar4}/masterfil/helse0x_masterfil_{aar4}.parquet"
sti_rgn39 = f"/ssb/stamme01/fylkhels/speshelse/regnskap/{aar4}/masterfil/helse39_masterfil_{aar4}.parquet"
sti_per = f"/ssb/stamme01/fylkhels/speshelse/personell/{aar4}/personell/masterfil/personell_masterfil_{aar4}.parquet"

akt = pd.read_parquet(sti_akt)
# rgn0x = pd.read_parquet(sti_rgn0x)
rgn0x = pd.read_parquet(sti_rgn0x)
rgn39 = pd.read_parquet(sti_rgn39)
per = pd.read_parquet(sti_per)

# # Prep
# ----

akt = (
akt[akt['FORETAKSTYPE']
.isin(['Privat', 'Oppdrag'])]
.rename(columns={'ORGNR': 'ORGNR_FORETAK'})
akt
.rename(columns={'ORGNR': 'ORGNR_FRTK'})
.drop(columns=['NAVN', 'HELSEREGION', 'RHF', 'REGION', 'ORGNR_REGION'])
)

rapport_df(akt)

# ---

# Merknader:
# - LAB, PTR, PBF, ADM finnes ikke de andre filene. -> tas ut
# - ADM i regnskapsfilene er kun data for RHFene
# - I personellfilen er alle årsverk som ikke er pasientrettet blir regnet som ADM
#
# Funn:
# - Tre like kolonner: ORGNR_DELREG, ORG_NR og ORGNR

rgn0x[rgn0x['ORGNR_DELREG'] != rgn0x['ORGNR']]

rgn0x.columns

rgn0x[[kol for kol in rgn0x if kol.__contains__("ORG")]].sample(4)

rgn0x = (
rgn0x[['ORGNR', 'funksjon', 'TOT_UTG']]
.rename(columns={'ORGNR': 'ORGNR_FRTK'})
)

rapport_df(rgn0x)

# ---

# Merknad (skjema39)
# - Hvis `SN07_1 == 86.107`, skal `funksjon`/`TJENESTE` være `REH`
# - Gjør en groupby på ORGNR_FORETAK og TJENESTE. Summer TOT_UTG
#
# Funn:
# - Noen 'ORGNR_REGION' == 'H06'

rgn39[[kol for kol in rgn39 if kol.__contains__("ORG")]].sample(4)

rgn39

rgn39 = (
rgn39[['ORGNR', 'funksjon', 'TOT_UTG']]
.rename(columns={'ORGNR': 'ORGNR_FORETAK', 'funksjon': 'TJENESTE', 'TOT_UTG': 'REGNSKAP_TOT_UTG'})
.rename(columns={'ORGNR': 'ORGNR_VIRK', 'funksjon': 'TJENESTE', 'TOT_UTG': 'REGNSKAP_TOT_UTG'})
)

per = per[per['FORETAKSTYPE'].isin(['Privat', 'Oppdrag'])][['ORGNR_FORETAK', 'FRTK_NAVN', 'TJENESTE', 'AARSVERK']]
rapport_df(rgn39)

# ---

# Merknad personell
# -

per = (
per[['ORGNR_FORETAK', 'TJENESTE', 'AARSVERK']]
.rename(columns={'ORGNR_FORETAK': 'ORGNR_FRTK'})
.groupby(['ORGNR_FRTK', 'TJENESTE']).sum()
.reset_index()
)

per = per

rapport_df(per)

master_join = pd.merge(
akt,
rgn0x,
how='outer',
on=''
)







per = per.groupby(['ORGNR_FORETAK', 'FRTK_NAVN', 'TJENESTE']).sum().reset_index()



# # Koble masterfiler med 24xx



# +
def lag_sql_str(arr):
s = "("
for nr in arr:
s += "'" + str(nr) + "',"
s = s[:-1] + ")"
return s

def les_sql(sql_spørring, tilkobling):
"""
Utfører en SQL-spørring og returnerer en DataFrame hvor kolonnenavnene er i store bokstaver.
Parametere:
- sql_spørring (str): SQL-spørringen som skal utføres.
- tilkobling (SQLAlchemy connection): Databaseforbindelsen som skal brukes for spørringen.
Returnerer:
- DataFrame: Resultatet av SQL-spørringen med kolonnenavnene i store bokstaver.
"""
from sqlalchemy import text
# Utfør SQL-spørringen
df = pd.read_sql_query(text(sql_spørring), tilkobling)

# Konverter kolonnenavnene til store bokstaver
df.columns = [col.upper() for col in df.columns]

return df


# -

len(orgnr_foretak_liste)

# +
sql_str = lag_sql_str(orgnr_foretak_liste)

sporring_for = f"""
SELECT FORETAKS_NR, ORGNR, NAVN
FROM DSBBASE.SSB_FORETAK
WHERE STATUSKODE = 'B' AND ORGNR IN {sql_str}
"""
vof_for = les_sql(sporring_for, conn)
# -

vof_for = vof_for.rename(columns={'ORGNR': 'ORGNR_FRTK', 'NAVN': 'NAVN_FRTK'})



sporring_bed = f"""
SELECT FORETAKS_NR, ORGNR, NAVN, KARAKTERISTIKK, SN07_1, SB_TYPE
FROM DSBBASE.SSB_BEDRIFT
WHERE STATUSKODE = 'B' AND ORGNR IN {sql_str}
"""
vof_bdr = les_sql(sporring_bed, conn)

vof_bdr = vof_bdr.rename(columns={'ORGNR': 'ORGNR_VIRK', 'NAVN': 'NAVN_VIRK'})





koblede_enheter = vof_for_orgnr_un + vof_bdr_orgnr_un

set(orgnr_foretak_liste) - set(koblede_enheter)

# Enheter jeg ikke får koblet med VoF:
# - FALCK NORGE AS AVD OSLO GRENSEVEIEN 82 med organisasjonsnummer 918 997 202 ble slettet 03.10.2023
# - ALERIS ÅLESUND med organisasjonsnummer 919 729 333 ble slettet 28.03.2023
# - NORSK ARBEIDSHELSE AS AVD SANDEFJORD med organisasjonsnummer 923 568 662 ble slettet 10.01.2023
# - NORSK ARBEIDSHELSE AS AVD FREDRIKSTAD med organisasjonsnummer 923 569 022 ble slettet 10.01.2023
# - LEGEVAKTEN med organisasjonsnummer 984 293 518 ble slettet 15.01.2013
# - ALFA KURS OG BEHANDLINGSSENTER AS med organisasjonsnummer 997 764 773 ble slettet 06.07.2023
# - '999999994' - Ingen opplysninger
# - '999999995' - Ingen opplysninger
#



Expand All @@ -56,6 +222,50 @@



# +
# fornummer = pd.Series(vof_for["FORETAKS_NR"]).array

# sporring_bed = f"""
# SELECT FORETAKS_NR, ORGNR, NAVN, KARAKTERISTIKK, SN07_1, SB_TYPE
# FROM DSBBASE.SSB_BEDRIFT
# WHERE STATUSKODE = 'B' AND FORETAKS_NR IN {sql_str}
# """
# vof_bdr = les_sql(sporring_bed, conn)
# -

# Henter organisasjons- og foretaksnummer fra Virksomhets- og foretaksregisteret (VoF) og samler disse i én tabell kalt ```vof```

# +
vof_for = vof_for.rename(columns={"NAVN": "NAVN_FORETAK",
"ORGNR": "ORGNR_FORETAK"})

vof_bdr = vof_bdr.rename(columns={"ORGNR": "ORGNR_BEDRIFT"})
vof_bdr["KARAKTERISTIKK"] = vof_bdr["KARAKTERISTIKK"].fillna("")
vof_bdr["NAVN_BEDRIFT"] = vof_bdr["NAVN"] + " " + vof_bdr["KARAKTERISTIKK"]

vof_bdr = vof_bdr.drop(columns=["NAVN", "KARAKTERISTIKK"])

vof = pd.merge(vof_bdr, vof_for, how="left", on="FORETAKS_NR")
vof = vof.drop(columns=["FORETAKS_NR"])

rapporteringsenheter["ORGNR_FORETAK"] = rapporteringsenheter["ORGNR_FORETAK"].apply(str)
rapporteringsenheter_vof = pd.merge(
vof, rapporteringsenheter, how="left", on="ORGNR_FORETAK"
)
# -

# # Koble masterfiler med 24xx

akt

rgn39

per.groupby("TJENESTE").sum(numeric_only=True)








Expand Down Expand Up @@ -98,19 +308,21 @@

rapporteringsvar_akt = ["UTSKRIVNINGER", "OPPHOLDSDOGN", "OPPHOLDSDAGER", "POLIKLINIKK", "DOGNPLASSER", "SENGEDOGN"]

akt[['ORGNR'] + rapporteringsvar_akt]
akt

akt_gruppering = akt[['ORGNR'] + rapporteringsvar_akt].groupby(['ORGNR']).sum().reset_index().copy()
akt_gruppering = akt[['ORGNR_FORETAK'] + rapporteringsvar_akt].groupby(['ORGNR_FORETAK']).sum().reset_index().copy()

akt_gruppering['sum'] = akt_gruppering.sum(axis=1, numeric_only=True)

akt_gruppering

print("ORGNR som ikke har rapportert noe i 2022:")
akt_gruppering[akt_gruppering['sum'] == 0]['ORGNR'].to_numpy()
akt_gruppering[akt_gruppering['sum'] == 0]['ORGNR_FORETAK'].to_numpy()

# Funn:
# - 922569738 SNUOM PSYKISK HELSE AS
# - 941455077 MEDI 3 AS
# - 971427396 STIFTELSEN NORDRE AASEN
# - 976724895 PTØ NORGE


0 comments on commit 985ff28

Please sign in to comment.