Extracting spatiotemporal commuting patterns from public transit data