codeformunich / ideas

Collect potential project ideas and discussions here. When its clear what we want to do, the idea can get its own repo.
9 stars 0 forks source link

MVG-Rad Dumps: Datensätz besser verarbeitbar machen #13

Open saerdnaer opened 7 years ago

saerdnaer commented 7 years ago

Projekte wie https://github.com/codeformunich/bikewatch beim TUM Hackaton (November 2016) oder verschiedene Projekte beim Open Data Day (Februar 2017) haben gezeigt, dass die Rad Daten 'aktuell' etwas schwer verarbeitbar sind als es eigentlich sein müsste, vgl. https://transit.robbi5.com/nextbike-mvgrad/

Allerdings wurde dieser Endpoint inzwischen eingestellt, Dumps des neuen Endpoints liegen unter https://transit.robbi5.com/mvg-networkstate-mvgrad/ – Zitat von dort:

this is the followup service of nextbike-mvgrad, which they disabled on 2017-03-13.

Die Daten dieses neuen Endpoints sind schon wesentlich sinnvoller als bisher. Es werden nicht mehr nur die Stationen sondern wirklich die einzelnen Fahrräder abgebildet.

{
"networkStateVersions": {
"MVG_RAD": 927839
},
"fullDataSet": {
"MVG_RAD": true
},
"onlyNearbyData": false,
"failingProviderIds": [],
"addedBikes": […],
"changedBikes": [],
"deletedBikes": [],
"addedCars": [],
"changedCars": [],
"deletedCars": [],
"addedStations": […],
"changedStations": [],
"deletedStations": []
}

bei addedBikes gibt es die folgenden Typen:

{
"id": "96108",
"created": null,
"updated": 1496271618000,
"bikeNumber": 96108,
"latitude": 48.14269256591797,
"longitude": 11.51925277709961,
"currentStationID": null,
"bikeState": "FREE",
"bikeType": "STANDARD",
"positionType": "IN_OPERATING_AREA",
"localized": true,
"district": "Neuhausen-Nymphenburg"
},
{
"id": "96112",
"created": 1496271613000,
"updated": 1496271613000,
"bikeNumber": 96112,
"latitude": 48.103309631347656,
"longitude": 11.59736442565918,
"currentStationID": "a79b2e38492a28d373e9d75396372bc0",
"bikeState": "FREE",
"bikeType": "STANDARD",
"positionType": "STATION",
"localized": true,
"district": "Obergiesing-Fasangarten"
},

TODOs

saerdnaer commented 7 years ago

Skript zum Diff Download vom neuen (März 2017) API Endpoint:

#!/bin/sh
STAMP=$(date +%FT%T%z)
lastversion="1"
if [ -e last_version ]; then
  lastversion=$(cat last_version)
fi

wget -nv -O "temp.xml" --user-agent="" "https://multimobil-core.mvg.de/service/v5/networkState/networkState?MVG_RAD=$lastversion"

newversion=$(jq ."networkStateVersions"."MVG_RAD" temp.xml)

if [ $newversion -ne $lastversion ]; then
  mv temp.xml "$STAMP-diff-$lastversion-$newversion.json"
  echo $newversion > last_version
  echo "$STAMP downloaded diff between $lastversion and $newversion"
else
  echo "$STAMP no new versions available"
fi
saerdnaer commented 7 years ago

Es stellt sich heraus das die Dateien unter https://transit.robbi5.com/mvg-networkstate-mvgrad/ (full dump, alle 5 Minuten) und https://transit.robbi5.com/mvg-networkstate-mvgrad-diff/ (diff dumps zur vorherigen Datei, alle 5 Minuten – erstellt mit dem Skript aus dem vorherigen Kommentar) jeweils ca. 350kb gross. Die Analyse durch Dennis ergab des es sich dabei hautsächlich um Rauschen bei den Koordinaten ohne Zustandsänderung und dadurch auch sich ändernden Timestamps.

saerdnaer commented 7 years ago

Nachtrag:

Die Analyse […] ergab des es sich dabei hautsächlich um Rauschen bei den Koordinaten ohne Zustandsänderung und dadurch auch sich ändernden Timestamps.

Hab mir das grade vorhin nochmal an einem Beispiel angeschaut – es ändert sich da teilweise auch nur der updated timestamp und nicht mal die Koordinaten:

grep -oh -E '{"id":"96808.+?}' *.json | jq -scr '.[] | [.updated, .latitude, .longitude]'
[1497206668000, 48.14973068237305, 11.578146934509277]
[1497209968000, 48.14973068237305, 11.578146934509277]
[1497210268000, 48.14973068237305, 11.578146934509277]
[1497210569000, 48.14973068237305, 11.578146934509277]
[1497212367000, 48.14973068237305, 11.578146934509277]
[1497213567000, 48.14973068237305, 11.578146934509277]
[1497214467000, 48.14973068237305, 11.578146934509277]
[1497215070000, 48.14973068237305, 11.578146934509277]
[1497215667000, 48.14973068237305, 11.578146934509277]
[1497215970000, 48.14973068237305, 11.578146934509277]
[1497206668000, 48.14973068237305, 11.578146934509277]
[1497209968000, 48.14973068237305, 11.578146934509277]
[1497210268000, 48.14973068237305, 11.578146934509277]
[1497210569000, 48.14973068237305, 11.578146934509277]
[1497212367000, 48.14973068237305, 11.578146934509277]
[1497213567000, 48.14973068237305, 11.578146934509277]
[1497214467000, 48.14973068237305, 11.578146934509277]
[1497215070000, 48.14973068237305, 11.578146934509277]
[1497215667000, 48.14973068237305, 11.578146934509277]
[1497215970000, 48.14973068237305, 11.578146934509277]
deknos commented 7 years ago

ich hab das laden mal in ein python gepackt: https://gist.github.com/deknos/e4563da7ef22004539ed10736fa6233a

ich glaub, man kommt nicht drum rum, die räder selbst zu verzeichnen und dann nur eintragsänderungen zu verzeichnen, die kein rauschen sind.