diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..dabd1b0ea9842e979373f59b048bc78ccbbd9085 Binary files /dev/null and b/.DS_Store differ diff --git a/Data/stations_df.csv b/Data/stations_df.csv new file mode 100755 index 0000000000000000000000000000000000000000..5c2d191c0eabceb1fadffcdf7035e542633cb3b6 --- /dev/null +++ b/Data/stations_df.csv @@ -0,0 +1,769 @@ +"id" "name" "terminalName" "lat" "long" "installed" "locked" "installDate" "removalDate" "temporary" "nbBikes" "nbEmptyDocks" "nbDocks" +"1" "River Street , Clerkenwell" "001023" "51.52916347" "-0.109970527" "true" "false" "1278947280000" "" "false" "1" "18" "19" +"2" "Phillimore Gardens, Kensington" "001018" "51.49960695" "-0.197574246" "true" "false" "1278585780000" "" "false" "24" "13" "37" +"3" "Christopher Street, Liverpool Street" "001012" "51.52128377" "-0.084605692" "true" "false" "1278240360000" "" "false" "32" "0" "32" +"4" "St. Chad's Street, King's Cross" "001013" "51.53005939" "-0.120973687" "true" "false" "1278241080000" "" "false" "1" "21" "23" +"5" "Sedding Street, Sloane Square" "003420" "51.49313" "-0.156876" "true" "false" "1278241440000" "" "false" "26" "1" "27" +"6" "Broadcasting House, Marylebone" "003424" "51.51811784" "-0.144228881" "true" "false" "1278241680000" "" "false" "18" "0" "18" +"7" "Charlbert Street, St. John's Wood" "003422" "51.53430039" "-0.1680743" "true" "false" "1278241800000" "" "false" "0" "16" "16" +"8" "Lodge Road, St. John's Wood" "003423" "51.52834133" "-0.170134484" "true" "false" "1278241920000" "" "false" "6" "12" "18" +"9" "New Globe Walk, Bankside" "001015" "51.5073853" "-0.096440751" "true" "false" "1278242340000" "" "false" "19" "0" "19" +"10" "Park Street, Bankside" "001024" "51.50597426" "-0.092754157" "true" "false" "1278242460000" "" "false" "8" "10" "18" +"11" "Brunswick Square, Bloomsbury" "001022" "51.52395143" "-0.122502346" "true" "false" "1278340440000" "" "false" "10" "14" "24" +"12" "Malet Street, Bloomsbury" "000980" "51.52168078" "-0.130431727" "true" "false" "1278340620000" "" "false" "34" "14" "49" +"13" "Scala Street, Fitzrovia" "000970" "51.51991453" "-0.136039674" "true" "false" "1278340800000" "" "false" "21" "0" "21" +"14" "Belgrove Street , King's Cross" "001011" "51.52994371" "-0.123616824" "true" "false" "1278341040000" "" "false" "2" "42" "48" +"15" "Great Russell Street, Bloomsbury" "000988" "51.51772703" "-0.127854211" "true" "false" "1278341220000" "" "false" "25" "0" "26" +"16" "Cartwright Gardens , Bloomsbury" "001010" "51.52635795" "-0.125979294" "true" "false" "1278341400000" "" "false" "0" "21" "22" +"17" "Hatton Wall, Holborn" "001008" "51.5216612" "-0.109006325" "true" "false" "1278423720000" "" "false" "21" "3" "26" +"18" "Drury Lane, Covent Garden" "001007" "51.51477076" "-0.12221963" "true" "false" "1278426300000" "" "false" "19" "8" "27" +"19" "Taviton Street, Bloomsbury" "001009" "51.52505093" "-0.131161087" "true" "false" "1278426720000" "" "false" "7" "23" "30" +"20" "Drummond Street , Euston" "000993" "51.52773634" "-0.135273468" "true" "false" "1278427620000" "" "false" "0" "26" "28" +"21" "Hampstead Road (Cartmel), Euston" "003426" "51.53007835" "-0.13884627" "true" "false" "1278427740000" "" "false" "0" "16" "16" +"22" "Northington Street , Holborn" "003425" "51.5222641" "-0.114079481" "true" "false" "1278428880000" "" "false" "18" "1" "19" +"23" "Red Lion Square, Holborn" "003421" "51.51943538" "-0.119123345" "true" "false" "1278429300000" "" "false" "16" "0" "16" +"24" "British Museum, Bloomsbury" "000981" "51.51908011" "-0.124678402" "true" "false" "1278430140000" "" "false" "19" "16" "35" +"25" "Doric Way , Somers Town" "001004" "51.5288338" "-0.132250369" "true" "false" "1278433200000" "" "false" "16" "14" "31" +"26" "Ampton Street , Clerkenwell" "001019" "51.52728093" "-0.11829517" "true" "false" "1278434160000" "" "false" "0" "21" "21" +"27" "Bouverie Street, Temple" "001021" "51.51382102" "-0.107927706" "true" "false" "1278500160000" "" "false" "31" "1" "33" +"28" "Bolsover Street, Fitzrovia" "001025" "51.52351808" "-0.143613641" "true" "false" "1278500460000" "" "false" "0" "19" "19" +"29" "Hereford Road, Bayswater" "001016" "51.513735" "-0.193487" "true" "false" "1278501180000" "" "false" "0" "22" "22" +"30" "Windsor Terrace, Hoxton" "001029" "51.52915444" "-0.093421615" "true" "false" "1278501420000" "" "false" "4" "20" "24" +"31" "Fanshaw Street, Hoxton" "003427" "51.52953709" "-0.083353323" "true" "false" "1278501600000" "" "false" "2" "34" "36" +"32" "Leonard Circus , Shoreditch" "001020" "51.52469624" "-0.084439283" "true" "false" "1278506700000" "" "false" "42" "1" "43" +"33" "Central House, Aldgate" "003430" "51.5156" "-0.070056" "true" "false" "1278506940000" "" "false" "3" "12" "18" +"34" "Pancras Road, King's Cross" "003428" "51.5341235" "-0.129386874" "true" "false" "1278507060000" "" "false" "8" "8" "16" +"36" "De Vere Gardens, Kensington" "003446" "51.50173726" "-0.184980612" "true" "false" "1278519900000" "" "false" "1" "26" "28" +"37" "Penywern Road, Earl's Court" "003444" "51.49159394" "-0.192369256" "true" "false" "1278520020000" "" "false" "1" "16" "17" +"38" "Abingdon Villas, Kensington" "003442" "51.4973875" "-0.197245586" "true" "false" "1278584880000" "" "false" "10" "6" "17" +"39" "Shoreditch High Street, Shoreditch" "003445" "51.5263778" "-0.078130921" "true" "false" "1278601740000" "" "false" "26" "15" "41" +"40" "Commercial Street, Shoreditch" "001083" "51.52127071" "-0.0755789" "true" "false" "1278601980000" "" "false" "8" "8" "16" +"41" "Sun Street, Liverpool Street" "001084" "51.52001715" "-0.083911168" "true" "false" "1278602280000" "" "false" "24" "1" "25" +"42" "Wenlock Road , Hoxton" "000979" "51.53099181" "-0.093903825" "true" "false" "1278602700000" "" "false" "3" "25" "28" +"43" "Crawford Street, Marylebone" "001036" "51.52026" "-0.157183945" "true" "false" "1278687720000" "" "false" "6" "12" "18" +"44" "Bruton Street, Mayfair" "001034" "51.51073687" "-0.144165239" "true" "false" "1278687900000" "" "false" "21" "0" "21" +"45" "Boston Place, Marylebone" "001035" "51.522511" "-0.162298" "true" "false" "1278691320000" "" "false" "5" "21" "26" +"46" "Nesham Street, Wapping" "001031" "51.507131" "-0.06691" "true" "false" "1278691800000" "" "false" "3" "13" "16" +"47" "Warwick Avenue Station, Maida Vale" "001027" "51.52334476" "-0.183846408" "true" "false" "1278749160000" "" "false" "0" "18" "19" +"48" "Godliman Street, St. Paul's" "000971" "51.51248445" "-0.099141408" "true" "false" "1278749460000" "" "false" "8" "14" "25" +"49" "Curzon Street, Mayfair" "003437" "51.50706909" "-0.145904427" "true" "false" "1278749940000" "" "false" "15" "1" "16" +"50" "East Road, Hoxton" "001054" "51.52867339" "-0.087459376" "true" "false" "1278750240000" "" "false" "22" "4" "27" +"51" "Finsbury Library , Finsbury" "000986" "51.52671796" "-0.104298194" "true" "false" "1278750540000" "" "false" "20" "8" "29" +"52" "Roscoe Street, St. Luke's" "001026" "51.52295439" "-0.094934859" "true" "false" "1278750840000" "" "false" "13" "3" "18" +"53" "Grafton Street, Mayfair" "003431" "51.5099923" "-0.143495266" "true" "false" "1278752580000" "" "false" "16" "0" "18" +"54" "Golden Lane, Barbican" "000967" "51.52174785" "-0.094475072" "true" "false" "1278766740000" "" "false" "21" "6" "27" +"55" "Finsbury Circus, Liverpool Street" "000984" "51.51707521" "-0.086685542" "true" "false" "1278766980000" "" "false" "30" "1" "33" +"56" "Paddington Street, Marylebone" "001033" "51.52058381" "-0.154701411" "true" "false" "1278767220000" "" "false" "4" "11" "15" +"57" "Guilford Street , Bloomsbury" "000974" "51.52334672" "-0.120202614" "true" "false" "1278767460000" "" "false" "30" "1" "32" +"58" "New Inn Yard, Shoreditch" "001032" "51.52452699" "-0.079248081" "true" "false" "1278767700000" "" "false" "20" "0" "20" +"59" "Rodney Street, Angel" "001014" "51.53176825" "-0.114329032" "true" "false" "1278767880000" "" "false" "7" "22" "30" +"60" "Lisson Grove, St. John's Wood" "001030" "51.52644828" "-0.172190727" "true" "false" "1278769140000" "" "false" "0" "18" "18" +"61" "Great Dover Street, The Borough" "001017" "51.49738251" "-0.089446947" "true" "false" "1278773820000" "" "false" "2" "31" "33" +"62" "Cotton Garden Estate, Kennington" "000990" "51.4907579" "-0.106323685" "true" "false" "1278773940000" "" "false" "5" "19" "24" +"63" "Murray Grove , Hoxton" "000989" "51.53089041" "-0.089782579" "true" "false" "1278774120000" "" "false" "9" "17" "27" +"64" "William IV Street, Strand" "001028" "51.50946212" "-0.124749274" "true" "false" "1278774300000" "" "false" "14" "11" "26" +"65" "Gower Place , Euston" "000969" "51.52522753" "-0.13518856" "true" "false" "1278840660000" "" "false" "14" "2" "17" +"66" "Holborn Circus, Holborn" "000982" "51.51795029" "-0.108657431" "true" "false" "1278845280000" "1393938240000" "false" "4" "34" "40" +"67" "Hatton Garden, Holborn" "000985" "51.51882555" "-0.108028472" "true" "false" "1278847440000" "" "false" "21" "6" "28" +"68" "Theobald's Road , Holborn" "000975" "51.52059681" "-0.116688468" "true" "false" "1278857040000" "" "false" "19" "6" "26" +"69" "Euston Road, Euston" "000983" "51.5262363" "-0.134407652" "true" "false" "1278861540000" "" "false" "11" "13" "24" +"70" "Calshot Street , King's Cross" "001066" "51.53136059" "-0.117069978" "true" "false" "1278863340000" "" "false" "3" "21" "24" +"71" "Newgate Street , St. Paul's" "001074" "51.5154186" "-0.098850915" "true" "false" "1278924900000" "" "false" "7" "26" "34" +"72" "Farringdon Lane, Clerkenwell" "003432" "51.52352001" "-0.108340165" "true" "false" "1278936060000" "" "false" "14" "2" "16" +"73" "Old Street Station, St. Luke's" "001064" "51.52572618" "-0.088486188" "true" "false" "1278941040000" "" "false" "25" "9" "37" +"74" "Vauxhall Cross, Vauxhall" "001000" "51.48591714" "-0.124469948" "true" "false" "1278941160000" "" "false" "12" "2" "17" +"75" "Torrens Street, Angel" "001060" "51.53219984" "-0.105480698" "true" "false" "1278945180000" "" "false" "3" "16" "19" +"76" "Longford Street, The Regent's Park" "000976" "51.52559505" "-0.144083893" "true" "false" "1278946560000" "" "false" "0" "21" "21" +"77" "Russell Square Station, Bloomsbury" "000978" "51.52341837" "-0.124121774" "true" "false" "1278946860000" "" "false" "21" "5" "26" +"78" "Sadlers Sports Centre, Finsbury" "003433" "51.52486887" "-0.099489485" "true" "false" "1278948480000" "" "false" "15" "2" "17" +"80" "Webber Street , Southwark" "003448" "51.50069361" "-0.102091246" "true" "false" "1278952440000" "" "false" "14" "31" "45" +"81" "Great Titchfield Street, Fitzrovia" "003450" "51.52025302" "-0.141327271" "true" "false" "1279012980000" "" "false" "16" "2" "19" +"82" "Chancery Lane, Holborn" "003453" "51.514274" "-0.111257" "true" "false" "1279015680000" "" "false" "14" "0" "15" +"83" "Panton Street, West End" "003452" "51.50963938" "-0.131510949" "true" "false" "1279015800000" "" "false" "17" "2" "21" +"84" "Breams Buildings, Holborn" "003449" "51.51593725" "-0.111778348" "true" "false" "1279020240000" "" "false" "22" "1" "25" +"85" "Tanner Street, Bermondsey" "000994" "51.50064702" "-0.078600401" "true" "false" "1279026060000" "" "false" "23" "16" "39" +"86" "Sancroft Street, Vauxhall" "003434" "51.48947903" "-0.115156562" "true" "false" "1279027140000" "" "false" "5" "19" "24" +"87" "Devonshire Square, Liverpool Street" "003438" "51.51646835" "-0.079684557" "true" "false" "1279027680000" "" "false" "16" "0" "16" +"88" "Bayley Street , Bloomsbury" "001006" "51.51858757" "-0.132053392" "true" "false" "1279028280000" "" "false" "21" "2" "25" +"89" "Tavistock Place, Bloomsbury" "003439" "51.5262503" "-0.123509611" "true" "false" "1279029360000" "" "false" "0" "18" "19" +"90" "Harrington Square 1, Camden Town" "001038" "51.53301907" "-0.139174593" "true" "false" "1279030020000" "" "false" "4" "23" "27" +"91" "Walnut Tree Walk, Vauxhall" "001076" "51.49368637" "-0.111014912" "true" "false" "1279036740000" "" "false" "9" "11" "20" +"92" "Borough Road, Elephant & Castle" "001082" "51.49889832" "-0.100440521" "true" "false" "1279037040000" "" "false" "37" "4" "41" +"93" "Cloudesley Road, Angel" "002586" "51.53440868" "-0.109025404" "true" "false" "1279037760000" "" "false" "0" "37" "37" +"94" "Bricklayers Arms, Borough" "001070" "51.49506109" "-0.085814489" "true" "false" "1279038420000" "" "false" "0" "28" "28" +"95" "Aldersgate Street, Barbican" "001065" "51.5208417" "-0.097340162" "true" "false" "1279096560000" "" "false" "15" "0" "15" +"96" "Falkirk Street, Hoxton" "001047" "51.53095071" "-0.078505384" "true" "false" "1279096980000" "" "false" "6" "20" "26" +"97" "Gloucester Road (North), Kensington" "003447" "51.49792478" "-0.183834706" "true" "false" "1279097580000" "" "false" "6" "11" "18" +"98" "Hampstead Road, Euston" "000972" "51.52554222" "-0.138231303" "true" "false" "1279099080000" "" "false" "30" "24" "54" +"99" "Old Quebec Street, Marylebone" "001085" "51.51457763" "-0.158264483" "true" "false" "1279099680000" "" "false" "4" "12" "16" +"100" "Albert Embankment, Vauxhall" "001059" "51.49043573" "-0.122806861" "true" "false" "1279099860000" "" "false" "19" "4" "24" +"101" "Queen Street 1, Bank" "000999" "51.51155322" "-0.0929401" "true" "false" "1279102680000" "" "false" "19" "2" "22" +"102" "Jewry Street, Aldgate" "001045" "51.51340693" "-0.076793375" "true" "false" "1279102860000" "" "false" "15" "0" "17" +"103" "Vicarage Gate, Kensington" "003441" "51.50472376" "-0.192538767" "true" "false" "1279103520000" "" "false" "1" "17" "18" +"104" "Crosswall, Tower" "000991" "51.51159481" "-0.077121322" "true" "false" "1279103760000" "" "false" "33" "1" "34" +"105" "Westbourne Grove, Bayswater" "001041" "51.51552971" "-0.190240716" "true" "false" "1279105320000" "" "false" "4" "22" "26" +"106" "Woodstock Street, Mayfair" "001042" "51.51410514" "-0.147301667" "true" "false" "1279106880000" "" "false" "13" "8" "21" +"107" "Finsbury Leisure Centre, St. Luke's" "001049" "51.52600832" "-0.096317627" "true" "false" "1279107480000" "" "false" "9" "9" "20" +"108" "Abbey Orchard Street, Westminster" "003429" "51.49812559" "-0.132102166" "true" "false" "1279107720000" "" "false" "25" "1" "29" +"109" "Soho Square , Soho" "001052" "51.51563144" "-0.132328837" "true" "false" "1279108320000" "" "false" "52" "4" "57" +"110" "Wellington Road, St. John's Wood" "001055" "51.53304322" "-0.172528678" "true" "false" "1279108920000" "" "false" "0" "17" "17" +"111" "Park Lane , Hyde Park" "001037" "51.5100172" "-0.157275636" "true" "false" "1279109160000" "" "false" "5" "23" "28" +"112" "Stonecutter Street, Holborn" "001061" "51.51580998" "-0.105270275" "true" "false" "1279115460000" "" "false" "42" "0" "42" +"113" "Gloucester Road (Central), South Kensington" "003435" "51.49646288" "-0.183289032" "true" "false" "1279116600000" "" "false" "1" "18" "19" +"114" "Park Road (Baker Street), The Regent's Park" "001050" "51.52451738" "-0.158963647" "true" "false" "1279119900000" "" "false" "17" "5" "22" +"116" "Little Argyll Street, West End" "000995" "51.51449962" "-0.141423695" "true" "false" "1279122360000" "" "false" "6" "14" "21" +"117" "Lollard Street, Vauxhall" "000998" "51.49288067" "-0.114934001" "true" "false" "1279124220000" "" "false" "8" "15" "25" +"118" "Rochester Row, Westminster" "003457" "51.49582705" "-0.13547809" "true" "false" "1279124520000" "" "false" "11" "0" "13" +"119" "Bath Street, St. Luke's" "000964" "51.52589324" "-0.090847761" "true" "false" "1279124760000" "" "false" "14" "3" "18" +"120" "The Guildhall, Guildhall" "001044" "51.51573534" "-0.093080779" "true" "false" "1279187040000" "" "false" "17" "0" "17" +"121" "Baker Street, Marylebone" "001086" "51.51891348" "-0.156166631" "true" "false" "1279189200000" "" "false" "15" "5" "22" +"122" "Norton Folgate, Liverpool Street" "001068" "51.52111369" "-0.078869751" "true" "false" "1279190040000" "" "false" "22" "1" "23" +"123" "St. John Street, Finsbury" "000992" "51.52836014" "-0.104724625" "true" "false" "1279191300000" "" "false" "8" "9" "18" +"124" "Eaton Square, Belgravia" "001069" "51.49654462" "-0.150905245" "true" "false" "1279191540000" "" "false" "15" "4" "20" +"125" "Borough High Street, The Borough" "000996" "51.50069491" "-0.094524319" "true" "false" "1279192200000" "" "false" "3" "18" "21" +"126" "Museum of London, Barbican" "001043" "51.51782144" "-0.096496865" "true" "false" "1279193340000" "" "false" "51" "0" "52" +"127" "Wood Street, Guildhall" "001063" "51.51700801" "-0.09388536" "true" "false" "1279193520000" "" "false" "14" "1" "17" +"128" "Emperor's Gate, South Kensington" "001116" "51.49536226" "-0.185296516" "true" "false" "1279194060000" "" "false" "10" "11" "22" +"129" "Golden Square, Soho" "003451" "51.5118973" "-0.137043852" "true" "false" "1279198500000" "" "false" "18" "0" "18" +"130" "Tower Gardens , Tower" "001071" "51.50950627" "-0.075459482" "true" "false" "1279198800000" "" "false" "15" "9" "24" +"131" "Eversholt Street , Camden Town" "001005" "51.53300545" "-0.136792671" "true" "false" "1279199280000" "" "false" "1" "15" "16" +"132" "Bethnal Green Road, Shoreditch" "000973" "51.52364804" "-0.074754872" "true" "false" "1279199520000" "" "false" "13" "24" "38" +"133" "Derry Street, Kensington" "003436" "51.50136494" "-0.191462381" "true" "false" "1279200240000" "" "false" "18" "0" "18" +"134" "Wapping High Street, Wapping" "001039" "51.504904" "-0.06797" "true" "false" "1279200900000" "" "false" "0" "20" "20" +"135" "Clerkenwell Green, Clerkenwell" "001053" "51.52326004" "-0.104708922" "true" "false" "1279201080000" "" "false" "18" "1" "21" +"136" "Queen Victoria Street, St. Paul's" "001048" "51.51196176" "-0.097441687" "true" "false" "1279201200000" "" "false" "29" "3" "32" +"137" "Bourne Street, Belgravia" "001119" "51.49087475" "-0.153319609" "true" "false" "1279205040000" "" "false" "9" "7" "16" +"138" "Green Street, Mayfair" "003464" "51.51227622" "-0.157436972" "true" "false" "1279205220000" "" "false" "1" "18" "19" +"139" "Lambeth Road, Vauxhall" "001078" "51.49488108" "-0.117974901" "true" "false" "1279205460000" "" "false" "5" "13" "18" +"140" "Finsbury Square , Moorgate" "001056" "51.52096262" "-0.085634242" "true" "false" "1279205580000" "" "false" "32" "1" "33" +"141" "Chapel Place, Marylebone" "001003" "51.51530805" "-0.147203711" "true" "false" "1279210980000" "" "false" "27" "2" "29" +"142" "West Cromwell Road, Earl's Court" "001001" "51.49372451" "-0.198286569" "true" "false" "1279211220000" "" "false" "14" "10" "24" +"143" "Pont Street, Knightsbridge" "001114" "51.4968865" "-0.161203828" "true" "false" "1279211400000" "" "false" "22" "2" "24" +"144" "Kennington Cross, Kennington" "001093" "51.48894022" "-0.111435796" "true" "false" "1279211580000" "" "false" "5" "40" "47" +"145" "Ilchester Place, Kensington" "001115" "51.50074359" "-0.202759212" "true" "false" "1279212180000" "" "false" "6" "17" "24" +"146" "Vauxhall Bridge , Pimlico" "001046" "51.48836528" "-0.129361842" "true" "false" "1279212360000" "" "false" "17" "16" "35" +"147" "Portugal Street, Holborn" "003456" "51.51494305" "-0.11614642" "true" "false" "1279214760000" "" "false" "10" "6" "16" +"148" "Tachbrook Street, Victoria" "000965" "51.49211134" "-0.138364847" "true" "false" "" "" "false" "6" "10" "16" +"149" "Kennington Road Post Office, Oval" "001073" "51.48478899" "-0.110683213" "true" "false" "1279215360000" "" "false" "1" "16" "18" +"150" "Holy Trinity Brompton, Knightsbridge" "001002" "51.49705603" "-0.168917077" "true" "false" "1279215540000" "" "false" "19" "9" "28" +"151" "Chepstow Villas, Notting Hill" "001120" "51.51213691" "-0.201554966" "true" "false" "1279215720000" "" "false" "0" "26" "26" +"152" "Hampton Street, Walworth" "001118" "51.49217002" "-0.101536865" "true" "false" "1279215900000" "" "false" "7" "14" "21" +"154" "Waterloo Station 3, Waterloo" "001072" "51.50379168" "-0.11282408" "true" "false" "" "" "false" "2" "32" "35" +"155" "Lexham Gardens, Kensington" "001121" "51.49586666" "-0.191933711" "true" "false" "1279272660000" "" "false" "1" "18" "19" +"156" "New Kent Road, The Borough" "000966" "51.49443626" "-0.092921165" "true" "false" "1279273080000" "" "false" "3" "27" "33" +"157" "Wright's Lane, Kensington" "001094" "51.50039792" "-0.193068385" "true" "false" "1279273200000" "" "false" "17" "20" "37" +"158" "Trebovir Road, Earl's Court" "001113" "51.49085368" "-0.196170309" "true" "false" "1279273320000" "" "false" "14" "4" "18" +"159" "Great Marlborough Street, Soho" "001125" "51.51461995" "-0.137841333" "true" "false" "1279273560000" "" "false" "38" "1" "39" +"160" "Waterloo Place, St. James's" "003458" "51.50663341" "-0.131773845" "true" "false" "1279274280000" "" "false" "19" "1" "20" +"161" "Guildhouse Street, Victoria" "003478" "51.49234577" "-0.141334487" "true" "false" "1279286940000" "" "false" "7" "9" "16" +"162" "Southampton Place, Holborn" "001123" "51.51760685" "-0.121328408" "true" "false" "1279287120000" "" "false" "20" "0" "20" +"163" "Sloane Avenue, Knightsbridge" "003461" "51.4931848" "-0.167894973" "true" "false" "1279287300000" "" "false" "16" "13" "30" +"164" "Cleveland Gardens, Bayswater" "001178" "51.515607" "-0.183118788" "true" "false" "1279287600000" "" "false" "0" "15" "16" +"165" "Orsett Terrace, Bayswater" "002585" "51.517932" "-0.183716959" "true" "false" "1279287960000" "" "false" "3" "12" "15" +"166" "Seville Street, Knightsbridge" "001177" "51.50185512" "-0.159237081" "true" "false" "1279288140000" "" "false" "25" "1" "27" +"167" "Eccleston Place, Victoria" "003465" "51.49395092" "-0.147624377" "true" "false" "" "" "false" "0" "18" "19" +"168" "Argyll Road, Kensington" "003463" "51.50040123" "-0.195455928" "true" "false" "1279289400000" "" "false" "6" "13" "19" +"169" "Porchester Place, Paddington" "003477" "51.51474612" "-0.165164288" "true" "false" "1279289760000" "" "false" "0" "18" "18" +"170" "Hardwick Street, Clerkenwell" "001057" "51.52784273" "-0.108068155" "true" "false" "1279290180000" "" "false" "7" "23" "30" +"171" "Collingham Gardens, Earl's Court" "003459" "51.4916156" "-0.186753859" "true" "false" "1279291200000" "" "false" "0" "14" "14" +"172" "Sumner Place, South Kensington" "001124" "51.49121192" "-0.173715911" "true" "false" "1279291500000" "" "false" "13" "5" "19" +"173" "Waterloo Road, South Bank" "001176" "51.50486" "-0.113001" "true" "false" "1279292700000" "" "false" "15" "0" "15" +"174" "Strand, Strand" "001100" "51.512529" "-0.115163" "true" "false" "1279295940000" "" "false" "31" "5" "36" +"175" "Appold Street, Liverpool Street" "000997" "51.52174384" "-0.0811189" "true" "false" "1279296660000" "" "false" "26" "0" "26" +"176" "Gloucester Terrace, Bayswater" "001173" "51.51791921" "-0.188098863" "true" "false" "1279297560000" "" "false" "6" "17" "23" +"177" "Ashley Place, Victoria" "001122" "51.49616092" "-0.140947636" "true" "false" "1279297740000" "" "false" "12" "13" "25" +"178" "Warwick Square, Pimlico" "003460" "51.48985626" "-0.141923621" "true" "false" "1279297920000" "" "false" "0" "19" "19" +"180" "North Audley Street, Mayfair" "001126" "51.5129118" "-0.153645496" "true" "false" "1279298220000" "" "false" "13" "4" "17" +"181" "Belgrave Square, Belgravia" "003473" "51.49941247" "-0.152317537" "true" "false" "1279298460000" "" "false" "16" "5" "21" +"182" "Bell Street , Marylebone" "001166" "51.52202903" "-0.165842551" "true" "false" "1279363140000" "" "false" "1" "16" "17" +"183" "Riverlight North, Nine Elms" "001165" "51.482362" "-0.13612398" "true" "false" "1279364160000" "1372759560000" "false" "5" "19" "24" +"184" "Portland Place, Marylebone" "001164" "51.52071513" "-0.14521173" "true" "false" "1279364280000" "" "false" "26" "8" "34" +"185" "Alderney Street, Pimlico" "001174" "51.48805753" "-0.140741432" "true" "false" "1279365360000" "" "false" "9" "5" "14" +"186" "South Wharf Road, Paddington" "001167" "51.51733558" "-0.175810943" "true" "false" "1279365480000" "" "false" "2" "12" "16" +"187" "Queen's Gate (South), South Kensington" "001172" "51.49247977" "-0.178433004" "true" "false" "1279365720000" "" "false" "9" "16" "25" +"188" "Nutford Place, Marylebone" "001112" "51.5165179" "-0.164393768" "true" "false" "1279376760000" "" "false" "5" "13" "18" +"189" "Claremont Square, Angel" "001104" "51.53166681" "-0.109914711" "true" "false" "1279377180000" "" "false" "7" "11" "18" +"190" "Rampayne Street, Pimlico" "001106" "51.48997562" "-0.132845681" "true" "false" "1279381080000" "" "false" "10" "11" "21" +"191" "Hyde Park Corner, Hyde Park" "001075" "51.50311799" "-0.153520935" "true" "false" "1279383120000" "" "false" "9" "16" "28" +"192" "Wardour Street, Soho" "001163" "51.51251523" "-0.133201961" "true" "false" "1279383300000" "" "false" "13" "1" "16" +"193" "Bankside Mix, Bankside" "000963" "51.50581776" "-0.100186337" "true" "false" "1279392479356" "" "false" "53" "5" "60" +"194" "Hop Exchange, The Borough" "000960" "51.50462759" "-0.091773776" "true" "false" "1279392479395" "" "false" "13" "42" "56" +"195" "Milroy Walk, South Bank" "000959" "51.50724437" "-0.106237501" "true" "false" "1279392479432" "" "false" "26" "4" "30" +"196" "Union Street, The Borough" "000961" "51.50368837" "-0.098497684" "true" "false" "1279392479471" "" "false" "7" "9" "17" +"197" "Stamford Street, South Bank" "000962" "51.50556905" "-0.111606696" "true" "false" "1279392479520" "" "false" "16" "11" "27" +"199" "Great Tower Street, Monument" "001080" "51.51048489" "-0.082989638" "true" "false" "1279441800000" "" "false" "21" "3" "24" +"200" "LMU Commercial Road, Whitechapel" "001105" "51.51492456" "-0.066078037" "true" "false" "1279441920000" "" "false" "1" "13" "14" +"201" "Dorset Square, Marylebone" "001162" "51.5225965" "-0.161113413" "true" "false" "1279444080000" "" "false" "0" "16" "16" +"202" "Leman Street, Aldgate" "001102" "51.51236389" "-0.06954201" "true" "false" "1279444320000" "" "false" "17" "20" "37" +"203" "West Smithfield Rotunda, Farringdon" "001040" "51.51821864" "-0.100791005" "true" "false" "1279445580000" "" "false" "13" "0" "15" +"204" "Margery Street, Clerkenwell" "003468" "51.52659961" "-0.112432615" "true" "false" "1279466640000" "" "false" "8" "11" "19" +"206" "New Road 1 , Whitechapel" "001171" "51.518154" "-0.062697" "true" "false" "1279471380000" "" "false" "17" "19" "36" +"207" "Grosvenor Crescent, Belgravia" "001169" "51.50135267" "-0.153194766" "true" "false" "1279558140000" "" "false" "15" "3" "18" +"208" "Mallory Street, Marylebone" "001175" "51.52505151" "-0.166304359" "true" "false" "1279472580000" "" "false" "15" "5" "20" +"209" "Denyer Street, Knightsbridge" "003454" "51.49358391" "-0.165101392" "true" "false" "1279529160000" "" "false" "12" "18" "30" +"210" "Hinde Street, Marylebone" "003476" "51.51681444" "-0.151926305" "true" "false" "1279535160000" "" "false" "13" "8" "21" +"211" "Cadogan Place, Knightsbridge" "003469" "51.49464523" "-0.158105512" "true" "false" "1279535820000" "" "false" "32" "2" "34" +"212" "Campden Hill Road, Notting Hill" "003487" "51.50658458" "-0.199004026" "true" "false" "1279536840000" "" "false" "1" "15" "17" +"213" "Wellington Arch, Hyde Park" "001109" "51.50274025" "-0.149569201" "true" "false" "1279537020000" "" "false" "32" "3" "36" +"214" "Endsleigh Gardens, Euston" "001079" "51.52683806" "-0.130504336" "true" "false" "1279537200000" "" "false" "16" "16" "32" +"215" "Moorfields, Moorgate" "001092" "51.51906932" "-0.088285377" "true" "false" "1279537380000" "" "false" "53" "0" "54" +"216" "Old Brompton Road, South Kensington" "003479" "51.49094565" "-0.181190899" "true" "false" "1279537920000" "" "false" "3" "27" "30" +"217" "Wormwood Street, Liverpool Street" "002587" "51.51615461" "-0.082422399" "true" "false" "1279538040000" "" "false" "12" "3" "16" +"218" "St. Luke's Church, Chelsea" "003486" "51.48971651" "-0.170194408" "true" "false" "1279543740000" "" "false" "12" "8" "20" +"219" "Bramham Gardens, Earl's Court" "001183" "51.49016361" "-0.19039362" "true" "false" "1279545900000" "" "false" "12" "17" "29" +"220" "Chelsea Green, Chelsea" "001179" "51.49066456" "-0.166485083" "true" "false" "1279546320000" "" "false" "14" "13" "27" +"221" "Horseferry Road, Westminster" "001170" "51.49481649" "-0.13045856" "true" "false" "1279552200000" "" "false" "8" "8" "16" +"222" "Knightsbridge, Hyde Park" "001101" "51.50275704" "-0.155349725" "true" "false" "1279614120000" "" "false" "29" "14" "43" +"223" "Rodney Road , Walworth" "003481" "51.49148474" "-0.090220911" "true" "false" "1279614420000" "" "false" "1" "23" "24" +"224" "Whiteley's, Bayswater" "001150" "51.51476963" "-0.188129731" "true" "false" "1279615020000" "" "false" "8" "8" "16" +"225" "Notting Hill Gate Station, Notting Hill" "001182" "51.50935342" "-0.196422" "true" "false" "1279616280000" "" "false" "0" "30" "30" +"226" "Charles II Street, West End" "003488" "51.50844614" "-0.131961389" "true" "false" "1279616520000" "" "false" "23" "1" "24" +"227" "Great Percy Street, Clerkenwell" "003470" "51.52891573" "-0.115480888" "true" "false" "1279616700000" "" "false" "0" "23" "23" +"228" "St. James's Square, St. James's" "001067" "51.50742485" "-0.134621209" "true" "false" "1279616880000" "" "false" "21" "18" "40" +"229" "Whitehall Place, Strand" "001151" "51.50654321" "-0.123179697" "true" "false" "1279617780000" "" "false" "21" "2" "24" +"230" "Poured Lines, Bankside" "001144" "51.50669284" "-0.103137426" "true" "false" "1279618020000" "" "false" "21" "9" "31" +"231" "Queen's Gate (Central), South Kensington" "001089" "51.49396755" "-0.17873226" "true" "false" "1279622820000" "" "false" "11" "20" "31" +"232" "Carey Street, Holborn" "001139" "51.51501025" "-0.112753217" "true" "false" "1279623240000" "" "false" "14" "1" "16" +"233" "Pall Mall East, West End" "001153" "51.50777049" "-0.130699733" "true" "false" "1279624260000" "" "false" "22" "0" "22" +"234" "Liverpool Road (N1 Centre), Angel" "001081" "51.53450449" "-0.106992706" "true" "false" "1279624680000" "" "false" "16" "7" "24" +"235" "Kennington Road , Vauxhall" "001154" "51.49571828" "-0.110889274" "true" "false" "1279625640000" "" "false" "14" "22" "36" +"236" "Fashion Street, Whitechapel" "003483" "51.51838043" "-0.073438925" "true" "false" "1279625940000" "" "false" "17" "13" "30" +"237" "Dock Street, Wapping" "003467" "51.5097860151" "-0.0681619805156" "true" "false" "1279799040000" "" "false" "11" "18" "30" +"238" "Frampton Street, Paddington" "001099" "51.5233534" "-0.175116099" "true" "false" "1279627920000" "" "false" "17" "15" "32" +"239" "Warren Street Station, Euston" "001090" "51.52443845" "-0.138019439" "true" "false" "1279628160000" "" "false" "23" "3" "26" +"240" "Colombo Street, Southwark" "003472" "51.50545935" "-0.10569204" "true" "false" "1279628280000" "" "false" "1" "12" "14" +"242" "Beaumont Street, Marylebone" "003482" "51.52200801" "-0.151359288" "true" "false" "1279628640000" "" "false" "1" "22" "23" +"243" "Gloucester Street, Pimlico" "001103" "51.49096258" "-0.139625122" "true" "false" "1279628940000" "" "false" "2" "23" "25" +"244" "Earnshaw Street , Covent Garden" "001145" "51.51611887" "-0.128585022" "true" "false" "1279629240000" "" "false" "12" "5" "18" +"245" "Grosvenor Road, Pimlico" "001140" "51.4853572" "-0.142207481" "true" "false" "1279629660000" "" "false" "6" "23" "29" +"246" "Berry Street, Clerkenwell" "001159" "51.52285301" "-0.099994052" "true" "false" "1279639740000" "" "false" "26" "15" "41" +"247" "St. John's Wood Church, The Regent's Park" "001091" "51.530052" "-0.168314" "true" "false" "1279639920000" "" "false" "14" "36" "50" +"248" "Triangle Car Park, Hyde Park" "001088" "51.50645179" "-0.170279555" "true" "false" "1279640160000" "" "false" "6" "20" "27" +"249" "Harper Road, The Borough" "001137" "51.49859784" "-0.096191134" "true" "false" "1279640400000" "" "false" "13" "29" "42" +"250" "Royal Avenue 1, Chelsea" "003440" "51.489932" "-0.162727" "true" "false" "1279641000000" "" "false" "8" "1" "10" +"251" "Brushfield Street, Liverpool Street" "001161" "51.518908" "-0.079249" "true" "false" "1279700160000" "" "false" "20" "11" "34" +"252" "Jubilee Gardens, South Bank" "001111" "51.5046364" "-0.116542278" "true" "false" "1279700640000" "" "false" "22" "6" "30" +"253" "Shoreditch Park, Hoxton" "001051" "51.53404294" "-0.086379717" "true" "false" "1279700820000" "" "false" "0" "30" "30" +"254" "Chadwell Street, Angel" "003471" "51.53051587" "-0.106408455" "true" "false" "1279700940000" "" "false" "0" "18" "18" +"255" "Clifton Road, Maida Vale" "001147" "51.52557531" "-0.179592915" "true" "false" "1279702560000" "" "false" "3" "19" "22" +"256" "Houghton Street, Strand" "003484" "51.51362054" "-0.116764211" "true" "false" "1279708020000" "" "false" "10" "5" "15" +"257" "Westminster University, Marylebone" "001194" "51.52248185" "-0.154907218" "true" "false" "1279708140000" "" "false" "2" "13" "16" +"258" "Kensington Gore, Knightsbridge" "001193" "51.50143293" "-0.178656971" "true" "false" "1279708380000" "" "false" "14" "9" "23" +"260" "Broadwick Street, Soho" "003489" "51.5136846" "-0.135580879" "true" "false" "1279711020000" "" "false" "16" "2" "18" +"261" "Princes Square, Bayswater" "003491" "51.5134891" "-0.191351186" "true" "false" "1279711200000" "" "false" "0" "15" "15" +"262" "LSBU (Borough Road), Elephant & Castle" "001095" "51.49874469" "-0.103132904" "true" "false" "1279711620000" "" "false" "33" "1" "35" +"263" "St. Mary Axe, Aldgate" "001184" "51.51422502" "-0.080660083" "true" "false" "1279712160000" "" "false" "20" "1" "21" +"264" "Tysoe Street, Clerkenwell" "001146" "51.52644342" "-0.109256828" "true" "false" "1279712520000" "" "false" "14" "4" "20" +"265" "Southwick Street, Paddington" "003490" "51.51595344" "-0.169249375" "true" "false" "1279714320000" "" "false" "0" "16" "17" +"266" "Queen's Gate (North), Kensington" "001204" "51.50102668" "-0.180246101" "true" "false" "1279714560000" "" "false" "8" "33" "41" +"267" "Regency Street, Westminster" "001155" "51.49206037" "-0.132224622" "true" "false" "1279714740000" "" "false" "11" "11" "22" +"268" "Belgrave Road, Victoria" "001087" "51.49320445" "-0.144132875" "true" "false" "1279714920000" "" "false" "15" "14" "29" +"269" "Empire Square, The Borough" "001209" "51.50082346" "-0.089740764" "true" "false" "1279715100000" "" "false" "24" "21" "46" +"270" "Kennington Lane Rail Bridge, Vauxhall" "001190" "51.4863434" "-0.122492418" "true" "false" "1279720380000" "" "false" "4" "26" "31" +"271" "London Zoo, The Regent's Park" "001136" "51.53583617" "-0.156285395" "true" "false" "1279720920000" "" "false" "9" "23" "32" +"272" "Baylis Road, Waterloo" "001133" "51.50144456" "-0.110699309" "true" "false" "1279721220000" "" "false" "15" "2" "22" +"273" "Belvedere Road, South Bank" "001186" "51.50613324" "-0.114686385" "true" "false" "1279721400000" "" "false" "31" "7" "38" +"274" "Warwick Road, Olympia" "001134" "51.49671237" "-0.20528437" "true" "false" "1279721580000" "" "false" "16" "19" "36" +"275" "Barbican Centre, Barbican" "001191" "51.52004497" "-0.092176447" "true" "false" "1279721880000" "" "false" "19" "0" "19" +"276" "Lower Thames Street, Monument" "001098" "51.50930161" "-0.084985356" "true" "false" "1279723200000" "" "false" "24" "0" "24" +"277" "Kensington Church Street, Kensington" "001143" "51.50315739" "-0.191496313" "true" "false" "1279723320000" "" "false" "5" "11" "17" +"278" "Tooley Street, Bermondsey" "001142" "51.5034938" "-0.07962099" "true" "false" "1279723500000" "" "false" "11" "5" "17" +"279" "North Wharf Road, Paddington" "001108" "51.51862243" "-0.176645823" "true" "false" "1279723740000" "" "false" "1" "24" "25" +"280" "Royal Avenue 2, Chelsea" "003462" "51.490083" "-0.162418" "true" "false" "1279726440000" "" "false" "9" "1" "10" +"281" "Smith Square, Westminster" "003480" "51.49580589" "-0.127575233" "true" "false" "1279726620000" "" "false" "12" "5" "18" +"282" "Royal London Hospital, Whitechapel" "001077" "51.51906446" "-0.059642081" "true" "false" "1279726980000" "" "false" "15" "27" "42" +"284" "Lambeth North Station, Waterloo" "001117" "51.49914063" "-0.112031483" "true" "false" "1279727580000" "" "false" "4" "16" "20" +"286" "St. John's Wood Road, St. John's Wood" "001187" "51.5272947" "-0.174653609" "true" "false" "1279727880000" "" "false" "0" "35" "35" +"287" "Bedford Way, Bloomsbury" "001156" "51.52367314" "-0.128377673" "true" "false" "1279728060000" "" "false" "7" "16" "23" +"288" "Elizabeth Bridge, Victoria" "001138" "51.49236962" "-0.147478734" "true" "false" "1279793820000" "" "false" "31" "3" "34" +"289" "South Audley Street, Mayfair" "003493" "51.50923022" "-0.151296092" "true" "false" "1279794060000" "" "false" "12" "2" "15" +"290" "Winsland Street, Paddington" "003496" "51.51678023" "-0.175488803" "true" "false" "1279795140000" "" "false" "1" "12" "15" +"291" "Claverton Street, Pimlico" "001135" "51.48483991" "-0.138089062" "true" "false" "1279800420000" "" "false" "13" "18" "32" +"292" "Montpelier Street, Knightsbridge" "001206" "51.49888404" "-0.165471605" "true" "false" "1279800600000" "" "false" "11" "5" "16" +"293" "Kensington Olympia Station, Olympia" "001214" "51.49815779" "-0.209494128" "true" "false" "1279800780000" "" "false" "0" "25" "25" +"294" "St. George's Square, Pimlico" "001195" "51.488226" "-0.135635511" "true" "false" "1279800900000" "" "false" "11" "5" "16" +"295" "Swan Street, The Borough" "001216" "51.50029631" "-0.092762704" "true" "false" "1279801080000" "" "false" "2" "25" "27" +"296" "Knaresborough Place, Earl's Court" "200069" "51.49363156" "-0.190603326" "true" "false" "1377258960000" "" "false" "5" "13" "18" +"297" "Geraldine Street, Elephant & Castle" "003498" "51.49612799" "-0.106000855" "true" "false" "1279801560000" "" "false" "8" "8" "17" +"298" "Curlew Street, Shad Thames" "001213" "51.50227992" "-0.074189225" "true" "false" "1279805640000" "" "false" "1" "20" "21" +"299" "Vincent Square, Westminster" "001196" "51.49398524" "-0.136928582" "true" "false" "1279808160000" "" "false" "6" "11" "19" +"300" "Serpentine Car Park, Hyde Park" "001217" "51.50501351" "-0.172729559" "true" "false" "1279808700000" "" "false" "0" "16" "16" +"301" "Marylebone Lane, Marylebone" "001152" "51.51475963" "-0.148105415" "true" "false" "1279809000000" "" "false" "20" "4" "24" +"302" "Putney Pier, Wandsworth" "003492" "51.466907" "-0.216573" "true" "false" "1279812360000" "" "false" "25" "3" "28" +"303" "Albert Gate, Hyde Park" "001132" "51.50295379" "-0.158456089" "true" "false" "1279812720000" "" "false" "19" "9" "28" +"304" "Cumberland Gate, Hyde Park" "001149" "51.51211869" "-0.16209757" "true" "false" "1279813380000" "" "false" "0" "20" "20" +"305" "Kennington Lane Tesco, Vauxhall" "001168" "51.48677988" "-0.115853961" "true" "false" "1279815900000" "" "false" "10" "5" "15" +"306" "Rathbone Street, Fitzrovia " "003497" "51.51816295" "-0.135025698" "true" "false" "1279816260000" "" "false" "15" "1" "16" +"307" "Black Lion Gate, Kensington Gardens" "001157" "51.50990837" "-0.187842717" "true" "false" "1279816500000" "" "false" "0" "22" "24" +"308" "Long Lane , Bermondsey" "001189" "51.49907558" "-0.085666316" "true" "false" "1279816740000" "" "false" "2" "18" "20" +"309" "Embankment (Savoy), Strand" "001192" "51.50963123" "-0.119047563" "true" "false" "1279875060000" "" "false" "21" "19" "41" +"310" "Black Prince Road, Vauxhall" "001205" "51.4908679" "-0.116911864" "true" "false" "1279879560000" "" "false" "14" "5" "19" +"312" "Grove End Road, St. John's Wood" "001130" "51.53088935" "-0.176770502" "true" "false" "1279880340000" "" "false" "0" "20" "20" +"313" "Wells Street, Fitzrovia " "003495" "51.51734403" "-0.138072691" "true" "false" "1279880520000" "" "false" "28" "10" "38" +"314" "Tyers Gate, Bermondsey" "003485" "51.50088934" "-0.083159352" "true" "false" "1279884480000" "" "false" "29" "6" "36" +"315" "The Tennis Courts, The Regent's Park" "001199" "51.52536703" "-0.153463612" "true" "false" "1279884660000" "" "false" "10" "5" "16" +"316" "Cardinal Place, Victoria" "000968" "51.49768448" "-0.141943703" "true" "false" "1279884840000" "" "false" "9" "14" "24" +"317" "Dickens Square, Borough" "001208" "51.49679128" "-0.093913472" "true" "false" "1279885080000" "" "false" "7" "25" "32" +"318" "Sackville Street, Mayfair" "001197" "51.51004801" "-0.138846453" "true" "false" "1279885320000" "" "false" "15" "2" "18" +"320" "Queen Mother Sports Centre, Victoria" "001148" "51.49357351" "-0.139956043" "true" "false" "1279890840000" "" "false" "20" "6" "26" +"321" "Bermondsey Street, Bermondsey" "002637" "51.49785559" "-0.081608045" "true" "false" "1279891020000" "" "false" "16" "8" "24" +"322" "Palissy Street, Shoreditch" "003502" "51.526293" "-0.073955" "true" "false" "1279891920000" "" "false" "11" "15" "26" +"323" "Clifton Street, Shoreditch" "003501" "51.523196" "-0.083067" "true" "false" "1279892040000" "" "false" "24" "0" "24" +"324" "Ontario Street, Elephant & Castle" "001200" "51.49652013" "-0.101384068" "true" "false" "1279894920000" "" "false" "13" "1" "15" +"325" "St. Martin's Street, West End" "001158" "51.50908747" "-0.129697889" "true" "false" "1279896660000" "" "false" "8" "10" "18" +"326" "Graham Street, Angel" "001131" "51.53266186" "-0.099981142" "true" "false" "1279896840000" "" "false" "0" "26" "26" +"327" "New North Road 1, Hoxton" "001128" "51.53095" "-0.085603" "true" "false" "1280133420000" "" "false" "4" "18" "22" +"328" "New North Road 2, Hoxton" "002641" "51.53114" "-0.086016" "true" "false" "1280133540000" "" "false" "3" "19" "22" +"329" "Prince Albert Road, The Regent's Park" "002636" "51.53589283" "-0.160854428" "true" "false" "1280133720000" "" "false" "1" "23" "24" +"330" "Eastbourne Mews, Paddington" "001203" "51.51641749" "-0.179135079" "true" "false" "1280141280000" "" "false" "4" "30" "34" +"331" "Bunhill Row, Moorgate" "001211" "51.52085887" "-0.089887855" "true" "false" "1280141460000" "" "false" "30" "0" "30" +"332" "Nevern Place, Earl's Court" "001210" "51.49334336" "-0.194757949" "true" "false" "1280142360000" "" "false" "13" "7" "20" +"333" "Palace Gardens Terrace, Notting Hill" "002633" "51.50860544" "-0.193764092" "true" "false" "1280142540000" "" "false" "2" "35" "37" +"334" "Concert Hall Approach 1, South Bank" "002635" "51.505044" "-0.115851" "true" "false" "1280147580000" "" "false" "9" "1" "10" +"335" "Tavistock Street, Covent Garden" "001207" "51.51196803" "-0.120718759" "true" "false" "1280152560000" "" "false" "19" "14" "33" +"336" "Concert Hall Approach 2, South Bank" "001212" "51.504942" "-0.115533" "true" "false" "1280152800000" "" "false" "14" "4" "18" +"337" "Pembridge Villas, Notting Hill" "002589" "51.51108452" "-0.197524944" "true" "false" "1280153100000" "" "false" "0" "16" "16" +"338" "Wellington Street , Strand" "001202" "51.51175646" "-0.119643424" "true" "false" "1280158740000" "" "false" "13" "1" "15" +"339" "Risinghill Street, Angel" "001127" "51.5333196" "-0.111781191" "true" "false" "1280160600000" "" "false" "11" "14" "25" +"340" "Bank of England Museum, Bank" "001201" "51.51444134" "-0.087587447" "true" "false" "1280248620000" "" "false" "15" "0" "16" +"341" "Craven Street, Strand" "001160" "51.50810309" "-0.12602103" "true" "false" "1280222160000" "" "false" "12" "8" "21" +"343" "London Zoo Car Park, The Regent's Park" "001188" "51.53692216" "-0.150181444" "true" "false" "1280224260000" "" "false" "7" "29" "36" +"344" "Goswell Road (City Uni), Finsbury" "001222" "51.528246" "-0.10102611" "true" "false" "1280226120000" "" "false" "1" "15" "17" +"345" "Flood Street, Chelsea" "001218" "51.48802358" "-0.166878535" "true" "false" "1280229720000" "" "false" "29" "3" "33" +"347" "Lower Marsh, Waterloo" "001219" "51.50013942" "-0.113936001" "true" "false" "1283762460000" "" "false" "15" "1" "17" +"348" "Grosvenor Square, Mayfair" "010627" "51.51217033" "-0.150481272" "true" "false" "1284540540000" "" "false" "16" "0" "17" +"349" "St. George Street, Mayfair" "001221" "51.51196" "-0.142783033" "true" "false" "1284543120000" "" "false" "17" "0" "18" +"350" "Queen's Gate, Kensington Gardens" "001231" "51.5017154373867" "-0.1798541843891" "true" "false" "1285756260000" "" "false" "0" "19" "21" +"351" "Macclesfield Rd, St Lukes" "001226" "51.529423" "-0.097122" "true" "false" "1286790480000" "" "false" "8" "19" "28" +"352" "Vauxhall Street, Vauxhall" "001224" "51.486965" "-0.116625" "true" "false" "1286796360000" "" "false" "15" "4" "19" +"353" "Greycoat Street , Westminster" "010623" "51.49459148" "-0.134234258" "true" "false" "1287652080000" "" "false" "14" "1" "17" +"354" "Northumberland Avenue, Strand" "001097" "51.506767" "-0.123702" "true" "false" "" "" "false" "37" "0" "37" +"355" "Oval Way, Vauxhall" "002694" "51.486575" "-0.117286" "true" "false" "1287752460000" "" "false" "11" "10" "21" +"356" "South Kensington Station, South Kensington" "002685" "51.494412" "-0.173881" "true" "false" "1288009080000" "" "false" "0" "15" "15" +"357" "Howland Street, Fitzrovia" "002691" "51.520994" "-0.139016" "true" "false" "1288092420000" "" "false" "30" "0" "30" +"359" "Butler Place, Westminster" "002662" "51.49782999" "-0.135440826" "true" "false" "1288950960000" "" "false" "9" "7" "18" +"360" "Howick Place, Westminster" "002666" "51.49675303" "-0.138733562" "true" "false" "1288958160000" "" "false" "8" "19" "27" +"361" "Waterloo Station 2, Waterloo" "002692" "51.50391973" "-0.11342629" "true" "false" "1291902600000" "" "false" "10" "44" "55" +"362" "Royal College Street, Camden Town" "002686" "51.536264" "-0.133952" "true" "false" "1290080220000" "" "false" "11" "45" "57" +"363" "Lord's, St. John's Wood" "002665" "51.5291212008901" "-0.171185284853" "true" "false" "1289911800000" "" "false" "14" "10" "24" +"364" "Alfred Place, Bloomsbury" "003507" "51.519656" "-0.132339" "true" "false" "1290080640000" "" "false" "40" "1" "41" +"365" "City Road, Angel" "002690" "51.530344" "-0.100168" "true" "false" "1290603600000" "" "false" "29" "17" "47" +"366" "Millennium Hotel, Mayfair" "001230" "51.5109192966489" "-0.1511263847351" "true" "false" "1290686880000" "" "false" "10" "17" "27" +"367" "Harrowby Street, Marylebone" "002680" "51.5173721" "-0.1642075" "true" "false" "" "" "false" "6" "10" "16" +"368" "Harriet Street, Knightsbridge" "002681" "51.50024195" "-0.15934065" "true" "false" "1291201680000" "" "false" "22" "3" "25" +"370" "Paddington Green, Paddington" "002670" "51.520205" "-0.174593" "true" "false" "1291647300000" "" "false" "2" "17" "20" +"371" "King Edward Walk, Waterloo" "002639" "51.49775" "-0.10988" "true" "false" "1291712820000" "" "false" "5" "16" "22" +"372" "Sardinia Street, Holborn" "002649" "51.515208" "-0.117863" "true" "false" "1291713000000" "" "false" "22" "2" "24" +"373" "Prince Consort Road, Knightsbridge" "003499" "51.49980661" "-0.176415994" "true" "false" "1295428320000" "" "false" "10" "7" "18" +"374" "Waterloo Station 1, Waterloo" "002696" "51.50402794" "-0.11386436" "true" "false" "1291725720000" "" "false" "3" "29" "36" +"375" "Kensington Town Hall, Kensington" "010632" "51.50194596" "-0.194392952" "true" "false" "1291805820000" "" "false" "5" "13" "18" +"376" "Millbank Tower, Pimlico" "002683" "51.49188409" "-0.125674815" "true" "false" "1294660980000" "" "false" "19" "4" "24" +"377" "Waterloo Bridge, South Bank" "002648" "51.50535447" "-0.113656543" "true" "false" "1295265420000" "" "false" "12" "2" "15" +"378" "Natural History Museum, South Kensington" "002677" "51.49559291" "-0.179077626" "true" "false" "1296121500000" "" "false" "18" "24" "42" +"379" "Turquoise Island, Notting Hill" "002682" "51.51431171" "-0.200838199" "true" "false" "1296121680000" "" "false" "1" "20" "21" +"380" "Stanhope Gate, Mayfair" "003506" "51.50686435" "-0.150666888" "true" "false" "1296125400000" "" "false" "21" "0" "21" +"381" "Charlotte Street, Fitzrovia" "002669" "51.51953043" "-0.13577731" "true" "false" "1296203760000" "" "false" "13" "1" "14" +"382" "Farm Street, Mayfair" "002678" "51.50935171" "-0.14744969" "true" "false" "1297159320000" "" "false" "14" "1" "15" +"383" "Frith Street, Soho" "002660" "51.51310333" "-0.13121385" "true" "false" "1296649200000" "" "false" "14" "2" "18" +"384" "Marloes Road, Kensington" "003505" "51.496481" "-0.192404" "true" "false" "1296731880000" "" "false" "9" "5" "15" +"386" "Moor Street, Soho" "003504" "51.51352755" "-0.130110822" "true" "false" "1296732540000" "" "false" "15" "0" "16" +"387" "Fire Brigade Pier, Vauxhall" "002703" "51.49369988" "-0.121394101" "true" "false" "1297077540000" "" "false" "28" "0" "30" +"388" "Southampton Street, Strand" "001228" "51.51070161" "-0.121723604" "true" "false" "1297182180000" "" "false" "11" "0" "14" +"389" "Upper Grosvenor Street, Mayfair" "010621" "51.51013066" "-0.155757901" "true" "false" "1297347960000" "" "false" "16" "1" "18" +"390" "Buxton Street 1, Shoreditch" "001223" "51.521776" "-0.068856" "true" "false" "1297764360000" "" "false" "16" "25" "41" +"391" "Clifford Street, Mayfair" "002688" "51.51066202" "-0.142345694" "true" "false" "1297956480000" "" "false" "27" "0" "27" +"392" "Imperial College, Knightsbridge" "001220" "51.49942855" "-0.179702476" "true" "false" "1297958700000" "" "false" "21" "0" "21" +"393" "Snow Hill, Farringdon" "002699" "51.51733427" "-0.103604248" "true" "false" "1298545440000" "" "false" "12" "3" "15" +"394" "Aberdeen Place, St. John's Wood" "002698" "51.524826" "-0.176268" "true" "false" "" "" "false" "1" "17" "18" +"395" "Cadogan Gardens, Chelsea" "002695" "51.492462" "-0.159919" "true" "false" "1298908800000" "" "false" "13" "1" "15" +"396" "Shouldham Street, Marylebone" "002693" "51.51809" "-0.163609" "true" "false" "1299075120000" "" "false" "0" "16" "16" +"397" "Devonshire Terrace, Bayswater" "001227" "51.51348" "-0.17977" "true" "false" "1299075900000" "" "false" "0" "16" "16" +"398" "Holland Park, Kensington" "010631" "51.502319" "-0.200742" "true" "false" "1299076440000" "" "false" "8" "22" "30" +"399" "Brick Lane Market, Shoreditch" "002687" "51.52261762" "-0.071653961" "true" "false" "1299582900000" "" "false" "4" "20" "24" +"400" "George Street, Marylebone" "001225" "51.517703" "-0.154106" "true" "false" "1299583260000" "" "false" "16" "11" "27" +"401" "Columbia Road, Shoreditch" "002701" "51.528187" "-0.075375" "true" "false" "1299592500000" "" "false" "0" "24" "24" +"402" "Penfold Street, Marylebone" "010625" "51.52289229" "-0.171681991" "true" "false" "1299592860000" "" "false" "0" "15" "15" +"403" "George Place Mews, Marylebone" "010630" "51.51689296" "-0.158249929" "true" "false" "1299593640000" "" "false" "8" "8" "16" +"404" "Palace Gate, Kensington Gardens" "001110" "51.50204238" "-0.184400221" "true" "false" "1299669180000" "" "false" "2" "11" "13" +"405" "Gloucester Road Station, South Kensington" "001107" "51.49418566" "-0.18267094" "true" "false" "1299669300000" "" "false" "7" "6" "15" +"406" "Speakers' Corner 2, Hyde Park" "010633" "51.51222" "-0.160785" "true" "false" "1299755340000" "" "false" "9" "16" "25" +"407" "Speakers' Corner 1, Hyde Park" "000977" "51.512303" "-0.159988" "true" "false" "" "" "false" "13" "6" "20" +"408" "Paddington Green Police Station, Paddington" "001129" "51.51994326" "-0.170704337" "true" "false" "" "" "false" "27" "13" "40" +"409" "Strata, Elephant & Castle" "010624" "51.493146" "-0.099828" "true" "false" "" "" "false" "21" "19" "41" +"410" "Edgware Road Station, Marylebone" "001058" "51.519968" "-0.169774" "true" "false" "" "" "false" "43" "19" "64" +"411" "Walworth Road, Elephant & Castle" "010629" "51.49337264" "-0.09968067" "true" "false" "" "" "false" "17" "16" "33" +"412" "Cleaver Street, Kennington" "010628" "51.488105" "-0.110121" "true" "false" "1302006180000" "" "false" "1" "16" "17" +"419" "Chelsea Bridge, Pimlico" "022160" "51.485821" "-0.149004" "true" "false" "1308735300000" "" "false" "9" "5" "15" +"420" "Southwark Station 1, Southwark" "022162" "51.504043" "-0.105312" "true" "false" "1309258380000" "" "false" "30" "7" "37" +"421" "Southwark Station 2, Southwark" "022163" "51.504044" "-0.104778" "true" "false" "1309258440000" "" "false" "6" "35" "45" +"423" "Eaton Square (South), Belgravia" "022164" "51.49456127" "-0.15393398" "true" "false" "1309860240000" "" "false" "29" "2" "31" +"424" "Ebury Bridge, Pimlico" "022159" "51.490491" "-0.149186" "true" "false" "1324551120000" "" "false" "2" "27" "29" +"425" "Harrington Square 2, Camden Town" "022181" "51.533379" "-0.139159" "true" "false" "1310028420000" "" "false" "16" "22" "38" +"426" "Vincent Street, Pimlico" "022161" "51.493072" "-0.129925" "true" "false" "1310463720000" "" "false" "13" "4" "17" +"427" "Cheapside, Bank" "022180" "51.51397065" "-0.09294031" "true" "false" "1310725680000" "" "false" "39" "3" "43" +"428" "Exhibition Road, Knightsbridge" "022179" "51.499917" "-0.174554" "true" "false" "1318496100000" "" "false" "14" "6" "20" +"430" "South Parade, Chelsea" "022182" "51.48902" "-0.17524" "true" "false" "1324549980000" "" "false" "7" "11" "18" +"431" "Crinan Street, King's Cross" "022183" "51.534474" "-0.122203" "true" "false" "1323355020000" "" "false" "19" "1" "20" +"432" "Exhibition Road Museums, South Kensington" "022158" "51.496957" "-0.173894" "true" "false" "1319448720000" "" "false" "19" "1" "22" +"433" "Wren Street, Holborn" "022169" "51.524564" "-0.116279" "true" "false" "1323361560000" "" "false" "31" "1" "33" +"435" "Kennington Station, Kennington" "022170" "51.488852" "-0.105593" "true" "false" "1323346020000" "" "false" "3" "20" "23" +"436" "Red Lion Street, Holborn" "022171" "51.51824" "-0.11655" "true" "false" "1323350220000" "" "false" "34" "1" "36" +"437" "Vauxhall Walk, Vauxhall" "200056" "51.488124" "-0.120903" "true" "false" "1325746380000" "" "false" "11" "16" "27" +"440" "Kennington Oval, Oval" "200032" "51.483145" "-0.113134" "true" "false" "1325708160000" "" "false" "0" "33" "33" +"441" "Sail Street, Vauxhall" "200039" "51.495656" "-0.114605" "true" "false" "1325711220000" "" "false" "5" "17" "24" +"442" "Walmer Road, Avondale" "200035" "51.510101" "-0.211358" "true" "false" "1325940420000" "" "false" "4" "20" "24" +"443" "Philpot Street, Whitechapel" "200033" "51.515256" "-0.058641" "true" "false" "1325941800000" "" "false" "6" "24" "30" +"444" "Bethnal Green Garden, Bethnal Green" "200047" "51.52568" "-0.055312" "true" "false" "1325944680000" "" "false" "8" "16" "24" +"445" "Cheshire Street, Bethnal Green" "200003" "51.52388" "-0.065076" "true" "false" "1325945820000" "" "false" "1" "25" "27" +"446" "York Hall, Bethnal Green" "200042" "51.528936" "-0.055894" "true" "false" "1325948880000" "" "false" "4" "23" "27" +"447" "Jubilee Crescent, Cubitt Town" "200054" "51.493381" "-0.007542" "true" "false" "1325949000000" "" "false" "25" "29" "54" +"448" "Fisherman's Walk West, Canary Wharf" "022165" "51.50623" "-0.02296" "true" "false" "1325952660000" "" "false" "34" "1" "36" +"449" "Shadwell Station, Shadwell" "200020" "51.511088" "-0.057159" "true" "false" "1325952900000" "" "false" "0" "34" "35" +"450" "Jubilee Street, Stepney" "200002" "51.515975" "-0.053177" "true" "false" "1326105240000" "" "false" "0" "28" "28" +"451" "Hermitage Court, Wapping" "200021" "51.504719" "-0.063531" "true" "false" "1325501400000" "" "false" "0" "16" "16" +"452" "St. Katharine's Way, Tower" "200049" "51.505697" "-0.070542" "true" "false" "1326109140000" "" "false" "7" "17" "24" +"453" "Garnet Street, Shadwell" "200045" "51.508447" "-0.055167" "true" "false" "1326111060000" "" "false" "5" "18" "24" +"454" "Napier Avenue, Millwall" "200046" "51.487679" "-0.021582" "true" "false" "1326115380000" "" "false" "4" "15" "20" +"455" "East Ferry Road, Cubitt Town" "200031" "51.49447" "-0.014409" "true" "false" "1326117780000" "" "false" "15" "2" "17" +"456" "Parkway, Camden Town" "200118" "51.538071" "-0.144664" "true" "false" "1326197580000" "" "false" "2" "31" "33" +"457" "Castlehaven Road, Camden Town" "200016" "51.542138" "-0.145393" "true" "false" "1326203280000" "" "false" "5" "24" "29" +"458" "Wapping Lane, Wapping" "200034" "51.504749" "-0.057544" "true" "false" "1326294780000" "" "false" "0" "27" "28" +"459" "Gunmakers Lane, Old Ford" "200014" "51.535179" "-0.03338" "true" "false" "" "" "false" "0" "17" "17" +"461" "Aston Street, Stepney" "200013" "51.516" "-0.038775" "true" "false" "1326293640000" "" "false" "7" "13" "20" +"462" "Bonny Street, Camden Town" "200105" "51.541603" "-0.138853" "true" "false" "1326294600000" "" "false" "0" "44" "45" +"463" "Thurtle Road, Haggerston" "200093" "51.534776" "-0.071881" "true" "false" "" "" "false" "7" "15" "22" +"464" "St. Mary & St. Michael Church, Stepney" "200082" "51.51417" "-0.052099" "true" "false" "1326304980000" "" "false" "0" "25" "25" +"465" "Pitfield Street North,Hoxton" "200152" "51.53558" "-0.08249" "true" "false" "1333613280000" "" "false" "0" "27" "28" +"466" "Whiston Road, Haggerston" "200158" "51.534464" "-0.076341" "true" "false" "1326360000000" "" "false" "0" "21" "21" +"467" "Southern Grove, Bow" "200168" "51.523538" "-0.030556" "true" "false" "1326374040000" "" "false" "3" "14" "17" +"468" "Cantrell Road, Bow" "200150" "51.521564" "-0.022694" "true" "false" "1326375720000" "" "false" "0" "24" "24" +"469" "Lindfield Street, Poplar" "022178" "51.513757" "-0.020467" "true" "false" "1326381060000" "" "false" "7" "36" "44" +"470" "Mostyn Grove, Bow" "200174" "51.530535" "-0.025492" "true" "false" "1326790620000" "" "false" "6" "40" "46" +"471" "Hewison Street, Old Ford" "200006" "51.533283" "-0.028155" "true" "false" "1326790860000" "" "false" "5" "14" "19" +"472" "Malmesbury Road, Bow" "200019" "51.529452" "-0.027616" "true" "false" "1326791160000" "" "false" "5" "16" "21" +"473" "Millharbour, Millwall" "022167" "51.496137" "-0.019355" "true" "false" "1326816540000" "" "false" "7" "12" "19" +"474" "Castalia Square, Cubitt Town" "200155" "51.498125" "-0.011457" "true" "false" "1326822960000" "" "false" "18" "21" "39" +"475" "Lightermans Road, Millwall" "200004" "51.499041" "-0.020157" "true" "false" "1326825480000" "" "false" "35" "21" "57" +"476" "Stebondale Street, Cubitt Town" "200009" "51.489096" "-0.009205" "true" "false" "1326962100000" "" "false" "24" "5" "29" +"477" "Spindrift Avenue, Millwall" "200018" "51.49109" "-0.018716" "true" "false" "1326963780000" "" "false" "11" "24" "35" +"478" "Stepney Green Station, Stepney" "200012" "51.521889" "-0.04667" "true" "false" "1326965580000" "" "false" "0" "21" "21" +"479" "Pott Street, Bethnal Green" "200156" "51.527152" "-0.058005" "true" "false" "1326966240000" "" "false" "0" "19" "20" +"480" "Flamborough Street, Limehouse" "200115" "51.5128711" "-0.0389866" "true" "false" "1326975420000" "" "false" "0" "25" "25" +"481" "Saunders Ness Road, Cubitt Town" "200022" "51.487129" "-0.009001" "true" "false" "1326996480000" "" "false" "28" "7" "35" +"482" "Thornfield House, Poplar" "200052" "51.509843" "-0.02377" "true" "false" "1326996720000" "" "false" "11" "15" "26" +"483" "Albert Gardens, Stepney" "022166" "51.51328" "-0.047784" "true" "false" "1327088280000" "" "false" "1" "31" "33" +"484" "Bromley High Street, Bow" "022172" "51.528828" "-0.013258" "true" "false" "1327339740000" "" "false" "9" "14" "24" +"485" "Old Ford Road, Bethnal Green" "022173" "51.531127" "-0.048017" "true" "false" "1327255440000" "" "false" "0" "23" "24" +"486" "Granby Street, Shoreditch" "022174" "51.525645" "-0.069543" "true" "false" "1327338660000" "" "false" "3" "33" "37" +"487" "Canton Street, Poplar" "022175" "51.511811" "-0.025626" "true" "false" "1327936860000" "" "false" "13" "9" "23" +"488" "Reardon Street, Wapping" "022176" "51.506946" "-0.058681" "true" "false" "1327254960000" "" "false" "2" "20" "22" +"489" "Christian Street, Whitechapel" "022177" "51.513074" "-0.064094" "true" "false" "1327087920000" "" "false" "0" "31" "34" +"490" "Pennington Street, Wapping" "200090" "51.508622" "-0.065006" "true" "false" "" "" "false" "6" "39" "45" +"491" "Queen Mary's, Mile End" "200249" "51.522507" "-0.041378" "true" "false" "1327256220000" "" "false" "7" "38" "45" +"492" "The Green Bridge, Mile End" "200230" "51.524677" "-0.03562" "true" "false" "1327256520000" "" "false" "10" "53" "63" +"494" "South Quay East, Canary Wharf" "200233" "51.50196" "-0.016251" "true" "false" "1327433220000" "" "false" "22" "13" "36" +"495" "Bow Church Station, Bow" "200252" "51.528169" "-0.018703" "true" "false" "1327340460000" "" "false" "5" "33" "38" +"496" "Devons Road, Bow" "200255" "51.52512" "-0.015578" "true" "false" "1327400820000" "" "false" "16" "23" "39" +"497" "Merchant Street, Bow" "200242" "51.526177" "-0.0274677" "true" "false" "1327398420000" "" "false" "11" "16" "27" +"498" "Bow Road Station, Bow" "200251" "51.527058" "-0.025296" "true" "false" "1327398660000" "" "false" "22" "19" "41" +"499" "Furze Green, Bow" "200011" "51.519265" "-0.021345" "true" "false" "1327407960000" "" "false" "15" "20" "36" +"500" "Ansell House, Stepney" "200148" "51.519806" "-0.055731" "true" "false" "1327430040000" "" "false" "4" "37" "41" +"501" "Cephas Street, Bethnal Green" "200073" "51.522561" "-0.054883" "true" "false" "1327430220000" "" "false" "4" "20" "24" +"503" "Cleveland Way, Stepney" "200250" "51.520893" "-0.051394" "true" "false" "1327492920000" "" "false" "20" "14" "36" +"504" "St. John's Park, Cubitt Town" "200243" "51.496454" "-0.009506" "true" "false" "1327937820000" "" "false" "13" "16" "30" +"505" "Ackroyd Drive, Bow" "200038" "51.520398" "-0.026768" "true" "false" "1327937460000" "" "false" "10" "18" "29" +"506" "Bell Lane, Liverpool Street" "200036" "51.517475" "-0.075855" "true" "false" "1327938660000" "" "false" "16" "6" "23" +"507" "Clarkson Street, Bethnal Green" "200131" "51.528692" "-0.059091" "true" "false" "1327938420000" "" "false" "0" "29" "31" +"508" "Fournier Street, Whitechapel" "200157" "51.519362" "-0.074431" "true" "false" "1327938180000" "" "false" "17" "1" "18" +"509" "Fore Street, Guildhall" "200253" "51.517842" "-0.090075" "true" "false" "1327938120000" "" "false" "18" "0" "19" +"510" "Westferry DLR, Limehouse" "200238" "51.509303" "-0.025996" "true" "false" "" "" "false" "36" "3" "41" +"511" "Sutton Street, Shadwell" "200256" "51.511066" "-0.053558" "true" "false" "1327937940000" "" "false" "0" "32" "33" +"512" "Pritchard's Road, Bethnal Green" "200083" "51.532091" "-0.06142" "true" "false" "1328112600000" "" "false" "1" "26" "30" +"513" "Watney Market, Stepney" "200162" "51.5142228" "-0.055656" "true" "false" "" "" "false" "0" "51" "51" +"514" "Portman Square, Marylebone" "200008" "51.516204" "-0.155525" "true" "false" "1328201520000" "" "false" "12" "5" "17" +"515" "Russell Gardens, Olympia" "200080" "51.500088" "-0.211316" "true" "false" "" "" "false" "3" "21" "24" +"516" "Chrisp Street Market, Poplar" "200089" "51.5112" "-0.014438" "true" "false" "1328202420000" "" "false" "8" "10" "18" +"517" "Ford Road, Old Ford" "200027" "51.532513" "-0.033085" "true" "false" "1326790860000" "" "false" "0" "18" "18" +"518" "Antill Road, Mile End" "200041" "51.528224" "-0.037471" "true" "false" "" "" "false" "1" "29" "30" +"519" "Teviot Street, Poplar" "200254" "51.518811" "-0.011662" "true" "false" "" "" "false" "26" "7" "33" +"520" "Bancroft Road, Bethnal Green" "200234" "51.526041" "-0.047218" "true" "false" "" "" "false" "5" "13" "21" +"521" "Driffield Road, Old Ford" "200030" "51.534137" "-0.037366" "true" "false" "" "" "false" "0" "19" "19" +"522" "Clinton Road, Mile End" "200161" "51.525941" "-0.036017" "true" "false" "" "" "false" "0" "35" "36" +"523" "Langdon Park, Poplar" "200160" "51.51549" "-0.013475" "true" "false" "" "" "false" "7" "17" "24" +"524" "Lancaster Gate , Bayswater" "200017" "51.511654" "-0.179668" "true" "false" "1328515080000" "" "false" "1" "36" "38" +"526" "Lancaster Drive, Blackwall" "200143" "51.503143" "-0.008428" "true" "false" "" "" "false" "20" "7" "27" +"527" "Hansard Mews, Holland Park" "200154" "51.503802" "-0.215808" "true" "false" "1328777280000" "" "false" "20" "0" "20" +"528" "Clarges Street, Mayfair" "200088" "51.507326" "-0.145827" "true" "false" "1328777880000" "" "false" "15" "0" "16" +"529" "Manresa Road, Chelsea" "200010" "51.486892" "-0.170983" "true" "false" "" "" "false" "8" "10" "18" +"530" "Newby Place, Poplar" "200146" "51.508896" "-0.012413" "true" "false" "" "" "false" "15" "3" "18" +"531" "Twig Folly Bridge, Mile End" "200167" "51.530326" "-0.042744" "true" "false" "1328778840000" "" "false" "0" "20" "21" +"532" "Jubilee Plaza, Canary Wharf" "200163" "51.50357" "-0.020068" "true" "false" "1328886360000" "" "false" "35" "24" "63" +"533" "Wellington Row, Bethnal Green" "200165" "51.528222" "-0.069743" "true" "false" "" "" "false" "15" "17" "33" +"534" "Goldsmith's Row, Haggerston" "200159" "51.531864" "-0.066035" "true" "false" "" "" "false" "0" "26" "27" +"535" "Gloucester Avenue, Camden Town" "200145" "51.537349" "-0.147154" "true" "false" "" "" "false" "7" "16" "24" +"536" "Queensbridge Road, Haggerston" "200024" "51.53385" "-0.06992" "true" "false" "" "" "false" "6" "29" "35" +"537" "Old Montague Street, Whitechapel" "200239" "51.51793" "-0.067937" "true" "false" "1330352880000" "" "false" "1" "15" "18" +"538" "Naval Row, Blackwall" "200050" "51.508981" "-0.00699" "true" "false" "" "" "false" "18" "2" "21" +"539" "Hoxton Station, Hoxton" "200151" "51.531091" "-0.075901" "true" "false" "" "" "false" "1" "20" "22" +"540" "Albany Street, The Regent's Park" "200134" "51.528302" "-0.144466" "true" "false" "" "" "false" "0" "27" "27" +"541" "Green Park Station, Mayfair" "200096" "51.506613" "-0.142844" "true" "false" "" "" "false" "25" "0" "28" +"542" "Salmon Lane, Limehouse" "200147" "51.514115" "-0.033828" "true" "false" "" "" "false" "0" "31" "33" +"543" "Lansdowne Walk, Ladbroke Grove" "200065" "51.509591" "-0.204666" "true" "false" "" "" "false" "0" "21" "21" +"544" "Percival Street, Finsbury" "200051" "51.526153" "-0.102208" "true" "false" "" "" "false" "20" "0" "22" +"545" "Arlington Road, Camden Town" "200070" "51.539957" "-0.145246" "true" "false" "" "" "false" "11" "13" "24" +"546" "New Fetter Lane, Holborn" "200044" "51.517428" "-0.107987" "true" "false" "" "" "false" "16" "5" "21" +"547" "East India DLR, Blackwall" "200127" "51.509474" "-0.002275" "true" "false" "" "" "false" "40" "11" "51" +"548" "Westminster Bridge Road, Elephant & Castle" "200076" "51.498386" "-0.107913" "true" "false" "" "" "false" "11" "15" "26" +"549" "Gaywood Street, Elephant & Castle" "200132" "51.49605" "-0.104193" "true" "false" "" "" "false" "28" "17" "45" +"550" "Harford Street, Mile End" "200102" "51.521564" "-0.039264" "true" "false" "" "" "false" "1" "22" "23" +"551" "Montgomery Square, Canary Wharf" "200066" "51.503447" "-0.016233" "true" "false" "1330071720000" "" "false" "37" "0" "39" +"552" "Watney Street, Shadwell" "200149" "51.511542" "-0.056667" "true" "false" "" "" "false" "5" "21" "27" +"553" "Regent's Row , Haggerston " "200064" "51.535678" "-0.062546" "true" "false" "" "" "false" "1" "22" "24" +"554" "Aberfeldy Street, Poplar" "200078" "51.513548" "-0.005659" "true" "false" "" "" "false" "10" "6" "16" +"555" "Westfield Eastern Access Road, Shepherd's Bush" "200245" "51.509424" "-0.219712" "true" "false" "1330589340000" "" "false" "50" "5" "56" +"556" "Heron Quays DLR, Canary Wharf" "200138" "51.502661" "-0.021596" "true" "false" "" "" "false" "26" "1" "27" +"557" "King Edward Street, St Pauls" "200203" "51.51601" "-0.0985" "true" "false" "" "" "false" "19" "1" "20" +"558" "Page Street, Westminster" "200048" "51.493978" "-0.127554" "true" "false" "1399635120000" "" "false" "16" "8" "24" +"559" "Abbotsbury Road, Holland Park" "200111" "51.501391" "-0.205991" "true" "false" "" "" "false" "14" "10" "24" +"560" "Ladbroke Grove Central, Ladbroke Grove" "200015" "51.511624" "-0.205921" "true" "false" "" "" "false" "0" "21" "21" +"561" "Rectory Square, Stepney" "200037" "51.518369" "-0.043371" "true" "false" "1330503540000" "" "false" "6" "16" "22" +"562" "Bury Place, Holborn" "200074" "51.51746" "-0.12335" "true" "false" "1330503420000" "" "false" "21" "0" "21" +"563" "Preston's Road, Cubitt Town" "200232" "51.499286" "-0.009152" "true" "false" "" "" "false" "11" "15" "26" +"564" "Somerset House, Strand" "200068" "51.509943" "-0.117619" "true" "false" "" "" "false" "35" "6" "41" +"565" "Selby Street, Whitechapel" "200135" "51.521905" "-0.063386" "true" "false" "" "" "false" "0" "17" "17" +"566" "Westfield Ariel Way, White City" "200141" "51.509158" "-0.224103" "true" "false" "1330937940000" "" "false" "37" "5" "42" +"568" "Bishop's Bridge Road West, Bayswater" "200110" "51.51616" "-0.18697" "true" "false" "" "" "false" "0" "18" "18" +"569" "Pitfield Street Central, Hoxton" "200248" "51.53213" "-0.08299" "true" "false" "" "" "false" "0" "30" "30" +"570" "Upper Bank Street, Canary Wharf" "200099" "51.503083" "-0.017676" "true" "false" "1330773180000" "" "false" "34" "1" "36" +"571" "Westfield Southern Terrace ,Shepherd's Bush" "200061" "51.506256" "-0.218337" "true" "false" "1330620180000" "" "false" "18" "10" "29" +"572" "Greenland Road, Camden Town" "200026" "51.539099" "-0.141728" "true" "false" "" "" "false" "4" "32" "36" +"573" "Limerston Street, West Chelsea" "200001" "51.485587" "-0.18119" "true" "false" "1331796060000" "" "false" "11" "7" "18" +"574" "Eagle Wharf Road, Hoxton" "200246" "51.53356" "-0.09315" "true" "false" "1333618560000" "" "false" "11" "33" "45" +"576" "Alpha Grove, Millwall" "200109" "51.497304" "-0.022793" "true" "false" "" "" "false" "11" "12" "23" +"577" "Globe Town Market, Bethnal Green" "200247" "51.528869" "-0.047548" "true" "false" "" "" "false" "0" "20" "20" +"578" "Hollybush Gardens, Bethnal Green" "200244" "51.527607" "-0.057133" "true" "false" "1330444680000" "" "false" "0" "31" "32" +"579" "Queen Street 2, Bank" "200128" "51.511246" "-0.093051" "true" "false" "" "" "false" "35" "1" "36" +"580" "Doddington Grove, Kennington" "200084" "51.48692917" "-0.102996299" "true" "false" "1392208500000" "" "false" "9" "27" "36" +"581" "New Cavendish Street, Marylebone" "200005" "51.519167" "-0.147983" "true" "false" "1331883540000" "" "false" "18" "0" "18" +"584" "Ilchester Gardens, Bayswater" "200086" "51.51244" "-0.19096" "true" "false" "" "" "false" "0" "18" "21" +"586" "Mudchute DLR, Cubitt Town" "200092" "51.490645" "-0.014582" "true" "false" "1331797200000" "" "false" "30" "1" "31" +"587" "Monument Street, Monument" "200101" "51.50964" "-0.08497" "true" "false" "1332406320000" "" "false" "22" "0" "22" +"588" "Hoxton Street, Hoxton" "200071" "51.52959" "-0.0801" "true" "false" "1330937820000" "" "false" "17" "10" "27" +"589" "Drayton Gardens, West Chelsea" "200060" "51.487196" "-0.179369" "true" "false" "" "" "false" "8" "9" "18" +"590" "Greenberry Street, St.John's Wood" "200236" "51.53256" "-0.16862" "true" "false" "" "" "false" "6" "20" "26" +"591" "Westfield Library Corner, Shepherd's Bush" "200227" "51.506093" "-0.2242237" "true" "false" "1330759800000" "" "false" "13" "14" "27" +"592" "Bishop's Bridge Road East, Bayswater" "200108" "51.5171" "-0.18377" "true" "false" "" "" "false" "1" "19" "20" +"593" "Northdown Street, King's Cross" "200058" "51.531066" "-0.11934" "true" "false" "" "" "false" "9" "12" "21" +"594" "Kingsway Southbound, Strand" "200226" "51.513875" "-0.117774" "true" "false" "1331710680000" "" "false" "27" "6" "33" +"595" "Hammersmith Road, Hammersmith" "200142" "51.493267" "-0.21985" "true" "false" "" "" "false" "19" "3" "22" +"596" "Parson's Green , Parson's Green" "200237" "51.472817" "-0.199783" "true" "false" "" "" "false" "9" "12" "21" +"597" "Fulham Park Road, Fulham" "200229" "51.473471" "-0.20782" "true" "false" "" "" "false" "1" "26" "27" +"598" "Southerton Road, Hammersmith" "200166" "51.494499" "-0.228188" "true" "false" "" "" "false" "31" "7" "38" +"599" "Manbre Road, Hammersmith" "200235" "51.485743" "-0.223616" "true" "false" "" "" "false" "2" "22" "24" +"600" "South Lambeth Road, Vauxhall" "200133" "51.481747" "-0.124642" "true" "false" "" "" "false" "7" "14" "21" +"601" "BBC White City, White City" "200136" "51.514767" "-0.225787" "true" "false" "" "" "false" "20" "16" "36" +"602" "Union Grove, Wandsworth Road" "200211" "51.472993" "-0.133972" "true" "false" "" "" "false" "18" "27" "45" +"603" "Caldwell Street, Stockwell" "200137" "51.477839" "-0.116493" "true" "false" "" "" "false" "15" "28" "44" +"604" "St Martins Close, Camden Town" "200195" "51.538792" "-0.138535" "true" "false" "" "" "false" "0" "18" "18" +"605" "Seymour Place, Marylebone" "200198" "51.520331" "-0.163667" "true" "false" "" "" "false" "4" "16" "20" +"606" "Addison Road, Holland Park" "200218" "51.504199" "-0.210941" "true" "false" "" "" "false" "5" "21" "26" +"607" "Putney Bridge Station, Fulham" "200125" "51.468814" "-0.210279" "true" "false" "" "" "false" "17" "4" "21" +"608" "Colet Gardens, Hammersmith" "200224" "51.491093" "-0.216493" "true" "false" "" "" "false" "29" "0" "29" +"609" "Sugden Road, Clapham" "200208" "51.46512358" "-0.157788279" "true" "false" "1380109980000" "" "false" "0" "19" "19" +"610" "Danvers Street, West Chelsea" "200222" "51.48256792" "-0.172078187" "true" "false" "1380113460000" "" "false" "21" "0" "21" +"611" "Princedale Road , Holland Park" "200067" "51.50646524" "-0.208486599" "true" "false" "1380203940000" "" "false" "1" "18" "20" +"612" "Wandsworth Rd, Isley Court, Wandsworth Road" "200175" "51.46925984" "-0.141812513" "true" "false" "1380294600000" "" "false" "2" "27" "30" +"613" "Woodstock Grove, Shepherd's Bush" "200214" "51.50403821" "-0.217400093" "true" "false" "1380211860000" "" "false" "23" "1" "24" +"614" "Bradmead, Battersea Park" "200025" "51.47817208" "-0.144690541" "true" "false" "1380795000000" "" "false" "28" "12" "40" +"615" "Finlay Street, Fulham" "200029" "51.4768851" "-0.215895601" "true" "false" "1380288900000" "" "false" "2" "22" "24" +"616" "Aintree Street, Fulham" "200098" "51.48102131" "-0.209973497" "true" "false" "" "" "false" "0" "24" "24" +"617" "Elysium Place, Fulham" "200028" "51.47107905" "-0.207842908" "true" "false" "1380531540000" "" "false" "0" "21" "21" +"618" "Eel Brook Common, Walham Green" "300003" "51.47625965" "-0.193254007" "true" "false" "1380546540000" "" "false" "1" "23" "24" +"619" "Irene Road, Parsons Green" "300012" "51.4737636" "-0.197010096" "true" "false" "1380552360000" "" "false" "9" "34" "43" +"620" "Surrey Lane, Battersea" "300010" "51.47518024" "-0.167160736" "true" "false" "1380629040000" "" "false" "6" "22" "28" +"621" "Wandsworth Town Station, Wandsworth" "200091" "51.46086446" "-0.187427294" "true" "false" "1380899280000" "" "false" "12" "21" "33" +"622" "Lansdowne Road, Ladbroke Grove" "200172" "51.50748124" "-0.205535908" "true" "false" "1380901680000" "" "false" "12" "17" "29" +"623" "Nantes Close, Clapham Junction" "200186" "51.46193072" "-0.180791784" "true" "false" "1381135320000" "" "false" "6" "15" "22" +"624" "Courland Grove, Wandsworth Road" "200173" "51.4729184" "-0.132102704" "true" "false" "1381224240000" "" "false" "16" "23" "40" +"625" "Queen's Circus, Battersea Park" "200190" "51.47761941" "-0.149551631" "true" "false" "1381227480000" "" "false" "6" "21" "28" +"626" "Normand Park, West Kensington" "300008" "51.48438657" "-0.20481514" "true" "false" "1381920300000" "" "false" "1" "22" "24" +"627" "Holden Street, Battersea" "200007" "51.4687905" "-0.158230901" "true" "false" "1381931400000" "" "false" "2" "18" "20" +"628" "William Morris Way, Sands End" "200062" "51.46881971" "-0.184318843" "true" "false" "1381414980000" "" "false" "9" "16" "26" +"629" "Morie Street, Wandsworth" "200187" "51.45995384" "-0.190184054" "true" "false" "1381479480000" "" "false" "22" "6" "28" +"630" "Clarence Walk, Stockwell" "200194" "51.47073264" "-0.126994068" "true" "false" "1381487100000" "" "false" "14" "14" "28" +"631" "Battersea Park Road, Nine Elms" "200183" "51.4795017" "-0.141770709" "true" "false" "1381245300000" "" "false" "13" "14" "27" +"632" "Sheepcote Lane, Battersea" "200176" "51.47053858" "-0.163041605" "true" "false" "1381220700000" "" "false" "5" "21" "27" +"633" "Vereker Road North, West Kensington" "200116" "51.48959104" "-0.209378594" "true" "false" "1381402920000" "" "false" "30" "2" "32" +"634" "Brook Green South, Brook Green" "300002" "51.49434708" "-0.215804559" "true" "false" "1381743780000" "" "false" "28" "5" "33" +"635" "Greyhound Road, Hammersmith" "200215" "51.48606206" "-0.214428378" "true" "false" "1381756440000" "" "false" "8" "28" "37" +"636" "South Park, Sands End" "200180" "51.46706414" "-0.193502076" "true" "false" "1381846320000" "" "false" "20" "8" "28" +"637" "Spencer Park, Wandsworth Common" "200191" "51.45787019" "-0.174691623" "true" "false" "1381933680000" "" "false" "9" "16" "25" +"638" "Falcon Road, Clapham Junction" "300014" "51.46663393" "-0.169821175" "true" "false" "" "1381834020000" "false" "11" "17" "28" +"639" "Coomer Place, West Kensington" "200081" "51.48357068" "-0.202038682" "true" "false" "1381835700000" "" "false" "1" "26" "27" +"640" "Silverthorne Road, Battersea" "200179" "51.47286577" "-0.148059277" "true" "false" "1382010420000" "" "false" "12" "16" "28" +"641" "Archbishop's Park, Waterloo" "300025" "51.49824168" "-0.117495865" "true" "false" "1381926900000" "" "false" "23" "0" "23" +"642" "Fawcett Close, Clapham Junction" "200192" "51.46916161" "-0.174485792" "true" "false" "1381934220000" "" "false" "21" "15" "36" +"644" "Rainville Road, Hammersmith" "200182" "51.48373225" "-0.223852256" "true" "false" "1382278560000" "" "false" "10" "24" "35" +"645" "Great Suffolk Street, The Borough" "200200" "51.50173215" "-0.100292412" "true" "false" "1382110800000" "" "false" "15" "6" "21" +"646" "Buckingham Gate, Westminster" "200178" "51.49886563" "-0.137424571" "true" "false" "1382084340000" "" "false" "11" "5" "16" +"647" "Richmond Way, Shepherd's Bush" "200181" "51.50035306" "-0.217515071" "true" "false" "1382347140000" "" "false" "1" "26" "27" +"648" "Peterborough Road, Sands End" "200171" "51.46904022" "-0.19627483" "true" "false" "1382352840000" "" "false" "22" "8" "30" +"649" "World's End Place, West Chelsea" "300009" "51.48180515" "-0.18027465" "true" "false" "1382348400000" "" "false" "16" "5" "22" +"650" "St. Mark's Road, North Kensington" "300034" "51.51687069" "-0.213872396" "true" "false" "1382438520000" "" "false" "8" "15" "23" +"651" "Thorndike Close, West Chelsea" "300030" "51.48089844" "-0.183853573" "true" "false" "1382441580000" "" "false" "13" "11" "25" +"652" "Evesham Street, Avondale" "300022" "51.51148696" "-0.218190203" "true" "false" "1381848540000" "" "false" "17" "12" "29" +"653" "Simpson Street, Clapham Junction" "200196" "51.47084722" "-0.17070367" "true" "false" "1382539860000" "" "false" "13" "12" "25" +"654" "Ashmole Estate, Oval" "200223" "51.48267821" "-0.117661574" "true" "false" "1382520000000" "" "false" "6" "28" "34" +"655" "Crabtree Lane, Fulham" "200221" "51.48294452" "-0.219346128" "true" "false" "1382611200000" "" "false" "1" "26" "27" +"656" "Broomhouse Lane, Parsons Green" "200040" "51.46841875" "-0.199135704" "true" "false" "1382614560000" "" "false" "26" "3" "29" +"657" "Blythe Road West, Shepherd's Bush" "200220" "51.4996806" "-0.221791552" "true" "false" "1382621400000" "" "false" "0" "21" "21" +"658" "Ethelburga Estate, Battersea Park" "300005" "51.47729232" "-0.16478637" "true" "false" "1383731100000" "" "false" "7" "22" "30" +"659" "Grant Road West, Clapham Junction" "200212" "51.46437067" "-0.174619404" "true" "false" "1382697060000" "" "false" "44" "13" "57" +"660" "West Kensington Station, West Kensington" "300020" "51.49087074" "-0.206029743" "true" "false" "1382705340000" "" "false" "10" "12" "22" +"661" "All Saints Church, Portobello" "300023" "51.51632095" "-0.202608612" "true" "false" "1382887680000" "" "false" "2" "35" "37" +"663" "Clarendon Road, Avondale" "200124" "51.51323001" "-0.211593602" "true" "false" "1382870040000" "" "false" "12" "12" "24" +"664" "Austin Road, Battersea Park" "300013" "51.474376" "-0.155442787" "true" "false" "1382964300000" "" "false" "2" "20" "24" +"665" "Smugglers Way, Wandsworth" "200113" "51.46108367" "-0.191722864" "true" "false" "1382975700000" "" "false" "20" "8" "28" +"666" "Olympia Way, Olympia" "300004" "51.49610093" "-0.208158259" "true" "false" "1383063480000" "" "false" "5" "33" "38" +"667" "Shepherd's Bush Road North, Shepherd's Bush" "200209" "51.5015946" "-0.222293381" "true" "false" "1383136140000" "" "false" "20" "14" "34" +"668" "Ravenscourt Park Station, Hammersmith" "300037" "51.49422354" "-0.236769936" "true" "false" "1383143160000" "" "false" "25" "1" "26" +"669" "Teversham Lane, Stockwell" "300036" "51.47614939" "-0.1232585" "true" "false" "1383147660000" "" "false" "23" "16" "39" +"670" "Ashley Crescent, Battersea" "200169" "51.46718562" "-0.152248582" "true" "false" "1383212640000" "" "false" "0" "28" "28" +"671" "Parsons Green Station, Parsons Green" "300052" "51.475089" "-0.201968" "true" "false" "1383217920000" "" "false" "27" "27" "55" +"672" "Grant Road Central, Clapham Junction" "200206" "51.4646884" "-0.173656546" "true" "false" "1383221460000" "" "false" "28" "0" "28" +"673" "Hibbert Street, Battersea" "300051" "51.46517078" "-0.18038939" "true" "false" "1383319500000" "" "false" "24" "11" "36" +"674" "Carnegie Street, King's Cross" "300035" "51.53546778" "-0.11619105" "true" "false" "" "" "false" "12" "28" "40" +"675" "Usk Road, Clapham Junction" "200126" "51.46348914" "-0.182126248" "true" "false" "1383322320000" "" "false" "9" "21" "30" +"676" "Hartington Road, Stockwell" "200207" "51.47787084" "-0.126874471" "true" "false" "1383584400000" "" "false" "18" "17" "35" +"677" "Heath Road, Battersea" "200023" "51.46866929" "-0.146544642" "true" "false" "1383476160000" "" "false" "1" "26" "27" +"678" "Esmond Street, Putney" "200170" "51.46231278" "-0.211468596" "true" "false" "1383653580000" "" "false" "20" "10" "30" +"679" "Orbel Street, Battersea" "200114" "51.47453545" "-0.170210533" "true" "false" "1383661200000" "" "false" "2" "24" "26" +"680" "Westbridge Road, Battersea" "200210" "51.47768469" "-0.170329317" "true" "false" "1383657480000" "" "false" "6" "21" "28" +"681" "Bishop's Avenue, Fulham" "200043" "51.47303687" "-0.214749808" "true" "false" "1383733440000" "" "false" "20" "26" "46" +"682" "Crisp Road, Hammersmith" "200059" "51.48810829" "-0.22660621" "true" "false" "1383738240000" "" "false" "39" "7" "46" +"683" "Dorothy Road, Clapham Junction" "200119" "51.46506424" "-0.163750945" "true" "false" "1383750420000" "" "false" "10" "18" "28" +"684" "Neville Gill Close, Wandsworth" "200188" "51.45475251" "-0.195197203" "true" "false" "1383823380000" "" "false" "27" "5" "32" +"685" "Osiers Road, Wandsworth" "200219" "51.46067005" "-0.198735357" "true" "false" "1383827400000" "" "false" "14" "15" "30" +"686" "Beryl Road, Hammersmith" "200097" "51.48814438" "-0.222456468" "true" "false" "1383835560000" "" "false" "24" "2" "26" +"687" "Maclise Road, Olympia" "200216" "51.49760804" "-0.21145598" "true" "false" "1383838440000" "" "false" "2" "24" "26" +"688" "Northfields, Wandsworth" "200204" "51.46095151" "-0.20066766" "true" "false" "1383915240000" "" "false" "23" "4" "28" +"689" "Spanish Road, Clapham Junction" "200106" "51.45922541" "-0.180884959" "true" "false" "1383918180000" "" "false" "4" "25" "30" +"690" "Stanley Grove, Battersea" "200199" "51.47047503" "-0.152130083" "true" "false" "1383924660000" "" "false" "0" "24" "24" +"691" "Erin Close, Walham Green" "200184" "51.47946386" "-0.195777222" "true" "false" "1384763520000" "" "false" "17" "7" "24" +"692" "Cadogan Close, Victoria Park" "200112" "51.54211855" "-0.028941601" "true" "false" "1384166220000" "" "false" "5" "16" "22" +"693" "Felsham Road, Putney" "300019" "51.464786" "-0.215618902" "true" "false" "1384001160000" "" "false" "1" "17" "18" +"694" "Putney Rail Station, Putney" "300033" "51.46071722" "-0.216526155" "true" "false" "1384004640000" "" "false" "6" "14" "20" +"695" "Islington Green, Angel" "300031" "51.53638435" "-0.102757578" "true" "false" "1384172820000" "" "false" "4" "16" "21" +"696" "Charing Cross Hospital, Hammersmith" "300018" "51.48728535" "-0.217995921" "true" "false" "1384180020000" "" "false" "15" "6" "21" +"697" "Charlotte Terrace, Angel" "200129" "51.53639219" "-0.112721065" "true" "false" "1384251120000" "" "false" "1" "24" "25" +"698" "Shoreditch Court, Haggerston" "200121" "51.53908372" "-0.070329419" "true" "false" "1384254300000" "" "false" "0" "34" "35" +"699" "Belford House, Haggerston" "200057" "51.5366541" "-0.07023031" "true" "false" "1384256040000" "" "false" "2" "37" "39" +"700" "Battersea Church Road, Battersea" "200201" "51.47696496" "-0.174347066" "true" "false" "1384343280000" "" "false" "0" "25" "25" +"701" "Vicarage Crescent, Battersea" "200077" "51.47287627" "-0.176267008" "true" "false" "1384345080000" "" "false" "0" "29" "30" +"702" "Durant Street, Bethnal Green" "200213" "51.52868155" "-0.065550321" "true" "false" "1384345860000" "" "false" "0" "24" "24" +"703" "St. Bride Street, Holborn" "200094" "51.51505991" "-0.10534448" "true" "false" "1384357800000" "" "false" "22" "3" "25" +"704" "Mexfield Road, East Putney" "200063" "51.45682071" "-0.202802098" "true" "false" "1384443480000" "" "false" "6" "12" "18" +"705" "Upper Richmond Road, Putney" "300042" "51.45971528" "-0.212145939" "true" "false" "1384453020000" "" "false" "1" "24" "25" +"706" "Snowsfields, London Bridge" "200193" "51.50215353" "-0.083632928" "true" "false" "1384420920000" "" "false" "24" "7" "31" +"707" "Barons Court Station, West Kensington" "200197" "51.49021762" "-0.215087092" "true" "false" "1384435680000" "" "false" "31" "1" "32" +"708" "Disraeli Road, Putney" "200217" "51.46161068" "-0.21614583" "true" "false" "1384530180000" "" "false" "18" "15" "33" +"709" "Montserrat Road , Putney" "200205" "51.46321128" "-0.215550761" "true" "false" "1384510140000" "" "false" "14" "8" "23" +"710" "Albert Bridge Road, Battersea Park" "300045" "51.47439218" "-0.163347594" "true" "false" "1384520580000" "" "false" "1" "19" "20" +"711" "Everington Street, Fulham" "300028" "51.48335692" "-0.216305546" "true" "false" "1384791540000" "" "false" "0" "31" "31" +"712" "Mile End Stadium, Mile End" "300056" "51.51854104" "-0.034903714" "true" "false" "1384797120000" "" "false" "1" "20" "22" +"713" "Hawley Crescent, Camden Town" "200122" "51.54100708" "-0.14326094" "true" "false" "1384774620000" "" "false" "9" "13" "22" +"714" "Stewart's Road, Wandsworth Road" "300055" "51.47311696" "-0.137235175" "true" "false" "1384865400000" "" "false" "4" "23" "28" +"715" "Aylward Street, Stepney" "300049" "51.51563007" "-0.049067243" "true" "false" "1384868460000" "" "false" "0" "22" "22" +"716" "Stainsby Road , Poplar" "300048" "51.51542791" "-0.02356501" "true" "false" "1384873500000" "" "false" "2" "21" "24" +"717" "Dunston Road , Haggerston" "300024" "51.53658514" "-0.075885686" "true" "false" "1384952400000" "" "false" "3" "39" "43" +"718" "Ada Street, Hackney Central" "300040" "51.53571683" "-0.060291813" "true" "false" "1384962840000" "" "false" "10" "35" "45" +"719" "Victoria Park Road, Hackney Central" "300011" "51.53642464" "-0.054162264" "true" "false" "1384968480000" "" "false" "0" "34" "34" +"720" "Star Road, West Kensington" "300038" "51.48724429" "-0.205279052" "true" "false" "1385025840000" "" "false" "3" "21" "24" +"721" "Wendon Street, Old Ford" "300039" "51.53603947" "-0.026262677" "true" "false" "1385028480000" "" "false" "4" "14" "18" +"722" "Finnis Street, Bethnal Green" "300041" "51.52458353" "-0.058631453" "true" "false" "1385028600000" "" "false" "0" "19" "19" +"723" "Stephendale Road, Sands End" "300053" "51.46822047" "-0.190346493" "true" "false" "1385035380000" "" "false" "14" "33" "48" +"724" "Alma Road, Wandsworth" "300046" "51.45799126" "-0.184806157" "true" "false" "1385125380000" "" "false" "0" "28" "28" +"725" "Thessaly Road North, Wandsworth Road" "300050" "51.47732253" "-0.138748723" "true" "false" "1385127600000" "" "false" "9" "18" "28" +"726" "Alfreda Street, Battersea Park" "300047" "51.47505096" "-0.150908371" "true" "false" "1385128740000" "" "false" "12" "9" "22" +"727" "Chesilton Road, Fulham" "300054" "51.47569809" "-0.20587627" "true" "false" "1385132160000" "" "false" "1" "22" "23" +"728" "Putney Bridge Road, East Putney" "300044" "51.46199911" "-0.206240805" "true" "false" "1385466780000" "" "false" "16" "12" "29" +"729" "St. Peter's Terrace, Fulham" "300043" "51.47893931" "-0.208485293" "true" "false" "1385391300000" "" "false" "2" "22" "24" +"730" "Bridge Avenue, Hammersmith" "300082" "51.49208492" "-0.229116862" "true" "false" "1385132580000" "" "false" "12" "6" "18" +"731" "Michael Road, Walham Green" "300095" "51.47727637" "-0.189210466" "true" "false" "1385394720000" "" "false" "24" "11" "37" +"732" "Duke Street Hill, London Bridge" "300083" "51.50630441" "-0.087262995" "true" "false" "1385458020000" "" "false" "18" "1" "21" +"733" "Park Lane, Mayfair" "300093" "51.50542628" "-0.150817316" "true" "false" "1385460840000" "" "false" "16" "1" "18" +"734" "Plough Terrace, Clapham Junction" "300094" "51.46230566" "-0.175407201" "true" "false" "1385464500000" "" "false" "6" "25" "31" +"735" "Grant Road East, Clapham Junction" "200120" "51.46489445" "-0.17302926" "true" "false" "1385383080000" "" "false" "26" "7" "35" +"736" "Queensdale Road, Shepherd's Bush" "300088" "51.50659035" "-0.216104479" "true" "false" "1385472900000" "" "false" "11" "17" "28" +"737" "Fulham Broadway, Walham Green" "300086" "51.47993289" "-0.19411695" "true" "false" "1385554620000" "" "false" "18" "6" "26" +"738" "Imperial Road, Sands End" "300087" "51.47514228" "-0.187278987" "true" "false" "1385563380000" "" "false" "19" "18" "37" +"739" "Hortensia Road, West Brompton" "300091" "51.48176572" "-0.185273723" "true" "false" "1385631000000" "" "false" "7" "18" "28" +"740" "Sirdar Road, Avondale" "300084" "51.51092871" "-0.214594781" "true" "false" "1385635440000" "" "false" "24" "2" "26" +"741" "Freston Road, Avondale" "300085" "51.5129814" "-0.219486603" "true" "false" "1385640120000" "" "false" "11" "12" "23" +"742" "Blenheim Crescent, Ladbroke Grove" "300090" "51.51510818" "-0.208565479" "true" "false" "1385649540000" "" "false" "0" "21" "22" +"743" "Oxford Road, Putney" "300078" "51.46079243" "-0.212607684" "true" "false" "1385723700000" "" "false" "17" "12" "29" +"744" "Ingrave Street, Clapham Junction" "300077" "51.46745485" "-0.172293499" "true" "false" "1385729760000" "" "false" "11" "18" "30" +"745" "Upcerne Road, West Chelsea" "300075" "51.47816972" "-0.18243547" "true" "false" "1385740020000" "" "false" "29" "0" "29" +"746" "Lots Road, West Chelsea" "300076" "51.4795738" "-0.17903854" "true" "false" "1385985720000" "" "false" "12" "12" "24" +"747" "Ormonde Gate, Chelsea" "300089" "51.48796408" "-0.161765173" "true" "false" "1385997240000" "" "false" "15" "9" "24" +"748" "Hertford Road, De Beauvoir Town" "300092" "51.53727795" "-0.079201849" "true" "false" "1386159900000" "" "false" "0" "24" "25" +"749" "Haggerston Road, Haggerston " "300081" "51.53932857" "-0.074284675" "true" "false" "1386172440000" "" "false" "0" "37" "37" +"750" "Culvert Road, Battersea" "300080" "51.4710956" "-0.157850096" "true" "false" "1386240360000" "" "false" "20" "7" "27" +"751" "Newton Street, Covent Garden" "300074" "51.51612862" "-0.120909408" "true" "false" "1386250800000" "" "false" "9" "14" "24" +"752" "Manfred Road, East Putney" "300079" "51.45816465" "-0.20600248" "true" "false" "1386329460000" "" "false" "8" "21" "29" +"753" "Hammersmith Town Hall, Hammersmith" "300006" "51.49263658" "-0.234094148" "true" "false" "1386347520000" "" "false" "22" "5" "28" +"754" "Grenfell Road, Avondale" "300067" "51.5129006" "-0.214762686" "true" "false" "1389003540000" "" "false" "17" "6" "24" +"755" "The Vale, West Chelsea" "300058" "51.48512191" "-0.174971902" "true" "false" "1389008580000" "" "false" "16" "6" "24" +"756" "Prince of Wales Drive, Battersea Park" "300073" "51.47515398" "-0.159169801" "true" "false" "1390223040000" "" "false" "8" "13" "21" +"757" "Harcourt Terrace, West Brompton" "300069" "51.48795853" "-0.187404506" "true" "false" "1389094260000" "" "false" "0" "23" "24" +"758" "Westbourne Park Road, Portobello" "300057" "51.51787005" "-0.201005397" "true" "false" "1389178020000" "" "false" "1" "22" "23" +"759" "Broadley Terrace, Marylebone" "300072" "51.52456169" "-0.165668686" "true" "false" "1389627480000" "" "false" "0" "17" "17" +"760" "Rossmore Road, Marylebone" "300071" "51.52526975" "-0.163795009" "true" "false" "1390310760000" "" "false" "0" "18" "18" +"761" "Humbolt Road, Fulham" "300068" "51.48321729" "-0.211860644" "true" "false" "1389781800000" "" "false" "0" "25" "27" +"762" "Storey's Gate, Westminster" "200202" "51.50070305" "-0.129698963" "true" "false" "1392039000000" "" "false" "14" "7" "21" +"763" "Mile End Park Leisure Centre, Mile End" "300027" "51.52059714" "-0.032566533" "true" "false" "1392043020000" "" "false" "0" "46" "47" +"764" "St. John's Road, Clapham Junction" "200185" "51.46239255" "-0.16829214" "true" "false" "1392633480000" "" "false" "32" "1" "33" +"765" "Ranelagh Gardens, Fulham" "300064" "51.46760141" "-0.20682737" "true" "false" "1392986940000" "" "false" "23" "12" "35" +"766" "Ram Street, Wandsworth" "200079" "51.45752945" "-0.192165613" "true" "false" "1392894840000" "" "false" "23" "2" "25" +"767" "Santos Road, Wandsworth" "200177" "51.45705988" "-0.200806304" "true" "false" "1393406280000" "" "false" "18" "12" "30" +"768" "Clapham Common North side, Clapham Common" "300065" "51.46134382" "-0.159322467" "true" "false" "1393494060000" "" "false" "11" "26" "37" +"769" "Sandilands Road, Walham Green" "300001" "51.473611" "-0.191803" "true" "false" "1393939560000" "" "false" "3" "17" "21" +"770" "Gwendwr Road, West Kensington" "300097" "51.491026" "-0.209121" "true" "false" "1394099280000" "" "false" "8" "21" "30" +"771" "Rifle Place, Avondale" "300007" "51.509224" "-0.216016" "true" "false" "1394018400000" "" "false" "18" "2" "21" +"772" "Binfield Road, Stockwell" "300015" "51.47250956" "-0.122831913" "true" "false" "1396442100000" "" "false" "28" "7" "35" +"773" "Tallis Street, Temple" "300096" "51.511891" "-0.107349" "true" "false" "1396262520000" "" "false" "22" "0" "24" +"774" "Hurlingham Park, Parsons Green" "300098" "51.470131" "-0.20464" "true" "false" "1396265880000" "" "false" "11" "9" "20" +"775" "Little Brook Green, Brook Green" "300101" "51.496664" "-0.223868" "true" "false" "1396270320000" "" "false" "25" "7" "33" +"776" "Abyssinia Close, Clapham Junction" "300099" "51.460333" "-0.167029" "true" "false" "1396273320000" "" "false" "12" "8" "20" +"777" "Limburg Road, Clapham Junction" "300100" "51.4619230679" "-0.165297856693" "true" "false" "" "" "false" "16" "4" "21" +"779" "Houndsditch, Aldgate" "200072" "51.514449" "-0.077178979" "true" "false" "1435313700000" "" "false" "27" "1" "28" +"780" "Imperial Wharf Station, Sands End" "300070" "51.474665" "-0.18316517" "true" "false" "1439455200000" "" "false" "10" "14" "25" +"781" "Victoria & Albert Museum, South Kensington" "300032" "51.496653" "-0.172065" "true" "false" "1446485340000" "" "false" "0" "30" "30" +"782" "Halford Road, West Kensington" "300210" "51.483911" "-0.19760944" "true" "false" "1446485820000" "" "false" "1" "23" "24" +"783" "Monier Road, Hackney Wick" "300213" "51.5403115" "-0.021630359" "true" "false" "1448529660000" "" "false" "0" "25" "27" +"784" "East Village, Queen Elizabeth Olympic Park" "300200" "51.546326" "-0.00993526" "true" "false" "1452789240000" "" "false" "24" "9" "34" +"785" "Aquatic Centre, Queen Elizabeth Olympic Park" "300233" "51.54094" "-0.010510565" "true" "false" "1451908440000" "" "false" "33" "11" "49" +"786" "Lee Valley VeloPark, Queen Elizabeth Olympic Park" "300029" "51.549369" "-0.015717614" "true" "false" "1451918160000" "" "false" "1" "42" "44" +"787" "Timber Lodge, Queen Elizabeth Olympic Park" "300227" "51.546805" "-0.01469126" "true" "false" "1451900700000" "" "false" "3" "32" "35" +"788" "Copper Box Arena, Queen Elizabeth Olympic Park" "300226" "51.544836" "-0.019524752" "true" "false" "1451906880000" "" "false" "5" "27" "33" +"789" "Podium, Queen Elizabeth Olympic Park" "300021" "51.538718" "-0.011889482" "true" "false" "1452507000000" "" "false" "25" "12" "40" +"790" "Stratford Station, Stratford" "300234" "51.541793" "-0.00481" "true" "false" "1452687420000" "" "false" "25" "2" "28" +"791" "Test Desktop " "666666" "0.0" "0.0" "false" "false" "1452861540000" "" "false" "0" "0" "0" +"792" "Blackfriars Road, Southwark" "300214" "51.505461" "-0.10454093" "true" "false" "1454926380000" "" "false" "25" "14" "41" +"793" "Cromer Street, Bloomsbury" "300205" "51.528279" "-0.11955857" "true" "false" "" "" "false" "0" "28" "28" +"794" "Lansdowne Way Bus Garage, Stockwell" "300204" "51.474567" "-0.12458" "true" "false" "1456404240000" "" "false" "21" "7" "28" +"795" "Melton Street, Euston" "300203" "51.527566" "-0.13484927" "true" "false" "1456744740000" "" "false" "12" "15" "28" +"796" "Coram Street, Bloomsbury" "300201" "51.524" "-0.12640984" "true" "false" "1456746420000" "" "false" "8" "20" "29" +"798" "Birkenhead Street, King's Cross" "300212" "51.5301998755" "-0.122299440803" "true" "false" "" "" "false" "0" "23" "26" +"799" "Kings Gate House, Westminster" "300202" "51.4976984561" "-0.137598896295" "true" "false" "1464876480000" "" "false" "22" "2" "24" +"800" "Sopwith Way, Battersea Park" "300248" "51.4811219398" "-0.149035374873" "true" "false" "1457107140000" "" "false" "16" "12" "30" +"801" "Lavington Street, Bankside" "300208" "51.5052241745" "-0.0980318118664" "true" "false" "" "" "false" "27" "1" "29" +"802" "Albert Square, Stockwell" "300209" "51.4765900593" "-0.118256789081" "true" "false" "1464865500000" "" "false" "10" "21" "32" +"803" "Southwark Street, Bankside" "300238" "51.5054099403" "-0.0983410884509" "true" "false" "" "" "false" "20" "2" "23" +"804" "Good's Way, King's Cross" "300243" "51.5346677396" "-0.125078652873" "true" "false" "" "" "false" "16" "11" "27" +"807" "Bevington Road West, North Kensington" "300236" "51.5212" "-0.20888818" "true" "false" "" "" "false" "16" "8" "24" +"808" "Stockwell Roundabout, Stockwell" "300207" "51.4734862092" "-0.122555629777" "true" "false" "" "" "false" "8" "25" "33" +"810" "Tate Modern, Bankside" "300237" "51.5067252868" "-0.0988072461627" "true" "false" "1464943200000" "" "false" "30" "0" "30" +"814" "Clapham Road, Lingham Street, Stockwell" "300245" "51.4714330677" "-0.123670735702" "true" "false" "1464870060000" "" "false" "13" "17" "30" +"815" "Lambeth Palace Road, Waterloo" "300231" "51.5000891978" "-0.116628700672" "true" "false" "1462357680000" "" "false" "34" "1" "35" +"818" "One Tower Bridge, Bermondsey" "300249" "51.503127803" "-0.078655507365" "true" "false" "" "" "false" "12" "1" "13" diff --git a/case-study.py b/case-study.py new file mode 100644 index 0000000000000000000000000000000000000000..1065985e2012c48c42b8d020c65fc6729b212bf6 --- /dev/null +++ b/case-study.py @@ -0,0 +1,196 @@ + + + +""" +Experiments for London Cycling Dataset +CASE STUDY-6 + +Nodes 735 +Temporal Edges 32,258 +Time span 1 day +""" + +import experiment +import os +import pandas as pd + +# read data + +filepath = os.path.join("Data","9b-Journey-Data-Extract-06Sep15-19Sep15.csv") +# pick 9th of September-2015 +start_date = "2015-9-9 0:00:00" +end_date = "2015-9-9 23:59:59" + +# Read data +df = pd.read_csv(filepath, dtype={'StartStation Id': 'Int64', 'EndStation Id': 'Int64'}, usecols=lambda x: x in ['Start Date', 'StartStation Id', 'EndStation Id'], parse_dates=['Start Date']) +df=df.set_axis(['source', 'timestamp', 'target'], axis=1) + +# Remove null value +df = df[df['target'].isnull() != True] +#sort +df=df.sort_values('timestamp') + +# Filter dates +if start_date and end_date: + after_start_date = df["timestamp"] >= start_date + before_end_date = df["timestamp"] <= end_date + between_two_dates = after_start_date & before_end_date + df = df.loc[between_two_dates] + +# Remove self-loops +df = df[((df['source'] ) != (df['target']))] + +# convert datetime to epoch +df['timestamp'] = df['timestamp'].astype('int64')//1e9 + +def _swap (row): + if row['source'] > row['target']: + row['source'] , row['target'] =row['target'] , row['source'] + return row + +# Undirected graph +df=df.apply(lambda row: _swap(row), axis=1) +#scale timestamps for zeroth reference point +refValue = df['timestamp'].min() +df['timestamp'] -= refValue + +# # Experiments +# User parameters +num_roles=5 +num_segments=5 +num_levels=2 +algo_ver= 3 +dest_folder='./Results/bikes/' + +# tuning parameters +theta = 1e-5 +eta = 1 +tuning_params= {'theta':theta,'eta':eta} + +import time +start_time = time.time() + +exp_obj = experiment.Experiment(df,num_roles,num_segments,algo_ver,dest_folder,tuning_params,num_levels,refValue) +[it,likelihood,group_dic,lambda_estimates,change_points_arr] = exp_obj.execute() + +print("--- %s seconds ---" % (time.time() - start_time)) + + +# likelihood for single group and single segment # Normlaized likelihood +# num_roles=1 +# num_segments=1 +# num_levels=1 +# exp_obj = experiment.Experiment(df,num_roles,num_segments,algo_ver,dest_folder,tuning_params,num_levels,refValue) +# exp_obj.execute() + + +import plotly.express as px +import pandas as pd +import os +import plotly.io as pio +pio.renderers.default = 'svg' +# pio.renderers.default = 'browser' + +filepath = os.path.join("Data","stations_df.csv") +# filepath = os.path.join("dt.csv") +df_stations = pd.read_csv(filepath, delimiter=' ') + + +df_stations = df_stations.filter(items=['id', 'lat','long','name']) +df_stations['grp'] = -1 + +import numpy as np + +nodes_arr = np.union1d(df['target'],df['source']).astype(int) +# list of nodes +nodes = nodes_arr.tolist() + +for i, row in df_stations.iterrows(): + _id = row[0] + + if _id in nodes: + df_stations.at[i,'grp'] = group_dic[_id] +df_stations = df_stations[df_stations['grp'] != -1] + +import plotly.graph_objects as go +import plotly.io as pio + +#pio.renderers.default = 'svg' +pio.renderers.default = 'browser' +# df_stations["grp"] = df_stations["grp"].astype(int) + +#case-1 +df_stations["grp"] = df_stations["grp"].astype(int) +fig = go.Figure(data=go.Scattergeo( + lon = df_stations['long'], + lat = df_stations['lat'], + text = df_stations['name'], + mode = 'markers', + marker_color = df_stations['grp'], + marker = dict(size = 10, symbol = df_stations["grp"]), + textfont=dict( + color='black', + size=18, + family='Times New Roman' + ) + )) + + + +fig.update_geos(fitbounds="locations") +fig.update_layout(mapbox_style="open-street-map") +# fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0}) +fig.show() + + +#case-2 +# import plotly.express as px +df_stations["grp"] = df_stations["grp"].astype(int) +fig = px.scatter_mapbox(df_stations, lat="lat", lon="long", color="grp", hover_name="name", hover_data=["name"], + color_discrete_sequence=["fuchsia"], zoom=11, height=800) +fig.update_layout(mapbox_style="open-street-map") +fig.update_geos(fitbounds="locations") +# fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0}) +fig.show() + + +#case-3 +df_stations["grp"] = df_stations["grp"].astype(str) +# import plotly.express as px + +fig = px.scatter_mapbox(df_stations, lat="lat", lon="long", color="grp", hover_name="name", hover_data=["name"], + color_discrete_sequence=px.colors.qualitative.G10, zoom=11, height=800,category_orders=df_stations['grp']) +fig.update_layout(mapbox_style="open-street-map") +fig.update_geos(fitbounds="locations") +# fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0}) +fig.show() + + +#case-4 +df_stations["grp"] = df_stations["grp"].astype(str) +import plotly.express as px + +fig = px.scatter_mapbox(df_stations, lat="lat", lon="long", color="grp", hover_name="name", hover_data=["name"], + + color_discrete_sequence=["green", "yellow", "blue", "red", "magenta"], zoom=11, height=800) +fig.update_layout(mapbox_style="open-street-map") +fig.update_geos(fitbounds="locations") +# fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0}) +fig.show() + + +##############################CORRECT######################### +#case-5 +df_stations["grp"] = df_stations["grp"].astype(int) +import plotly.express as px + +fig = px.scatter_mapbox(df_stations, lat="lat", lon="long", color="grp", hover_name="name", hover_data=["name"], + + size="grp",color_continuous_scale=px.colors.cyclical.IceFire, size_max=13, zoom=11, height=800) +fig.update_layout(mapbox_style="open-street-map") +fig.update_geos(fitbounds="locations") +# fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0}) +fig.show() + + + diff --git a/experiment.py b/experiment.py index 3c7c74cb900fdd0ff326044644e101f6d18cb4d2..aa20551e4c88659ccc32a32cd818aada162e3f9f 100755 --- a/experiment.py +++ b/experiment.py @@ -50,6 +50,8 @@ class Experiment: #Initialize lamda lambda_estimates = np.zeros((num_roles, num_roles,num_segments) , dtype=float) + global itr + ### K-segmentation ### if self.algo_ver == 1: opt = optimize.Optimize( group_dic,lambda_estimates,change_points_arr,nodes,num_roles,num_segments,dic,None,self.tuning_params) @@ -62,13 +64,16 @@ class Experiment: ### (K,H)-segmentation variant-2 ### elif self.algo_ver == 3: + opt = optimize.Optimize( group_dic,lambda_estimates,change_points_arr,nodes,num_roles,num_segments,dic,self.num_levels,self.tuning_params) - [group_dic,lambda_estimates,change_points_arr,likelihood] = opt.k_h_seg_var_2() + [group_dic,lambda_estimates,change_points_arr,likelihood,itr] = opt.k_h_seg_var_2() + print (itr) ### Level-dependent (K,H)-segmentation variant-2 ### elif self.algo_ver == 4: opt = optimize.Optimize( group_dic,lambda_estimates,change_points_arr,nodes,num_roles,num_segments,dic,self.num_levels,self.tuning_params) - [group_dic,lambda_estimates,change_points_arr,likelihood,g_mapping] = opt.mm_k_h_seg_var_2() + [group_dic,lambda_estimates,change_points_arr,likelihood,g_mapping,itr] = opt.mm_k_h_seg_var_2() + print (itr) # print('g_mapping_discoverd {}'.format(g_mapping)) # for e_h in range(0,self.num_levels): # g_a = group_dic[e_h] @@ -85,6 +90,7 @@ class Experiment: # list_of_groups[val].append(idx) # print('group assignments: {}'.format(list_of_groups)) # print('lambdas: {}'.format(lambda_estimates)) - + # return [likelihood,group_dic,lambda_estimates,change_points_arr] # return [likelihood,group_dic] - return likelihood \ No newline at end of file + return [itr,likelihood,group_dic,lambda_estimates,change_points_arr] + # return [_itr,likelihood] \ No newline at end of file diff --git a/lam-aff-1-fixed.py b/lam-aff-1-fixed.py new file mode 100644 index 0000000000000000000000000000000000000000..33f914a9c85b2138054b272cc45f2c68a6329567 --- /dev/null +++ b/lam-aff-1-fixed.py @@ -0,0 +1,269 @@ + +""" +Affect of Lambda +Dataset-1 +""" + +import numpy as np +import pandas as pd +import utils +import sbm_core +import math +from itertools import combinations +import itertools +from sklearn.metrics.cluster import adjusted_rand_score + +# Initilaize +np.random.seed(107) + +num_roles=2 +num_vertices=25 +num_segments = 2 + +NO_SAMPLES= 95 +group_assignment= np.random.randint(num_roles, size=(num_vertices)) + +nodes = np.arange(num_vertices) + +list_of_groups= [[] for _ in range(num_roles)] + +for idx, val in enumerate(group_assignment): + list_of_groups[val].append(nodes[idx]) + +print(list_of_groups) + +size_all_pairs = {} +for k in range(0, num_roles): + for g in range(k, num_roles): + U=list_of_groups[k] + W=list_of_groups[g] + + if k == g: + size_all_pairs[k,g] = math.comb(len(U), 2) + if k != g: + size_all_pairs[k,g] = len(U)*len(W) + +lamda_arr = np.ones((num_roles, num_roles,num_segments) , dtype=float) +lamda_arr = 1e-1* np.random.randint(1,9, size=(num_roles, num_roles,num_segments)) + +#set value for each iteration ( 0 - 8 ) +_itr = 8 +_itr = 0 + +yu = (9-_itr)*.1 +lamda_arr[0,0]=[yu, 0.1] +lamda_arr[0,1]= [0.1, yu] +lamda_arr[1,0]=lamda_arr[0,1] +lamda_arr[1,1]=[yu, yu] + +lamda_arr_act = np.zeros((num_roles, num_roles,num_segments) , dtype=float) + +change_points_arr = np.zeros((num_roles, num_roles, num_segments+1) , dtype=int) +df_all= None + +points= list(range(0, (num_segments+1)*NO_SAMPLES, NO_SAMPLES)) +list1 = [] + +# Generate piecewise non-homogeneous poisson process +for k in range(0, num_roles): + for g in range(k, num_roles): + comb = [] + if k == g: + comb = list(combinations(list_of_groups[k], 2)) + # print(type(comb)) + else: + # comb = [] + key_data = [list_of_groups[k],list_of_groups[g],] + comb = list(itertools.product(*key_data)) + # print(comb) + if len(comb) != size_all_pairs[k,g]: + print('not equal..') + + change_points_arr[k,g,:] = points + lamda_arr[k,g,:] = lamda_arr[g,k,:] + + tot_count = np.zeros((num_segments) , dtype=float) + + for pair in comb: + + for d in range(0,num_segments): + + s = np.random.poisson(lamda_arr[k,g,d], NO_SAMPLES) + # print(np.count_nonzero(s)) + tot_count[d] += np.count_nonzero(s) + + list1=[i for i, e in enumerate(s) if e != 0] + + if len(list1) == 0: + print('zero') + + list1 = [x+points[d] for x in list1] + + df = pd.DataFrame(data=list1) + df.columns =['timestamp'] + + N= df.size + + list_start_stations =[pair[0]] * N + list_end_stations =[pair[1]] * N + + df['source'] = list_start_stations + df['target'] = list_end_stations + + df_all=pd.concat([df_all, df], ignore_index=True) + + for d in range(0,num_segments): + lamda_arr_act[k,g,d] = tot_count[d]/(NO_SAMPLES*len(comb)) + # print(tot_count[d]) +## Other preparations + +# Remove self loops +df_all = df_all[((df_all['source'] ) != (df_all['target']))] +#sort +df_all=df_all.sort_values('timestamp') +df_all = df_all[['target', 'timestamp','source']] + +# Save as .csv file +# df_all.to_csv('./Data/synthetic_ground_truth_g1.csv') + +df=df_all +dest_folder='./Results/synthetic/3' +t_df = df['timestamp'] + +nodes_arr = np.union1d(df['target'],df['source']).astype(int) +# list of nodes +nodes = nodes_arr.tolist() +num_vertices = len(nodes) + +# node-group dictionary +group_dic = {} +keys = nodes +values = list(group_assignment) +group_dic = dict(zip(keys,values)) + + +# create a new dictionary - key: node-pair , value: list of timestamps +dic=df.groupby(['source','target'])['timestamp'].apply(list).to_dict() +print('{} {} {} '.format(group_dic, lamda_arr_act,change_points_arr)) + + +liklihood_sum = sbm_core.compute_cost(group_dic,lamda_arr_act,change_points_arr,num_roles,num_segments,dic) +print(' Initial Actual likelihood .......%f'%liklihood_sum) + +def _swap (row): + if row['source'] > row['target']: + row['source'] , row['target'] =row['target'] , row['source'] + return row + +# Undirected graph +df=df.apply(lambda row: _swap(row), axis=1) +#scale timestamps for zeroth reference point +refValue = df['timestamp'].min() +df['timestamp'] -= refValue + +# Experiment + +import experiment + + +# User parameters +num_roles=2 +num_segments=2 +num_levels=2# Optional arg +algo_ver=3 +dest_folder='./Results/synthetic/' + +# tuning parameters +theta = 0 +eta = 1 +tuning_params= {'theta':theta,'eta':eta} + +import time +start_time = time.time() + +exp_obj = experiment.Experiment(df,num_roles,num_segments,algo_ver,dest_folder,tuning_params,num_levels,refValue) +[itr_d,likelihood_d,group_dic_d,lambda_estimates_d,change_points_arr_d] = exp_obj.execute() + +print("--- %s seconds ---" % (time.time() - start_time)) + + +t_df = sorted(t_df) + +chg_points = change_points_arr_d[0,0,:] +ranges_arr = [ [chg_points[s]+1,chg_points[s+1]] for s in range(0,len(chg_points)-1)] +ranges_arr[0][0] = 0 +list_time_stamps = list(t_df) + + +# iterate over timestamps list +dis_arr = list() +gt_arr = list() + + +for item in list_time_stamps: + + # find the segment which the timestamp belongs + # (is dependent on which groups the two nodes belong) + d = sbm_core._findSegment(ranges_arr, len(ranges_arr) , int(item)) + dis_arr.append(d) + + +chg_points = change_points_arr[0,0,:] +ranges_arr = [ [chg_points[s]+1,chg_points[s+1]] for s in range(0,len(chg_points)-1)] +ranges_arr[0][0] = 0 +list_time_stamps = list(t_df) + + +# iterate over timestamps list + +for item in list_time_stamps: + + # find the segment which the timestamp belongs + # (is dependent on which groups the two nodes belong) + d = sbm_core._findSegment(ranges_arr, len(ranges_arr) , int(item)) + gt_arr.append(d) + + +ind = adjusted_rand_score(gt_arr,dis_arr) +print('rand index: seg {} : {}'.format(_itr, ind)) + +g1= group_dic_d +g2= group_dic_d[1] + +ds= list(group_dic_d.values() ) +gt1 = list(g1.values()) + +ind_grp=adjusted_rand_score(ds,gt1) +print('rand index: group {} : {}'.format(_itr, ind_grp)) + +# likelihood for single group and single segment # Normlaized likelihood +# num_roles=1 +# num_segments=1 +# num_levels=1 +# exp_obj = experiment.Experiment(df,num_roles,num_segments,algo_ver,dest_folder,tuning_params,num_levels,refValue) +# exp_obj.execute() + + +# 0.9757628970136779 +# 0.9766007299178403 +# 0.976928378298833 +# 0.9768191326709813 +# 0.9786828903097778 +# 0.9762078453564311 +# 0.9731767168042805 +# 0.9753286095154328 +# 0.5773249110735138 + + +# 3 +# 3 +# 2 +# 3 +# 3 +# 3 +# 3 +# 4 +# 4 + + + diff --git a/lam-aff-1-ld.py b/lam-aff-1-ld.py new file mode 100644 index 0000000000000000000000000000000000000000..52c3e70f748d4a1c6fd8c8b8aeecf21640092d4c --- /dev/null +++ b/lam-aff-1-ld.py @@ -0,0 +1,386 @@ + + +""" +Effect of lambda: LD +Dataset-1 +""" +import numpy as np +import pandas as pd +import utils +import sbm_core +import math +from itertools import combinations +import itertools +from sklearn.metrics.cluster import adjusted_rand_score +# Initilaize +np.random.seed(155) + +res = np.zeros((9,5) , dtype=float) + + +for _itr in range(8,9): + + num_roles=2 + num_vertices=20 + num_segments = 4 + num_levels = 2 + + NO_SAMPLES= 200 + nodes = np.arange(num_vertices) + lamda_arr_act = np.zeros((num_roles, num_roles,num_levels) , dtype=float) + + + H =num_levels + print('k-h levels %d'%(num_levels)) + + # h-level lambda estimates + lambda_estimates_h = np.random.rand(num_roles, num_roles, H) + lambda_estimates_h = 1e-2*np.random.randint(11,99, size=(num_roles, num_roles, H)) + + # Make high variant lambdas + + yu = (9-_itr)*.1 + lambda_estimates_h[0,0,:] = [yu, 0.1] + lambda_estimates_h[0,1,:] = [0.1, yu] + lambda_estimates_h[1,0,:] = lambda_estimates_h[0,1,:] + lambda_estimates_h[1,1,:] = [yu, yu] + + + l1 =list(range(0, H)) + l2 = [] + if num_segments > num_levels: + l2 = [np.random.randint(0,H) for i in range(num_segments-H)] + + # Mapping from segment to a level + g_mapping= np.array(l1 + l2) + print('g mapping {}'.format(g_mapping)) + + # initilaize group assignment randomly + group_assignment_arr= np.random.randint(num_roles, size=(num_levels,num_vertices)) + # node-group dictionary + group_dic = {} + + for i in range(0,num_levels ): + level = i + + group_dic_level = {} + keys = nodes + values = list(group_assignment_arr[level]) + group_dic_level = dict(zip(keys,values)) + group_dic[i] = group_dic_level + print('initial') + # print(group_dic) + + for e_h in range(0,num_segments): + g_a = group_dic[g_mapping[e_h]] + list_of_groups= [[] for _ in range(num_roles)] + for idx, val in g_a.items(): + list_of_groups[val].append(idx) + print('group assignments {}: {}'.format(e_h,list_of_groups)) + # Plotting + + #Initialize lamda + lamda_arr = np.zeros((num_roles, num_roles,num_segments) , dtype=float) + for d in range(0, num_segments): + for k in range(0, num_roles): + for g in range(k, num_roles): + lamda_arr[k,g, d]= lambda_estimates_h[k,g,g_mapping[d]] + lamda_arr[g,k, d]= lamda_arr[k,g, d] + change_points_arr = np.zeros((num_roles, num_roles, num_segments+1) , dtype=int) + df_all= None + + points= list(range(0, (num_segments+1)*NO_SAMPLES, NO_SAMPLES)) + list1 = [] + + level_seg_mapping = {} + for d in range(num_segments): + level = g_mapping[d] + if level in level_seg_mapping: + level_seg_mapping[level].append(d) + else: + level_seg_mapping[level] = [] + level_seg_mapping[level].append(d) + # %% + # Generate piecewise non-homogeneous poisson process + + + tot_count = np.zeros((num_levels) , dtype=float) + com_len = np.zeros((num_levels) , dtype=float) + # for pair in comb: + + for i in range(0,num_levels): + # i = g_mapping[d] + group_assignment = group_assignment_arr[i] + + print(group_assignment) + + list_of_groups= [[] for _ in range(num_roles)] + + for idx, val in enumerate(group_assignment): + list_of_groups[val].append(nodes[idx]) + + # print(list_of_groups) + + size_all_pairs = {} + + for kk in range(0, num_roles): + for gg in range(kk, num_roles): + U=list_of_groups[kk] + W=list_of_groups[gg] + + if kk == gg: + size_all_pairs[kk,gg] = math.comb(len(U), 2) + if kk != gg: + size_all_pairs[kk,gg] = len(U)*len(W) + + for k in range(0, num_roles): + for g in range(k, num_roles): + + + change_points_arr[k,g,:] = points + lamda_arr[k,g,:] = lamda_arr[g,k,:] + + + + comb = [] + if k == g: + comb = list(combinations(list_of_groups[k], 2)) + # print(type(comb)) + else: + # comb = [] + key_data = [list_of_groups[k],list_of_groups[g],] + comb = list(itertools.product(*key_data)) + # print(comb) + if len(comb) != size_all_pairs[k,g]: + print('not equal..') + + + print('d val {}'.format( d)) + com_len[i] = len(comb) + # print('comb len {}'.format( com_len[d])) + tot_count[i] = 0 + + for pair in comb: + s = np.random.poisson(lamda_arr[k,g,d], NO_SAMPLES) + # print(np.count_nonzero(s)) + tot_count[i] += np.count_nonzero(s) + + list_org=[i for i, e in enumerate(s) if e != 0] + + if len(list_org) == 0: + print('zero') + + for d in level_seg_mapping[i]: + + + list1 = [x+points[d] for x in list_org] + df= None + df = pd.DataFrame(data=list1) + df.columns =['timestamp'] + + # print(list1) + # if max(list1) > 799: + # print('{} {}'.format(d, max(list1))) + N= df.size + + # print(pair) + # print(pair[0]) + + list_start_stations =[pair[0]] * N + list_end_stations =[pair[1]] * N + + df['source'] = list_start_stations + df['target'] = list_end_stations + + df_all=pd.concat([df_all, df], ignore_index=True) + + # for dd in level_seg_mapping: + # dd = d + lamda_arr_act[k,g,i] = round(((tot_count[i])/(NO_SAMPLES*com_len[i])),1) + lamda_arr_act[g,k,i] = lamda_arr_act[k,g,i] + # print('tot count') + # print(tot_count[dd]) + # print(' {} {} {} {} : k g d :lamb'.format(k,g,d,lamda_arr_act[g,k,dd])) + print(' {} {} {} {} : k g d :lamb'.format(k,g,i,lamda_arr_act[g,k,i])) + + # Remove self loops + df_all = df_all[((df_all['source'] ) != (df_all['target']))] + #sort + df_all=df_all.sort_values('timestamp') + df_all = df_all[['target', 'timestamp','source']] + + # Save as .csv file + # df_all.to_csv('./Data/synthetic_ground_truth_g1.csv') + + + df= None + df=df_all + dest_folder='./Results/synthetic/3' + t_df = df['timestamp'] + + nodes_arr = np.union1d(df['target'],df['source']).astype(int) + # list of nodes + nodes = nodes_arr.tolist() + num_vertices = len(nodes) + + + # create a new dictionary - key: node-pair , value: list of timestamps + dic=df.groupby(['source','target'])['timestamp'].apply(list).to_dict() + print('{} {} {} '.format(group_dic, lamda_arr_act,change_points_arr)) + + + # liklihood_sum = sbm_core.mm_compute_cost(group_dic,lamda_arr_act,change_points_arr,num_roles,num_segments,dic,g_mapping) + # print(' Initial Actual likelihood .......%f'%liklihood_sum) + + def _swap (row): + if row['source'] > row['target']: + row['source'] , row['target'] =row['target'] , row['source'] + return row + + # Undirected graph + df=df.apply(lambda row: _swap(row), axis=1) + #scale timestamps for zeroth reference point + refValue = df['timestamp'].min() + df['timestamp'] -= refValue + + + + chg_points = change_points_arr[0,0,:] + ranges_arr = [ [chg_points[s]+1,chg_points[s+1]] for s in range(0,len(chg_points)-1)] + ranges_arr[0][0] = 0 + list_time_stamps = list(t_df) + + + # iterate over timestamps list + gt_arr = list() + for item in list_time_stamps: + + # find the segment which the timestamp belongs + # (is dependent on which groups the two nodes belong) + d = sbm_core._findSegment(ranges_arr, len(ranges_arr) , int(item)) + gt_arr.append(d) + + # Experiment + import experiment + + # User parameters + # num_roles=2 + # num_segments=10 + # num_levels=5# Optional arg + algo_ver=4 + dest_folder='./Results/synthetic/' + + # tuning parameters + theta = 1e-7 + eta = 1 + tuning_params= {'theta':theta,'eta':eta} + + + + exp_obj = experiment.Experiment(df,num_roles,num_segments,algo_ver,dest_folder,tuning_params,num_levels,refValue) + # [likelihood_f,group_dic_f] = exp_obj.execute() + [it,ll1,group_dic_d,lambda_estimates,change_points_arr_d]= exp_obj.execute() + + + # SEGMENTATION ACCURACY + + t_df = sorted(t_df) + + chg_points = change_points_arr_d[0,0,:] + ranges_arr = [ [chg_points[s]+1,chg_points[s+1]] for s in range(0,len(chg_points)-1)] + ranges_arr[0][0] = 0 + list_time_stamps = list(t_df) + + + # iterate over timestamps list + dis_arr = list() + for item in list_time_stamps: + + # find the segment which the timestamp belongs + # (is dependent on which groups the two nodes belong) + d = sbm_core._findSegment(ranges_arr, len(ranges_arr) , int(item)) + dis_arr.append(d) + + + gt_arr= np.array(gt_arr, dtype=np.float64) + dis_arr= np.array(dis_arr, dtype=np.float64) + ind_seg = adjusted_rand_score(gt_arr,dis_arr) + print('ind {} : {}'.format(_itr, ind_seg)) + + + liklihood_sum = sbm_core.mm_compute_cost(group_dic,lamda_arr_act,change_points_arr,num_roles,num_segments,dic,g_mapping) + print(' Initial Actual likelihood .......%f'%liklihood_sum) + + print('g mapping {}'.format(g_mapping)) + + for e_h in range(0,num_segments): + g_a = group_dic[g_mapping[e_h]] + list_of_groups= [[] for _ in range(num_roles)] + for idx, val in g_a.items(): + list_of_groups[val].append(idx) + print('group assignments {}: {}'.format(e_h,list_of_groups)) + + #group ass, of level 1 + list_of_groups_1= [[] for _ in range(num_roles)] + #group ass, of level 2 + list_of_groups_2= [[] for _ in range(num_roles)] + g1= group_dic_d[0] + g2= group_dic_d[1] + + + found_cont = 0 + + for i_h in range(0,num_levels): + # i_h level + grp = group_dic_d[i_h] + + list_of_groups_d= [[] for _ in range(num_roles)] + + for idx, val in grp.items(): + list_of_groups_d[val].append(idx) + + ds= list(group_dic_d[i_h].values() ) + gt1 = list(g1.values()) + gt2 = list(g2.values()) + + + ind1=adjusted_rand_score(ds,gt1) + ind2=adjusted_rand_score(ds,gt2) + + + d_in = max(ind1,ind2) + found_cont += d_in + + ind = found_cont/2 + + res[_itr][1] = ind + res[_itr][4] = ind_seg +print('end') + + + +# 0.989349 +# 0.9899235585218414 +# 0.9887209171780673 +# 0.9900141929986654 +# 0.9900915114849232 +# 0.9895393785077311 +# 0.9890441642420313 +# 0.5056343918828786 +# 0.489279 + + + +# 2 +# 3 +# 2 +# 3 +# 3 +# 3 +# 4 +# 3 +# 3 + + + + diff --git a/lam-aff-2-fixed.py b/lam-aff-2-fixed.py new file mode 100644 index 0000000000000000000000000000000000000000..0ec886437aa08f047ddba664695d07c02d368fcf --- /dev/null +++ b/lam-aff-2-fixed.py @@ -0,0 +1,262 @@ + + +""" +Affect of Lambda +Dataset-2 +""" + +import numpy as np +import pandas as pd +import utils +import sbm_core +import math +from itertools import combinations +import itertools +from sklearn.metrics.cluster import adjusted_rand_score +# Initilaize +np.random.seed(1137) + +num_roles=2 +num_vertices=25 +num_segments = 2 + +NO_SAMPLES= 100 +group_assignment= np.random.randint(num_roles, size=(num_vertices)) + +nodes = np.arange(num_vertices) + +list_of_groups= [[] for _ in range(num_roles)] + +for idx, val in enumerate(group_assignment): + list_of_groups[val].append(nodes[idx]) + +print(list_of_groups) + +size_all_pairs = {} +for k in range(0, num_roles): + for g in range(k, num_roles): + U=list_of_groups[k] + W=list_of_groups[g] + + if k == g: + size_all_pairs[k,g] = math.comb(len(U), 2) + if k != g: + size_all_pairs[k,g] = len(U)*len(W) + +lamda_arr = np.ones((num_roles, num_roles,num_segments) , dtype=float) +lamda_arr = 1e-1* np.random.randint(1,9, size=(num_roles, num_roles,num_segments)) + +#set value for each iteration ( 0 - 8 ) +_itr = 8 +_itr = 0 + +yu = (9-_itr)*.1 +lamda_arr[0,0]=[yu, 0.1] +lamda_arr[0,1]= [0.1, yu] +lamda_arr[1,0]=lamda_arr[0,1] +lamda_arr[1,1]=[yu, yu] + +lamda_arr_act = np.zeros((num_roles, num_roles,num_segments) , dtype=float) + +change_points_arr = np.zeros((num_roles, num_roles, num_segments+1) , dtype=int) +df_all= None + +points= list(range(0, (num_segments+1)*NO_SAMPLES, NO_SAMPLES)) +list1 = [] + +# Generate piecewise non-homogeneous poisson process +for k in range(0, num_roles): + for g in range(k, num_roles): + comb = [] + if k == g: + comb = list(combinations(list_of_groups[k], 2)) + # print(type(comb)) + else: + # comb = [] + key_data = [list_of_groups[k],list_of_groups[g],] + comb = list(itertools.product(*key_data)) + # print(comb) + if len(comb) != size_all_pairs[k,g]: + print('not equal..') + + change_points_arr[k,g,:] = points + lamda_arr[k,g,:] = lamda_arr[g,k,:] + + tot_count = np.zeros((num_segments) , dtype=float) + + for pair in comb: + + for d in range(0,num_segments): + + s = np.random.poisson(lamda_arr[k,g,d], NO_SAMPLES) + # print(np.count_nonzero(s)) + tot_count[d] += np.count_nonzero(s) + + list1=[i for i, e in enumerate(s) if e != 0] + + if len(list1) == 0: + print('zero') + + list1 = [x+points[d] for x in list1] + + df = pd.DataFrame(data=list1) + df.columns =['timestamp'] + + N= df.size + + list_start_stations =[pair[0]] * N + list_end_stations =[pair[1]] * N + + df['source'] = list_start_stations + df['target'] = list_end_stations + + df_all=pd.concat([df_all, df], ignore_index=True) + + for d in range(0,num_segments): + lamda_arr_act[k,g,d] = tot_count[d]/(NO_SAMPLES*len(comb)) + # print(tot_count[d]) +## Other preparations + +# Remove self loops +df_all = df_all[((df_all['source'] ) != (df_all['target']))] +#sort +df_all=df_all.sort_values('timestamp') +df_all = df_all[['target', 'timestamp','source']] + +# Save as .csv file +# df_all.to_csv('./Data/synthetic_ground_truth_g1.csv') + +df=df_all +dest_folder='./Results/synthetic/3' +t_df = df['timestamp'] + +nodes_arr = np.union1d(df['target'],df['source']).astype(int) +# list of nodes +nodes = nodes_arr.tolist() +num_vertices = len(nodes) + +# node-group dictionary +group_dic = {} +keys = nodes +values = list(group_assignment) +group_dic = dict(zip(keys,values)) + + +# create a new dictionary - key: node-pair , value: list of timestamps +dic=df.groupby(['source','target'])['timestamp'].apply(list).to_dict() +print('{} {} {} '.format(group_dic, lamda_arr_act,change_points_arr)) + + +liklihood_sum = sbm_core.compute_cost(group_dic,lamda_arr_act,change_points_arr,num_roles,num_segments,dic) +print(' Initial Actual likelihood .......%f'%liklihood_sum) + +def _swap (row): + if row['source'] > row['target']: + row['source'] , row['target'] =row['target'] , row['source'] + return row + +# Undirected graph +df=df.apply(lambda row: _swap(row), axis=1) +#scale timestamps for zeroth reference point +refValue = df['timestamp'].min() +df['timestamp'] -= refValue + +# Experiment + +import experiment + + +# User parameters +num_roles=2 +num_segments=2 +num_levels=2# Optional arg +algo_ver=3 +dest_folder='./Results/synthetic/' + +# tuning parameters +theta = 0 +eta = 1 +tuning_params= {'theta':theta,'eta':eta} + +import time +start_time = time.time() + +exp_obj = experiment.Experiment(df,num_roles,num_segments,algo_ver,dest_folder,tuning_params,num_levels,refValue) +[itr_d,likelihood_d,group_dic_d,lambda_estimates_d,change_points_arr_d] = exp_obj.execute() + +print("--- %s seconds ---" % (time.time() - start_time)) + + +t_df = sorted(t_df) + +chg_points = change_points_arr_d[0,0,:] +ranges_arr = [ [chg_points[s]+1,chg_points[s+1]] for s in range(0,len(chg_points)-1)] +ranges_arr[0][0] = 0 +list_time_stamps = list(t_df) + + +# iterate over timestamps list +dis_arr = list() +gt_arr = list() + + +for item in list_time_stamps: + + # find the segment which the timestamp belongs + # (is dependent on which groups the two nodes belong) + d = sbm_core._findSegment(ranges_arr, len(ranges_arr) , int(item)) + dis_arr.append(d) + + +chg_points = change_points_arr[0,0,:] +ranges_arr = [ [chg_points[s]+1,chg_points[s+1]] for s in range(0,len(chg_points)-1)] +ranges_arr[0][0] = 0 +list_time_stamps = list(t_df) + + +# iterate over timestamps list + +for item in list_time_stamps: + + # find the segment which the timestamp belongs + # (is dependent on which groups the two nodes belong) + d = sbm_core._findSegment(ranges_arr, len(ranges_arr) , int(item)) + gt_arr.append(d) + + +ind = adjusted_rand_score(gt_arr,dis_arr) +print('rand index: seg {} : {}'.format(_itr, ind)) + +g1= group_dic_d +g2= group_dic_d[1] + +ds= list(group_dic_d.values() ) +gt1 = list(g1.values()) + +ind_grp=adjusted_rand_score(ds,gt1) +print('rand index: group {} : {}'.format(_itr, ind_grp)) + +# 0.9785444674036701 +# 0.9791525131372905 +# 0.981440657362889 +# 0.9780947193990287 +# 0.9785576050121263 +# 0.9768656988977588 +# 0.9794087578274921 +# 0.9785467310928326 +# 0.8326828222297133 + + +# 3 +# 3 +# 3 +# 3 +# 3 +# 3 +# 5 +# 5 +# 5 + + + + diff --git a/lam-aff-2-ld.py b/lam-aff-2-ld.py new file mode 100644 index 0000000000000000000000000000000000000000..1d4c07bf7c73728106f2c95f0eb8527b5e4c7eab --- /dev/null +++ b/lam-aff-2-ld.py @@ -0,0 +1,374 @@ + + +""" +Effect of lambda: LD +Dataset-2 +""" + +import numpy as np +import pandas as pd +import utils +import sbm_core +import math +from itertools import combinations +import itertools +from sklearn.metrics.cluster import adjusted_rand_score +# Initilaize +np.random.seed(3457325) + +res = np.zeros((9,5) , dtype=float) + + +for _itr in range(0,1): + + num_roles=2 + num_vertices=20 + num_segments = 4 + num_levels = 2 + + NO_SAMPLES= 200 + nodes = np.arange(num_vertices) + lamda_arr_act = np.zeros((num_roles, num_roles,num_levels) , dtype=float) + + + H =num_levels + print('k-h levels %d'%(num_levels)) + + # h-level lambda estimates + lambda_estimates_h = np.random.rand(num_roles, num_roles, H) + lambda_estimates_h = 1e-2*np.random.randint(11,99, size=(num_roles, num_roles, H)) + # Make high variant lambdas + + yu = (9-_itr)*.1 + lambda_estimates_h[0,0,:] = [yu, 0.1] + lambda_estimates_h[0,1,:] = [0.1, yu] + lambda_estimates_h[1,0,:] = lambda_estimates_h[0,1,:] + lambda_estimates_h[1,1,:] = [yu, yu] + + l1 =list(range(0, H)) + l2 = [] + if num_segments > num_levels: + l2 = [np.random.randint(0,H) for i in range(num_segments-H)] + + # Mapping from segment to a level + g_mapping= np.array(l1 + l2) + print('g mapping {}'.format(g_mapping)) + + # initilaize group assignment randomly + group_assignment_arr= np.random.randint(num_roles, size=(num_levels,num_vertices)) + # node-group dictionary + group_dic = {} + + for i in range(0,num_levels ): + level = i + + group_dic_level = {} + keys = nodes + values = list(group_assignment_arr[level]) + group_dic_level = dict(zip(keys,values)) + group_dic[i] = group_dic_level + print('initial') + # print(group_dic) + + for e_h in range(0,num_segments): + g_a = group_dic[g_mapping[e_h]] + list_of_groups= [[] for _ in range(num_roles)] + for idx, val in g_a.items(): + list_of_groups[val].append(idx) + print('group assignments {}: {}'.format(e_h,list_of_groups)) + # Plotting + + #Initialize lamda + lamda_arr = np.zeros((num_roles, num_roles,num_segments) , dtype=float) + for d in range(0, num_segments): + for k in range(0, num_roles): + for g in range(k, num_roles): + lamda_arr[k,g, d]= lambda_estimates_h[k,g,g_mapping[d]] + lamda_arr[g,k, d]= lamda_arr[k,g, d] + change_points_arr = np.zeros((num_roles, num_roles, num_segments+1) , dtype=int) + df_all= None + + points= list(range(0, (num_segments+1)*NO_SAMPLES, NO_SAMPLES)) + list1 = [] + + level_seg_mapping = {} + for d in range(num_segments): + level = g_mapping[d] + if level in level_seg_mapping: + level_seg_mapping[level].append(d) + else: + level_seg_mapping[level] = [] + level_seg_mapping[level].append(d) + # %% + # Generate piecewise non-homogeneous poisson process + + + tot_count = np.zeros((num_levels) , dtype=float) + com_len = np.zeros((num_levels) , dtype=float) + # for pair in comb: + + for i in range(0,num_levels): + # i = g_mapping[d] + group_assignment = group_assignment_arr[i] + + print(group_assignment) + + list_of_groups= [[] for _ in range(num_roles)] + + for idx, val in enumerate(group_assignment): + list_of_groups[val].append(nodes[idx]) + + # print(list_of_groups) + + size_all_pairs = {} + + for kk in range(0, num_roles): + for gg in range(kk, num_roles): + U=list_of_groups[kk] + W=list_of_groups[gg] + + if kk == gg: + size_all_pairs[kk,gg] = math.comb(len(U), 2) + if kk != gg: + size_all_pairs[kk,gg] = len(U)*len(W) + + for k in range(0, num_roles): + for g in range(k, num_roles): + + + change_points_arr[k,g,:] = points + lamda_arr[k,g,:] = lamda_arr[g,k,:] + + + + comb = [] + if k == g: + comb = list(combinations(list_of_groups[k], 2)) + # print(type(comb)) + else: + # comb = [] + key_data = [list_of_groups[k],list_of_groups[g],] + comb = list(itertools.product(*key_data)) + # print(comb) + if len(comb) != size_all_pairs[k,g]: + print('not equal..') + + + print('d val {}'.format( d)) + com_len[i] = len(comb) + # print('comb len {}'.format( com_len[d])) + tot_count[i] = 0 + + for pair in comb: + s = np.random.poisson(lamda_arr[k,g,d], NO_SAMPLES) + # print(np.count_nonzero(s)) + tot_count[i] += np.count_nonzero(s) + + list_org=[i for i, e in enumerate(s) if e != 0] + + if len(list_org) == 0: + print('zero') + + for d in level_seg_mapping[i]: + + + list1 = [x+points[d] for x in list_org] + df= None + df = pd.DataFrame(data=list1) + df.columns =['timestamp'] + + N= df.size + + + list_start_stations =[pair[0]] * N + list_end_stations =[pair[1]] * N + + df['source'] = list_start_stations + df['target'] = list_end_stations + + df_all=pd.concat([df_all, df], ignore_index=True) + + # for dd in level_seg_mapping: + # dd = d + lamda_arr_act[k,g,i] = round(((tot_count[i])/(NO_SAMPLES*com_len[i])),1) + lamda_arr_act[g,k,i] = lamda_arr_act[k,g,i] + # print('tot count') + # print(tot_count[dd]) + # print(' {} {} {} {} : k g d :lamb'.format(k,g,d,lamda_arr_act[g,k,dd])) + print(' {} {} {} {} : k g d :lamb'.format(k,g,i,lamda_arr_act[g,k,i])) + + # Remove self loops + df_all = df_all[((df_all['source'] ) != (df_all['target']))] + #sort + df_all=df_all.sort_values('timestamp') + df_all = df_all[['target', 'timestamp','source']] + + # Save as .csv file + # df_all.to_csv('./Data/synthetic_ground_truth_g1.csv') + + + df= None + df=df_all + dest_folder='./Results/synthetic/3' + t_df = df['timestamp'] + + nodes_arr = np.union1d(df['target'],df['source']).astype(int) + # list of nodes + nodes = nodes_arr.tolist() + num_vertices = len(nodes) + + + # create a new dictionary - key: node-pair , value: list of timestamps + dic=df.groupby(['source','target'])['timestamp'].apply(list).to_dict() + print('{} {} {} '.format(group_dic, lamda_arr_act,change_points_arr)) + + + + def _swap (row): + if row['source'] > row['target']: + row['source'] , row['target'] =row['target'] , row['source'] + return row + + # Undirected graph + df=df.apply(lambda row: _swap(row), axis=1) + #scale timestamps for zeroth reference point + refValue = df['timestamp'].min() + df['timestamp'] -= refValue + + + + chg_points = change_points_arr[0,0,:] + ranges_arr = [ [chg_points[s]+1,chg_points[s+1]] for s in range(0,len(chg_points)-1)] + ranges_arr[0][0] = 0 + list_time_stamps = list(t_df) + + + # iterate over timestamps list + gt_arr = list() + for item in list_time_stamps: + + # find the segment which the timestamp belongs + # (is dependent on which groups the two nodes belong) + d = sbm_core._findSegment(ranges_arr, len(ranges_arr) , int(item)) + gt_arr.append(d) + + # Experiment + import experiment + + # User parameters + algo_ver=4 + dest_folder='./Results/synthetic/' + + # tuning parameters + theta = 1e-7 + eta = 1 + tuning_params= {'theta':theta,'eta':eta} + + + + exp_obj = experiment.Experiment(df,num_roles,num_segments,algo_ver,dest_folder,tuning_params,num_levels,refValue) + # [likelihood_f,group_dic_f] = exp_obj.execute() + [it,ll1,group_dic_d,lambda_estimates,change_points_arr_d]= exp_obj.execute() + + + # SEGMENTATION ACCURACY + + t_df = sorted(t_df) + + chg_points = change_points_arr_d[0,0,:] + ranges_arr = [ [chg_points[s]+1,chg_points[s+1]] for s in range(0,len(chg_points)-1)] + ranges_arr[0][0] = 0 + list_time_stamps = list(t_df) + + + # iterate over timestamps list + dis_arr = list() + for item in list_time_stamps: + + # find the segment which the timestamp belongs + # (is dependent on which groups the two nodes belong) + d = sbm_core._findSegment(ranges_arr, len(ranges_arr) , int(item)) + dis_arr.append(d) + + + gt_arr= np.array(gt_arr, dtype=np.float64) + dis_arr= np.array(dis_arr, dtype=np.float64) + ind_seg = adjusted_rand_score(gt_arr,dis_arr) + print('ind {} : {}'.format(_itr, ind_seg)) + + liklihood_sum = sbm_core.mm_compute_cost(group_dic,lamda_arr_act,change_points_arr,num_roles,num_segments,dic,g_mapping) + print(' Initial Actual likelihood .......%f'%liklihood_sum) + + print('g mapping {}'.format(g_mapping)) + + for e_h in range(0,num_segments): + g_a = group_dic[g_mapping[e_h]] + list_of_groups= [[] for _ in range(num_roles)] + for idx, val in g_a.items(): + list_of_groups[val].append(idx) + print('group assignments {}: {}'.format(e_h,list_of_groups)) + + #group ass, of level 1 + list_of_groups_1= [[] for _ in range(num_roles)] + #group ass, of level 2 + list_of_groups_2= [[] for _ in range(num_roles)] + g1= group_dic_d[0] + g2= group_dic_d[1] + + found_cont = 0 + + for i_h in range(0,num_levels): + # i_h level + grp = group_dic_d[i_h] + + list_of_groups_d= [[] for _ in range(num_roles)] + + for idx, val in grp.items(): + list_of_groups_d[val].append(idx) + + ds= list(group_dic_d[i_h].values() ) + gt1 = list(g1.values()) + gt2 = list(g2.values()) + + + ind1=adjusted_rand_score(ds,gt1) + ind2=adjusted_rand_score(ds,gt2) + + + d_in = max(ind1,ind2) + found_cont += d_in + + ind = found_cont/2 + + res[_itr][1] = ind + res[_itr][4] = ind_seg +print('end') + + + +# 0.9898951352373943 +# 0.9904822820772498 +# 0.9894069501702982 +# 0.9892811884102554 +# 0.9893223431465236 +# 0.9886669698061425 +# 0.4041524218474172 +# 0.4968349779236352 +# 0.49583738728791915 + + + + +# 3 +# 3 +# 3 +# 6 +# 4 +# 3 +# 5 +# 4 +# 3 + + + + diff --git a/optimize.py b/optimize.py index b675353a8f7bc30217763d1f42efe4d729ff9cff..84f1466485c34bfa941c918fb643ad4a831dc80f 100755 --- a/optimize.py +++ b/optimize.py @@ -155,7 +155,7 @@ class Optimize: _prev_val = _curr_val _curr_val = liklihood_sum _itr+=1 - return [self.group_assignment,self.lambda_estimates,self.change_points_arr,liklihood_sum] + return [self.group_assignment,self.lambda_estimates,self.change_points_arr,liklihood_sum,_itr] def com_h_lvl_lambda_group(self): @@ -218,23 +218,23 @@ class Optimize: print("iteration no........... %d " %(_itr+1)) self.group_assignment=sbm_core.mm_group_assignment_ver2_2(self.nodes,self.num_roles,self.num_segments,self.lambda_estimates,self.group_assignment,self.change_points_arr,self.df,self.g_mapping) - print('after grouping') - liklihood_sum = sbm_core.mm_compute_cost(self.group_assignment,self.lambda_estimates,self.change_points_arr,self.num_roles,self.num_segments,self.df,self.g_mapping) + # print('after grouping') + # liklihood_sum = sbm_core.mm_compute_cost(self.group_assignment,self.lambda_estimates,self.change_points_arr,self.num_roles,self.num_segments,self.df,self.g_mapping) self.lambda_estimates=sbm_core.mm_estimate_lamda_kh(self.num_roles,self.num_segments,self.lambda_estimates,self.group_assignment,self.change_points_arr,self.df,self.g_mapping,self.tuning_params) - print('after lambda estimate') - liklihood_sum = sbm_core.mm_compute_cost(self.group_assignment,self.lambda_estimates,self.change_points_arr,self.num_roles,self.num_segments,self.df,self.g_mapping) + # print('after lambda estimate') + # liklihood_sum = sbm_core.mm_compute_cost(self.group_assignment,self.lambda_estimates,self.change_points_arr,self.num_roles,self.num_segments,self.df,self.g_mapping) print('after seg') # self.change_points_arr = sbm_core.dyn_prog_seg(self.group_assignment,self.lambda_estimates,self.change_points_arr,self.num_roles,self.num_segments,self.df) [self.change_points_arr,self.g_mapping,self.group_assignment]=sbm_core.mm_linear_seg_ver_2(self.num_roles,self.num_segments,self.group_assignment,self.lambda_estimates,self.change_points_arr,self.df,self.g_mapping) - liklihood_sum = sbm_core.mm_compute_cost(self.group_assignment,self.lambda_estimates,self.change_points_arr,self.num_roles,self.num_segments,self.df,self.g_mapping) + # liklihood_sum = sbm_core.mm_compute_cost(self.group_assignment,self.lambda_estimates,self.change_points_arr,self.num_roles,self.num_segments,self.df,self.g_mapping) self.lambda_estimates=sbm_core.mm_estimate_lamda_kh(self.num_roles,self.num_segments,self.lambda_estimates,self.group_assignment,self.change_points_arr,self.df,self.g_mapping,self.tuning_params) - print('after lambda estimate') + # print('after lambda estimate') liklihood_sum = sbm_core.mm_compute_cost(self.group_assignment,self.lambda_estimates,self.change_points_arr,self.num_roles,self.num_segments,self.df,self.g_mapping) print(' %d %f'%(_itr+1,liklihood_sum)) _prev_val = _curr_val _curr_val = liklihood_sum _itr+=1 - return [self.group_assignment,self.lambda_estimates,self.change_points_arr,liklihood_sum,self.g_mapping] \ No newline at end of file + return [self.group_assignment,self.lambda_estimates,self.change_points_arr,liklihood_sum,self.g_mapping,_itr] \ No newline at end of file