The late comedian Mitch Hedberg
famously joked that “La Quinta” is Spanish for “next to Denny’s”. In
this lab exercise, we explore the accuracy of his claim that Denny’s, a casual diner chain that is
open 24 hours, is actually co-located with La Quinta Inn and Suites, a hotel chain.
This lab is inspired by a blog post by John Reiser entitled Mitch Hedberg
and GIS.
Loading the Dataset
We use three datasets, all stored in ./data:
dennys — The locations of all Denny’s restaurants:
laquinta — The locations of all La Quinta hotels:
states — The names of all the US states, including DC,
plus some additional information.
Note that the first two datasets are represented in RDS format, which
is an R-internal format for datasets that maintains data types. The last
dataset is in CSV format and requires some
dennys <- read_rds("data/dennys.rds")
laquinta <- read_rds("data/laquinta.rds")
states <- read_csv("data/states.csv", col_types = cols(
name = col_character(),
abbreviation = col_character(),
area = col_double()
))
🚧 The dataset descriptions on the RStudio-Education site are rather
uninformative. So describe them here, including a data dictionary and
their size.
Focusing on US Locations
We limit our analysis to Denny”s and La Quinta locations in the
United States.
🚧 Are there any Denny’s or La Quinta locations that are outside the
US? Answer this by filtering for observations where state
is not in states$abbreviation. Here, the %in%
operator matches the states listed in the state variable to
those listed in the states$abbreviation vector. The
! operator means not:
dennys %>%
filter(!(state %in% states$abbreviation))
# A tibble: 0 × 6
# … with 6 variables: address <chr>, city <chr>, state <chr>, zip <chr>,
# longitude <dbl>, latitude <dbl>
🚧 Going forward we will work with the data from the United States
only, so you can define two new dataframes, dennys_us and
laquinta_us, that include only US locations. Include an
indication of how many Denny’s and La Quinta records are filtered out
because they are not in the US.
Computing Frequencies
In the following sections, we compute some density statistics for the
two franchises.
By State
🚧 Compute which states have the most and fewest Denny’s locations.
Do the same for La Quinta. Describe the results and discuss whether
there’s anything interesting about them.
By Area
🚧 Compute which states have the most Denny’s locations per
thousand square miles. Do the same for La Quinta. Describe the
results and discuss whether there’s anything interesting about them.
Note: to do this, you’ll need to look up the area of
the states in the states dataset. Start with the table of
counts by state that you just computed above and then join it
with the table that has the area of each state. The states’ areas are
given in square miles; make a new column for the result of the unit
conversion.
Plotting Locations
Finally, we plot the locations (latitude and longitude) of both
establishments.
To do this, we’ll put the two datasets together into a single data
frame. First, we’ll add an identifier variable called
establishment to distinguish rows from the two datasets,
and then we’ll bind them with the bind_rows function (n.b.,
this binding works because the two tables have the same columns):
dn_lq <- bind_rows(
dennys_us %>% mutate(establishment = "Denny's"),
laquinta_us %>% mutate(establishment = "La Quinta"),
)
🚧 Plot the locations of the two establishments using a scatter plot,
and color the points by the establishment type. Note: the
longitude is plotted on the x-axis and the latitude on the y-axis.
Drawing Conclusions
🚧 In conclusion, do Denny’s restaurants and La Quinta motels appear,
visually, to be co-located?
Note: the homework for this week concludes this analysis.
LS0tCnRpdGxlOiAiTGFiIDYuMSAtIFZpc3VhbGl6aW5nIFNwYXRpYWwgRGF0YSIKYXV0aG9yOiAiQXV0aG9yIEdvZXMgSGVyZSIKZGF0ZTogIlNlbWVzdGVyIEdvZXMgSGVyZSIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0KIyBTZXQgc29tZSB1c2VmdWwgY2h1bmsgb3B0aW9ucyBmb3IgY29kZSBjaHVua3MuCmtuaXRyOjpvcHRzX2NodW5rJHNldCgKICBlY2hvID0gVFJVRSwKICBlcnJvciA9IFRSVUUsICAgICMgZGlzcGxheSBlcnJvcnMgYnV0IGtlZXAgZ29pbmcuCiAgY29tbWVudCA9ICIiLCAgICAjIGRvbid0IGFkZCAnIyMnIGNoYXJhY3RlcnMgYmVmb3JlIG91dHB1dC4KICBtZXNzYWdlID0gRkFMU0UgICMgZG9uJ3QgaW5jbHVkZSBtZXNzYWdlcyBpbiB0aGUga25pdHRlZCBvdXRwdXQgKGNoZWNrIHRoZW0gaW4gUlN0dWRpbykKICApCmxpYnJhcnkodGlkeXZlcnNlKQp0aGVtZV9zZXQodGhlbWVfYncoKSkKYGBgCgpUaGUgbGF0ZSBjb21lZGlhbiBbTWl0Y2ggSGVkYmVyZ10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWl0Y2hfSGVkYmVyZykgZmFtb3VzbHkgam9rZWQgdGhhdCAiTGEgUXVpbnRhIiBpcyBTcGFuaXNoIGZvciAibmV4dCB0byBEZW5ueSdzIi4gSW4gdGhpcyBsYWIgZXhlcmNpc2UsIHdlIGV4cGxvcmUgdGhlIGFjY3VyYWN5IG9mIGhpcyBjbGFpbSB0aGF0IFtEZW5ueSdzXShodHRwczovL3d3dy5kZW5ueXMuY29tLyksIGEgY2FzdWFsIGRpbmVyIGNoYWluIHRoYXQgaXMgb3BlbiAyNCBob3VycywgaXMgYWN0dWFsbHkgY28tbG9jYXRlZCB3aXRoIFtMYSBRdWludGEgSW5uIGFuZCBTdWl0ZXNdKGh0dHA6Ly93d3cubHEuY29tLyksIGEgaG90ZWwgY2hhaW4uIFRoaXMgbGFiIGlzIGluc3BpcmVkIGJ5IGEgYmxvZyBwb3N0IGJ5IEpvaG4gUmVpc2VyIGVudGl0bGVkIFtNaXRjaCBIZWRiZXJnIGFuZCBHSVNdKGh0dHA6Ly9uamdlby5vcmcvMjAxNC8wMS8zMC9taXRjaC1oZWRiZXJnLWFuZC1naXMvKS4KCiMjIExvYWRpbmcgdGhlIERhdGFzZXQKCldlIHVzZSB0aHJlZSBkYXRhc2V0cywgYWxsIHN0b3JlZCBpbiBbLi9kYXRhXShodHRwczovL2NzLmNhbHZpbi5lZHUvY291cnNlcy9pbmZvLzYwMS8wNndyYW5nbGluZy9sYWIvZGF0YS8uKToKCi0gYGRlbm55c2AgLS0tIFRoZSBsb2NhdGlvbnMgb2YgYWxsIERlbm55J3MgcmVzdGF1cmFudHM6CiAgLSAqU2NyYXBlZCogZnJvbSBbQWxsIERlbm55J3MgTG9jYXRpb25zXShodHRwczovL2xvY2F0aW9ucy5kZW5ueXMuY29tLykKICAtIERlc2NyaWJlZCBoZXJlOiBbTG9jYXRpb25zIG9mIERlbm55J3MgcmVzdGF1cmFudHNdKGh0dHBzOi8vcnN0dWRpby1lZHVjYXRpb24uZ2l0aHViLmlvL2RzYm94L3JlZmVyZW5jZS9kZW5ueXMuaHRtbCkKICAKLSBgbGFxdWludGFgIC0tLSBUaGUgbG9jYXRpb25zIG9mIGFsbCBMYSBRdWludGEgaG90ZWxzOiAKICAtICpTY3JhcGVkKiBmcm9tIFtMYSBRdWludGEgTG9jYXRpb25zXShodHRwczovL3d3dy53eW5kaGFtaG90ZWxzLmNvbS9sYXF1aW50YS9sb2NhdGlvbnMpCiAgLSBEZXNjcmliZWQgaGVyZTogW0xvY2F0aW9ucyBvZiBMYSBRdWludGEgSW5uIG1vdGVsc10oaHR0cHM6Ly9yc3R1ZGlvLWVkdWNhdGlvbi5naXRodWIuaW8vZHNib3gvcmVmZXJlbmNlL2xhcXVpbnRhLmh0bWwpCgotIGBzdGF0ZXNgIC0tLSBUaGUgbmFtZXMgb2YgYWxsIHRoZSBVUyBzdGF0ZXMsIGluY2x1ZGluZyBEQywgcGx1cyBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCgpOb3RlIHRoYXQgdGhlIGZpcnN0IHR3byBkYXRhc2V0cyBhcmUgcmVwcmVzZW50ZWQgaW4gUkRTIGZvcm1hdCwgd2hpY2ggaXMgYW4gUi1pbnRlcm5hbCBmb3JtYXQgZm9yIGRhdGFzZXRzIHRoYXQgbWFpbnRhaW5zIGRhdGEgdHlwZXMuIFRoZSBsYXN0IGRhdGFzZXQgaXMgaW4gQ1NWIGZvcm1hdCBhbmQgcmVxdWlyZXMgc29tZSAKCmBgYHtyIGxvYWQtZGF0YSwgbWVzc2FnZT1GQUxTRX0KZGVubnlzIDwtIHJlYWRfcmRzKCJkYXRhL2Rlbm55cy5yZHMiKQpsYXF1aW50YSA8LSByZWFkX3JkcygiZGF0YS9sYXF1aW50YS5yZHMiKQpzdGF0ZXMgPC0gcmVhZF9jc3YoImRhdGEvc3RhdGVzLmNzdiIsIGNvbF90eXBlcyA9IGNvbHMoCiAgbmFtZSA9IGNvbF9jaGFyYWN0ZXIoKSwKICBhYmJyZXZpYXRpb24gPSBjb2xfY2hhcmFjdGVyKCksCiAgYXJlYSA9IGNvbF9kb3VibGUoKQopKQpgYGAKCvCfmqcKVGhlIGRhdGFzZXQgZGVzY3JpcHRpb25zIG9uIHRoZSBSU3R1ZGlvLUVkdWNhdGlvbiBzaXRlIGFyZSByYXRoZXIgdW5pbmZvcm1hdGl2ZS4gU28gZGVzY3JpYmUgdGhlbSBoZXJlLCBpbmNsdWRpbmcgYSBkYXRhIGRpY3Rpb25hcnkgYW5kIHRoZWlyIHNpemUuCgojIyBGb2N1c2luZyBvbiBVUyBMb2NhdGlvbnMKCldlIGxpbWl0IG91ciBhbmFseXNpcyB0byBEZW5ueSJzIGFuZCBMYSBRdWludGEgbG9jYXRpb25zIGluIHRoZSBVbml0ZWQgU3RhdGVzLgoK8J+apwpBcmUgdGhlcmUgYW55IERlbm55J3Mgb3IgTGEgUXVpbnRhIGxvY2F0aW9ucyB0aGF0IGFyZSBvdXRzaWRlIHRoZSBVUz8gQW5zd2VyIHRoaXMgYnkgZmlsdGVyaW5nIGZvciBvYnNlcnZhdGlvbnMgd2hlcmUgYHN0YXRlYCBpcyBub3QgaW4gYHN0YXRlcyRhYmJyZXZpYXRpb25gLiBIZXJlLCB0aGUgYCVpbiVgIG9wZXJhdG9yIG1hdGNoZXMgdGhlIHN0YXRlcyBsaXN0ZWQgaW4gdGhlIGBzdGF0ZWAgdmFyaWFibGUgdG8gdGhvc2UgbGlzdGVkIGluIHRoZSBgc3RhdGVzJGFiYnJldmlhdGlvbmAgdmVjdG9yLiBUaGUgYCFgIG9wZXJhdG9yIG1lYW5zICoqbm90Kio6CgpgYGB7cn0KZGVubnlzICU+JQogIGZpbHRlcighKHN0YXRlICVpbiUgc3RhdGVzJGFiYnJldmlhdGlvbikpCmBgYAoKW09QVElPTkFMXTogVHJ5IHVzaW5nIGFuIGBhbnRpX2pvaW5gIGluc3RlYWQuCgrwn5qnCkdvaW5nIGZvcndhcmQgd2Ugd2lsbCB3b3JrIHdpdGggdGhlIGRhdGEgZnJvbSB0aGUgVW5pdGVkIFN0YXRlcyBvbmx5LCBzbyB5b3UgY2FuIGRlZmluZSB0d28gbmV3IGRhdGFmcmFtZXMsIGBkZW5ueXNfdXNgIGFuZCBgbGFxdWludGFfdXNgLCB0aGF0IGluY2x1ZGUgb25seSBVUyBsb2NhdGlvbnMuIEluY2x1ZGUgYW4gaW5kaWNhdGlvbiBvZiBob3cgbWFueSBEZW5ueSdzIGFuZCBMYSBRdWludGEgcmVjb3JkcyBhcmUgZmlsdGVyZWQgb3V0IGJlY2F1c2UgdGhleSBhcmUgbm90IGluIHRoZSBVUy4KCiMjIENvbXB1dGluZyBGcmVxdWVuY2llcwoKSW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucywgd2UgY29tcHV0ZSBzb21lIGRlbnNpdHkgc3RhdGlzdGljcyBmb3IgdGhlIHR3byBmcmFuY2hpc2VzLgoKIyMjIEJ5IFN0YXRlCgrwn5qnCkNvbXB1dGUgd2hpY2ggc3RhdGVzIGhhdmUgdGhlIG1vc3QgYW5kIGZld2VzdCBEZW5ueSdzIGxvY2F0aW9ucy4gRG8gdGhlIHNhbWUgZm9yIExhIFF1aW50YS4gRGVzY3JpYmUgdGhlIHJlc3VsdHMgYW5kIGRpc2N1c3Mgd2hldGhlciB0aGVyZSdzIGFueXRoaW5nIGludGVyZXN0aW5nIGFib3V0IHRoZW0uCgojIyMgQnkgQXJlYQoK8J+apwpDb21wdXRlIHdoaWNoIHN0YXRlcyBoYXZlIHRoZSBtb3N0IERlbm55J3MgbG9jYXRpb25zICpwZXIgdGhvdXNhbmQgc3F1YXJlIG1pbGVzKi4gRG8gdGhlIHNhbWUgZm9yIExhIFF1aW50YS4gRGVzY3JpYmUgdGhlIHJlc3VsdHMgYW5kIGRpc2N1c3Mgd2hldGhlciB0aGVyZSdzIGFueXRoaW5nIGludGVyZXN0aW5nIGFib3V0IHRoZW0uICpOb3RlKjogdG8gZG8gdGhpcywgeW91J2xsIG5lZWQgdG8gKmxvb2sgdXAqIHRoZSBhcmVhIG9mIHRoZSBzdGF0ZXMgaW4gdGhlIGBzdGF0ZXNgIGRhdGFzZXQuIFN0YXJ0IHdpdGggdGhlIHRhYmxlIG9mIGNvdW50cyBieSBzdGF0ZSB0aGF0IHlvdSBqdXN0IGNvbXB1dGVkIGFib3ZlIGFuZCB0aGVuICpqb2luKiBpdCB3aXRoIHRoZSB0YWJsZSB0aGF0IGhhcyB0aGUgYXJlYSBvZiBlYWNoIHN0YXRlLiBUaGUgc3RhdGVzJyBhcmVhcyBhcmUgZ2l2ZW4gaW4gc3F1YXJlIG1pbGVzOyBtYWtlIGEgbmV3IGNvbHVtbiBmb3IgdGhlIHJlc3VsdCBvZiB0aGUgdW5pdCBjb252ZXJzaW9uLgoKIyMgUGxvdHRpbmcgTG9jYXRpb25zCgpGaW5hbGx5LCB3ZSBwbG90IHRoZSBsb2NhdGlvbnMgKGxhdGl0dWRlIGFuZCBsb25naXR1ZGUpIG9mIGJvdGggZXN0YWJsaXNobWVudHMuCgpUbyBkbyB0aGlzLCB3ZSdsbCBwdXQgdGhlIHR3byBkYXRhc2V0cyB0b2dldGhlciBpbnRvIGEgc2luZ2xlIGRhdGEgZnJhbWUuCkZpcnN0LCB3ZSdsbCBhZGQgYW4gaWRlbnRpZmllciB2YXJpYWJsZSBjYWxsZWQgYGVzdGFibGlzaG1lbnRgIHRvIGRpc3Rpbmd1aXNoIHJvd3MgZnJvbSB0aGUgdHdvIGRhdGFzZXRzLCBhbmQgdGhlbiB3ZSdsbCBiaW5kIHRoZW0gd2l0aCB0aGUgYGJpbmRfcm93c2AgZnVuY3Rpb24gKG4uYi4sIHRoaXMgYmluZGluZyB3b3JrcyBiZWNhdXNlIHRoZSB0d28gdGFibGVzIGhhdmUgdGhlIHNhbWUgY29sdW1ucyk6CgpgYGAKZG5fbHEgPC0gYmluZF9yb3dzKAogIGRlbm55c191cyAlPiUgbXV0YXRlKGVzdGFibGlzaG1lbnQgPSAiRGVubnkncyIpLCAKICBsYXF1aW50YV91cyAlPiUgbXV0YXRlKGVzdGFibGlzaG1lbnQgPSAiTGEgUXVpbnRhIiksIAopCmBgYAoK8J+apwpQbG90IHRoZSBsb2NhdGlvbnMgb2YgdGhlIHR3byBlc3RhYmxpc2htZW50cyB1c2luZyBhIHNjYXR0ZXIgcGxvdCwgYW5kIGNvbG9yIHRoZSBwb2ludHMgYnkgdGhlIGVzdGFibGlzaG1lbnQgdHlwZS4gKk5vdGUqOiB0aGUgbG9uZ2l0dWRlIGlzIHBsb3R0ZWQgb24gdGhlIHgtYXhpcyBhbmQgdGhlIGxhdGl0dWRlIG9uIHRoZSB5LWF4aXMuCgojIyBEcmF3aW5nIENvbmNsdXNpb25zCgrwn5qnCkluIGNvbmNsdXNpb24sIGRvIERlbm55J3MgcmVzdGF1cmFudHMgYW5kIExhIFF1aW50YSBtb3RlbHMgYXBwZWFyLCB2aXN1YWxseSwgdG8gYmUgY28tbG9jYXRlZD8KCk5vdGU6IHRoZSBob21ld29yayBmb3IgdGhpcyB3ZWVrIGNvbmNsdWRlcyB0aGlzIGFuYWx5c2lzLgo=