niedziela, 2 czerwca 2019

Mevo w maju

Ze strony https://rowermevo.pl/ co 120 sekund jest pobierany plik locations.js który zawiera (jak mniemam) listę rowerów zaparkowanych na stacjach w systemie roweru miejskiego Mevo. Jak rower zmienił stację to znaczy, że ktoś się nim przejechał (lub go przewieziono dla jakiś celów.)

Pobrane dane są dostępne tutaj. Konkretnie plik MEVO_bikes_ROKMIESIĄC.csv to plik CSV, którego każdy wiersz zawiera czas, idRoweru, stanBaterii oraz współrzędne geograficzne. Rejestrowane są tylko przemieszczenia, tj. na przykład jeżeli rower jest wykazywany przez 10 kolejnych pobrań jako zaparkowany w tym samym miejscu, to tylko pierwszy wpis jest zapisywany. Z kolei MEVO_tracks_ROKMIESIĄC.csv zawiera idRoweru, liczbę przemieszczeń oraz kompletny ślad w postaci par współrzędnych.

Plik MEVO_bikes_201905.csv (czyli za maj) zawiera 265 tys wierszy, plik MEVO_tracks_201905.csv zawiera 1550 wierszy (czyli zarejstrowanych rowerów w systemie). Tutaj uwaga: część wpisów/rowerów jest dziwna: są rowery jeżdżące po Warszawie, po Bałtyku a nawet w księstwie Monako. Szczegóły tutaj.

Na podstawie pliku MEVO_tracks_ROKMIESIĄC.csv obliczyłem łączny i średni dystans pokonany przez rowery w maju, pomijając ,,dziwne'' wpisy. Za kryterium dziwności przyjęto punkt znajdujący się na zewnątrz prostokąta 53.8--55.0/17.4--19.5 (długość/szerokość). W ten sposób zostało 1370 rowerów a odpadło 180 ,,dziwnych''. Konkretnie policzyłem poniższym skryptem:

#!/usr/bin/perl
use Geo::Distance;
my $geo = new Geo::Distance;

my $distGrandTotal;
my $distTotal;

while (<>) {  chomp();
  ($bike, $nodes, $track) = split /;/, $_;
  $track =~ s/[ \t]+$//;
  @trkpts =  split / /, $track;

  $distTotal=0;  $skipBike = 0;

  foreach $t (@trkpts) {
     ($lon, $lat) = split /,/, $t;
     if ($lat < 53.8 || $lat > 55.0 || $lon < 17.4 || $lon > 19.5 ) {##
        $skipBike = 1;
        print STDERR "SKIPPED $bike: lat = '$lat' / lon = '$lon'\n";
     } 
     else { 
        if ($latPrev > 54.0 ) {
           $dist = $geo->distance( "meter", $lonPrev, $latPrev => $lon, $lat );
           $distTotal += $dist;
        }
        $lonPrev =  $lon; $latPrev = $lat;
     }
  }

  unless ($skipBike) {
    $mean = $distTotal / 31;
    printf "%s;%.2f;%.2f\n", $bike, $distTotal, $mean;
    $distGrandTotal += $distTotal;
    $validBikes++;
  }
}

$grandMean =  $distGrandTotal / (31 * $validBikes);
print STDERR "Średnio: $grandMean ($validBikes)\n";

Wyniki i analiza

Minimum przejechane 0km, pierwszy kwartyl 12,8km, mediana 17,8km trzeci kwartyl 21,2km. Maksimum 30,7km. Przypominam, że są to średnie dzienne dla 31 dni maja. Oczywiście nie są to wielkości prawdziwe: po pierwsze dystans jest liczony jako proste pomiędzy punktami (rejestrowanymi co 120s); po drugie nie wszystkie przemieszczenia polegają na pedałowaniu--czasami rower jest wieziony. Arbitralnie przyjmijmy że prawdziwa wartość to 200% zarejestrowanej (to chyba dużo mimo wszystko). Dalej załóżmy że gdyby z roweru korzystało się 6 godzin na dobę (można by policzyć ile się korzysta ale tego jeszcze nie zrobiłem)--co dalej nie wydaje się czymś nadmiernie wyśrubowanym (połowa czasu od 8 rano do 20 wieczorem). Wreszcie przyjmijmy 12km/h jako prędkość przemieszczania się (jak na pojazd z silnikiem -- moim zdaniem -- już mniej się nie da). Wychodzi 6 x 12 = 72km. A jest 30km czyli nawet nie połowa...

Rozkład średnich przedstawia histogram poniżej

Brak komentarzy:

Prześlij komentarz