Dieses Repository enthält Code, um die Ergebnisse in unserer Geschichte "Google's Top -Suchergebnis? Überraschung! Es ist Google" aus unserer Serie Google the Giant zu reproduzieren.
Unsere Methodik ist in "Wie wir die Suchergebnisse von Google analysiert haben" beschrieben.
Die Abbildungen und Tabellen aus unserer Analyse finden Sie im data .
Da unser vollständiger Datensatz zu groß war, um sie in GitHub zu platzieren, stellen wir eine Teilmenge im Ordner data-subsample an.
Um den vollständigen Datensatz zu verwenden, lesen Sie bitte die Download -Daten.
Unser Roman Spatial Web Parsing Tool finden Sie in utils/web_assay.py .
Jupyter -Notizbücher, die für die Datenvorverarbeitung und -analyse verwendet werden, sind im Ordner notebooks avialble.
Beschreibungen für jedes Notebook sind im Abschnitt Notebooks unten beschrieben.
Stellen Sie sicher, dass Sie Python 3.6+ installiert haben. Wir haben Miniconda verwendet, um eine virtuelle Python 3.8 -Umgebung zu erstellen.
Installieren Sie dann die Python -Pakete:
pip install -r requirements.txt
Einige der Pakete haben zusätzliche Abhängigkeiten ( geckodriver , xvfb , GLFW ) in den folgenden Abschnitten.
Selenium wird zur Durchführung der Browserautomatisierung während der Datenerfassung und der Vorverarbeitungsschritte verwendet. Obwohl wir Selen, wenn wir die Python -Anforderungen (oben) installieren, herunterladen, müssen Sie auch Firefox herunterladen, für das Geckodriver erforderlich ist. Detaillierte Installationsanweisungen finden Sie in Selens Dokumentation.
Wir verwenden PyvirtualDisplay für kopfloses Surfen. Obwohl dies in der Python -Anforderungsdatei behandelt wird, überprüft Sie Abhängigkeiten wie xvfb installiert. In der Dokumentation von PyvirtualDisplay gibt es detaillierte Anweisungen. Wenn Sie kein Kopfstöbern durchführen müssen, ist dies keine Anforderung.
Für Debian:
sudo apt-get install xvfb xserver-xephyr vnc4server xfonts-base
Wir verwenden einen nativen Python -Port der Graphing Library P5.Js, um programmatisch Formen zu zeichnen. P5 verwendet GLFW für bestimmte Operationen in OpenGL -Grafiken. Die Anforderungen unterscheiden sich basierend auf Ihrem Betriebssystem. Überprüfen Sie bitte die P5 -Dokumentation, um sicherzustellen, dass Sie über die erforderlichen Anforderungen verfügen.
Für Mac OS:
brew install glfw
Für Debian:
sudo apt-get install libglfw3-dev libglfw3
Dieses Repo verfügt über eine Untergruppe (n = 400) unseres endgültigen Datensatzes (n = 15K) im data_subsample/ Verzeichnis. Die Untergruppe veranschaulicht unsere Methodik ausreichend und bietet vergleichbare Zahlen für den vollständigen Datensatz.
Wenn Sie jedoch den vollständigen Datensatz verwenden möchten, finden Sie ihn hier:
# 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
Oder wenn Sie uns vertrauen, können Sie das folgende Skript ausführen:
sh data/download-full-dataset.sh
Das Skript lädt zwei Tar.xz -Dateien herunter und packt sie im data/ Ordner aus.
Wir schlagen einen Trockenlauf mit den Untermengendaten vor, die in data_subsample/ bevor dies dies tun!
Nachdem Sie den vollständigen Datensatz haben, können Sie diesen Switch zu Beginn der Jupyter -Notizbücher in notebooks/ umdrehen.
use_full_dataset = True
Stellen Sie nach dem Herunterladen von Selen sicher, dass es funktioniert! Wir haben Tests erstellt, um sicherzustellen, dass diese Treiber funktionieren und ein mobiles Gerät emulieren können. Dies ist im Datenvorbereitungsschritt erforderlich, um den Ort und die Abmessungen von Elementen zu erhalten.
Hier erfahren Sie, wie Sie diese Tests durchführen.
Wechseln Sie die Verzeichnisse in den Ordner Tests:
cd tests
Dann gibt es zwei Tests - eine, die die Parser -Fuktionalität testet
python test_parsers.py
und einen, der den vollständigen Web -Assay -Fluss unter Verwendung mehrerer Beispiele im Ordner data/tests testet.
python test_assay.py
Wenn Sie unsere Ergebnisse erneut ausführen möchten, sollten die Notizbücher nacheinander ausgeführt werden.
Wenn Sie jedoch einen schnellen Überblick über die Methodik wünschen, müssen Sie sich nur mit den Notizbüchern mit einem Asterix (*) befassen.
Eine praktische Demo der Web -Assays -Funktionalität zu einem Suchergebnis. Dies geht durch den zugrunde liegenden Code, der in unserer MethodeLogie erklärt.
Dadurch wird der Web -Assay -Fluss im gesamten Eingabedatensatz der von uns gesammelten HTML -Seiten ausgeführt.
Datenvorverarbeitung. Enthält Standardisierungskategorien, die von Parsers zurückgegeben werden, die Länge der Webseiten normalisieren und die Fläche in 50 Quantilen berechnen.
Das Hauptanalyse -Notizbuch, das die in unserem Erkenntnisabschnitt enthaltenen Figuren und Tabellen reproduziert.
Ein Gedankenexperiment, das zeigt, wie sich unsere Berechnungen für Google und Nichtgänger immobilien ändern würden, hätten wir unterschiedliche Interpretationen dessen berücksichtigt, was in jeder Kategorie enthalten ist. Dies steht in unserem Abschnitt mit Grenzen.
Zeigt, wie sich die Berechnungen von Immobilien zwischen verschiedenen Suchanlagen unterscheiden. Die Suchanfragen werden basierend auf einzigartigen "Entitäten" oder Suchthemen von Google Trends zusammengefasst. Dies steht in unserem Abschnitt mit Grenzen.
Nachdem SpotCecking 700 gefärbte Suchanfragen konnten, konnten wir die Fehlerraten für die Genauigkeit unserer Klassifizierungen und die Präzision unserer Immobiliengrenzen berechnen. Wir messen die Auswirkungen unserer technischen Mängel weiter, indem wir die Pixel berücksichtigen, die wir falsch oder unter-unter-klassifiziert haben. Dies ist in unserem Anhang.
Dieser Ordner enthält Helferfunktionen und Code für unser räumliches Web -Parsing -Tool Web -Assay.
utils/
├── config.py
├── draw_img.py
├── parsers.py
├── prodigy
│ ├── config
│ │ ├── prodigy.json
│ │ └── serp-help.html
│ └── search_audit.py
├── timeout.py
└── web_assay.py
Die Basisklasse und der Google -Search -Web -Assay finden Sie in utils/web_assay.py .
Die 68 Web -Parsers, mit denen wir Elemente der Google -Suchseite kategorisieren, befinden sich in utils/parsers.py .
Sie finden mehr Kontext darüber, wie sie im Anhang unseres MethodLogy -Papiers funktionieren.
Unsere Wrapper um P5.JS befindet sich in utils/draw_img.py .
Anweisungen für das Annotation -Tool -Prodity finden Sie in utils/prodigy . Unser Annotationshandbuch zur Fehlerprüfung gefärbter Screenshots finden Sie in utils/prodigy/config/serp-help.html .
In diesem Verzeichnis werden Vermittler und Ausgaben aus dem vollständigen Datensatz gespeichert.
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 enthält Beispiele für Screenshots, die mit Web-Assay-unser neuartiges Web-Parsing-Tool gefärbt wurden. data/error_analysis enthält Spot -Check -Daten von zwei Annotatoren.
data/output enthält Tabellen und Abbildungen, die in unserem Artikel angezeigt werden.
data/test enthält einige Beispiele für die Suchergebnisse von HTML für Tests und die Demo Notebook- notebooks/0-demo-web-assay.ipynb .
Wenn Sie den vollständigen Datensatz herunterladen, sollte der Inhalt in data/ die Organisation von data_subsample/ widerspiegelt werden.
data_subsample/ enthält das RAW -HTML ( data_subsample/input/ ) und Intermediäre für eine zufällige Unterset von 400 Suchergebnissen aus unserer 15 -km -Probe.
data_subsample/
├── input
│ └── google_search
└── intermediary
├── element_metadata.jsonl.gz
└── google_search
Dieser kleinere Datensatz wird mit dem Repository versendet, um unsere Methodik zeitnah und weniger ressourcenintensiv zu demonstrieren als der vollständige Datensatz.
element_metadata.json1.gz ist das vorverarbeitete räumliche Element -Metadaten, das aus dem Web -Assay zurückgegeben wurde. Der Großteil unserer Analyse verwendet diesen Datensatz, sei es aus der Teilmenge oder aus dem vollständigen Datensatz.
Copyright 2020, The Markup News Inc.
Umverteilung und Verwendung in Quellen- und Binärformen mit oder ohne Modifikation sind zulässig, sofern die folgenden Bedingungen erfüllt sind:
Umverteilungen des Quellcode müssen die oben genannte Copyright -Mitteilung, diese Liste der Bedingungen und den folgenden Haftungsausschluss behalten.
Umverteilungen in binärer Form müssen die oben genannte Copyright -Mitteilung, diese Liste der Bedingungen und den folgenden Haftungsausschluss in der Dokumentation und/oder anderen mit der Verteilung bereitgestellten Materialien reproduzieren.
Weder der Name des Urheberrechtsinhabers noch die Namen seiner Mitwirkenden dürfen verwendet werden, um Produkte zu unterstützen oder zu fördern, die von dieser Software ohne spezifische schriftliche Genehmigung abgeleitet wurden.
Diese Software wird von den Inhabern und Mitwirkenden des Urheberrechts "wie sie" bereitgestellt, und alle ausdrücklichen oder impliziten Garantien, einschließlich, aber nicht beschränkt auf die impliziten Garantien für Handelsfähigkeit und Eignung für einen bestimmten Zweck, werden abgelehnt. In keinem Fall haftet der Urheberrechtsinhaber oder die Mitwirkenden für direkte, indirekte, zufällige, besondere, beispielhafte oder Folgeschäden (einschließlich, aber nicht beschränkt auf die Beschaffung von Ersatzgütern oder -dienstleistungen; Verlust des Verlusts des Verwendungsverlusts, Daten oder Gewinne; Gewinne oder geschäftliche Unterbrechung). Beraten über die Möglichkeit eines solchen Schadens.