SF OpenData Parking Meter Data

This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.

Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Ctrl+Shift+Enter.

Add a new chunk by clicking the Insert Chunk button on the toolbar or by pressing Ctrl+Alt+I.

When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the Preview button or press Ctrl+Shift+K to preview the HTML file).

Where are the Parking meters in San Fransisco?

To find data on the SF OpenData website you can click on one of the 10 topics provided or you can search. To find data about Parking meters in SF, search on Parking meters. The first result should be a link to the Parking meters dataset.

The SF OpenData website now has maps. You need to create an account of the website to save you plots. Here is a link to a map that I made of Where are the Parking meters?

Now we are going to use the provided API to download the data into R.

Loading libraries…

Note the the location columns have been read in as char values. These should be numeric. First we will transform them into numeric columns. We will change smart_mete to a factor, which will let us color the map with two colors. Note that sapply is used to check the classes of the columns in the dataframe.

                  ms_id              streetname              smart_mete              ms_spaceid 
            "character"             "character"                "factor"             "character" 
             meter_type              street_num               cap_color              jurisdicti 
            "character"             "character"             "character"             "character" 
                post_id              sfparkarea              on_off_str       location.latitude 
            "character"             "character"             "character"               "numeric" 
location.needs_recoding      location.longitude                  osp_id                ratearea 
            "character"               "numeric"             "character"             "character" 
             street_seg              activesens 
            "character"             "character" 

To simplify the dataframe we will take a subset of the columns of the original dataframe: type, latitude, and longitude. We will simplify the names of the variables/columns.

     type  latitude longitude 
 "factor" "numeric" "numeric" 

Now using the package ggmap we get a map and then plot the locations of the Parking meters on the map.

Map from URL : http://maps.googleapis.com/maps/api/staticmap?center=San+Fransisco&zoom=13&size=640x640&scale=2&maptype=terrain&sensor=false
Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=San%20Fransisco&sensor=false
Map from URL : http://tile.stamen.com/toner/13/1309/3165.png
cannot remove file '3f4c07b1d4643b079aa082775de467cb.rds', reason 'No such file or directory'Map from URL : http://tile.stamen.com/toner/13/1310/3165.png
cannot remove file '52a39668b3aaa2aeed79dc8186cc76f2.rds', reason 'No such file or directory'Map from URL : http://tile.stamen.com/toner/13/1311/3165.png
cannot remove file '6a183fc6f69abba493f517990595f819.rds', reason 'No such file or directory'Map from URL : http://tile.stamen.com/toner/13/1309/3166.png
cannot remove file '87d8f1936dd8cde98b6c914920edb442.rds', reason 'No such file or directory'Map from URL : http://tile.stamen.com/toner/13/1310/3166.png
cannot remove file '3bc6e364204e455419e3002d779a8034.rds', reason 'No such file or directory'Map from URL : http://tile.stamen.com/toner/13/1311/3166.png
cannot remove file 'ef6929c0cb97d758c41df55bb5ff1ed3.rds', reason 'No such file or directory'Map from URL : http://tile.stamen.com/toner/13/1309/3167.png
cannot remove file '9c5d24dff0fed2a98c356f1e6d4856bc.rds', reason 'No such file or directory'Map from URL : http://tile.stamen.com/toner/13/1310/3167.png
cannot remove file 'e67d1cb2911d0693313d752712b76cf3.rds', reason 'No such file or directory'Map from URL : http://tile.stamen.com/toner/13/1311/3167.png
cannot remove file 'abad561f1ba64a153465eaffe659d715.rds', reason 'No such file or directory'

Subsetting.

LS0tDQp0aXRsZTogIlNGIE9wZW5EYXRhIFBhcmtpbmcgTWV0ZXIgRGF0YSINCmF1dGhvcjogIkhvYSBRdWFjaCINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCiNTRiBPcGVuRGF0YSBQYXJraW5nIE1ldGVyIERhdGENCg0KVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFdoZW4geW91IGV4ZWN1dGUgY29kZSB3aXRoaW4gdGhlIG5vdGVib29rLCB0aGUgcmVzdWx0cyBhcHBlYXIgYmVuZWF0aCB0aGUgY29kZS4gDQoNClRyeSBleGVjdXRpbmcgdGhpcyBjaHVuayBieSBjbGlja2luZyB0aGUgKlJ1biogYnV0dG9uIHdpdGhpbiB0aGUgY2h1bmsgb3IgYnkgcGxhY2luZyB5b3VyIGN1cnNvciBpbnNpZGUgaXQgYW5kIHByZXNzaW5nICpDdHJsK1NoaWZ0K0VudGVyKi4gDQoNCkFkZCBhIG5ldyBjaHVuayBieSBjbGlja2luZyB0aGUgKkluc2VydCBDaHVuayogYnV0dG9uIG9uIHRoZSB0b29sYmFyIG9yIGJ5IHByZXNzaW5nICpDdHJsK0FsdCtJKi4NCg0KV2hlbiB5b3Ugc2F2ZSB0aGUgbm90ZWJvb2ssIGFuIEhUTUwgZmlsZSBjb250YWluaW5nIHRoZSBjb2RlIGFuZCBvdXRwdXQgd2lsbCBiZSBzYXZlZCBhbG9uZ3NpZGUgaXQgKGNsaWNrIHRoZSAqUHJldmlldyogYnV0dG9uIG9yIHByZXNzICpDdHJsK1NoaWZ0K0sqIHRvIHByZXZpZXcgdGhlIEhUTUwgZmlsZSkuDQoNCipXaGVyZSBhcmUgdGhlIFBhcmtpbmcgbWV0ZXJzIGluIFNhbiBGcmFuc2lzY28/Kg0KDQpUbyBmaW5kIGRhdGEgb24gdGhlIFNGIE9wZW5EYXRhIHdlYnNpdGUgeW91IGNhbiBjbGljayBvbiBvbmUgb2YgdGhlIDEwIHRvcGljcyBwcm92aWRlZCBvciB5b3UgY2FuIHNlYXJjaC4gVG8gZmluZCBkYXRhIGFib3V0ICpQYXJraW5nIG1ldGVycyogaW4gU0YsIHNlYXJjaCBvbiBQYXJraW5nIG1ldGVycy4gVGhlIGZpcnN0IHJlc3VsdCBzaG91bGQgYmUgYSBsaW5rIHRvIHRoZSBQYXJraW5nIG1ldGVycyBkYXRhc2V0Lg0KDQpUaGUgU0YgT3BlbkRhdGEgd2Vic2l0ZSBub3cgaGFzIG1hcHMuIFlvdSBuZWVkIHRvIGNyZWF0ZSBhbiBhY2NvdW50IG9mIHRoZSB3ZWJzaXRlIHRvIHNhdmUgeW91IHBsb3RzLiBIZXJlIGlzIGEgbGluayB0byBhIG1hcCB0aGF0IEkgbWFkZSBvZiBXaGVyZSBhcmUgdGhlIFBhcmtpbmcgbWV0ZXJzPw0KDQpOb3cgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgcHJvdmlkZWQgQVBJIHRvIGRvd25sb2FkIHRoZSBkYXRhIGludG8gUi4NCg0KTG9hZGluZyBsaWJyYXJpZXMuLi4NCg0KYGBge3IgZXZhbD1UUlVFLCBlY2hvPUZBTFNFfQ0KIyBpbnN0YWxsLnBhY2thZ2VzKCJSU29jcmF0YSkNCmxpYnJhcnkoIlJTb2NyYXRhIikNCmRmIDwtIHJlYWQuc29jcmF0YSgiaHR0cHM6Ly9kYXRhLnNmZ292Lm9yZy9yZXNvdXJjZS95dXRpLXQ5YTcuanNvbiIpDQpgYGANCg0KYGBge3IgZXZhbD1UUlVFLCBlY2hvPUZBTFNFfQ0KaGVhZChkZikNCmBgYA0KDQpOb3RlIHRoZSB0aGUgbG9jYXRpb24gY29sdW1ucyBoYXZlIGJlZW4gcmVhZCBpbiBhcyBjaGFyIHZhbHVlcy4gVGhlc2Ugc2hvdWxkIGJlIG51bWVyaWMuIEZpcnN0IHdlIHdpbGwgdHJhbnNmb3JtIHRoZW0gaW50byBudW1lcmljIGNvbHVtbnMuIFdlIHdpbGwgY2hhbmdlIHNtYXJ0X21ldGUgdG8gYSBmYWN0b3IsIHdoaWNoIHdpbGwgbGV0IHVzIGNvbG9yIHRoZSBtYXAgd2l0aCB0d28gY29sb3JzLiBOb3RlIHRoYXQgc2FwcGx5IGlzIHVzZWQgdG8gY2hlY2sgdGhlIGNsYXNzZXMgb2YgdGhlIGNvbHVtbnMgaW4gdGhlIGRhdGFmcmFtZS4NCg0KYGBge3IgZXZhbD1UUlVFLCBlY2hvPUZBTFNFfQ0KZGYgPC0gdHJhbnNmb3JtKGRmLCBsb2NhdGlvbi5sb25naXR1ZGUgPSBhcy5udW1lcmljKGxvY2F0aW9uLmxvbmdpdHVkZSksIA0KICAgICAgICAgICAgICAgbG9jYXRpb24ubGF0aXR1ZGUgPSBhcy5udW1lcmljKGxvY2F0aW9uLmxhdGl0dWRlKSwgDQogICAgICAgICAgICAgICBzbWFydF9tZXRlID0gYXMuZmFjdG9yKHNtYXJ0X21ldGUpKQ0Kc2FwcGx5KGRmLCBjbGFzcykNCmBgYA0KDQpUbyBzaW1wbGlmeSB0aGUgZGF0YWZyYW1lIHdlIHdpbGwgdGFrZSBhIHN1YnNldCBvZiB0aGUgY29sdW1ucyBvZiB0aGUgb3JpZ2luYWwgZGF0YWZyYW1lOiB0eXBlLCBsYXRpdHVkZSwgYW5kIGxvbmdpdHVkZS4gV2Ugd2lsbCBzaW1wbGlmeSB0aGUgbmFtZXMgb2YgdGhlIHZhcmlhYmxlcy9jb2x1bW5zLg0KDQpgYGB7ciBldmFsPVRSVUUsIGVjaG89RkFMU0V9DQpkZi5tZXRlcnMgPC0gZGZbLGMoMywxMiwxNCldDQpuYW1lcyhkZi5tZXRlcnMpIDwtIGMoInR5cGUiLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIpDQpzYXBwbHkoZGYubWV0ZXJzLCBjbGFzcykNCmBgYA0KDQpOb3cgdXNpbmcgdGhlIHBhY2thZ2UgZ2dtYXAgd2UgZ2V0IGEgbWFwIGFuZCB0aGVuIHBsb3QgdGhlIGxvY2F0aW9ucyBvZiB0aGUgUGFya2luZyBtZXRlcnMgb24gdGhlIG1hcC4NCg0KYGBge3IgZXZhbD1UUlVFLCBlY2hvPUZBTFNFfQ0KI2luc3RhbGwucGFja2FnZXMoImdnbWFwIikNCmxpYnJhcnkoZ2dtYXApDQpgYGANCg0KYGBge3IgZXZhbD1UUlVFLCBlY2hvPUZBTFNFfQ0KbSA8LSBnZXRfbWFwKCJTYW4gRnJhbnNpc2NvIiwgem9vbT0xMywgbWFwdHlwZT0idG9uZXIiLCBzb3VyY2U9InN0YW1lbiIpDQpgYGANCg0KYGBge3IgZXZhbD1UUlVFLCBlY2hvPUZBTFNFfQ0KIyBhdmFpbGFibGUgY29sb3JzIGZvciBnZ3Bsb3QyICBodHRwOi8vc2FwZS5pbmYudXNpLmNoL3F1aWNrLXJlZmVyZW5jZS9nZ3Bsb3QyL2NvbG91cg0KZ2dtYXAobSwgYmFzZV9sYXllciA9IGdncGxvdChhZXMoeCA9IGxvbmdpdHVkZSwgeSA9IGxhdGl0dWRlKSwgZGF0YSA9IGRmLm1ldGVycykpICArIGdlb21fcG9pbnQoY29sb3I9ImRhcmsgYmx1ZSIpDQpgYGANCg0KYGBge3IgZXZhbD1UUlVFLCBlY2hvPUZBTFNFfQ0KZ2dtYXAobSwgYmFzZV9sYXllciA9IGdncGxvdChhZXMoeCA9IGxvbmdpdHVkZSwgeSA9IGxhdGl0dWRlLCBjb2xvdXI9dHlwZSksIGRhdGEgPSBkZi5tZXRlcnMpKSArIA0KICBnZW9tX3BvaW50KCkNCmBgYA0KDQpTdWJzZXR0aW5nLg0KDQpgYGB7ciBldmFsPVRSVUUsIGVjaG89RkFMU0V9DQpkZi5tZXRlcnMuc21hcnQgPC0gc3Vic2V0KGRmLm1ldGVycywgdHlwZT09IlkiKQ0KYGBgDQoNCg0KYGBge3IgZXZhbD1UUlVFLCBlY2hvPUZBTFNFfQ0KZ2dtYXAobSwgYmFzZV9sYXllciA9IGdncGxvdChhZXMoeCA9IGxvbmdpdHVkZSwgeSA9IGxhdGl0dWRlKSwgZGF0YSA9IGRmLm1ldGVycy5zbWFydCkpICArDQogIGdlb21fcG9pbnQoY29sb3I9InR1cnF1b2lzZTIiKQ0KYGBgDQoNCmBgYHtyIGV2YWw9VFJVRSwgZWNobz1GQUxTRX0NCmRmLm1ldGVycy5ub3Quc21hcnQgPC0gc3Vic2V0KGRmLm1ldGVycywgdHlwZT09Ik4iKQ0KYGBgDQoNCmBgYHtyIGV2YWw9VFJVRSwgZWNobz1GQUxTRX0NCmdnbWFwKG0sIGJhc2VfbGF5ZXIgPSBnZ3Bsb3QoYWVzKHggPSBsb25naXR1ZGUsIHkgPSBsYXRpdHVkZSksIGRhdGEgPSBkZi5tZXRlcnMubm90LnNtYXJ0KSkgKyANCiAgZ2VvbV9wb2ludChjb2xvcj0iaW5kaWFucmVkMiIpDQpgYGANCg0K