Helaas is Rotterdam dus niet meer zo gul met hun data maar bij het leren van Python heb ik wel eens gespeeld met vergelijkbare data van de busmaatschappij in Chicago. Deze is 'eenvoudig' ophaalbaar en kan dan wellicht een anomaly detectie systeem in worden gepompt. De gangbare routes kunnen daarmee dus worden vastgelegd. Wijkt de bus een keertje daarvan af dan zou dit gedetecteerd moeten gaan worden. Hoe dat dan het beste kan worstel ik nog wat mee. Bijvoorbeeld een aantal tijd/plaats combinaties zouten dan een nieuwe tijd/plaats combinatie moeten voorspellen. Wijkt de bus daar (relevant??) van af dan is er sprake van een anomaly en heeft de buschauffeur dan dus bijvoorbeeld de verkeerde afslag genomen.
Eerst maar eens zien hoe we de data bruikbaar kunnen krijgen. Het bij elkaar verzamelen is, zoals aangegeven, niet zo moeilijk. Meer tijd gaat zitten in het onderbreekbaar maken van het programma zonder de data te verliezen. Tot nu toe lijkt dit aardig te werken:
import urllib
import webbrowser
import time
from xml.etree.ElementTree import parse
import numpy as np
from sklearn.externals import joblib
import signal
import sys
Data = []
Data2= []
terminate_loop =False
def signal_handler(signal, frame):
global terminate_loop
terminate_loop = True
print 'You pressed Ctrl+C!'
signal.signal(signal.SIGINT, signal_handler)
print "Start : %s" % time.ctime()
joblib.dump(Data, '/Users/DWW/Documents/Bus_outlier.pkl')
for n in range(3):
u = urllib.urlopen('http://ctabustracker.com/bustime/map/getBusesForRoute.jsp?route=22',data=None)
doc = parse(u)
tim = doc.findtext('time')
for bus in doc.findall('bus'):
busid = bus.findtext('id')
lat = float(bus.findtext('lat'))
lon = float(bus.findtext('lon'))
#print busid , lat , lon
Data.append([busid,tim, lat, lon])
print 'n = ',n
if terminate_loop:
print 'Terminate = ', terminate_loop
break
time.sleep(2.0)
print "now : %s" % time.ctime()
Data2 = joblib.load('/Users/DWW/Documents/Bus_outlier.pkl')
Data = Data + Data2
joblib.dump(Data, '/Users/DWW/Documents/Bus_outlier.pkl')
Data2 = joblib.load('/Users/DWW/Documents/Bus_outlier.pkl')
Data2 = sorted(Data2, key = lambda x: (x[0], x[1]))
for i in range(len(Data2)-1):
print i,Data2[i] + Data2[i+1][2:]
print('ready')
Geen opmerkingen:
Een reactie posten