Ce référentiel contient du code pour reproduire les résultats présentés dans notre histoire, "Le résultat de la recherche de Google? Surprise! C'est Google" de notre série, Google The Giant.
Notre méthodologie est décrite dans "Comment nous avons analysé les résultats de recherche de Google".
Les chiffres et les tables de notre analyse se trouvent dans le dossier data .
Étant donné que notre ensemble de données complet était trop grand pour être placé dans GitHub, nous fournissons un sous-ensemble dans le dossier data-subsample .
Pour utiliser l'ensemble de données complet, veuillez vous référer aux données de téléchargement.
Notre nouvel outil d'analyse Web spatial peut être trouvé dans utils/web_assay.py .
Les cahiers Jupyter utilisés pour le prétraitement des données et l'analyse sont aviaux dans le dossier notebooks .
Les descriptions de chaque cahier sont décrites dans la section des cahiers ci-dessous.
Assurez-vous que Python 3.6+ soit installé, nous avons utilisé MiniConda pour créer un environnement virtuel Python 3.8.
Installez ensuite les packages Python:
pip install -r requirements.txt
Certains packages ont des dépendances supplémentaires ( geckodriver , xvfb , GLFW ) notées dans les sections ci-dessous.
Le sélénium est utilisé pour effectuer l'automatisation du navigateur pendant les étapes de collecte de données et de prétraitement. Bien que nous téléchargeons le sélénium lorsque nous installons les exigences Python (ci-dessus), vous devez vous assurer de télécharger Firefox, qui nécessite Geckodriver. Les instructions d'installation détaillées figurent dans la documentation de Selenium.
Nous utilisons PyVirtualDisplay pour la navigation sans tête. Bien que cela soit couvert dans le fichier des exigences Python, vérifiez que vous avez des dépendances telles que xvfb installé. Il y a des instructions détaillées dans la documentation de PyvirtualDisplay. Si vous n'avez pas besoin de faire une navigation sans tête, ce n'est pas une exigence.
Pour Debian:
sudo apt-get install xvfb xserver-xephyr vnc4server xfonts-base
Nous utilisons un port python natif de la bibliothèque graphique P5.JS pour dessiner programatiquement des formes. P5 utilise GLFW pour certaines opérations sur les graphiques OpenGL, les exigences diffèrent un peu en fonction de votre système d'exploitation, veuillez vérifier la documentation P5 pour vous assurer que vous avez les conditions nécessaires.
Pour Mac OS:
brew install glfw
Pour Debian:
sudo apt-get install libglfw3-dev libglfw3
Ce repo dispose d'un sous-ensemble (n = 400) de notre ensemble de données final (n = 15k) dans le répertoire data_subsample/ . Le sous-ensemble illustre suffisamment notre méthodologie et fournit des nombres comparables à l'ensemble de données complet.
Cependant, si vous souhaitez utiliser l'ensemble de données complet, vous pouvez le trouver ici:
# 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
Ou si vous nous faites confiance, vous pouvez exécuter le script suivant:
sh data/download-full-dataset.sh
Le script téléchargera deux fichiers Tar.xz et les déballera dans le dossier data/ .
Nous suggérons une course à sec avec les données de sous-ensemble trouvées dans data_subsample/ avant de le faire!
Après avoir l'ensemble de données complet, vous pouvez retourner ce commutateur au début des cahiers Jupyter dans notebooks/ .
use_full_dataset = True
Après avoir téléchargé le sélénium, assurez-vous que cela fonctionne! Nous avons créé des tests pour nous assurer que ces pilotes fonctionnent et que vous pouvez imiter un appareil mobile. Ceci est nécessaire dans l'étape de prétraitement des données pour obtenir l'emplacement et les dimensions des éléments.
Voici comment faire ces tests.
Changer les répertoires dans le dossier des tests:
cd tests
Ensuite, il y a deux tests - un qui teste la fictionnalité de l'analyseur
python test_parsers.py
et celui qui teste le flux complet du test Web en utilisant plusieurs exemples dans le dossier data/tests .
python test_assay.py
Si vous souhaitez rénover nos résultats, les ordinateurs portables doivent être exécutés séquentiellement.
Cependant, si vous voulez un aperçu rapide de la méthodologie, vous n'avez qu'à vous préoccuper des cahiers avec un astérix (*).
Une démo pratique de la fonctionnalité des tests sur un résultat de recherche. Cela parcourt le code sous-jacent qui explique dans notre mode de méthode.
Cela exécute le flux de tests Web sur l'intégralité de l'ensemble de données d'entrée des pages HTML que nous avons collectées.
Prétraitement des données. Comprend des catégories de normalisation renvoyées par les analyseurs, la normalisation de la durée des pages Web et le calcul de la zone en 50 quantiles.
Le cahier d'analyse principal qui reproduit les figures et les tableaux trouvées dans notre section Résultats.
Une expérience de pensée qui montre comment nos calculs pour Google et l'immobilier non google changeraient si nous avions considéré différentes interprétations de ce qui est inclus dans chaque catégorie. C'est dans notre section Limitations.
Montre comment les calculs de l'immobilier diffèrent entre les différents groupes de recherches. Les recherches sont regroupées en fonction de "entités" uniques ou de sujets de recherche à partir de Google Trends. C'est dans notre section Limitations.
Après avoir coché à poitrine 700 personnes colorées, nous avons pu calculer les taux d'erreur pour la précision de nos classifications et la précision de nos limites immobilières. Nous mesurons en outre l'impact de nos lacunes techniques, en tenant compte des pixels que nous détournons ou sous-classifiés. C'est dans notre annexe.
Ce dossier contient des fonctions d'assistance et du code pour notre outil d'analyse Web spatial, le test 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 classe de base et le test Web Google Search sont dans utils/web_assay.py .
Les 68 analyseurs Web que nous utilisons pour catégoriser les éléments de la page de recherche Google sont dans utils/parsers.py .
Vous trouverez plus de contexte sur la façon dont ils fonctionnent dans l'annexe de notre article de méthode.
Notre emballage autour de P5.js est dans utils/draw_img.py .
Les instructions pour la produit de l'outil d'annotation sont dans utils/prodigy . Notre guide d'annotation pour la vérification des captures d'écran colorée est dans utils/prodigy/config/serp-help.html .
Ce répertoire est l'endroit où les intermédiaires et les sorties de l'ensemble de données complet sont enregistrés.
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 contiennent des exemples de captures d'écran colorées à l'aide du test Web - notre nouvel outil d'analyse Web. data/error_analysis contient des données de vérification au comptant de deux annotateurs.
data/output contient des tables et des chiffres utilisés dans notre article montrent votre article de travail .
data/test contient quelques exemples de résultats de recherche 'HTML pour les tests et les notebooks/0-demo-web-assay.ipynb .
Si vous téléchargez l'ensemble de données complet, le contenu doit être extrait en data/ , reflétant l'organisation de data_subsample/ .
data_subsample/ contient le html brut ( data_subsample/input/ ) et les intermédiaires pour un sous-ensemble aléatoire de 400 résultats de recherche de notre échantillon 15K.
data_subsample/
├── input
│ └── google_search
└── intermediary
├── element_metadata.jsonl.gz
└── google_search
Cet ensemble de données plus petit est expédié avec le référentiel pour démontrer notre méthodologie de manière opportune et moins approfondie que l'ensemble de données complet.
element_metadata.json1.gz est les métadonnées élémentaires spatiales prétraitées renvoyées à partir du test Web. La majeure partie de notre analyse utilise cet ensemble de données, que ce soit à partir du sous-ensemble ou de l'ensemble de données complet.
Copyright 2020, The Markup News Inc.
La redistribution et l'utilisation dans les formulaires source et binaire, avec ou sans modification, sont autorisées à condition que les conditions suivantes soient remplies:
Les redistributions du code source doivent conserver l'avis de droit d'auteur ci-dessus, cette liste de conditions et l'avertissement suivant.
Les redistributions sous forme binaire doivent reproduire l'avis de droit d'auteur ci-dessus, cette liste de conditions et la clause de non-responsabilité suivante dans la documentation et / ou d'autres documents fournis avec la distribution.
Ni le nom du titulaire du droit d'auteur ni les noms de ses contributeurs ne peuvent être utilisés pour approuver ou promouvoir des produits dérivés de ce logiciel sans autorisation écrite préalable spécifique.
Ce logiciel est fourni par les détenteurs de droits d'auteur et les contributeurs "tels quels" et toutes les garanties expresses ou implicites, y compris, mais sans s'y limiter, les garanties implicites de qualité marchande et d'adéquation à un usage particulier sont déclinées. En aucun cas, le titulaire ou les contributeurs du droit d'auteur ne sera pas responsable de tout dommage directement, indirect, accessoire, spécial, exemplaire ou consécutif (y compris, mais sans interruption commerciale) Si vous êtes conseillé de la possibilité de tels dégâts.