Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

API inconsistently returns lower-level data for *Sonderformen* on level 3 #6

Open
dpprdan opened this issue Nov 22, 2019 · 2 comments
Labels
bug Something isn't working GenesAPI

Comments

@dpprdan
Copy link

dpprdan commented Nov 22, 2019

When retrieving data for a Sonderform on the NUTS 3 Level (level=3), the tabular API sometimes (i.e. inconsistently IMHO) also returns data from the lower level. I think it should do this always (like regionalstatistik.de) or never (i.e. be consistent in applying the level parameter).

Some background (from Regionaldatenbank Deutschland, Methodische Besonderheiten der Raumgliederung, 11. Februar 2019)

[I]n Deutschland [haben sich] drei Vertreter einer Sonderform – dem sogenannten „Kommunalverband besonderer Art“ – herausgebildet, welche im Wesentlichen die Aufgaben eines Landkreises bzw. Kreises erfüllen. [...] [Der Regionalverband Saarbrücken, die Region Hannover und die Städteregion Aachen] sind [...] Bestandteil der Kreisebene (NUTS 3). Die Kreisebene verfügt dabei über ein breiteres Datenangebot als die Gemeindeebene (Regio-Stat-Tabellen, die nur bis zur Kreisebene angeboten werden können). Um aber weiterhin relevante statistische Daten der darin enthaltenen, nunmehr der Gemeindeebene angehörenden Städte Saarbrücken, Hannover und Aachen nachzuweisen, werden diese zusätzlich zu den Sonderformen auf der Kreisebene nachgewiesen.

Now, when we try to retrieve data on level 3 for 12411:BEVSTD for the Region Hannover from the tabular API, we get data for the Region but not the Stadt Hannover when we retrieve the total (i.e. without an dimension specified), but for both when we query for a specific dimension, e.g. (GES).

r <- purrr::partial(read.csv, colClasses = "character")
r("https://tabular.genesapi.org/?data=12411:BEVSTD&time=2017&level=3&parent=03241")
#>   region_id year measure   value statistic
#> 1     03241 2017  BEVSTD 1152675     12411
r("https://tabular.genesapi.org/?data=12411:BEVSTD(GES)&time=2017&level=3&parent=03241")
#>   region_id year measure  value X12411.BEVSTD.GES. statistic
#> 1     03241 2017  BEVSTD 563810               GESM     12411
#> 2     03241 2017  BEVSTD 588865               GESW     12411
#> 3  03241001 2017  BEVSTD 261192               GESM     12411
#> 4  03241001 2017  BEVSTD 273869               GESW     12411

The same is true Aachen (parent=05334) and Saarbrücken (parent=10041).

Details
r("https://tabular.genesapi.org/?data=12411:BEVSTD&time=2017&level=3&parent=05334")
#>   region_id year measure  value statistic
#> 1     05334 2017  BEVSTD 554068     12411
r("https://tabular.genesapi.org/?data=12411:BEVSTD(GES)&time=2017&level=3&parent=05334")
#>   region_id year measure  value X12411.BEVSTD.GES. statistic
#> 1     05334 2017  BEVSTD 279354               GESM     12411
#> 2     05334 2017  BEVSTD 274714               GESW     12411
#> 3  05334002 2017  BEVSTD 128064               GESM     12411
#> 4  05334002 2017  BEVSTD 118208               GESW     12411
r("https://tabular.genesapi.org/?data=12411:BEVSTD&time=2017&level=3&parent=10041")
#>   region_id year measure  value statistic
#> 1     10041 2017  BEVSTD 330150     12411
r("https://tabular.genesapi.org/?data=12411:BEVSTD(GES)&time=2017&level=3&parent=10041")
#>   region_id year measure  value X12411.BEVSTD.GES. statistic
#> 1     10041 2017  BEVSTD 162107               GESM     12411
#> 2     10041 2017  BEVSTD 168043               GESW     12411
#> 3  10041100 2017  BEVSTD  89755               GESM     12411
#> 4  10041100 2017  BEVSTD  91211               GESW     12411

So with data=12411:BEVSTD(GES), i.e. when the query includes a dimension, we get data for lower-level regions than level 3. When the query does not include a dimension (just data=12411:BEVSTD), we don’t.

I also tried this for 12613:BEV002 and there … it’s the other way around.

r("https://tabular.genesapi.org/?data=12613:BEV002&time=2017&level=3&parent=05334")
#>   region_id year measure value statistic
#> 1     05334 2017  BEV002  5909     12613
#> 2  05334002 2017  BEV002  2343     12613
r("https://tabular.genesapi.org/?data=12613:BEV002(GES)&time=2017&level=3&parent=05334")
#>   region_id year measure value X12613.BEV002.GES. statistic
#> 1     05334 2017  BEV002  2877               GESM     12613
#> 2     05334 2017  BEV002  3032               GESW     12613

Again the same pattern for the other regions.

Details
r("https://tabular.genesapi.org/?data=12613:BEV002&time=2017&level=3&parent=03241")
#>   region_id year measure value statistic
#> 1     03241 2017  BEV002 12676     12613
#> 2  03241001 2017  BEV002  5556     12613
r("https://tabular.genesapi.org/?data=12613:BEV002(GES)&time=2017&level=3&parent=03241")
#>   region_id year measure value X12613.BEV002.GES. statistic
#> 1     03241 2017       E  6093               GESM     12613
#> 2     03241 2017       E  6583               GESW     12613
r("https://tabular.genesapi.org/?data=12613:BEV002&time=2017&level=3&parent=10041")
#>   region_id year measure value statistic
#> 1     10041 2017  BEV002  4340     12613
#> 2  10041100 2017  BEV002  2223     12613
r("https://tabular.genesapi.org/?data=12613:BEV002(GES)&time=2017&level=3&parent=10041")
#>   region_id year measure value X12613.BEV002.GES. statistic
#> 1     10041 2017  BEV002  2098               GESM     12613
#> 2     10041 2017  BEV002  2242               GESW     12613

I see two options:

  1. If the goal is to resemble the output of regionalstatistik.de as closely as possible, the tabular API should always return the lower level for the Sonderformen (on levels 3 and 4, see below) - at least when there is data available.
  2. Alternatively, the tabular API should be consistent in applying the level parameter and only return data for the levels specified.

I am personally leaning towards 1. because

a) it resembles regionalstatistik.de,
b) for some dimensions there is generally no data available on level 4 (e.g. 12411:BEVSTD(NAT)), except for the abovementioned cities (which resemble “kreisfreie Städte” in that regard), so https://tabular.genesapi.org/?data=12411:BEVSTD(NAT)&time=2017&level=4 would only provide data for those, which again, is unexpected (right now it throws a 500 error),
c) you would have to introduce another level for Berliner Bezirke, see below.

@dpprdan
Copy link
Author

dpprdan commented Nov 22, 2019

The Berliner Bezirke are another edge-case (same source):

Eine weitere methodische Besonderheit bilden die zwölf Berliner Bezirke. Diese bilden die innerstädtische Gliederung der Stadt Berlin ab. Aufgrund der Relevanz und Größe dieser Gebietseinheiten werden die Berliner Bezirke zusätzlich zu der Stadt Berlin auf der Kreisebene nachgewiesen. [...]

So for 12411:BEVSTD on level 3 we see the same pattern for the Berliner Bezirke as above, with the slight twist that the values for the Bezirke are all 0 for this statistic.

r <- purrr::partial(read.csv, colClasses = "character")
r("https://tabular.genesapi.org/?data=12411:BEVSTD&time=2017&level=3&parent=11")
#>   region_id year measure   value statistic
#> 1     11000 2017  BEVSTD 3613495     12411
r("https://tabular.genesapi.org/?data=12411:BEVSTD(GES)&time=2017&level=3&parent=11")
#>    region_id year measure   value X12411.BEVSTD.GES. statistic
#> 1      11000 2017  BEVSTD 1776267               GESM     12411
#> 2      11000 2017  BEVSTD 1837228               GESW     12411
#> 3   11001001 2017  BEVSTD       0               GESM     12411
#> 4   11001001 2017  BEVSTD       0               GESW     12411
#> 5   11002002 2017  BEVSTD       0               GESM     12411
#> 6   11002002 2017  BEVSTD       0               GESW     12411
#> 7   11003003 2017  BEVSTD       0               GESM     12411
#> 8   11003003 2017  BEVSTD       0               GESW     12411
#> 9   11004004 2017  BEVSTD       0               GESM     12411
#> 10  11004004 2017  BEVSTD       0               GESW     12411
#> 11  11005005 2017  BEVSTD       0               GESM     12411
#> 12  11005005 2017  BEVSTD       0               GESW     12411
#> 13  11006006 2017  BEVSTD       0               GESM     12411
#> 14  11006006 2017  BEVSTD       0               GESW     12411
#> 15  11007007 2017  BEVSTD       0               GESM     12411
#> 16  11007007 2017  BEVSTD       0               GESW     12411
#> 17  11008008 2017  BEVSTD       0               GESM     12411
#> 18  11008008 2017  BEVSTD       0               GESW     12411
#> 19  11009009 2017  BEVSTD       0               GESM     12411
#> 20  11009009 2017  BEVSTD       0               GESW     12411
#> 21  11010010 2017  BEVSTD       0               GESM     12411
#> 22  11010010 2017  BEVSTD       0               GESW     12411
#> 23  11011011 2017  BEVSTD       0               GESM     12411
#> 24  11011011 2017  BEVSTD       0               GESW     12411
#> 25  11012012 2017  BEVSTD       0               GESM     12411
#> 26  11012012 2017  BEVSTD       0               GESW     12411

The 0s may not be an issue though, because:

Mit der Anpassung der AGS-Gebietsschlüssel im Januar 2019 werden die Berliner Bezirke nicht nur auf Ebene der Gemeinden (LAU 2), sondern auch auf Ebene der Landkreise / Kreise zusätzlich ausgewiesen. Diese Änderung wird in der Datenbereitstellung, wenn Daten für die Bezirke vorliegen, ab 2019 berücksichtigt. Für bereits veröffentlichte Kreis-Tabellen älterer Berichtsjahre erfolgt die Auffüllung nach und nach, vorausgesetzt es können Daten auf Ebene der Bezirke bereitgestellt werden. D. h., der aktuelle Datenbestand für die Berliner Bezirke wird zurzeit fortlaufend bearbeitet.

However, regionalstatistik.de currently returns a ., meaning “Zahlenwert unbekannt oder geheimzuhalten”, and not ... for “Angabe fällt später an”.

Data from the Berliner Bezirke is also provided on the LAU 2 level.

Analog zur Kreisebene werden die Berliner Bezirke zusätzlich zu der Stadt Berlin auf der Gemeindeebene nachgewiesen.

On level 4, the pattern is reversed, i.e. we get the data for the Bezirke when we do not specify the GES dimension, and we don’t if we do.

r("https://tabular.genesapi.org/?data=12411:BEVSTD&time=2017&level=4&parent=11")
#>    region_id year measure   value statistic
#> 1   11000000 2017  BEVSTD 3613495     12411
#> 2   11001001 2017  BEVSTD       0     12411
#> 3   11002002 2017  BEVSTD       0     12411
#> 4   11003003 2017  BEVSTD       0     12411
#> 5   11004004 2017  BEVSTD       0     12411
#> 6   11005005 2017  BEVSTD       0     12411
#> 7   11006006 2017  BEVSTD       0     12411
#> 8   11007007 2017  BEVSTD       0     12411
#> 9   11008008 2017  BEVSTD       0     12411
#> 10  11009009 2017  BEVSTD       0     12411
#> 11  11010010 2017  BEVSTD       0     12411
#> 12  11011011 2017  BEVSTD       0     12411
#> 13  11012012 2017  BEVSTD       0     12411
r("https://tabular.genesapi.org/?data=12411:BEVSTD(GES)&time=2017&level=4&parent=11")
#>   region_id year measure   value X12411.BEVSTD.GES. statistic
#> 1  11000000 2017  BEVSTD 1776267               GESM     12411
#> 2  11000000 2017  BEVSTD 1837228               GESW     12411

Everything is reversed yet again if we retrieve 12613:BEV002 data.

level 3

r("https://tabular.genesapi.org/?data=12613:BEV002&time=2017&level=3&parent=11")
#>    region_id year measure value statistic
#> 1      11000 2017  BEV002 34339     12613
#> 2   11001001 2017  BEV002     0     12613
#> 3   11002002 2017  BEV002     0     12613
#> 4   11003003 2017  BEV002     0     12613
#> 5   11004004 2017  BEV002     0     12613
#> 6   11005005 2017  BEV002     0     12613
#> 7   11006006 2017  BEV002     0     12613
#> 8   11007007 2017  BEV002     0     12613
#> 9   11008008 2017  BEV002     0     12613
#> 10  11009009 2017  BEV002     0     12613
#> 11  11010010 2017  BEV002     0     12613
#> 12  11011011 2017  BEV002     0     12613
#> 13  11012012 2017  BEV002     0     12613
r("https://tabular.genesapi.org/?data=12613:BEV002(GES)&time=2017&level=3&parent=11")
#>   region_id year measure value X12613.BEV002.GES. statistic
#> 1     11000 2017  BEV002 16892               GESM     12613
#> 2     11000 2017  BEV002 17447               GESW     12613

level 4

r("https://tabular.genesapi.org/?data=12613:BEV002&time=2017&level=4&parent=11")
#>   region_id year measure value statistic
#> 1  11000000 2017  BEV002 34339     12613
r("https://tabular.genesapi.org/?data=12613:BEV002(GES)&time=2017&level=4&parent=11")
#>    region_id year measure value X12613.BEV002.GES. statistic
#> 1   11000000 2017  BEV002 16892               GESM     12613
#> 2   11000000 2017  BEV002 17447               GESW     12613
#> 3   11001001 2017  BEV002     0               GESM     12613
#> 4   11001001 2017  BEV002     0               GESW     12613
#> 5   11002002 2017  BEV002     0               GESM     12613
#> 6   11002002 2017  BEV002     0               GESW     12613
#> 7   11003003 2017  BEV002     0               GESM     12613
#> 8   11003003 2017  BEV002     0               GESW     12613
#> 9   11004004 2017  BEV002     0               GESM     12613
#> 10  11004004 2017  BEV002     0               GESW     12613
#> 11  11005005 2017  BEV002     0               GESM     12613
#> 12  11005005 2017  BEV002     0               GESW     12613
#> 13  11006006 2017  BEV002     0               GESM     12613
#> 14  11006006 2017  BEV002     0               GESW     12613
#> 15  11007007 2017  BEV002     0               GESM     12613
#> 16  11007007 2017  BEV002     0               GESW     12613
#> 17  11008008 2017  BEV002     0               GESM     12613
#> 18  11008008 2017  BEV002     0               GESW     12613
#> 19  11009009 2017  BEV002     0               GESM     12613
#> 20  11009009 2017  BEV002     0               GESW     12613
#> 21  11010010 2017  BEV002     0               GESM     12613
#> 22  11010010 2017  BEV002     0               GESW     12613
#> 23  11011011 2017  BEV002     0               GESM     12613
#> 24  11011011 2017  BEV002     0               GESW     12613
#> 25  11012012 2017  BEV002     0               GESM     12613
#> 26  11012012 2017  BEV002     0               GESW     12613

@simonwoerpel
Copy link
Member

hey @dpprdan thanks for your issue reports. we are currently working some changes / fixes that might solve some of these, and we will come back to you afterwards to discuss this in more detail when we have released the latest changes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working GenesAPI
Projects
None yet
Development

No branches or pull requests

3 participants