Skip to content

Commit

Permalink
Fixed nar groups, tests and added rst file
Browse files Browse the repository at this point in the history
  • Loading branch information
sebrothe committed Dec 14, 2023
1 parent 822d751 commit adfede1
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 48 deletions.
19 changes: 19 additions & 0 deletions docs/ssb_arbmark_fagfunksjoner.rst
Original file line number Diff line number Diff line change
@@ -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:
97 changes: 50 additions & 47 deletions src/ssb_arbmark_fagfunksjoner/groups.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 = [
Expand All @@ -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
Expand Down Expand Up @@ -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
]

Expand Down
4 changes: 3 additions & 1 deletion tests/test_groups.py
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down

0 comments on commit adfede1

Please sign in to comment.