R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

#---------------Lectura de base de datos original----------------------------
restaurantes_df <- read.csv("E:/Computo cientifico/Proyecto Parcial 1/Datafiniti_Fast_Food_Restaurants.csv/Datafiniti_Fast_Food_Restaurants.csv", 
                            stringsAsFactors = FALSE, fileEncoding = "UTF-8")

#Hay ciertas descripciones de categorias dentro de la base de datos (df) que realmente
#son la misma, sólo que escrita con ciertas diferencias, vamos a homologar esas
#secciones de la categoria

restaurantes_df$categories <- restaurantes_df$categories %>%
  replace(which(restaurantes_df$categories %in% c("Fast Food Restaurant", "Fast Food Restaurants", "Fast food restaurants")), "Fast Food")

cat("Los campos de la base de datos básica son:", colnames(restaurantes_df),".\nDe la cual nuestro enfoque será primordialmente en la ubicaión geográfica, la ciudad, tipo de restaurante y nombre de la franquicia correspondiente.")
## Los campos de la base de datos básica son: id dateAdded dateUpdated address categories city country keys latitude longitude name postalCode province sourceURLs websites .
## De la cual nuestro enfoque será primordialmente en la ubicaión geográfica, la ciudad, tipo de restaurante y nombre de la franquicia correspondiente.
restaurantes_df<-restaurantes_df %>% select(!c("id","dateAdded","dateUpdated","keys","sourceURLs","websites"))
summary(restaurantes_df)
##    address           categories            city             country         
##  Length:10000       Length:10000       Length:10000       Length:10000      
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##     latitude       longitude           name            postalCode       
##  Min.   :19.50   Min.   :-159.38   Length:10000       Length:10000      
##  1st Qu.:33.77   1st Qu.:-102.89   Class :character   Class :character  
##  Median :37.71   Median : -87.95   Mode  :character   Mode  :character  
##  Mean   :37.34   Mean   : -93.11                                        
##  3rd Qu.:41.14   3rd Qu.: -81.45                                        
##  Max.   :64.84   Max.   : -67.46                                        
##    province        
##  Length:10000      
##  Class :character  
##  Mode  :character  
##                    
##                    
## 
cat("Dentro de la base de datos tenemos un total de",length(unique(restaurantes_df$name)),"diferentes franquicias.")
## Dentro de la base de datos tenemos un total de 571 diferentes franquicias.
#En el df los estados (province) estan definidos por su forma acortada de "NY","CA"
#sin embargo, dentro de la paqueteria tidycensus, las df vienen usualmente con el
#estado definido por su valor completo "New York", "California"...
state_map <- data.frame(
  state_abbreviation=c(
    "AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "FL", "GA", "HI", "ID", 
    "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD", "MA", "MI", "MN", "MS", 
    "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "OH", "OK", 
    "OR", "PA", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VA", "WA", "WV", 
    "WI", "WY"
  ),
  state_full_names =c(
    "Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", 
    "Delaware", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", 
    "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", 
    "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", 
    "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", 
    "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", 
    "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", 
    "West Virginia", "Wisconsin", "Wyoming"
  )
)
#Agregar una columna con el valor correspondiente del estado.
#Usaremos la función grepl, ayuda a identificar si en dos vectores hay strings 
#iguales. Aunque no sea el string completo, pueden ser partes parciales de string
restaurantes_df$state<-NA
for (i in seq.default(1,nrow(restaurantes_df))){
  r=which(grepl(restaurantes_df$province[i], state_map$state_abbreviation))
  if (r>0){
    restaurantes_df$state[i]=state_map$state_full_names[r]
  } 
  else {}
}
#Funcion de moda catefórica
moda <- function(x) {
  uniqx <- unique(x)
  uniqx[which.max(tabulate(match(x, uniqx)))]
}

cat("La ciudad en Estados Unidos con la mayor cantidad de restaurantes es",moda(restaurantes_df$city)," con un total de",sum(restaurantes_df$city==moda(restaurantes_df$city))," restaurantes.")
## La ciudad en Estados Unidos con la mayor cantidad de restaurantes es Houston  con un total de 107  restaurantes.
#-----------------restaurantes_por_ciudad-----------------------
restaurantes_por_ciudad <- restaurantes_df %>%
  group_by(city) %>%
  summarise(Number_of_restaurants = n()) %>%
  arrange(desc(Number_of_restaurants))
cat("Las ciudades con cantidad más alta de establecimientos:'n")
## Las ciudades con cantidad más alta de establecimientos:'n
head(restaurantes_por_ciudad, 15)
## # A tibble: 15 × 2
##    city         Number_of_restaurants
##    <chr>                        <int>
##  1 Houston                        107
##  2 Las Vegas                       82
##  3 Phoenix                         78
##  4 Columbus                        72
##  5 Dallas                          66
##  6 Orlando                         65
##  7 Los Angeles                     64
##  8 Miami                           62
##  9 Chicago                         57
## 10 San Antonio                     54
## 11 Philadelphia                    53
## 12 San Diego                       49
## 13 Louisville                      48
## 14 Cleveland                       47
## 15 Atlanta                         44
restaurantes_por_ciudad_plot<-ggplot(head(restaurantes_por_ciudad, 20), aes(x = reorder(city, -Number_of_restaurants), y = Number_of_restaurants)) +
  geom_bar(stat = "identity", fill = "skyblue") +
  labs(title = "Ciudades con más restaurantes", x = "Ciudad", y = "Número de restaurantes") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
restaurantes_por_ciudad_plot

write.csv(head(restaurantes_por_ciudad, 15), "E:/Computo cientifico/Proyecto Parcial 1/Codigos y presentacion/restaurantes_por_ciudad.csv", row.names = TRUE)
ggsave("E:/Computo cientifico/Proyecto Parcial 1/Codigos y presentacion/restaurantes_por_ciudad_plot.png", plot = restaurantes_por_ciudad_plot, width = 8, height = 6, dpi = 300)
#-----------------restaurantes_por_categoria-----------------------
restaurantes_por_categoria <- restaurantes_df %>%
  group_by(categories) %>%
  summarise(Categories = n()) %>%
  arrange(desc(Categories))
cat("Categorías de restaurantes de comida más populares:'n")
## Categorías de restaurantes de comida más populares:'n
head(restaurantes_por_categoria,10)
## # A tibble: 10 × 2
##    categories                                                    Categories
##    <chr>                                                              <int>
##  1 Fast Food                                                           8799
##  2 Fast Food Restaurant and Burger Joint                                260
##  3 Fast Food Restaurant and Mexican Restaurant                          132
##  4 Fast Food Restaurant, American Restaurant, and Sandwich Place        101
##  5 Fast Food Restaurant, Sandwich Place, and American Restaurant         65
##  6 Sandwich Place and Fast Food Restaurant                               35
##  7 Fast Food Restaurant and American Restaurant                          29
##  8 American Restaurant and Fast Food Restaurant                          22
##  9 Ice Cream Shop and Fast Food Restaurant                               19
## 10 Burger Joint, Fast Food Restaurant, and American Restaurant           16
restaurantes_por_categoria_plot<-ggplot(head(restaurantes_por_categoria,5), aes(x = reorder(categories, -Categories), y = Categories)) +
  geom_bar(stat = "identity", fill = "pink") +
  labs(title = "Categorías más populares", x = "Categoria", y = "Número de restaurantes") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
restaurantes_por_categoria_plot

write.csv(head(restaurantes_por_categoria,10), "E:/Computo cientifico/Proyecto Parcial 1/Codigos y presentacion/restaurantes_por_categoria.csv", row.names = TRUE)
ggsave("E:/Computo cientifico/Proyecto Parcial 1/Codigos y presentacion/restaurantes_por_categoria_plot.png", plot = restaurantes_por_categoria_plot, width = 8, height = 6, dpi = 300)
#-----------------restaurantes_por_estado-----------------------
restaurantes_df$state<-as.factor(restaurantes_df$state)
restaurantes_por_estado <- restaurantes_df %>%
  group_by(state) %>%
  summarise(Number = n()) %>%
  arrange(desc(Number))
cat("Estados con la mayor cantidad de restaurantes: \n")
## Estados con la mayor cantidad de restaurantes:
head(restaurantes_por_estado,15)
## # A tibble: 15 × 2
##    state          Number
##    <fct>           <int>
##  1 California       1201
##  2 Texas             811
##  3 Florida           621
##  4 Ohio              522
##  5 Georgia           420
##  6 Illinois          405
##  7 Pennsylvania      383
##  8 Michigan          374
##  9 New York          352
## 10 Arizona           330
## 11 Tennessee         302
## 12 North Carolina    295
## 13 Indiana           254
## 14 Virginia          253
## 15 Massachusetts     205
restaurantes_por_estado_plot<-ggplot(head(restaurantes_por_estado,10), aes(x = reorder(state,-Number), y = Number)) +
  geom_bar(stat = "identity", fill = "lightblue") +
  labs(title = "Restaurantes por estado", x = "Categoria", y = "Número de restaurantes") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
restaurantes_por_estado_plot

write.csv(head(restaurantes_por_estado,15), "E:/Computo cientifico/Proyecto Parcial 1/Codigos y presentacion/restaurantes_por_estado.csv", row.names = TRUE)
ggsave("E:/Computo cientifico/Proyecto Parcial 1/Codigos y presentacion/restaurantes_por_estado_plot.png", plot = restaurantes_por_estado_plot, width = 8, height = 6, dpi = 300)
#-----------------restaurantes_por_franquicia-----------------------
restaurantes_por_franquicia<-restaurantes_df %>% group_by(name) %>% 
  summarise(Quantity=n()) %>% arrange(desc(Quantity))
cat("Franquicias más populares en EU: \n")
## Franquicias más populares en EU:
head(restaurantes_por_franquicia,15)
## # A tibble: 15 × 2
##    name            Quantity
##    <chr>              <int>
##  1 McDonald's          1898
##  2 Taco Bell           1032
##  3 Burger King          833
##  4 Subway               776
##  5 Arby's               663
##  6 Wendy's              628
##  7 Jack in the Box      330
##  8 Pizza Hut            230
##  9 Dairy Queen          218
## 10 Domino's Pizza       215
## 11 Chick-fil-A          206
## 12 KFC                  162
## 13 SONIC Drive In       125
## 14 Jimmy John's         119
## 15 Carl's Jr.           112
restaurantes_por_franquicia_plot<-ggplot(head(restaurantes_por_franquicia,10), aes(x = reorder(name,-Quantity), y = Quantity, fill=name)) +
  geom_col(position=) +
  scale_fill_tableau("Miller Stone") +
  labs(title = "Franquicias más populares en EU", x = "Franquicia", y = "Número de restaurantes") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
restaurantes_por_franquicia_plot

write.csv(head(restaurantes_por_franquicia,15), "E:/Computo cientifico/Proyecto Parcial 1/Codigos y presentacion/restaurantes_por_franquicia.csv", row.names = TRUE)
ggsave("E:/Computo cientifico/Proyecto Parcial 1/Codigos y presentacion/restaurantes_por_franquicia_plot.png", plot = restaurantes_por_franquicia_plot, width = 8, height = 6, dpi = 300)
#-----------------restaurantes_por_franquicia_ciudad-----------------------
restaurantes_por_franquicia_ciudad<-restaurantes_df %>% group_by(name,city) %>% 
  summarise(Quantity=n()) %>% arrange(desc(Quantity))
## `summarise()` has grouped output by 'name'. You can override using the
## `.groups` argument.
cat("Franquicias más populares en EU por franquicia y ciudad: \n")
## Franquicias más populares en EU por franquicia y ciudad:
head(restaurantes_por_franquicia_ciudad,15)
## # A tibble: 15 × 3
## # Groups:   name [4]
##    name            city          Quantity
##    <chr>           <chr>            <int>
##  1 McDonald's      Houston             27
##  2 Jack in the Box Houston             26
##  3 McDonald's      Las Vegas           19
##  4 McDonald's      Orlando             18
##  5 McDonald's      Louisville          17
##  6 McDonald's      Miami               16
##  7 Jack in the Box Los Angeles         15
##  8 Taco Bell       Columbus            15
##  9 McDonald's      Charlotte           13
## 10 McDonald's      Phoenix             13
## 11 Burger King     Los Angeles         12
## 12 Jack in the Box Dallas              12
## 13 McDonald's      Columbus            12
## 14 McDonald's      Minneapolis         12
## 15 McDonald's      Oklahoma City       12
restaurantes_por_franquicia_ciudad_plot<-ggplot(head(restaurantes_por_franquicia_ciudad,15), aes(x = reorder(name,-Quantity), y = Quantity, fill=city)) +
  geom_col(position=) +
  scale_fill_tableau("Tableau 20") +
  labs(title = "Franquicias más populares en EU por franquicia y ciudad", x = "Franquicia", y = "Número de restaurantes") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
restaurantes_por_franquicia_ciudad_plot

write.csv(head(restaurantes_por_franquicia_ciudad,15), "E:/Computo cientifico/Proyecto Parcial 1/Codigos y presentacion/restaurantes_por_franquicia_ciudad.csv", row.names = TRUE)
ggsave("E:/Computo cientifico/Proyecto Parcial 1/Codigos y presentacion/restaurantes_por_franquicia_ciudad_plot.png", plot = restaurantes_por_franquicia_ciudad_plot, width = 8, height = 6, dpi = 300)


#---------------Análisis inicial variables economicas---------------------

# Datos del ingreso medio en E.U. por ciudad al igual que indices de pobreza
#Análisis con datos extraídos desde la base de datos de EU, se necesita un API de acceso
income_data <- get_acs(
  geography = "place",  # "place" refers to cities
  variables = c("B19013_001", "B17001_002"),  
  # B19013_001 es el nombre para la consulta de ingreso medio, B17001_002 es la tasa de pobreza
  year = 2021,  # Specify the year
  survey = "acs5",  # 5-year ACS data
  output = "wide"   # Wide format for easier viewing
)
## Getting data from the 2017-2021 5-year ACS
## Warning: • You have not set a Census API key. Users without a key are limited to 500
## queries per day and may experience performance limitations.
## ℹ For best results, get a Census API key at
## http://api.census.gov/data/key_signup.html and then supply the key to the
## `census_api_key()` function to use it throughout your tidycensus session.
## This warning is displayed once per session.
#Guardaremos esta base de datos en un cvs, ya que sin un API de autorizacion,
#Sólo se tiene una cantidad limitada de consultas diarias de los censos de EUA
write.csv(income_data, "E:/Computo cientifico/Proyecto Parcial 1/Codigos y presentacion/income_data_US.csv", row.names = TRUE)
incomedata_medianincome_arranged<-income_data %>% arrange(desc(B19013_001E))
incomedata_medianincome_arranged
## # A tibble: 31,908 × 6
##    GEOID   NAME                  B19013_001E B19013_001M B17001_002E B17001_002M
##    <chr>   <chr>                       <dbl>       <dbl>       <dbl>       <dbl>
##  1 0133544 Hatton CDP, Alabama        250001          NA           0          13
##  2 0600618 Alamo CDP, California      250001          NA         487         275
##  3 0603092 Atherton town, Calif…      250001          NA         225         101
##  4 0610301 Camino Tassajara CDP…      250001          NA         457         338
##  5 0622587 Emerald Lake Hills C…      250001          NA          54          52
##  6 0630028 Glen Ellen CDP, Cali…      250001          NA         299         378
##  7 0633518 Hidden Hills city, C…      250001          NA         185         155
##  8 0633632 Highlands CDP, Calif…      250001          NA         131          89
##  9 0633798 Hillsborough town, C…      250001          NA         269         144
## 10 0639735 Lake Sherwood CDP, C…      250001          NA          45          41
## # ℹ 31,898 more rows
mean_medianincome_US<-mean(income_data$B19013_001E, na.rm=TRUE)
max_medianincome_US<-max(income_data$B19013_001E, na.rm=TRUE)
min_medianincome_US<-min(income_data$B19013_001E, na.rm=TRUE)

cat("En Estados Unidos la ciudad con el ingreso medio más alto es de",max_medianincome_US,"USD, la ciudad con el ingreso medio más bajo es de",min_medianincome_US,"USD y la media de ingreso a través del pais es de",mean_medianincome_US," USD.")
## En Estados Unidos la ciudad con el ingreso medio más alto es de 250001 USD, la ciudad con el ingreso medio más bajo es de 2499 USD y la media de ingreso a través del pais es de 65046.65  USD.
cat("Estos datos con una desviacion estandar en USD de ",sd(income_data$B19013_001E,na.rm=TRUE))
## Estos datos con una desviacion estandar en USD de  33756.88
#Adjuntar datos de las ciudades y sus ingresos medios, con la base de datos 
#de restaurantes por ciudad

restaurantes_df$Median_income<-NA
restaurantes_df$Poberty_rate<-NA
r=0
#Utilizar funcion de grepl para asociar la ciudad dentro de nuestro df, con el 
#nombre de la ciudad dentro del income data de EU, a su vez, también asociar el
#estado de nuestro df con el nombre del estado del income data de EU.
#Asignar el valor correspondiente de su median_income y su poverty_rate a nuestra df

for (i in seq.default(1,nrow(restaurantes_df))){
  r=which(grepl(restaurantes_df$city[i], income_data$NAME)&grepl(restaurantes_df$state[i], income_data$NAME))
     restaurantes_df$Median_income[i]=income_data$B19013_001E[r[1]]
     restaurantes_df$Poberty_rate[i]=income_data$B17001_002E[r[1]]
}

write.csv(restaurantes_df, "E:/Computo cientifico/Proyecto Parcial 1/Codigos y presentacion/datafini_fastfood_restaurants_incomedata.csv", row.names = TRUE)

#---------------Análisis economico inicial restaurantes df----------------------
restaurantes_median_income_df<-read.csv("E:/Computo cientifico/Proyecto Parcial 1/Codigos y presentacion/datafini_fastfood_restaurants_incomedata.csv", 
                                        stringsAsFactors = FALSE, fileEncoding = "UTF-8")
restaurantes_por_ciudad_median_income<-restaurantes_median_income_df %>% group_by(city,Median_income) %>% 
  summarise(Number=n(),Income_median=mean(Median_income,na.rm=TRUE)) %>% arrange(desc(Number))
## `summarise()` has grouped output by 'city'. You can override using the
## `.groups` argument.
head(restaurantes_por_ciudad_median_income,20)
## # A tibble: 20 × 4
## # Groups:   city [20]
##    city          Median_income Number Income_median
##    <chr>                 <int>  <int>         <dbl>
##  1 Houston               56019    106         56019
##  2 Las Vegas             61356     81         61356
##  3 Phoenix               64927     77         64927
##  4 Orlando               58968     65         58968
##  5 Los Angeles           54629     64         54629
##  6 Dallas                58231     61         58231
##  7 Miami                 47860     60         47860
##  8 Chicago               65781     57         65781
##  9 Columbus              58575     56         58575
## 10 San Antonio           55084     54         55084
## 11 Philadelphia          51285     53         51285
## 12 San Diego             83720     47         83720
## 13 Atlanta               69164     42         69164
## 14 Denver                78177     42         78177
## 15 Louisville            58357     42         58357
## 16 Tucson               101821     41        101821
## 17 Brooklyn                 NA     40           NaN
## 18 Indianapolis          54321     40         54321
## 19 Oklahoma City         59679     40         59679
## 20 Minneapolis           70099     38         70099
mean_medianincome_top20cities<-mean(head(restaurantes_por_ciudad_median_income$Median_income,20),na.rm=TRUE)
max_medianincome_top20cities<-max(head(restaurantes_por_ciudad_median_income$Median_income,20),na.rm=TRUE)
min_medianincome_top20cities<-min(head(restaurantes_por_ciudad_median_income$Median_income,20),na.rm=TRUE)


cat("En el top 20 de ciudades con más restaurantes de Fast Food el de ingreso medio mas alto es de",max_medianincome_top20cities,"USD, la ciudad con el ingreso medio más bajo es de",min_medianincome_top20cities,"USD y la media de ingreso a través estas ciudades es de",mean_medianincome_top20cities," USD.")
## En el top 20 de ciudades con más restaurantes de Fast Food el de ingreso medio mas alto es de 101821 USD, la ciudad con el ingreso medio más bajo es de 47860 USD y la media de ingreso a través estas ciudades es de 63581.74  USD.
cat("Estos datos con una desviacion estandar en USD de ",sd(head(restaurantes_por_ciudad_median_income$Median_income,20),na.rm=TRUE))
## Estos datos con una desviacion estandar en USD de  12860.93