Umgang mit Destatis-Datenformat?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
buhtz
Beiträge: 1106
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Umgang mit Destatis-Datenformat?

Beitrag von buhtz » 17.01.2023 16:12:22

Mich würde interessieren, ob es für diese Form von Daten eine klare Bezeichnung gib, ob dies eine destatis-Spezialität ist. Weiterhin möchte ich nämlich in Erfahrung bringen, ob es hierfür Tools gibt, die sowas out-of-the-box verarbeiten und ggf. umwandeln können (z.B. in CSV).

Beispiel (hier zum Download incl. Datensatzbeschreibung):

Code: Alles auswählen

102023013101          Schleswig-Holstein                                Kiel                                                                                                                                                
402023013101001       Flensburg, Stadt                                  Flensburg                                         41                                                                                                
502023013101001   0000Flensburg, Stadt                                                                                    50                                                                                                
6020230131010010000000Flensburg, Stadt                                                                                    61    000000056730000009111300000045336    24937*****  2115111211901001                           
402023013101002       Kiel, Landeshauptstadt                            Kiel                                              41                                                                                                
502023013101002   0000Kiel, Landeshauptstadt                                                                              50                                                                                                
6020230131010020000000Kiel, Landeshauptstadt                                                                              61    000000118650000024624300000119860    24103*****  2119151713101005                           
402023013101003       Lübeck, Hansestadt                                Lübeck                                            41                                                                                                
502023013101003   0000Lübeck, Hansestadt                                                                                  50                                                                                                
6020230131010030000000Lübeck, Hansestadt                                                                                  61    000000214190000021627700000104005    23552*****  2122172113501011                           
402023013101004       Neumünster, Stadt                                 Neumünster                                        41                                                                                                
502023013101004   0000Neumünster, Stadt                                                                                   50                                                                                                
6020230131010040000000Neumünster, Stadt                                                                                   61    000000071660000007949600000039382    24534*****  2124151913901006                           
402023013101051       Dithmarschen                                      Heide                                             43                                                                                                
502023013101051   0011Brunsbüttel, Stadt                                                                                  50                                                                                                
502023013101051   0044Heide, Stadt                                                                                        50                                                                                                
502023013101051   5163Burg-St. Michaelisdonn                            Burg (Dith.)                                      51                                                                                                
502023013101051   5166Marne-Nordsee                                     Marne                                             51                                                                                                
502023013101051   5169Eider                                             Hennstedt                                         55                                                                                                
502023013101051   5172Heider Umland                                     Heide                                             55                                                                                                
502023013101051   5175Mitteldithmarschen                                Meldorf                                           51                                                                                                
502023013101051   5178Büsum-Wesselburen                                 Büsum                                             51                                                                                                
6020230131010510015175Albersdorf                                                                                          64    000000017120000000377200000001837    25767       2123131912701003                           
6020230131010510025175Arkebek                                                                                             64    000000006920000000022000000000114    25767       2123131912701003                           
6020230131010510035163Averlak                                                                                             64    000000009060000000055800000000290    25715       2123131912705003                           
6020230131010510045175Bargenstedt                                                                                         64    000000011900000000096500000000468    25704       2123131912713003                           
6020230131010510055169Barkenholm                                                                                          64    000000005110000000016400000000092    25791       2116131912701002                           
6020230131010510065175Barlt                                                                                               64    000000022880000000077700000000385    25719       2123131912713003                           
6020230131010510085169Bergewöhrden                                                                                        64    000000002640000000003700000000017    25779       2116131912701002                           
6020230131010510105163Brickeln                                                                                            64    000000006070000000019800000000108    25712       2123131912705003    
Die Datensatzbeschreibung (als PDF im obigen ZIP-Link enthalten) mutet mir sehr "historisch" an. 8O

Die ersten zwei Zeichen in jeder Zeile beschreiben das Format der Zeile. D.h. jede Zeile hat nicht das gleiche Format, wie es bei einer CSV Datei der Fall wäre, sondern die Zeilen ändern während man die Datei (zeilenweise) liest, auch noch ihr Format (Feldanzahl, -länge, etc). Die Datensatzbeschreibung ist nämlich nicht maschinenlesbar, was IMHO auch irgendwie nicht ins Konzept passt.

Natürlich kann ich mir dazu was schreiben, um das zu lesen. Nur bin ich doch bestimmt nicht der Erste, die sowas bearbeitet, oder?
Aus meiner Perspektive erscheint mir das Format extrem exotisch und auch unpraktisch. Aber es ist ja sicherlich nichts Neues und hat evtl. doch seine Vorteile, die ich jetzt nur nicht sehe?
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

Benutzeravatar
Blackbox
Beiträge: 4289
Registriert: 17.09.2008 17:01:20
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Umgang mit Destatis-Datenformat?

Beitrag von Blackbox » 19.01.2023 07:43:33

Vor einigen Jahren, bei meinem damaligen AG, musste ich mich mit ähnlich strukturierten Daten beschäftigen.
Mir hat damals das Pandas-Framework geholfen, die Daten gebändigt zu bekommen.

Installiert werden muss das Paket: Debianpython3-pandas und speziell in deinem Fall (vielleicht) auch das Paket: Debianpython3-geopandas?
Damit steht dann die Möglichkeit von DataFrame.to_csv zur Verfügung, mit dessen Hilfe die Daten in eine csv-Datei konvertiert werden kann, welche dann einfacher zu verarbeiten sind.
Außerdem gibt es unzählige weitere Möglichkeiten, in andere Zielformate zu konvertieren.
Eigenbau PC: Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Desktop PC: Dell Inspiron 530 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Notebook: TUXEDO BU1406 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Alles Minimalinstallationen und ohne sudo/PA/PW.
Rootserver: Rocky Linux 9.3 - Kernel: 5.14

Freie Software unterstützen, Grundrechte stärken!

buhtz
Beiträge: 1106
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: Umgang mit Destatis-Datenformat?

Beitrag von buhtz » 19.01.2023 09:15:42

Danke für deine Rückmeldung. Ich arbeite sehr intensiv mit Pandas und m.W. kann dieses Format nicht (out of the box) importiert werden. Für ein DataFrame.to_csv() muss ich die Daten ja erst einmal in ein DataFrame bekommen. Soweit ich sehe hat auch python3-geopandas keine Unterstützung für das Dateiformat ("vector-based spatial data format including ESRI shapefile, GeoJSON files").

Die Frage ist ja auch, ob dieses Format ein offiziellen bzw. (quasi-)standardisiertes ist und ob eine entsprechende Bezeichnung existiert, die ich für die weitere Recherche nutzen könnte.

Ich habe bei Destatis auch selbst angefragt und werde hier ggf. berichten.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Umgang mit Destatis-Datenformat?

Beitrag von Meillo » 19.01.2023 09:22:57

buhtz hat geschrieben: ↑ zum Beitrag ↑
17.01.2023 16:12:22
Aus meiner Perspektive erscheint mir das Format extrem exotisch und auch unpraktisch. Aber es ist ja sicherlich nichts Neues und hat evtl. doch seine Vorteile, die ich jetzt nur nicht sehe?
Das Format ist ein ganz normales Festbreitenformat, das heutzutage halt fast unbekannt ist, aber frueher, zu Lochkartenzeiten, der Normalfall war. Da viele Software in solchen Behoerden (auch z.B. in den Finanzaemtern und in Banken) weiterhin Cobol ist oder dazu kompatibel sein muss, werden dort weiterhin die Formate von damals verwendet.

In CSV (oder XML) haben alle Felder variable Laengen und es gibt Feldtrenner in irgendeiner Weise. Bei Festbreitenformaten gibt es keine Trenner, aber alle Felder haben definierte Laengen.

Mit `cut -c' kannst du einzelne Spalten extrahieren. Wenn du aus dem Festbreitenformat ein CSV machen willst, geht das recht einfach, insofern du ein Trennzeichen hast, das im restlichen Text nicht vorkommt. Dann musst du dieses nur an den jeweiligen Feldgrenzen einfuegen. Wenn du die Liste der Feldlaengen aus der Datensatzbeschreibung rausgeholt hast, dann kann das bestimmt ein Perl-Einzeiler (oder awk-Fuenfzeiler) erledigen.

Es wird nur dann komplizierter, falls das Festbreitenformat variable Anteile hat. Das funktioniert dann so, dass es ein Booleanfeld gibt, das angibt, ob am Ende noch ein Datenbaustein kommt oder nicht. Auf diesem Weg koennen Festbreitenformate nachtraeglich erweitert werden, ueber die reservierten Bereiche hinaus.

Das alles ist also nicht ungewoehnlich ... nur ein bisschen antiquiert. ;-)
Use ed once in a while!

buhtz
Beiträge: 1106
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: Umgang mit Destatis-Datenformat?

Beitrag von buhtz » 19.01.2023 09:45:20

Meillo hat geschrieben: ↑ zum Beitrag ↑
19.01.2023 09:22:57
Das alles ist also nicht ungewoehnlich ... nur ein bisschen antiquiert. ;-)
Danke, dass hatte ich vermutet. Aus historischer (jugendlicher) Neugier heraus gefragt: Wie man ein Festbreiten-Format mit Lochkarten umsetzt kann ich mir vorstellen. Allerdings nichts kann ich mir nicht vorstellen, wie man das mit unterschiedlichen Zeilenformaten gemacht hat. Ging das überhaupt? Oder ist man hier bei Destatis einfach nicht gewillt, die Rohdaten in mehrere Dateien (je "Satzart") aufzuteilen?

Wie man das parst ist nicht mein Problem. Nur möchte ich das nicht selbst schreiben, weil ich davon ausgehe, dass es wegen des Alters hierzu schon längst Lösungen gibt.
Ein technisches Problem ist nur, dass die Datensatzbeschreibung nicht maschinenlesbar ist und praktisch von Hand abgetippt werden müsste.

"Festbreitenformat" ist ja schon mal ein gutes Fachwort. In Englisch würde ich das als "Fixed Width Format" übersetzen. Es finden sich auch Begriffe wie "Fixed Width Values Text File".

Es gibt wohl pandas.read_fwf(). Soweit ich sehe scheint es aber auch nicht das Problem mit den verschiedenen Zeilenarten (out of the box) zu lösen.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

Antworten