Este repositorio contiene código para reproducir los hallazgos presentados en nuestra historia, "¡El principal resultado de la búsqueda de Google? ¡Sorpresa! Es Google" de nuestra serie, Google the Giant.
Nuestra metodología se describe en "cómo analizamos los resultados de búsqueda de Google".
Las figuras y tablas de nuestro análisis se pueden encontrar en la carpeta data .
Dado que nuestro conjunto de datos completo era demasiado grande para colocar en GitHub, proporcionamos un subconjunto en la carpeta de data-subsample .
Para usar el conjunto de datos completo, consulte los datos de descarga.
Nuestra nueva herramienta de análisis web espacial se puede encontrar en utils/web_assay.py .
Los cuadernos Jupyter utilizados para el preprocesamiento y el análisis de datos son avialble en la carpeta notebooks .
Las descripciones para cada cuaderno se describen en la sección de cuadernos a continuación.
Asegúrese de tener instalado Python 3.6+, utilizamos Miniconda para crear un entorno virtual Python 3.8.
Luego instale los paquetes de Python:
pip install -r requirements.txt
Algunos de los paquetes tienen dependencias adicionales ( geckodriver , xvfb , GLFW ) observadas en las secciones a continuación.
El selenio se utiliza para realizar la automatización del navegador durante los pasos de recopilación de datos y preprocesamiento. Aunque descargamos Selenium cuando instalamos los requisitos de Python (arriba), debe asegurarnos de descargar también Firefox, que requiere Geckodriver. Las instrucciones de instalación detalladas están en la documentación de Selenium.
Usamos PyvirtualDisplay para navegación sin cabeza. Aunque esto está cubierto en el archivo de requisitos de Python, verifique que tenga dependencias como xvfb instaladas. Hay instrucciones detalladas en la documentación de PyvirtualDisplay. Si no necesita navegar sin cabeza, esto no es un requisito.
Para Debian:
sudo apt-get install xvfb xserver-xephyr vnc4server xfonts-base
Utilizamos un puerto de Python nativo de la biblioteca gráfica P5.js para dibujar programáticamente formas. P5 usa GLFW para ciertas operaciones en los gráficos OpenGL, los requisitos difieren un poco en función de su sistema operativo, consulte la documentación P5 para asegurar que tenga los requisitos necesarios.
Para Mac OS:
brew install glfw
Para Debian:
sudo apt-get install libglfw3-dev libglfw3
Este repositorio presenta un subconjunto (n = 400) de nuestro conjunto de datos final (n = 15k) en el directorio data_subsample/ . El subconjunto ilustra suficientemente nuestra metodología y proporciona números comparables al conjunto de datos completo.
Sin embargo, si desea usar el conjunto de datos completo, puede encontrarlo aquí:
# To reproduce the data preprocessing in its entirety start with the HTML files here:
https://markup-public-data.s3.amazonaws.com/google-search-audit/input_files.tar.xz
# To reproduce the analysis you just need the spatial metadata jsonl files parsed from the HTML files:
https://markup-public-data.s3.amazonaws.com/google-search-audit/intermediary_files.tar.xz
O si confía en nosotros, puede ejecutar el siguiente script:
sh data/download-full-dataset.sh
El script descargará dos archivos tar.xz y los desempaquetará en la carpeta data/ .
¡Sugerimos una carrera en seco con los datos de subconjunto encontrados en data_subsample/ Antes de hacerlo!
Después de tener el conjunto de datos completo, puede voltear este interruptor en el comienzo de los cuadernos Jupyter en notebooks/ .
use_full_dataset = True
Después de descargar Selenium, ¡asegúrese de que esté funcionando! Creamos pruebas para asegurarnos de que estos controladores funcionen y que pueda emular un dispositivo móvil. Esto es necesario en el paso de preprocesamiento de datos para obtener la ubicación y las dimensiones de los elementos.
Aquí está cómo hacer esas pruebas.
Cambiar directorios a la carpeta de pruebas:
cd tests
Luego hay dos pruebas, una que prueba la fuctionidad del analizador
python test_parsers.py
y uno que prueba el flujo de ensayo web completo utilizando varios ejemplos en la carpeta data/tests .
python test_assay.py
Si desea reiniciar nuestros resultados, los cuadernos deben ejecutarse secuencialmente.
Sin embargo, si desea una descripción general rápida de la metodología, solo necesita preocuparse por los cuadernos con un Asterix (*).
Una demostración práctica de la funcionalidad de ensayos web en un resultado de búsqueda. Esto pasa por el código subyacente que está explicando en nuestra Methodlogy.
Esto ejecuta el flujo de ensayo web en la totalidad del conjunto de datos de entrada de las páginas HTML que recopilamos.
Preprocesamiento de datos. Incluye estandarización de categorías devueltas por analizadores, normalización de la longitud de las páginas web y el área de cálculo en 50 cuantiles.
El cuaderno de análisis principal que reproduce las figuras y tablas que se encuentran en nuestra sección de hallazgos.
Un experimento mental que muestra cómo nuestros cálculos para los bienes raíces de Google y no Google cambiarían si hubiéramos considerado diferentes interpretaciones de lo que se incluye en cada categoría. Esto está en nuestra sección de limitaciones.
Muestra cómo los cálculos de bienes raíces difieren entre diferentes grupos de búsquedas. Las búsquedas se agrupan en función de "entidades" únicas o temas de búsqueda de Google Trends. Esto está en nuestra sección de limitaciones.
Después de la comprobación de 700 algunas búsquedas manchadas, pudimos calcular las tasas de error para la precisión de nuestras clasificaciones y la precisión de nuestros límites inmobiliarios. Además, medimos el impacto de nuestras deficiencias técnicas, al contabilizar los píxeles que no se clasificamos. Esto está en nuestro apéndice.
Esta carpeta contiene funciones de ayuda y código para nuestra herramienta de análisis web espacial, ensayo web.
utils/
├── config.py
├── draw_img.py
├── parsers.py
├── prodigy
│ ├── config
│ │ ├── prodigy.json
│ │ └── serp-help.html
│ └── search_audit.py
├── timeout.py
└── web_assay.py
La clase base y el ensayo web de búsqueda de Google están en utils/web_assay.py .
Los 68 analizadores web que utilizamos para clasificar elementos de la página de búsqueda de Google están en utils/parsers.py .
Encontrará más contexto sobre cómo funcionan en el apéndice de nuestro documento de Methodlogy.
Nuestro envoltorio alrededor de P5.JS está en utils/draw_img.py .
Las instrucciones para la herramienta de anotación Prodity están en utils/prodigy . Nuestra guía de anotación para verificar errores de capturas de pantalla se encuentra en utils/prodigy/config/serp-help.html .
Este directorio es donde se guardan los intermediarios y salidas del conjunto de datos completo.
data/
├── assets
│ ├── stained-screenshot-examples
│ └── assay-flow.png
├── error_analysis
│ ├── adrianne-annotations.csv.gz
│ ├── adrianne-pixel-errors.csv
│ ├── leon-annotations.csv.gz
│ └── leon-pixel-errors.csv
├── output
│ ├── figures
│ └── tables
└── test
├── input_local_searches
├── intermediate_local_searches
└── parser_output
data/assets/stained-screenshot-examples contiene ejemplos de capturas de pantalla teñidas utilizando un ensayo web: nuestra nueva herramienta de análisis web. data/error_analysis contiene datos de verificación puntual de dos anotadores.
data/output contienen tablas y cifras utilizadas en nuestro artículo Show Your Work .
data/test contiene algunos resultados de búsqueda de muestras 'HTML para pruebas y los notebooks/0-demo-web-assay.ipynb .
Si descarga el conjunto de datos completo, el contenido debe extraerse en data/ , reflejando la organización de data_subsample/ .
data_subsample/ Contiene el HTML sin procesar ( data_subsample/input/ ) e intermediarios para un subsjunto aleatorio de 400 resultados de búsqueda de nuestra muestra de 15k.
data_subsample/
├── input
│ └── google_search
└── intermediary
├── element_metadata.jsonl.gz
└── google_search
Este conjunto de datos más pequeño se envía con el repositorio para demostrar nuestra metodología de manera oportuna y menos intensiva en recursos que el conjunto de datos completo.
element_metadata.json1.gz es los metadatos de elementos espaciales preprocesados devueltos del ensayo web. La mayor parte de nuestro análisis utiliza este conjunto de datos, ya sea desde el subconjunto o del conjunto de datos completo.
Copyright 2020, The Markup News Inc.
Redistribución y uso en formularios de origen y binarios, con o sin modificación, se permiten siempre que se cumplan las siguientes condiciones:
Las redistribuciones del código fuente deben retener el aviso de derechos de autor anterior, esta lista de condiciones y el siguiente descargo de responsabilidad.
Las redistribuciones en forma binaria deben reproducir el aviso de derechos de autor anterior, esta lista de condiciones y el siguiente descargo de responsabilidad en la documentación y/u otros materiales provistos con la distribución.
Ni el nombre del titular de los derechos de autor ni los nombres de sus contribuyentes pueden usarse para respaldar o promover productos derivados de este software sin un permiso previo por escrito específico.
Este software es proporcionado por los titulares de derechos de autor y contribuyentes "tal cual" y cualquier garantía expresa o implícita, incluidas, entre otros, las garantías implícitas de comerciabilidad y idoneidad para un propósito particular se renuncian. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, Incluso si se le aconseja la posibilidad de tal daño.