- Notifications
You must be signed in to change notification settings - Fork19
Unofficial Statistics Netherlands (CBS) open data API client for Python
License
J535D165/cbsodata
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Retrieve data from theopen data interface of StatisticsNetherlands(Centraal Bureau voor de Statistiek) withPython. The data isidentical in content to the tables which can be retrieved and downloadedfromStatLine. CBS datasets are accessed viatheCBS open dataportal.
The documentation of this package is found at this page and onreadthedocs.io.
R user? UsecbsodataR.
From PyPi
pip install cbsodata
Load the package with
>>>importcbsodata
Statistics Netherlands (CBS) has a large amount of public available datatables (more than 4000 at the moment of writing). Each table isidentified by a unique identifier (Identifier
).
>>>tables=cbsodata.get_table_list()>>>print(tables[0]){'Catalog':'CBS','ColumnCount':18,'DefaultPresentation':'_la=nl&_si=&_gu=&_ed=LandVanUiteindelijkeZeggenschapUCI&_td=Perioden&graphType=line','DefaultSelection':"$filter=((LandVanUiteindelijkeZeggenschapUCI eq '11111') or (LandVanUiteindelijkeZeggenschapUCI eq '22222')) and (Bedrijfsgrootte eq '10000') and (substringof('JJ',Perioden))&$select=LandVanUiteindelijkeZeggenschapUCI, Bedrijfsgrootte, Perioden, FiscaalJaarloonPerBaan_15",'ExplanatoryText':'','Frequency':'Perjaar','GraphTypes':'Table,Bar,Line','ID':0,'Identifier':'82010NED','Language':'nl','MetaDataModified':'2014-02-04T02:00:00','Modified':'2014-02-04T02:00:00','OutputStatus':'Regulier','Period':'2008 t/m 2011','ReasonDelivery':'Actualisering','RecordCount':32,'SearchPriority':'2','ShortDescription':'\nDeze tabel bevat informatie over banen en lonen bij bedrijven in Nederland, uitgesplitst naar het land van uiteindelijke zeggenschap van die bedrijven. Hierbij wordt onderscheid gemaakt tussen bedrijven onder Nederlandse zeggenschap en bedrijven onder buitenlandse zeggenschap. In de tabel zijn alleen de bedrijven met werknemers in loondienst meegenomen. De cijfers hebben betrekking op het totale aantal banen bij deze bedrijven en de samenstelling van die banen naar kenmerken van de werknemers (baanstatus, geslacht, leeftijd, herkomst en hoogte van het loon). Ook het gemiddelde fiscale jaarloon per baan is in de tabel te vinden.\n\nGegevens beschikbaar vanaf: 2008\n\nStatus van de cijfers:\nDe cijfers in deze tabel zijn definitief.\n\nWijzigingen per 4 februari 2014\nDe cijfers van 2011 zijn toegevoegd.\n\nWanneer komen er nieuwe cijfers?\nDe cijfers over 2012 verschijnen in de eerste helft van 2015.\n','ShortTitle':'Zeggenschap bedrijven; banen, grootte','Source':'CBS.','Summary':'Banen en lonen van werknemers bij bedrijven in Nederland\nnaar land van uiteindelijke zeggenschap en bedrijfsgrootte','SummaryAndLinks':'Banen en lonen van werknemers bij bedrijven in Nederland<br />naar land van uiteindelijke zeggenschap en bedrijfsgrootte<br /><a href="http://opendata.cbs.nl/ODataApi/OData/82010NED">http://opendata.cbs.nl/ODataApi/OData/82010NED</a><br /><a href="http://opendata.cbs.nl/ODataFeed/OData/82010NED">http://opendata.cbs.nl/ODataFeed/OData/82010NED</a>','Title':'Zeggenschap bedrijven in Nederland; banen en lonen, bedrijfsgrootte','Updated':'2014-02-04T02:00:00'}
Get information about a table with theget_info
function.
>>>info=cbsodata.get_info('82070ENG')# Returns a dict with info>>>info['Title']'Caribbean Netherlands; employed labour force characteristics 2012'>>>info['Modified']'2013-11-28T15:00:00'
The function you are looking for!! The functionget_data
returns alist of dicts with the table data.
>>>data=cbsodata.get_data('82070ENG')[{'CaribbeanNetherlands':'Bonaire','EmployedLabourForceInternatDef_1':8837,'EmployedLabourForceNationalDef_2':8559,'Gender':'Total male and female','ID':0,'Periods':'2012','PersonalCharacteristics':'Total personal characteristics'}, {'CaribbeanNetherlands':'St. Eustatius','EmployedLabourForceInternatDef_1':2099,'EmployedLabourForceNationalDef_2':1940,'Gender':'Total male and female','ID':1,'Periods':'2012','PersonalCharacteristics':'Total personal characteristics'}, {'CaribbeanNetherlands':'Saba','EmployedLabourForceInternatDef_1':1045,'EmployedLabourForceNationalDef_2':971,'Gender':'Total male and female','ID':2,'Periods':'2012','PersonalCharacteristics':'Total personal characteristics'},# ...]
The keyword argumentdir
can be used to download the data directly toyour file system.
>>>data=cbsodata.get_data('82070ENG',dir="dir_to_save_data")
There are multiple ways to retrieve data from catalogs other than'opendata.cbs.nl'. The code below shows 3 different ways to retrievedata from the catalog 'dataderden.cbs.nl' (known from Iv3).
On module level.
cbsodata.options.catalog_url='dataderden.cbs.nl'# list tablescbsodata.get_table_list()# get dataset 47003NEDcbsodata.get_data('47003NED')
With context managers.
withcbsodata.catalog('dataderden.cbs.nl'):# list tablescbsodata.get_table_list()# get dataset 47003NEDcbsodata.get_data('47003NED')
As a function argument.
# list tablescbsodata.get_table_list(catalog_url='dataderden.cbs.nl')# get dataset 47003NEDcbsodata.get_data('47003NED',catalog_url='dataderden.cbs.nl')
The package works well with Pandas. Convert the result easily into apandas DataFrame with the code below.
>>>data=pandas.DataFrame(cbsodata.get_data('82070ENG'))>>>data.head()
The list of tables can be turned into a pandas DataFrame as well.
>>>tables=pandas.DataFrame(cbsodata.get_table_list())>>>tables.head()
This library ships with a Command Line Interface (CLI).
> cbsodata -husage: cbsodata [-h] [--version] [subcommand]CBS Open Data: Command Line Interfacepositional arguments: subcommand the subcommand (one of'data','info','list')optional arguments: -h, --help show thishelp message andexit --version show the package version
Download data:
> cbsodata data 82010NED
Retrieve table information:
> cbsodata info 82010NED
Retrieve a list with all tables:
> cbsodata list
Use the flag-o
to load data to a file (JSON lines).
> cbsodata data 82010NED -o table_82010NED.jl
About
Unofficial Statistics Netherlands (CBS) open data API client for Python