Datalandsbyen Logo

    Datalandsbyen

    • Kategorier
    • Emneord
    • Siste
    • Populære
    • Kalender
    • Lenkeikon
    • Søk
    • Varslinger Logg inn / Registrer
    Community illustrasjon

    Datalandsbyen

    Velkommen til nettforumet Datalandsbyen! Vi er glade for at du har funnet frem til oss.

    Her kan du stille spørsmål om alt du måtte lure på om deling og bruk av data, eksempelvis datasett, API-er, begreper, informasjonsmodeller og juss, videre kan du delta i diskusjoner, vise frem prosjektene dine, knytte nye kontakter og finne nye samarbeid. Nettforumet er åpent for alle, men for å skrive innlegg må du først registrere deg. Formålet med forumet er å legge til rette for at data skal bli en verdiskapende ressurs for hele samfunnet – bli med og bidra til økt kunnskap, åpenhet og innovasjon. Vi oppfordrer til en konstruktiv og saklig dialog i nettforumet.

    Analyse av Enhetsregisteret med Python og Pandas

    Tips og spørsmål
    python api pandas
    5
    12
    6665
    Laster flere innlegg
    • Eldste til nyeste
    • Nyeste til eldste
    • Flest stemmer
    Denne tråden har blitt slettet. Bare brukere med trådhåndterings-privilegier kan se den.
    • L
      livar.bergheim Svar til @oivind.langeland sist endret av

      @oivind-langeland Mystisk avvik. Spørsmålet er midt i blinken for å legge inn i kommentarfeltet direkte på Enhetsregisteret si oppføring i data.norge.no. Legg det gjerne inn der.

      Enhetsregisteret som CSV via Datahotellet
      Når det gjeld Enhetsregisteret i CSV-format så er det tilgjengeleg via Datahotellet (hotell.difi.no).

      Merk at det er data.brreg.no som er hovud-distribusjonen for Enhetsregisteret. Når Enhetsregisteret vart gjort tilgjengeleg som opne data for om lag 10 år sidan, vart det først distribuert via Datahotellet. Seinare (2016?) starta Brønnøysundregistrene med distribusjonar frå eigne løysingar på data.brreg.no. Sidan så mange brukar Datahotellet, har ein fortsett å distribuere der også. Skal ein setje opp integrasjonar, bør ein bruke data.brreg.no.

      1 Svar Siste svar Svar Siter 1
      • O
        oivind.langeland sist endret av

        @livar-bergheim Tusen takk for oppfølgingen! Jeg er glad jeg var ydmyk i min første post og antydet at feilen nok kunne ligge på min side. Ved nærmere testing, og etter noen tips fra @steinar-skagemo , viser det seg nemlig at feilen nettopp ligger på min side. Det viser seg altså at xlsx-filen man får ned fra APIet til Brreg inneholder to faner. Dersom Xlsx2csv-modulen kjøres uten parametere, tar den bare første fanen, og da mister man data. Jeg løste det ved å kjøre Xlsx2csv-modulen to ganger, en gang for hvert sheet, og deretter slå sammen resultatene fra disse to kjøringene, og droppe duplikatene. Da stemmer tallene overens fra xlsx og direktesøk i APIet til Brreg. Det er nok mangt man kan si om koden under, men den viser hvert fall hvordan det kan gjøres. Igjen tusen takk for at både du og Steinar fulgte opp, saken er løst 🙂

        def lag_utvalg(): 
            Xlsx2csv(ER_FULL_FIL, outputencoding="utf-8").convert("er1.csv", sheetid=1)
            Xlsx2csv(ER_FULL_FIL, outputencoding="utf-8").convert("er2.csv", sheetid=2)
        
            df_fane1 = pd.read_csv('er1.csv')
            df_fane2 = pd.read_csv('er2.csv')
            df_kombinert = pd.concat([df_fane1, df_fane2], ignore_index=True, sort=False)
            df_kombinert_trimmet = df_kombinert[["Organisasjonsnummer", "Navn", 'Organisasjonsform.kode', "Organisasjonsform.beskrivelse", "Næringskode 1", "Næringskode 1.beskrivelse", "Næringskode 2", "Næringskode 2.beskrivelse", "Næringskode 3", "Næringskode 3.beskrivelse", "Postadresse.adresse", "Postadresse.kommune", "Registreringsdato i Enhetsregisteret", "Antall ansatte"]]
            df_utvalg = df_kombinert_trimmet.astype(str)
         
            sok_etter = list(NACE_UTVALG.split(","))
        
            nace_utvalg_1 = df_utvalg[df_utvalg['Næringskode 1'].str.contains('|'.join(sok_etter))]
            nace_utvalg_2 = df_utvalg[df_utvalg['Næringskode 2'].str.contains('|'.join(sok_etter))]
            nace_utvalg_3 = df_utvalg[df_utvalg['Næringskode 3'].str.contains('|'.join(sok_etter))]
               
            utvalg = pd.concat([nace_utvalg_1, nace_utvalg_2, nace_utvalg_3], ignore_index=True, sort=False).drop_duplicates(subset=['Organisasjonsnummer'])
            
            skriv_csv(utvalg, ER_UTVALG_FIL)
        
        1 Svar Siste svar Svar Siter 2
        • S
          sophus.aarnaes sist endret av

          Jeg er helt ny på praktisk bruk av APIer, men tenkte å bruke noen rolige sommerdager på å gjøre noe med det. Er det noen som har en tutorial e.l på bruk av enhetsregisteret APIet med Python (3.7)? Det ser ut som om det står mye nyttig her
          https://data.brreg.no/enhetsregisteret/api/docs/index.html
          men jeg går meg vill i hvordan jeg får ut informasjonen. Jeg får ut OK-kode (200) som tyder på at ting er satt opp riktig, men jeg skjønner f.eks ikke hvordan jeg kan se innholdet i json fil

          import requests
          
          response = requests.get('https://data.brreg.no/enhetsregisteret/api/enheter/lastned')
          print(response)
          
          O 1 Svar Siste svar Svar Siter 0
          • O
            oivind.langeland Svar til @sophus.aarnaes sist endret av

            @sophus-aarnaes jeg driver med samme øvelsen, og deler noe av min innsikt, kanskje det kan hjelpe. Satser på at @steinar-skagemo eller de andre fra BR korrigerer meg om jeg er helt ute.. Det endepunktet du bruker tror jeg bare gir deg en json-fil, som i tillegg er zippet. For at du skal kunne gjøre noe med den må du først zippe den opp og lese hele eller deler av den inn i maskinens arbeidsminne. Min erfaring er at den er utrolig tung å jobbe med og egentlig mest nyttig om du har tenkt til å gjøre analyse eller andre store oppgaver på hele ER (ikke underenhetene) lokalt. Om du er på jakt etter å lære litt mer praktisk bruk av API ville jeg brukt et av andre endepunktene, dette som nevnes i eksempel 2 er et bra utgangspunkt (jf. din lenke): b9ad525c-8cca-477f-a0ea-a2f2a000f5fe-image.png

            Jeg har skrevet en liten python-snutt som bruker det APIet. Den ligger her: https://github.com/xivind/learning-code/blob/main/br_enhetsregisteret/er_api_test.py

            Med slik bruk av APIet får du json-svaret fra APIet rett inn i arbeidsminnet og kan skrive det ut (print-metoden) eller gjøre andre operasjoner på det, f. eks. sammenstille og skrive til en json-fil. Eller lese inn i en Panda-frame for litt analyse, jf. Steinars instruks. Håper dette er til hjelp, og så har sikkert folkene fra BR eller Digdir @livar-bergheim mer å legge til 🙂 PS Kodesnutten jeg viser til over er fortsatt under arbeid..

            1 Svar Siste svar Svar Siter 0
            • S
              sophus.aarnaes sist endret av sophus.aarnaes

              Takk for svar og super deling av kode på Github. Der er det sikkert mye å lære, men jeg trenger å ta de første skrittene først og skjønne hva linje for linje gjør. Jeg valgte heller eksempelet med å hente en spesifikk enhet basert på orgnr. Når jeg også skjønte at jeg må bruker print(response.text) hjalp det:

              response = requests.get('https://data.brreg.no/enhetsregisteret/api/enheter/920125298')
              print(response.text)
              
              

              Svar:
              {"organisasjonsnummer":"920125298","navn":"ASKER KOMMUNE","organisasjonsform":{"kode":"KOMM","beskrivelse":"Kommune","_links": ......

              Det er mulig dette er en avsporing av den opprinnelige tråden som handlet om utforskning av ER med Pandas?
              Har i tilfelle noen forslag til hvor tips/triks/spørsmål om bruk av ER APIet hører hjemme?
              Hvis noen lager en Python tutorial på bruk av ER APIet for nybegynnere kan det kanskje være et nytt innlegg på nivå med "Analyse av Enhetsregisteret med Python og Pandas"?

              O 1 Svar Siste svar Svar Siter 2
              • O
                oivind.langeland Svar til @sophus.aarnaes sist endret av

                @sophus-aarnaes det er heldigvis ganske lave skuldre på dette forumet, så tror ikke er så farlig at innlegg ikke treffer 100% på tråd-temaet 🙂 Men da jeg skrev min post tipset @livar-bergheim om at det kanskje var bedre å legge det rett på datasettet det gjelder. I dette tilfellet ER, og her er lenken jeg ble vist til: https://data.norge.no/datasets/68d08f28-a16d-4fab-a953-ed4ab08ce2e2

                L 1 Svar Siste svar Svar Siter 1
                • L
                  livar.bergheim Svar til @oivind.langeland sist endret av livar.bergheim

                  @oivind-langeland @sophus-aarnaes : Det er framleis analyse av Enhetsregisteret med Python, sjølv om det er utan Pandas, så eg tenker dette passar godt som ei fortsetting på denne tråden 🙂
                  Om du seinare tykkjer det passar betre, går det alltids an å lage ein ny tråd.

                  Kommentarfeltet tenker eg passar betre for kortare kommentarar, til dømes @oivind-langeland sitt innlegg med eit godt tips til andre brukarar på å vere obs på at XLSX-fila har fleire ark. Det er nokre tankar om kva ein kan bruke kommentar-feltet til i lanseringsposten frå tidlegare i år. Kommenter gjerne om du har tankar om kommentarfeltet.

                  Dersom ein har ein lengre diskusjonstråd som her, så passar det betre som ein vanleg tråd/emne i Datalandsbyen. Når ein legg inn ei lenke til datasettet i posten, dukkar det opp i datasett-oppføringa på data.norge.no, under avsnittet «Datalandsbyen»:
                  e36a61d5-678d-4dc4-890f-61323a5ea52c-image.png

                  1 Svar Siste svar Svar Siter 1
                  • J
                    jon.tonnessen sist endret av

                    Bra å se at flere ønsker å dele erfaringer fra programmatisk behandling av ER med python/pandas dataframe.

                    Jeg lurer på om noen av dere har tips til bruk av APIet. Er ikke så kjent med curl, men helt ok i python og terminal.

                    Ønsker å hente navn for et sett med ca 250 organisasjonsnumre. Jeg kan selvfølgelig gjøre det for hver enkelt enhet med:

                    $ curl 'https://data.brreg.no/enhetsregisteret/api/enheter/112233445' -i -X GET
                    

                    men får da hele oppføringen i retur.

                    Noen som har tips til hvordan jeg kan be om bare navn for hele listen med org.nr.?

                    L 1 Svar Siste svar Svar Siter 0
                    • L
                      livar.bergheim Svar til @jon.tonnessen sist endret av

                      @jon-tonnessen Ser ikkje ut til at du kan hente kun foretaksnamn ved oppslag i data.brreg.no sitt API. Du kjem ikkje unna å motta oppføringa med postadresse og alle andre felt, og må deretter fjerne det unødige lokalt etter å ha motteke dataene.

                      Eit grep som gjer det lettare å slå opp dei 250 organisasjonsnummera, er å hente fleire enheter i eitt API-oppslag.
                      Eksempel: https://data.brreg.no/enhetsregisteret/api/enheter/?organisasjonsnummer=983887457,889640782

                      Korleis ein gjer dette i Python/Pandas veit eg dessverre ikkje i farta.

                      J 1 Svar Siste svar Svar Siter 0
                      • J
                        jon.tonnessen Svar til @livar.bergheim sist endret av jon.tonnessen

                        @livar-bergheim Var det jeg mistenkte, men det er ikke noe problem. Vasking og fjerning av ikke-relevante nøkler kan gjøres enkelt i python med pandas dataframes med df.drop:

                        # Fjerne kolonner for næringskode:
                        
                        df.drop(columns=['naeringskode1', 'naeringskode1_beskrivelse', 'naeringskode2', 'naeringskode2_beskrivelse', 'naeringskode3', 'naeringskode3_beskrivelse'])
                        
                        1 Svar Siste svar Svar Siter 0
                        Ikon Svar
                        Ikon Logg inn for å besvare
                        • Første innlegg
                          Seneste innlegg
                        • Datalandsbyen Logo
                        • Våre partnere
                        • Felles datakatalog Åpne
                        • Datafabrikken Åpne
                        • Transportportal Åpne
                        • Om nettstedet
                        • Digitaliseringsdirektoratet forvalter datalandsbyen.
                        • Samtykke og brukervilkår
                        • Personvernerklæring Åpne
                        • Informasjonskapsler Åpne
                        • Tilgjengelighetserklæring Åpne
                        • Kontakt
                        • Lenkeikonfellesdatakatalog@digdir.no