From adfede1dfda8264e1b3bfecba7cbd6dea8434145 Mon Sep 17 00:00:00 2001 From: Jan Sebastian Rothe Date: Thu, 14 Dec 2023 16:18:40 +0100 Subject: [PATCH] Fixed nar groups, tests and added rst file --- docs/ssb_arbmark_fagfunksjoner.rst | 19 +++++ src/ssb_arbmark_fagfunksjoner/groups.py | 97 +++++++++++++------------ tests/test_groups.py | 4 +- 3 files changed, 72 insertions(+), 48 deletions(-) create mode 100644 docs/ssb_arbmark_fagfunksjoner.rst diff --git a/docs/ssb_arbmark_fagfunksjoner.rst b/docs/ssb_arbmark_fagfunksjoner.rst new file mode 100644 index 0000000..ab6b952 --- /dev/null +++ b/docs/ssb_arbmark_fagfunksjoner.rst @@ -0,0 +1,19 @@ +ssb\_arbmark\_fagfunksjoner package +=================================== + + +ssb\_arbmark\_fagfunksjoner.functions module +-------------------------------------------- + +.. automodule:: ssb_arbmark_fagfunksjoner.functions + :members: + :undoc-members: + :show-inheritance: + +ssb\_arbmark\_fagfunksjoner.groups module +----------------------------------------- + +.. automodule:: ssb_arbmark_fagfunksjoner.groups + :members: + :undoc-members: + :show-inheritance: diff --git a/src/ssb_arbmark_fagfunksjoner/groups.py b/src/ssb_arbmark_fagfunksjoner/groups.py index 548c356..35cf4cc 100644 --- a/src/ssb_arbmark_fagfunksjoner/groups.py +++ b/src/ssb_arbmark_fagfunksjoner/groups.py @@ -91,8 +91,8 @@ def nace_sn07_47grp(nace_sn07: PdSeriesStr, display: str = "label") -> PdSeriesS nace_sn07 = nace_sn07.replace(".", "") # Substring of NACE codes at length 2 and 3 - nace2 = pd.Series(nace_sn07.str[:2], name="nace2") - nace3 = pd.Series(nace_sn07.str[:3], name="nace3") + nace2 = nace_sn07.str[:2].to_numpy() + nace3 = nace_sn07.str[:3].to_numpy() # Define the conditions for each group conditions = [ @@ -108,57 +108,55 @@ def nace_sn07_47grp(nace_sn07: PdSeriesStr, display: str = "label") -> PdSeriesS np.isin(nace2, ["10", "11", "12"]), # Næringsmiddel-,drikkev.,tobakkind. np.isin(nace2, ["13", "14", "15"]), # Tekstil-,bekledn.-,lærvareind. np.isin(nace2, ["16", "17"]), # Trelast- og trevareind. - (nace2 == "18").to_numpy(), # Trykking, grafisk industri + (nace2 == "18"), # Trykking, grafisk industri np.isin( nace2, ["19", "20", "21"] ), # Petrolieum, kull, kjemisk og farmasøytisk industri np.isin(nace2, ["22", "23"]), # Gummivare-, plast-,mineralproduktind. - (nace2 == "24").to_numpy(), # Metallindustri - (nace2 == "25").to_numpy(), # Metallvareindustri + (nace2 == "24"), # Metallindustri + (nace2 == "25"), # Metallvareindustri np.isin(nace2, ["26", "27"]), # Data- og elektronisk industri - (nace2 == "28").to_numpy(), # Maskinindustri + (nace2 == "28"), # Maskinindustri np.logical_or( np.isin(nace2, ["29", "33"]), np.logical_and(nace3 >= "302", nace3 <= "309") ), # Transportmidelindustri, utenom 30.1; Produksjon av kjøretøy og tilhengere, unntatt motorvogner og motorsykler - ( - nace3 == "301" - ).to_numpy(), # Produksjon av skip og båter, inkl. oljeplattformer + (nace3 == "301"), # Produksjon av skip og båter, inkl. oljeplattformer np.isin(nace2, ["31", "32"]), # Møbel og annen industri - (nace2 == "35").to_numpy(), # Elekstrisitet, gass, damp, varmtvann + (nace2 == "35"), # Elekstrisitet, gass, damp, varmtvann np.logical_and(nace2 >= "36", nace2 <= "39"), # Vann, avløp og renovasjon np.isin(nace2, ["41", "42", "43"]), # Bygge- og anleggsvirksomhet - (nace2 == "45").to_numpy(), # Motorvognrep og -handel - (nace2 == "46").to_numpy(), # Agentur- og engroshandel - (nace2 == "47").to_numpy(), # Detaljhandel, unntatt motorvogner - (nace2 == "49").to_numpy(), # Landtransport og rørtransport - (nace2 == "50").to_numpy(), # Sjøfart - (nace2 == "51").to_numpy(), # Lufttransport - (nace2 == "52").to_numpy(), # Lagring og tjenester tilknyttet transport - (nace2 == "53").to_numpy(), # Posttjenester - (nace2 == "55").to_numpy(), # Overnattingsvirksomhet - (nace2 == "56").to_numpy(), # Serveringsvirksomhet + (nace2 == "45"), # Motorvognrep og -handel + (nace2 == "46"), # Agentur- og engroshandel + (nace2 == "47"), # Detaljhandel, unntatt motorvogner + (nace2 == "49"), # Landtransport og rørtransport + (nace2 == "50"), # Sjøfart + (nace2 == "51"), # Lufttransport + (nace2 == "52"), # Lagring og tjenester tilknyttet transport + (nace2 == "53"), # Posttjenester + (nace2 == "55"), # Overnattingsvirksomhet + (nace2 == "56"), # Serveringsvirksomhet np.isin(nace2, ["58", "59", "60"]), # Forlag, film-, TV-pr, kringkasting np.isin(nace2, ["61", "62", "63"]), # IKT-virksomhet - (nace2 == "64").to_numpy(), # Finansieringsvirksomhet (bank, m.m.) - (nace2 == "65").to_numpy(), # Forsikringsvirksomhet og pensjonskasser - (nace2 == "66").to_numpy(), # Finansiell tjenesteyting - (nace2 == "68").to_numpy(), # Omsetning og drift av fast eiendom + (nace2 == "64"), # Finansieringsvirksomhet (bank, m.m.) + (nace2 == "65"), # Forsikringsvirksomhet og pensjonskasser + (nace2 == "66"), # Finansiell tjenesteyting + (nace2 == "68"), # Omsetning og drift av fast eiendom np.isin(nace2, ["69", "70", "71"]), # Juridisk-, hovedkontor-, konsulentj. - (nace2 == "72").to_numpy(), # Forskning og utviklingsarbeid + (nace2 == "72"), # Forskning og utviklingsarbeid np.isin( nace2, ["73", "74", "75"] ), # Faglig, vitenskapelig og teknisk tjenesteyting ellers np.logical_and( nace2 >= "77", nace2 <= "82" ), # Forretningsmessig tjenesteyting ellers - (nace2 == "84").to_numpy(), # Off.adm., forsvar, sosialforsikring - (nace2 == "85").to_numpy(), # Undervining - (nace2 == "86").to_numpy(), # Helsetjenester + (nace2 == "84"), # Off.adm., forsvar, sosialforsikring + (nace2 == "85"), # Undervining + (nace2 == "86"), # Helsetjenester np.isin(nace2, ["87", "88"]), # Pleie og omsorg; Fritids- og sportsaktiviteter np.logical_and(nace2 >= "90", nace2 <= "93"), # Kultur, underholdning og fritid np.isin(nace2, ["94", "95", "96"]), # Annen tjenesteyting - (nace2 == "97").to_numpy(), # Lønnet husarbeid i private husholdninger - (nace2 == "99").to_numpy(), # Internasjonale organisasjoner + (nace2 == "97"), # Lønnet husarbeid i private husholdninger + (nace2 == "99"), # Internasjonale organisasjoner ] # Define the group labels with string keys @@ -248,33 +246,38 @@ def nace_sn07_17grp(nace_sn07: PdSeriesStr, display: str = "label") -> PdSeriesS print( f"Warning: There are {n_unique_grp} unique industry divisions on 2-number level. The function first groups the input into the 47 groups standard." ) - nace_str2 = nace_sn07_47grp(nace_sn07, display="number") + nace_str2 = nace_sn07_47grp(nace_sn07, "number") + + # Convert series to numpy array + nace_str2_np = np.array(nace_str2) # Define the conditions for each group conditions = [ - (nace_str2 == "01").to_numpy(), # 01-03 Jordbruk, skogbruk og fiske - np.isin(nace_str2, ["02", "03"]), # 05-09 Bergverksdrift og utvinning - np.logical_and(nace_str2 >= "04", nace_str2 <= "16"), # 10-33 Industri - np.isin(nace_str2, ["17", "18"]), # 35-39 Elektrisitet, vann og renovasjon - (nace_str2 == "19").to_numpy(), # 41-43 Bygge- og anleggsvirksomhet + (nace_str2_np == "01"), # 01-03 Jordbruk, skogbruk og fiske + np.isin(nace_str2_np, ["02", "03"]), # 05-09 Bergverksdrift og utvinning + np.logical_and(nace_str2_np >= "04", nace_str2_np <= "16"), # 10-33 Industri + np.isin(nace_str2_np, ["17", "18"]), # 35-39 Elektrisitet, vann og renovasjon + (nace_str2_np == "19"), # 41-43 Bygge- og anleggsvirksomhet np.isin( - nace_str2, ["20", "21", "22"] + nace_str2_np, ["20", "21", "22"] ), # 45-47 Varehandel, reparasjon av motorvogner np.logical_and( - nace_str2 >= "23", nace_str2 <= "27" + nace_str2_np >= "23", nace_str2_np <= "27" ), # 49-53 Transport og lagring - np.isin(nace_str2, ["28", "29"]), # 55-56 Overnattings- og serveringsvirksomhet - np.isin(nace_str2, ["30", "31"]), # 58-63 Informasjon og kommunikasjon - np.isin(nace_str2, ["32", "33", "34"]), # 64-66 Finansiering og forsikring + np.isin( + nace_str2_np, ["28", "29"] + ), # 55-56 Overnattings- og serveringsvirksomhet + np.isin(nace_str2_np, ["30", "31"]), # 58-63 Informasjon og kommunikasjon + np.isin(nace_str2_np, ["32", "33", "34"]), # 64-66 Finansiering og forsikring np.logical_and( - nace_str2 >= "35", nace_str2 <= "38" + nace_str2_np >= "35", nace_str2_np <= "38" ), # 68-75 Teknisk tjenesteyting, eiendomsdrift - (nace_str2 == "39").to_numpy(), # 77-82 Forretningsmessig tjenesteyting - (nace_str2 == "40").to_numpy(), # 84 Off.adm., forsvar, sosialforsikring - (nace_str2 == "41").to_numpy(), # 85 Undervisning - np.isin(nace_str2, ["42", "43"]), # 86-88 Helse- og sosialtjenester + (nace_str2_np == "39"), # 77-82 Forretningsmessig tjenesteyting + (nace_str2_np == "40"), # 84 Off.adm., forsvar, sosialforsikring + (nace_str2_np == "41"), # 85 Undervisning + np.isin(nace_str2_np, ["42", "43"]), # 86-88 Helse- og sosialtjenester np.logical_and( - nace_str2 >= "44", nace_str2 <= "47" + nace_str2_np >= "44", nace_str2_np <= "47" ), # 90-99 Personlig tjenesteyting ] diff --git a/tests/test_groups.py b/tests/test_groups.py index 909d09f..6ad7197 100644 --- a/tests/test_groups.py +++ b/tests/test_groups.py @@ -14,7 +14,9 @@ def sample_df() -> pd.DataFrame: return pd.DataFrame( { "alder": np.random.randint(15, 70, size=100), - "nace_sn07": [f"{i:02d}" for i in np.random.randint(1, 100, size=100)], + "nace_sn07": np.random.choice( + ["49.100", "56.101", "84.110", "93.130", "95.110"], size=100 + ), "sektor": np.random.choice(["6100", "6500", "1510", "1520"], size=100), "undersektor": np.random.choice(["007", "008", "009"], size=100), "ansatte": np.random.randint(0, 300, size=100),