Direkt zum Hauptinhalt

openstreetmap tools

Beschreibung:

Man kann mit dem Linux tool openstreetmaptolls, Daten aus einer downgeloadeten Openstreetmap Datei pbf exportieren in eine csv.

Unter https://download.geofabrik.de lassen sich Ganze Kontinente oder nur Regionen oder einzelne Länder downloaden

Vorrausetzung:

sudo apt install osmctools python3 python3-pandas python3-geopy python3-geopandas

Parsen

Nach dem man seine gewünschte Datei downgeloadet hat, kann man die Adressen exportieren.
uns interessieren Straße, Hausnummer PLZ, Ort und Ortsteil.
Der Parameter -o gibt die Ausgabe Datei an.

osmconvert germany-latest.osm.pbf --csv="@id addr:street addr:housenumber addr:postcode addr:city addr:suburb" -o=addresses.csv

Unvollständige Daten entfernen

Python Script um nur Vollständige Adressen zu behalten in der csv
Denn sonst sieht das so aus, mit grep Wunderburgpark

ID Straße Hausnummer Postleitzahl Ort
540052 Am Wunderburgpark 5b 26135 Oldenburg
1582540056 Am Wunderburgpark 6 26135 Oldenburg
1582540114 Am Wunderburgpark 7 26135 Oldenburg
1582540118 Am Wunderburgpark 8 26135 Oldenburg
1582540163 Am Wunderburgpark 9 26135 Oldenburg
1582540165 Am Wunderburgpark 9b 26135 Oldenburg
35624089 Am Wunderburgpark
26135 Oldenburg
35624098 Am Wunderburgpark
26135 Oldenburg
35624100



35624102



Das Script

import pandas as pd
import argparse
import sys

def clean_csv(input_file, output_file):
    """Bereinigt eine CSV-Datei, indem unvollständige Datensätze entfernt werden."""
    try:
        # CSV-Datei laden
        df = pd.read_csv(input_file, sep="\t", names=["id", "street", "housenumber", "postcode", "city", "suburb"])

        # Filter für vollständige Datensätze
        filtered_df = df.dropna(subset=["street", "housenumber", "postcode", "city"])  # Entfernt Zeilen mit leeren Werten
        filtered_df = filtered_df[filtered_df["housenumber"].notnull() & (filtered_df["housenumber"] != "")]

        # Bereinigte Daten speichern
        filtered_df.to_csv(output_file, index=False, sep="\t", encoding="utf-8")
        print(f"Bereinigte Datei wurde gespeichert: {output_file}")
    except Exception as e:
        print(f"Fehler bei der Verarbeitung: {e}")
        sys.exit(1)

def main():
    # Argument-Parser einrichten
    parser = argparse.ArgumentParser(description="Bereinigt eine CSV-Datei, indem unvollständige Datensätze entfernt werden.")
    parser.add_argument("input_file", metavar="INPUT", type=str, help="Pfad zur Eingabedatei (CSV, Tab-separiert)")
    parser.add_argument("output_file", metavar="OUTPUT", type=str, help="Pfad zur Ausgabedatei (bereinigte CSV)")
    args = parser.parse_args()

    # CSV-Bereinigung durchführen
    clean_csv(args.input_file, args.output_file)

if __name__ == "__main__":
    if len(sys.argv) == 1 or "--help" in sys.argv:
        print("""
Verwendung:
    python script.py INPUT OUTPUT

Beschreibung:
    Dieses Skript bereinigt eine CSV-Datei, indem unvollständige Datensätze (z. B. fehlende Hausnummern)
    entfernt werden. Die bereinigte Datei wird als neue CSV gespeichert.

Parameter:
    INPUT   Pfad zur Eingabedatei (CSV, Tab-separiert)
    OUTPUT  Pfad zur Ausgabedatei (bereinigte CSV)

Beispiel:
    python script.py addresses_raw.csv addresses_cleaned.csv
        """)
        sys.exit(0)

    main()

Ausführen:

python3 adresses.py addresses.csv addresses_clean.csv 

Da das cleanen sehr Recheninstensiv ist, einfach geduld.