## [1] "Using direct authentication"
### Leo la base de nombres y apodos
apodos <- read_delim("C:/Users/20389047504/Desktop/BACKUP/Lucio/Proyecto 2023/Influenciadores/Match Nombres/Hipocoristicos (1).csv", delim = ";")

apodos[is.na(apodos)] <- "NINGUNNOMBRE"

### Vamos a leer la base del listado de nombres
nombres <- read_csv("C:/Users/20389047504/Desktop/BACKUP/Lucio/Proyecto 2023/Influenciadores/Match Nombres/Listado nombres (1).csv")
### Filtro los que tienen el sexo femenino solamente
nombres_hombres <- nombres[nombres$sexo=="M",]
nombres_hombres <- nombres_hombres[nchar(nombres_hombres$nombre)>2,]
nombres <- nombres[nombres$sexo=="F",]
nombres <- nombres[nchar(nombres$nombre)>2,]



### funcion que encuentra nombres y apodos
#### En primer lugar vamos a buscar las abreviaciones dentro del "Name", "Screen-Name"
filtro_nombres <- function(path){
  base <- path
  base$posible_nombre <- ""

for (j in 2:ncol(apodos)){
  
  for (i in 1:nrow(apodos)){
    abrev <- grepl(paste0("\\b",apodos[i,j],"\\b"), base$name, ignore.case = T)
    
    if(sum(abrev)>0){
      base$posible_nombre[abrev] <- paste(base$posible_nombre[abrev],apodos[i,1])
    }
    
    
  }
  
}

### Una vez que encontré los apodos, vamos a trabajar en localizar los nombres

### Lo hago de a partes sino esta funcion se rompe al ser muchos 
s <- grepl(paste(nombres$nombre_match[1:2000],collapse = "|"), base$name, ignore.case = T)
s2 <- grepl(paste(nombres$nombre_match[2001:4500],collapse = "|"), base$name, ignore.case = T)
s3 <- grepl(paste(nombres$nombre_match[4501:6799],collapse = "|"), base$name, ignore.case = T)
### Encuentro en que usuarios se encontro un nombre al menos
base_s <- base[s,]
base_s2 <- base[s2,]
base_s3 <- base[s3,]
### Junto las 3 bases y saco duplicados
df <- bind_rows(base_s,base_s2,base_s3)
df_names <- df[!duplicated(df),]
# Tengo bajo el "NAME" a cuántos usuarios mujeres encontro

### Hacemos el mismo ejercicio para los screen_names
s <- grepl(paste(nombres$nombre_match[1:2000],collapse = "|"), base$screen_name, ignore.case = T)
s2 <- grepl(paste(nombres$nombre_match[2001:4500],collapse = "|"), base$screen_name, ignore.case = T)
s3 <- grepl(paste(nombres$nombre_match[4501:6799],collapse = "|"), base$screen_name, ignore.case = T)
base_s <- base[s,]
base_s2 <- base[s2,]
base_s3 <- base[s3,]
df <- bind_rows(base_s,base_s2,base_s3)
df_screen_names <- df[!duplicated(df),]

### Vamos a aplicar el filtro de nombres en la columna de posible nombre que encontro mediante el apodo
apod1 <- grepl(paste(nombres$nombre_match[1:2000],collapse = "|"), base$posible_nombre, ignore.case = T)
apod2 <- grepl(paste(nombres$nombre_match[2001:4500],collapse = "|"), base$posible_nombre, ignore.case = T)
apod3 <- grepl(paste(nombres$nombre_match[4501:6799],collapse = "|"), base$posible_nombre, ignore.case = T)
base_apod1 <- base[apod1,]
base_apod2 <- base[apod2,]
base_apod3 <- base[apod3,]
df_apod <- bind_rows(base_apod1,base_apod2,base_apod3)
df_apods <- df_apod[!duplicated(df_apod),]


### Junto las tres bases
df_total_ <- bind_rows(df_names,df_screen_names,df_apods)
return(df_total_)
}
filtro_hombres <- function(path){
  base <- path
  
  ### Lo hago de a partes sino esta funci昼㸳n se rompe al ser muchos 
  s <- grepl(paste(nombres_hombres$nombre_match[1:2000],collapse = "|"), base$name, ignore.case = T)
  s2 <- grepl(paste(nombres_hombres$nombre_match[2001:4500],collapse = "|"), base$name, ignore.case = T)
  s3 <- grepl(paste(nombres_hombres$nombre_match[4501:6799],collapse = "|"), base$name, ignore.case = T)
  ### Encuentro en que usuarios se encontr昼㸳 un nombre al menos
  base_s <- base[s,]
  base_s2 <- base[s2,]
  base_s3 <- base[s3,]
  ### Junto las 3 bases y saco duplicados
  df <- bind_rows(base_s,base_s2,base_s3)
  df_names <- df[!duplicated(df),]
  # Tengo bajo el "NAME" a cu攼㸱ntos usuarios mujeres encontr昼㸳
  
  ### Hacemos el mismo ejercicio para los screen_names
  s <- grepl(paste(nombres_hombres$nombre_match[1:2000],collapse = "|"), base$screen_name, ignore.case = T)
  s2 <- grepl(paste(nombres_hombres$nombre_match[2001:4500],collapse = "|"), base$screen_name, ignore.case = T)
  s3 <- grepl(paste(nombres_hombres$nombre_match[4501:6799],collapse = "|"), base$screen_name, ignore.case = T)
  base_s <- base[s,]
  base_s2 <- base[s2,]
  base_s3 <- base[s3,]
  df <- bind_rows(base_s,base_s2,base_s3)
  df_screen_names <- df[!duplicated(df),]
  
  ### Junto las  bases
  df_total_ <- bind_rows(df_names,df_screen_names)
  return(df_total_)
}

head(nombres,5)
## # A tibble: 5 x 3
##   nombre  sexo  nombre_match   
##   <chr>   <chr> <chr>          
## 1 Abelina F     "\\bAbelina\\b"
## 2 Abi     F     "\\bAbi\\b"    
## 3 Abigail F     "\\bAbigail\\b"
## 4 Abril   F     "\\bAbril\\b"  
## 5 Ada     F     "\\bAda\\b"
head(apodos,5)
## # A tibble: 5 x 19
##   nombre abreviacion1 abreviacion2 abreviacion3 abreviacion4 abreviacion5
##   <chr>  <chr>        <chr>        <chr>        <chr>        <chr>       
## 1 "Adal~ adal         Dalber       Beto         Betito       NINGUNNOMBRE
## 2 "Adol~ Ado          adolf        Fito         NINGUNNOMBRE NINGUNNOMBRE
## 3 "Adri~ Adri         Adria        Adriano      NINGUNNOMBRE NINGUNNOMBRE
## 4 "Agus~ Agu          Agus         Guti         Cucho        TantIn      
## 5 "Albe~ Beto         Berto        BertIn       Al           Tito        
## # ... with 13 more variables: abreviacion6 <chr>, abreviacion7 <chr>,
## #   abreviacion8 <chr>, abreviacion9 <chr>, abreviacion10 <chr>,
## #   abreviacion11 <chr>, abreviacion12 <chr>, abreviacion13 <chr>,
## #   abreviacion14 <chr>, abreviacion15 <chr>, abreviacion16 <chr>,
## #   abreviacion17 <chr>, abreviacion18 <chr>
### Para tener una idea de lo que contienen cada una de las bases, hacemos un head de cada uno de ellas.. Donde se nos muestra la parte superior y algunas observaciones

head(seguid_PRO)
## # A tibble: 6 x 2
##   user_id             count
##   <chr>               <int>
## 1 1000000720098209792     1
## 2 1000001110050996224     3
## 3 1000003175393517569     4
## 4 1000003309409849344     1
## 5 1000004748177805312     1
## 6 1000005486354292736     3
print("La columna user_id nos dice que usuario sigue a cuentas pro, y el count es el total de cuentas que sigue. Por ejemplo el usuario 1000000720098209792 sigue a una cuenta PRO")
## [1] "La columna user_id nos dice que usuario sigue a cuentas pro, y el count es el total de cuentas que sigue. Por ejemplo el usuario 1000000720098209792 sigue a una cuenta PRO"
head(seguid_K)
## # A tibble: 6 x 2
##   user_id             count
##   <chr>               <int>
## 1 1000000070211817472     2
## 2 1000000269135106049     1
## 3 1000001468164952064     1
## 4 1000001696406392833     3
## 5 1000004201345413120     6
## 6 1000004930747404288    36
head(kws_politica_K)
## # A tibble: 6 x 2
##   Keyword      Excluir      
##   <chr>        <chr>        
## 1 kirchnerista Excluir anti-
## 2 nestor       Excluir anti-
## 3 nestor       Excluir anti-
## 4 cristina     Excluir anti-
## 5 kirchner     Excluir anti-
## 6 peronista    Excluir anti-
### Cargo la funcion que realiza el filtro de tendencia politica por Bio y seguidores y me arregla la base de los tabs y enters
una_base_armada <- function(basesita){
  base <- basesita
  
  base$description <- as.character(base$description)
  base[is.na(base)] <- ""
  base$tag_politica_K <- ""
  
  s <- grepl("2600|270C",base$description,ignore.case = T)
  celdas_tags <- which(s, arr.ind = TRUE)
  if(length(celdas_tags)>0){
    base$tag_politica_K[celdas_tags] <- paste(base$tag_politica_K[celdas_tags],"K",sep = ",")
  }
  s <- grepl("2600|270C",base$name,ignore.case = T)
  celdas_tags <- which(s, arr.ind = TRUE)
  if(length(celdas_tags)>0){
    base$tag_politica_K[celdas_tags] <- paste(base$tag_politica_K[celdas_tags],"K",sep = ",")
  }
  
  for(i in 1:nrow(kws_politica_K)){
    
    if (i==1 | i==2| i==3| i==4| i==5| i==6| i==12 | i==28){
      s <- grepl(kws_politica_K$Keyword[i],base$description,ignore.case = T)
      not <- grepl(paste("anti",kws_politica_K$Keyword[i],"|anti ",kws_politica_K$Keyword[i],"|anti-",kws_politica_K$Keyword[i], sep=""),base$description,ignore.case = T)
      celdas_tags <- which(s, arr.ind = TRUE)
      not_celdas <- which(not, arr.ind = TRUE)
      celdas_tags <- celdas_tags[!(celdas_tags %in% not_celdas)]
      if(length(celdas_tags)>0){
        base$tag_politica_K[celdas_tags] <- paste(base$tag_politica_K[celdas_tags],"K",sep = ",")
      }
      #print(i)
    }
    if ( i==7| i==8){
      s <- grepl(kws_politica_K$Keyword[i],base$description,ignore.case = T)
      not <- grepl(paste("antiperon","|anti peron","|anti-peron", sep=""),base$description,ignore.case = T)
      celdas_tags <- which(s, arr.ind = TRUE)
      not_celdas <- which(not, arr.ind = TRUE)
      celdas_tags <- celdas_tags[!(celdas_tags %in% not_celdas)]
      if(length(celdas_tags)>0){
        base$tag_politica_K[celdas_tags] <- paste(base$tag_politica_K[celdas_tags],"K",sep = ",")
      }
      #print(i)
    }
    if(i!=1 & i!=2 & i!=3 & i!=4 & i!=5 & i!=6 & i!=7 & i!=8 & i!=12 & i!=28){
      s <- grepl(kws_politica_K$Keyword[i],base$description,ignore.case = T)
      celdas_tags <- which(s, arr.ind = TRUE)
      if(length(celdas_tags)>0){
        base$tag_politica_K[celdas_tags] <- paste(base$tag_politica_K[celdas_tags],"K",sep = ",")
        
      }
      #print(i)
    }
    
  }
  
  base <- base[base$tag_politica_K=="",]
  base <- base[,1:12]
  
  
  
  #### Para ver los correntinos que siguen cuentas K .
  
  base=merge(x=base,y=seguid_K,by="user_id",all.x = T)
  
  colnames(base)[13] <- "count_cuentas_k2"
  #### Cuentas Pro
  
  base=merge(x=base,y=seguid_PRO,by="user_id",all.x = T)
  
  colnames(base)[14] <- "count_cuentas_pro"
  
  base[is.na(base)] <- 0
  
  base$tendencia_politica <- "Sin Tendencia Politica"
  for (i in 1:nrow(base)){
    
    if (base$count_cuentas_k2[i]>2 & base$count_cuentas_pro[i]==0){
      base$tendencia_politica[i] <- "K"
    }
    
    if (base$count_cuentas_pro[i]>2 & base$count_cuentas_k2[i]==0){
      base$tendencia_politica[i] <- "PRO"
    }
  }
  
  base <- base[base$tendencia_politica!="K",]
  base <- base[,1:12]
  
  
  base$description=gsub("\r\n","",base$description)
  base$description=gsub("\r\n","",base$description)
  base$description=gsub("\r\n","",base$description)
  base$description=gsub("\r\n","",base$description)
  base$description=gsub("\r\n","",base$description)
  
  base$description=gsub("\n","",base$description)
  base$description=gsub("\n","",base$description)
  base$description=gsub("\n","",base$description)
  base$description=gsub("\n","",base$description)
  base$description=gsub("\n","",base$description)

  base$description=gsub("\t","",base$description)
  base$description=gsub("\t","",base$description)
  base$description=gsub("\t","",base$description)
  base$description=gsub("\t","",base$description)
  
  base$description=gsub("\r\n","",base$description)
  base$description=gsub("\r\n","",base$description)
  base$description=gsub("\r\n","",base$description)
  base$description=gsub("\r\n","",base$description)
  base$description=gsub("\r\n","",base$description)
  
  base$description=gsub("\n","",base$description)
  base$description=gsub("\n","",base$description)
  base$description=gsub("\n","",base$description)
  base$description=gsub("\n","",base$description)
  base$description=gsub("\n","",base$description)
  
  base$description=gsub("\t","",base$description)
  base$description=gsub("\t","",base$description)
  base$description=gsub("\t","",base$description)
  base$description=gsub("\t","",base$description)
  
  
  base$name=gsub("\r\n","",base$name)
  base$name=gsub("\r\n","",base$name)
  base$name=gsub("\r\n","",base$name)
  base$name=gsub("\r\n","",base$name)
  base$name=gsub("\r\n","",base$name)
  
  base$name=gsub("\n","",base$name)
  base$name=gsub("\n","",base$name)
  base$name=gsub("\n","",base$name)
  base$name=gsub("\n","",base$name)
  base$name=gsub("\n","",base$name)
  
  base$name=gsub("\t","",base$name)
  base$name=gsub("\t","",base$name)
  base$name=gsub("\t","",base$name)
  base$name=gsub("\t","",base$name)
  
  
  base$location=gsub("\r\n","",base$location)
  base$location=gsub("\r\n","",base$location)
  base$location=gsub("\r\n","",base$location)
  base$location=gsub("\r\n","",base$location)
  base$location=gsub("\r\n","",base$location)
  
  base$location=gsub("\n","",base$location)
  base$location=gsub("\n","",base$location)
  base$location=gsub("\n","",base$location)
  base$location=gsub("\n","",base$location)
  base$location=gsub("\n","",base$location)
  
  base$location=gsub("\t","",base$location)
  base$location=gsub("\t","",base$location)
  base$location=gsub("\t","",base$location)
  base$location=gsub("\t","",base$location)
  
  
  base$screen_name=gsub("\r\n","",base$screen_name)
  base$screen_name=gsub("\r\n","",base$screen_name)
  base$screen_name=gsub("\r\n","",base$screen_name)
  base$screen_name=gsub("\r\n","",base$screen_name)
  base$screen_name=gsub("\r\n","",base$screen_name)
  
  base$screen_name=gsub("\n","",base$screen_name)
  base$screen_name=gsub("\n","",base$screen_name)
  base$screen_name=gsub("\n","",base$screen_name)
  base$screen_name=gsub("\n","",base$screen_name)
  base$screen_name=gsub("\n","",base$screen_name)
  
  base$screen_name=gsub("\t","",base$screen_name)
  base$screen_name=gsub("\t","",base$screen_name)
  base$screen_name=gsub("\t","",base$screen_name)
  base$screen_name=gsub("\t","",base$screen_name)
  return(base)
}

En un primer paso se descargo desde SySomos personas de Cordoba con el piso de followers de la localidad con menor cantidad (San Justo – 1235). Se obtuvo alrededor de 2.5 millones de contenidos.

files <- list.files("C:/Users/20389047504/Desktop/BACKUP/Lucio/Proyecto 2023/Influenciadores/Cordoba/Archivo")
prueba <- data.frame()
prueba2 <- data.frame()
for (i in 1:length(files)){
  
  file <- paste0("C:/Users/20389047504/Desktop/BACKUP/Lucio/Proyecto 2023/Influenciadores/Cordoba/Archivo/",files[i])
  x_utf16 <- readBin(file, "raw", n = file.size(file)) ## Leo las lineas del csv
  x_utf8 <- iconv(list(x_utf16), from = "UCS-2LE", to = "UTF-8", toRaw = TRUE)[[1]] # Transformo los caracteres de ucs-2 a UTF-8
  cordoba2 <- readr::read_delim(x_utf8,delim="\t", col_types = cols(
    `Twitter Id` = col_character()
  )) ## Voy leyendo archivo a archivo
  ## Lo hago de esta forma porque desde SySomos se descargan con codificacion UCS2-LE
  # Por lo tanto si se lee de la manera tradicional con read_delim se rompe, ya que lee los archivos en codificacion UTF-8
  
  prueba <- bind_rows(prueba,cordoba2) ## Voy uniendo los archivos que va leyendo en uno común
  
}
print(paste("Cantidad de contenidos",nrow(prueba)))
## [1] "Cantidad de contenidos 2434188"
head(prueba,5)
##                  Date Headline
## 1 11-Aug-2020 01:01PM       NA
## 2 11-Aug-2020 01:01PM       NA
## 3 11-Aug-2020 01:01PM       NA
## 4 11-Aug-2020 01:00PM       NA
## 5 11-Aug-2020 01:00PM       NA
##                                                                URL Opening Text
## 1          https://twitter.com/jhop6s/statuses/1293215958476050432           NA
## 2     https://twitter.com/Turfpremium/statuses/1293215945440268288           NA
## 3    https://twitter.com/nqn_noticias/statuses/1293215860103020546           NA
## 4     https://twitter.com/debisolcarp/statuses/1293215793447084038           NA
## 5 https://twitter.com/ComunidadCamion/statuses/1293215678300934145           NA
##                                                                                                                                          Hit Sentence
## 1 Se construirá un concierto con una capacidad de 42k por la demanda que tienen los concierto de bangtan, wow ifisskoedb mis varones merecen lo mejor
## 2                               España comunica 1.418 casos de coronavirus en un día y 64 fallecidos en la última semana - RT https://t.co/m5WSHf3tv3
## 3                                         Importante registro de un huillín en el Río Limay mediante el uso de cámaras trampa https://t.co/WpduPMLgGJ
## 4                                              Ustedes también le echan un poquito de agua a la cajita de puré de tomate cuando se está por terminar?
## 5                        #SeguridadVial #Vialidad #Precaución #RutasBonaerenses MInfraPBA #QuedateEnCasa #CuidarteEsCuidarnos https://t.co/PXuOIbLgQn
##    Source       Influencer   Country Subregion            Language Reach
## 1 Twitter          @jhop6s Argentina        NA Spanish / Castilian  3109
## 2 Twitter     @turfpremium Argentina        NA Spanish / Castilian  3458
## 3 Twitter    @nqn_noticias Argentina        NA Spanish / Castilian  3166
## 4 Twitter     @debisolcarp Argentina        NA Spanish / Castilian  3304
## 5 Twitter @comunidadcamion Argentina        NA Spanish / Castilian  3302
##   Desktop Reach Mobile Reach Twitter Social Echo Facebook Social Echo
## 1             0            0                  NA                   NA
## 2             0            0                  NA                   NA
## 3             0            0                  NA                   NA
## 4             0            0                  NA                   NA
## 5             0            0                  NA                   NA
##   Reddit Social Echo National Viewership Engagement   AVE Sentiment
## 1                 NA                   0         NA 28.76  Positive
## 2                 NA                   0         NA 31.99   Neutral
## 3                 NA                   0         NA 29.29  Negative
## 4                 NA                   0         NA 30.56  Negative
## 5                 NA                   0         NA 30.54   Neutral
##                                 Key Phrases          Input Name Keywords
## 1                      concierto de bangtan Adhoc Search Export       NA
## 2                      casos de coronavirus Adhoc Search Export       NA
## 3 Importante registro,uso de cámaras trampa Adhoc Search Export       NA
## 4  cajita de puré de tomate,poquito de agua Adhoc Search Export       NA
## 5                                      <NA> Adhoc Search Export       NA
##   Twitter Authority              Tweet Id          Twitter Id
## 1                 7 '1293215958476050432'          4847311202
## 2                 7 '1293215945440268288'          1024664072
## 3                 7 '1293215860103020546'  816459143401918464
## 4                 7 '1293215793447084038' 1206960632463011847
## 5                 7 '1293215678300934145'          1107733136
##        Twitter Client
## 1  Twitter for iPhone
## 2     Twitter Web App
## 3         NoticiasNqn
## 4 Twitter for Android
## 5            Fabricas
##                                                                                                  Twitter Screen Name
## 1                                                     <U+0001D42C><U+0001D42D><U+0001D41E><U+0001D41F><U+0001D41F> 7
## 2                                                                                                       Turf Premium
## 3                                                                                                 NoticiasNQN.com.ar
## 4 <U+0001F133><U+0001F134><U+0001F131><U+0001F138> <U+0001F142><U+0001F13E><U+0001F13B> <U+26AA><U+0001F534><U+26AA>
## 5                                                                                 Comunidad Camion #YoTeCuidoMeCuido
##              Twitter User Profile Url
## 1          https://twitter.com/jhop6s
## 2     https://twitter.com/Turfpremium
## 3    https://twitter.com/nqn_noticias
## 4     https://twitter.com/debisolcarp
## 5 https://twitter.com/ComunidadCamion
##                                                                                                                                                                                                                                                                                                                                                            Twitter Bio
## 1                                                                                                                                                                                                      <U+2726> : <U+CCAD><U+C0C9> <U+060C> <U+CC9C><U+AD6D> <U+060C> <U+AE30><U+C068> <U+2015> <U+0001D5F5><U+0001D5FC><U+0001D5EF><U+0001D5F6>. <U+0001F52D><U+2661>
## 2                                                                                                                                                                                                     Turf de Argentina, ver Resultados al instante Programas y Estadisticas Gratis\\nFacebook: https://www.facebook.com/Estadisticas-Spc-Turfpremium-553320344826873/
## 3                                                                                                                                                                                                         Noticias de #Neuquén y la región actualizado a toda hora. Facebook http://ow.ly/2vLd30bKefJ Youtube http://bit.ly/2pNyBWi #Noticias\\nredaccionnqn@gmail.com
## 4 <U+0001F17C><U+0001F174><U+0001F17D><U+0001F182><U+0001F170><U+0001F179><U+0001F174> <U+0001F173><U+0001F178><U+0001F181><U+0001F174><U+0001F172><U+0001F183><U+0001F17E>: <U+0001F17D><U+0001F17E>, <U+0001F176><U+0001F181><U+0001F170><U+0001F172><U+0001F178><U+0001F170><U+0001F182>! El mejor estado del ser humano no es estar enamorado, es estar tranquilo.
## 5                                                                                                                                                                                                                                                                                                     Del @GrpComunidad ! Transito y Camiones en Argentina y el Mundo.
##   Twitter Followers Twitter Following Document Tags Alternate Date Format Time
## 1              3109               474            NA                  <NA>   NA
## 2              3458               872            NA                  <NA>   NA
## 3              3166              1372            NA                  <NA>   NA
## 4              3304              3065            NA                  <NA>   NA
## 5              3302                57            NA                  <NA>   NA
##   State City
## 1  <NA> <NA>
## 2  <NA> <NA>
## 3  <NA> <NA>
## 4  <NA> <NA>
## 5  <NA> <NA>
cordoba <-  prueba %>% select(Influencer,`Twitter Id`) 

cordoba <- cordoba[!duplicated(cordoba$`Twitter Id`),]
cordoba_tw <- lookup_users(cordoba$`Twitter Id`, token=token1)
cordoba_tw <- select(cordoba_tw,user_id,screen_name,name,description,followers_count,friends_count,statuses_count,favourites_count,location,protected,verified,profile_expanded_url)

Se sacaron duplicados y como resultado se tuvieron 21667 usuarios únicos de los cúales se encontraron por medio de la API 21001 para tener sus “Location”.

cordoba_1 <- una_base_armada(cordoba_tw)

Realizando un filtro de tendencia politica en BIOS y seguidores se cuenta con un final de 19935 usuarios.

Se aplico un filtro de localidades y followers obteniendo:

# Voy a separar las localidades de cordoba.
#Capital
#Colon
#Rio Cuarto
#Punilla
#San Justo
punilla <- cordoba_1[grepl("punilla",cordoba_1$location,ignore.case = T),]
san_justo <- cordoba_1[grepl("san justo",cordoba_1$location,ignore.case = T),]
colon <- cordoba_1[grepl("\\bcolon\\b|colon",cordoba_1$location,ignore.case = T) & !(grepl("bs as|buenos aires|bs. as.|bs. as",cordoba_1$location,ignore.case = T)),]
rio_cuarto <- cordoba_1[grepl("rio cuarto|rio cuarto|rio cto|rio cto",cordoba_1$location,ignore.case = T),]
cordobas_capital <- cordoba_1[!(cordoba_1$user_id %in% c(punilla$user_id,san_justo$user_id,colon$user_id,rio_cuarto$user_id)),]
cordoba_solo <- cordobas_capital[cordobas_capital$location=="Cordoba|Cordoba|cordoba|cordoba"]
cordobas_capital <- cordobas_capital[grepl("cordoba, argentina|cordoba argentina|cordoba,argentina|argentina, cordoba|argentina cordoba|argentina,cordoba|cordoba, argentina|cordoba argentina|cordoba,argentina|argentina, cordoba|argentina cordoba|argentina,cordoba|cordoba- argentina|cordoba - argentina|cordoba -argentina|cordoba- argentina|cordoba - argentina|cordoba -argentina|Cordoba, Argentina|cordoba , argentina|cordoba , arg",cordobas_capital$location,ignore.case = T) | grepl("capital",cordobas_capital$location,ignore.case = T),]
cordobas_capital <- rbind(cordobas_capital,cordoba_solo)
cordobas_capital <- cordobas_capital[!(grepl("mendoza|corrientes",cordobas_capital$location,ignore.case = T)),]
cordobas_capital <- cordobas_capital[!(grepl("marull|sampacho|luque|laborde|la falda|bs as|canals|oncativo|vcp|villa carlos paz|monte ma|alberdi|cosquin|cosquin|villa maria|villa maria|ticino|pilar|la cumbre|hernando|la carlota|cruz alta|jovita|san francisco|san fco|carlos paz|la puerta|brinkmann|tancacha|manfredi|alta gracias|malagueño|bell ville|rio segundo|rio segundo|rio tercero|rio tercer|oliva",cordobas_capital$location,ignore.case = T)),]

punilla <- punilla[punilla$followers_count > 1247,] # 2
san_justo <- san_justo[san_justo$followers_count > 1234,] # 3
colon <- colon[colon$followers_count > 4502,] # 2 
rio_cuarto <- rio_cuarto[rio_cuarto$followers_count > 3199,] # 61
cordobas_capital <- cordobas_capital[cordobas_capital$followers_count > 28345,] # 104

Punilla 2

San Justo 3

Colon 2

Rio Cuarto 61

Cordoba Capital 104

A los usuarios finales se los obtiene realizando otro filtro de tendencia politica, esta vez por Tws y Retws a cuentas K y Pro, y favoritos a las mismas cuentas.

## Se realiza la siguiente funcion para cada una de las localidades en cuestion
# Se deja solamente el codigo por el hecho que tarda mucho el proceso.
#
#limpio=rio_cuarto$user_id
#final=vector()
#for (i in 1:length(limpio)){
#  perfil <- lookup_users(limpio[i])
#  if(perfil$protected==FALSE){
#    buscando_tws <- get_timeline(
#      limpio[i],
#      n=2000,
#      toke=token1
#    )
#    buscando_tws <- buscando_tws[buscando_tws$created_at > "2019-12-31",]
#    buscando_tws2 <- select(buscando_tws,is_retweet,retweet_screen_name,retweet_user_id)
#    buscando_tws2 <- buscando_tws2[buscando_tws2$is_retweet==T,]
#    retws_k <- nrow(buscando_tws2[(buscando_tws2$retweet_user_id %in% K_NO$user_id),])
#    retws_pro <- nrow(buscando_tws2[(buscando_tws2$retweet_user_id %in% PRO_NO$user_id),])
#    if(!(retws_k>2 & retws_pro==0)){
#      final <- c(final,limpio[i])
#    }
    
#  }
#  rl <- rate_limit(token1, "statuses/user_timeline")
#
#if ( rl$remaining <= 2L) {
#  Sys.sleep(888)
#}  
#


#cordobas_capital <- cordobas_capital[cordobas_capital$user_id %in% final,] ## 96
#punilla <- punilla[punilla$user_id %in% final,] ## 1
#san_justo <- san_justo[san_justo$user_id %in% final,] ## 3
#colon <- colon[colon$user_id %in% final,] ## 3
#rio_cuarto <- rio_cuarto[rio_cuarto$user_id %in% final,] ## 59

### Veo el tema de los favoritos en chubut
#mpio=rio_cuarto$user_id
#nal=vector()
#r (i in 1:length(limpio)){
#favoritos <- get_favorites(
#  limpio[i],
#  n = 200,
#  since_id = NULL,
#  max_id = NULL,
#  parse = TRUE,
#  token = NULL
#)
#favoritos <- favoritos[favoritos$created_at > "2019-12-31",]
#favoritos <- select(favoritos,user_id,favorited_by)
#favs_K <- nrow(favoritos[(favoritos$user_id %in% K_NO$user_id),])
#favs_pro <- nrow(favoritos[(favoritos$user_id %in% PRO_NO$user_id),])
#if(!(favs_K>2 & favs_pro==0)){
#  final <- c(final,limpio[i])
#}
#rl <- rate_limit(token1, "get_favorites")
### if rate limit exhausted, then wait to rate limit reset
#if ( rl$remaining == 0L) {
#  Sys.sleep(888)
#}  
#
  
#cordobas_capital <- cordobas_capital[cordobas_capital$user_id %in% final,] ## 92
#punilla <- punilla[punilla$user_id %in% final,] ## 1
#san_justo <- san_justo[san_justo$user_id %in% final,] ## 3
#colon <- colon[colon$user_id %in% final,] ## 3
#rio_cuarto <- rio_cuarto[rio_cuarto$user_id %in% final,] ## 57

Candidatos 2.0 Mujeres.

Se usa la base mencionada anteriormente, sumando a esta una base de Cordoba de usuarios que tengan entre el 1% y el 2% del total de la poblacion de followers (410K de contenidos).

cordoba <- read_csv("C:/Users/20389047504/Desktop/BACKUP/Lucio/Proyecto 2023/Influenciadores/Cordoba/Cordoba1%.csv", col_types = cols(
  twitterId = col_character()
)) ## Leo la base de cordoba que se descargo desde SySomos
print(paste("Tiene",nrow(cordoba),"contenidos"))
## [1] "Tiene 408912 contenidos"
cordoba_names <-  cordoba %>% select(twitterId) 

cordoba_names <- cordoba_names[!duplicated(cordoba_names$twitterId),]
print(paste("Quedan un total de",nrow(cordoba_names),"usuarios únicos"))
## [1] "Quedan un total de 1564 usuarios únicos"
cordoba_names_tw <- lookup_users(cordoba_names$twitterId, token=token1)

cordoba_names_tw <- select(cordoba_names_tw,user_id,screen_name,name,description,followers_count,friends_count,statuses_count,favourites_count,location,protected,verified,profile_expanded_url)

cordoba_names_tw <- cordoba_names_tw[grepl("cordoba|cordoba|cba|cba.|rio cuarto|rio cuarto|villa carlos paz|la cumbre|la cumbresita",cordoba_names_tw$location,ignore.case = T),]

cordoba_names_tw <- una_base_armada(cordoba_names_tw)
print(paste("Realizando el filtro de localidad y tendencia politica, se tienen",nrow(cordoba_names_tw),"usuarios."))
## [1] "Realizando el filtro de localidad y tendencia politica, se tienen 52 usuarios."

Realizando el segundo paso de filtro de tendencia politica

#limpio=cordoba_names_tw$user_id
#final=vector()
#for (i in 1:length(limpio)){
#  perfil <- lookup_users(limpio[i])
#  if(perfil$protected==FALSE){
#    buscando_tws <- get_timeline(
#      limpio[i],
#      n=2000,
#      toke=token1
#    )
#    buscando_tws2 <- select(buscando_tws,is_retweet,retweet_screen_name,retweet_user_id)
#    buscando_tws2 <- buscando_tws2[buscando_tws2$is_retweet==T,]
#    retws_k <- nrow(buscando_tws2[(buscando_tws2$retweet_user_id %in% K_NO$user_id),])
#    retws_pro <- nrow(buscando_tws2[(buscando_tws2$retweet_user_id %in% PRO_NO$user_id),])
#    if(!(retws_k>2 & retws_pro==0)){
#      final <- c(final,limpio[i])
#    }
#    
#  }
#  if (i%%100==0){
#    Sys.sleep(900)
#  }
#}
#cordoba_names_tw <- cordoba_names_tw[cordoba_names_tw$user_id %in% final,]
#
##### Veo el tema de los favoritos en Cordoba
#limpio=cordoba_names_tw$user_id
#final=vector()
#for (i in 1:length(limpio)){
#  favoritos <- get_favorites(
#    limpio[i],
#    n = 200,
#    since_id = NULL,
#    max_id = NULL,
#    parse = TRUE,
#    token = token1
#  )
#  if (nrow(favoritos)>0){
#    favoritos <- select(favoritos,user_id,favorited_by)
#    favs_K <- nrow(favoritos[(favoritos$user_id %in% K_NO$user_id),])
#    favs_pro <- nrow(favoritos[(favoritos$user_id %in% PRO_NO$user_id),])
#    if(!(favs_K>2 & favs_pro==0)){
#      final <- c(final,limpio[i])
#    }
#  }
#  
#  if (nrow(favoritos)==0){
#    final <- c(final,limpio[i])
#  }
#  rl <- rate_limit(token1, "get_favorites")
#  ## if rate limit exhausted, then wait to rate limit reset
#  if ( rl$remaining < 3) {
#    #print(paste("Reseteo",as.numeric(rl$reset)))
#    Sys.sleep(888)
#  }  
#}
#cordoba_names_tw <- cordoba_names_tw[cordoba_names_tw$user_id %in% final,]

print("Como resultado final se tienen 255 usuarios.")
## [1] "Como resultado final se tienen 255 usuarios."

Se realiza el matcheo de nombres sobre los 326 usuarios unicos de Cordoba, juntando ambas bases vistas anteriormente y sacando duplicados.

### Leo las bases de Cordoba
cordoba1 <- read_csv("C:/Users/20389047504/Desktop/BACKUP/Lucio/Proyecto 2023/Influenciadores/Cordoba/Cordoba_Total.csv")

Y posterior revision de fotos

## Leo el resultado de analizar las fotos
fotos <- read_delim("C:/Users/20389047504/Desktop/BACKUP/Lucio/Proyecto 2023/Influenciadores/Mujeres 2.0/Cordoba/CORDOBA_user-id_genero.csv", delim = ";")
fotos <- fotos[fotos$genero=="Female",]
#
#### Hago un merge
cordoba1 <- merge(x=cordoba1,y=fotos,by="user_id",all.x = T)
cordoba1[is.na(cordoba1)] <- ""
### Hago el filtro de nombre para ver cuáles faltan definir
cordoba_name <- filtro_nombres(cordoba1)
cordoba_name <- cordoba_name[!duplicated(cordoba_name$user_id),] # 53 son las mujeres mediante el filtro #de nombre
print(paste("Se matchearon",nrow(cordoba_name),"mujeres por nombre."))
## [1] "Se matchearon 53 mujeres por nombre."
##### Ahora a las personas que no encontro nada mediante nombres, vemos mediante foto
cordoba1 <- cordoba1[!(cordoba1$user_id %in% cordoba_name$user_id),]
#
cordoba_fotos <- cordoba1[cordoba1$genero=="Female",] ## 31 son los que tienen el Female mediante las 
cordoba_fotos_H <- filtro_hombres(cordoba_fotos)
cordoba_fotos <- cordoba_fotos[!(cordoba_fotos$user_id %in% cordoba_fotos_H$user_id),]

mujeres_cordoba <- bind_rows(cordoba_name,cordoba_fotos)
mujeres_cordoba <- mujeres_cordoba[,1:12]

print(paste("Se matchearon",nrow(cordoba_fotos),"mujeres por foto."))
## [1] "Se matchearon 19 mujeres por foto."
#fotos de perfil
#
print(paste("Se tienen ",nrow(mujeres_cordoba)," mujeres mediante ambos filtros."))
## [1] "Se tienen  72  mujeres mediante ambos filtros."
head(cordoba_name,5)
##                user_id  screen_name                                name
## 1          x1018465549     isma_max                        Isma Oliva †
## 2 x1022136167481978885 rccommunitym Community Manager - Florencia Durán
## 3 x1031251009505579008 MautinoAguss                Agustina<U+0001F351>
## 4           x113349101   anitacobos                           Ana Cobos
## 5           x131263336   Cadena3Com                  Cadena 3 Argentina
##                                                                                                                                                                       description
## 1 Creador -Doy de que hablar para que no se aburran -Llegas a un cierto punto de tu vida donde hay gente esperando para verte caer-#TWD<U+2665>HP<U+26A1><U+FE0F> Ig: Ismaolivaok
## 2                                                                Realzá el valor de tu negocio a través de la difusión de contenido en las redes sociales.Instagram: @fdcomunitym
## 3                                                                                                                                                                              17
## 4                                                                                                Periodista. TV Host. beIN Sports USA. Cordobesa en Miami. Instagram: anita_cobos
## 5  Junto a @FMCordoba y @FMRadioPopular te acompañamos a superar este nuevo contexto. Entretenimiento y noticias para cuidar tu salud <U+0001F4FB> <U+0001F4F2> #SeguimosAdelante
##   followers_count friends_count statuses_count favourites_count
## 1           36763         22539          12912            60204
## 2            4123           534           7111             8307
## 3           26597           505           4004             9032
## 4           73342          1271          17768             9005
## 5          493889          1323         239181            22011
##                     location protected verified
## 1 Argentina, Córdoba Capital     FALSE    FALSE
## 2      Río Cuarto, Argentina     FALSE    FALSE
## 3         Córdoba, Argentina     FALSE    FALSE
## 4              Miami/Córdoba     FALSE     TRUE
## 5         Córdoba, Argentina     FALSE    FALSE
##                                                                        profile_expanded_url
## 1                                                    https://www.instagram.com/ismaolivaok/
## 2                                                                                          
## 3                                     https://instagram.com/agusmautino?igshid=q4g84mr6ue4l
## 4 http://www.beinsports.tv/getbein/talent/article/2twz99u5whqy1cpixdtgmazcm/title/ana-cobos
## 5                                                                  https://www.cadena3.com/
##   genero       posible_nombre
## 1                     Ismael 
## 2                            
## 3                            
## 4 Female  Ana Belen  Mariana 
## 5