Efecto Airbnb > Recetas
Esta página recoge diferentes recetas y scripts para facilitar el análisis en diferentes lenguages y herramientas.
Para documentar una pregunta que aún no esté en wiki hay que crear una nueva página y se puede copiar la estructura de documentación de la siguiente plantilla: documentacion-tipo
Este es un listado de preguntas con sus manuales correspondientes para analizar y producir visualizaciones sobre datos de Airbnb que se han ido desarrollando en los diferentes talleres de Efecto Airbnb:
Por completar:
Cómo realizar un cartograma para representar dos variables: tamaño de las áreas en función del número de viviendas y color en función de ratio de número de anuncios de Airbnb por número de viviendas:
Desde Montera34 hemos preparado 2 scripts de R para procesar los datos:
Los informes no están muy depurados (hay muchas gráficas no del todo útiles) y son mejorables, pero son una buena base de la que partir. Y sobre todo ¡se producen automatizadamente!
Desde Terraferida han generado una serie de scripts de R para analizar datos de Airbnb y Homeaway.
Un script para scrapear una lista de usuarios de Airbnb basado en sus id:
import csv import urllib2 from bs4 import BeautifulSoup outputpath = "airbnbusers.csv" hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', 'Accept-Encoding': 'none', 'Accept-Language': 'en-US,en;q=0.8', # cambia idioma 'Accept-Language': 'es-ES,es;q=0.8' 'Connection': 'keep-alive'} with open(outputpath, "w") as outfile: writer = csv.writer(outfile) for counter in [102947901,3566146,54310958,143666717]: # cambia la lista de usuarios url = "https://www.airbnb.com/users/show/"+str(counter) print url # Get URL response = urllib2.Request(url, headers=hdr) pagedata = urllib2.urlopen(response) html = pagedata.read() # Get links soup = BeautifulSoup(html, "html.parser") # boxes = soup.select(".news-body") title = soup.select("h1")[0].get_text().encode('utf-8').strip() since = soup.select(".text-normal")[0].get_text().encode('utf-8').strip() review = soup.select("#reviews h2")[0].get_text().encode('utf-8').strip() review = review.translate(None, 'Reviews\n(').translate(None, ')') desc= soup.select("p")[0].get_text().encode('utf-8').strip() print counter print title print since print review print desc writer.writerow([counter,title,since,review,desc])
import csv import urllib2 from bs4 import BeautifulSoup outputpath = "airbnblistings.csv" hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', 'Accept-Encoding': 'none', 'Accept-Language': 'en-US,en;q=0.8', #cambia idioma 'Accept-Language': 'es-ES,es;q=0.8' 'Connection': 'keep-alive'} count=0 with open(outputpath, "w") as outfile: writer = csv.writer(outfile) for counter in [23321245,20407971,12163858]: # incluye aquí la lista de id de listings completa count +=1 print count url = "https://www.airbnb.com/rooms/"+str(counter) print url try: print "try1" # Get URL response = urllib2.Request(url, headers=hdr) pagedata = urllib2.urlopen(response) html = pagedata.read() # Get links soup = BeautifulSoup(html, "html.parser") except: print "except1" try: print "try2" nreviews = soup.select("#reviews ._1vbkutid")[0].get_text().encode('utf-8').strip() nreviews = nreviews.translate(None, ' Reviews').encode('utf-8').strip() lastreview = soup.select("#reviews ._hylizj6")[0].get_text().encode('utf-8').strip() except: print "except2" print url print nreviews print lastreview writer.writerow([counter,nreviews,lastreview])
Esta receta es útil para solucionar errores de codificación de caracteres o unificar valores semejantes o equivalentes para hacer counts o estadísticas después (San Sebastian y Donostia por ejemplo).
UPDATE TABLE_NAME SET col_name = REPLACE(col_name,'old_value','new_value')
Esta operación se resuelve con una unión (join) de SQL entre dos tablas. Para ello hay que usar un valor que relacione los registros de ambas tablas. En el siguiente ejemplo vamos a unir las tablas table_1 y table_2, seleccionando las columnas col_1 y col_4 de la table_1 y la columna col_3 de la table_2. Las columnas de relación serán code de la table_1 e id de la table_2:
SELECT table_1.col_1,table_1.col_4,table_2.col_3 FROM table_1, table_2 WHERE table_1.code = table_2.id
También se puede hacer con el siguiente código con el que, a modo de ejemplo, se añade la población de cada barrio a una tabla de barrios que no la tiene:
UPDATE table_1 SET poblacion = table_2.habitantes FROM table_2 WHERE table_1.barrio = table_2.barrio
CARTO es un servicio web open source para crear mapas y visualizaciones. Utiliza SQL para hacer llamadas a los sets de datos. Para saber cómo interactuar con los datasets usando el editor SQL de CARTO se puede consultar el siguiente manual: https://carto.com/academy/courses/sql-postgis/