Herramientas de usuario

Herramientas del sitio


airbnb:recetas

Efecto Airbnb > Recetas

Recetas y manuales

Esta página recoge diferentes recetas y scripts para facilitar el análisis en diferentes lenguages y herramientas.

Documentación tipo

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

Preguntas y manuales

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:

D3

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:

R

Desde Montera34 hemos preparado 2 scripts de R para procesar los datos:

  • prepare-segmented-files.R para procesar los datos y generar archivos más manejables. Genera archivos .csv y .tsv. Lo que hace este script es “partir” los datos de Airbnb en Euskadi en cómodos .tsv y csv por ciudades. También selecciona ciertas columnas para tener archivos más ligeros, de ahí el sufijo “_simple”.
  • Este script generado con Rmarkdown está pensado para comparar dos bases de datos de Airbnb y poder evaluar los métodos de scraping. Más información sobre el script.
  • airbnb-informe-ciudad.Rmd para generar informes de las ciudades con múltiples gráficos. El archivo tiene una variable que permite cambiar el nombre del municipio sobre la que se genera el informe. Genera artchivos .html con knitr.

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.

Python

Scraping: obtiene info a partir de listado de id de hosts en Airbnb

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])

Scraping: obtiene info a partir de listado de id de listings en Airbnb

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])

SQL

Cómo hacer una búsqueda con sustitución en una tabla

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')

Cómo incluir una columna de una tabla en otra

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

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/

airbnb/recetas.txt · Última modificación: 2018/09/26 11:57 por numeroteca