Repositori ini berisi kode untuk mereproduksi temuan yang ditampilkan dalam cerita kami, "Hasil Pencarian Teratas Google? Kejutan! Ini Google" dari seri kami, Google the Giant.
Metodologi kami dijelaskan dalam "Bagaimana kami menganalisis hasil pencarian Google".
Angka dan tabel dari analisis kami dapat ditemukan di folder data .
Karena dataset lengkap kami terlalu besar untuk ditempatkan di GitHub, kami menyediakan subset di folder data-subsample .
Untuk menggunakan dataset lengkap, silakan merujuk ke data unduhan.
Alat parsing web spasial novel kami dapat ditemukan di utils/web_assay.py .
Jupyter Notebook yang digunakan untuk preprocessing data dan analisis adalah Avialble di folder notebooks .
Deskripsi untuk setiap notebook diuraikan di bagian notebook di bawah ini.
Pastikan Anda menginstal Python 3.6+, kami menggunakan miniconda untuk membuat lingkungan virtual Python 3.8.
Kemudian pasang paket Python:
pip install -r requirements.txt
Beberapa paket memiliki dependensi tambahan ( geckodriver , xvfb , GLFW ) yang dicatat pada bagian di bawah ini.
Selenium digunakan untuk melakukan otomatisasi browser selama langkah pengumpulan data dan preprocessing. Meskipun kami mengunduh Selenium ketika kami menginstal persyaratan Python (di atas), Anda harus memastikan untuk juga mengunduh Firefox, yang membutuhkan tokek. Instruksi instalasi terperinci ada dalam dokumentasi Selenium.
Kami menggunakan PyvirtualDisplay untuk penjelajahan tanpa kepala. Meskipun ini tercakup dalam file persyaratan Python, periksa ganda Anda memiliki dependensi seperti xvfb yang diinstal. Ada instruksi terperinci dalam dokumentasi PyvirtualDisplay. Jika Anda tidak perlu melakukan penjelajahan tanpa kepala, ini bukan persyaratan.
Untuk Debian:
sudo apt-get install xvfb xserver-xephyr vnc4server xfonts-base
Kami menggunakan port python asli dari perpustakaan grafik P5.js untuk secara program menggambar bentuk. P5 menggunakan GLFW untuk operasi tertentu pada grafik OpenGL, persyaratan berbeda sedikit berdasarkan sistem operasi Anda, silakan periksa dokumentasi P5 untuk memastikan Anda memiliki syarat yang diperlukan.
Untuk Mac OS:
brew install glfw
Untuk Debian:
sudo apt-get install libglfw3-dev libglfw3
Repo ini memiliki subset (n = 400) dari dataset akhir kami (n = 15k) di data_subsample/ Direktori. Subset cukup menggambarkan metodologi kami dan memberikan angka yang sebanding dengan dataset lengkap.
Namun, jika Anda ingin menggunakan dataset lengkap, Anda dapat menemukannya di sini:
# 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
Atau jika Anda mempercayai kami, Anda dapat menjalankan skrip berikut:
sh data/download-full-dataset.sh
Script akan mengunduh dua file tar.xz dan membongkar mereka di data/ folder.
Kami menyarankan dry-run dengan data subset yang ditemukan di data_subsample/ sebelum melakukan ini!
Setelah Anda memiliki dataset lengkap, Anda dapat membalik sakelar ini di awal buku catatan Jupyter di notebooks/ .
use_full_dataset = True
Setelah mengunduh Selenium, pastikan itu berfungsi! Kami membuat tes untuk memastikan bahwa driver ini berfungsi dan Anda dapat meniru perangkat seluler. Ini diperlukan dalam langkah preprocessing data untuk mendapatkan lokasi dan dimensi elemen.
Inilah cara melakukan tes itu.
Ubah direktori ke folder tes:
cd tests
Lalu ada dua tes - satu yang menguji fuctionality parser
python test_parsers.py
dan satu yang menguji aliran uji web lengkap menggunakan beberapa contoh di folder data/tests .
python test_assay.py
Jika Anda ingin mengukur kembali hasil kami, notebook harus dijalankan secara berurutan.
Namun, jika Anda ingin gambaran cepat metodologi Anda hanya perlu menyangkut diri Anda dengan notebook dengan Asterix (*).
Demo praktis fungsionalitas tes web pada hasil pencarian. Ini berjalan melalui kode yang mendasari yang sedang dijelaskan dalam metodologi kami.
Ini menjalankan aliran uji web pada keseluruhan dataset input halaman HTML yang kami kumpulkan.
Preprocessing data. Termasuk kategori standardisasi yang dikembalikan oleh parser, menormalkan panjang halaman web, dan menghitung area dalam 50 kuantil.
Buku catatan analisis utama yang mereproduksi angka dan tabel yang ditemukan di bagian temuan kami.
Eksperimen pemikiran yang menunjukkan bagaimana perhitungan kami untuk Google dan real estat non-Google akan berubah seandainya kami mempertimbangkan interpretasi yang berbeda tentang apa yang termasuk dalam setiap kategori. Ini ada di bagian batasan kami.
Menunjukkan bagaimana perhitungan real estat berbeda di antara berbagai kelompok pencarian. Pencarian dikelompokkan bersama berdasarkan "entitas" yang unik, atau topik pencarian dari Google Trends. Ini ada di bagian batasan kami.
Setelah spotchecking 700-beberapa pencarian bernoda, kami dapat menghitung tingkat kesalahan untuk keakuratan klasifikasi kami dan ketepatan batas real estat kami. Kami selanjutnya mengukur dampak dari kekurangan teknis kami, dengan memperhitungkan piksel yang kami salahkan atau diklasifikasi. Ini ada di Lampiran kami.
Folder ini berisi fungsi dan kode pembantu untuk alat penguras web spasial kami, uji web.
utils/
├── config.py
├── draw_img.py
├── parsers.py
├── prodigy
│ ├── config
│ │ ├── prodigy.json
│ │ └── serp-help.html
│ └── search_audit.py
├── timeout.py
└── web_assay.py
Kelas dasar dan uji web pencarian google ada di utils/web_assay.py .
68 parser web yang kami gunakan untuk mengkategorikan elemen halaman pencarian Google ada di utils/parsers.py .
Anda akan menemukan lebih banyak konteks tentang cara kerja mereka dalam lampiran makalah Metodibogi kami.
Pembungkus kami di sekitar P5.js ada di utils/draw_img.py .
Instruksi untuk alat anotasi Prodity ada di utils/prodigy . Panduan anotasi kami untuk memeriksa kesalahan tangkapan layar yang diwarnai ada di utils/prodigy/config/serp-help.html .
Direktori ini adalah tempat perantara dan output dari dataset lengkap disimpan.
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 berisi contoh tangkapan layar yang diwarnai menggunakan uji web-alat penguraian web baru kami. data/error_analysis berisi data pemeriksaan spot dari dua annotator.
data/output berisi tabel dan angka yang digunakan dalam artikel SHOW Your Work Anda .
data/test berisi beberapa hasil pencarian sampel 'HTML untuk tes dan notebooks/0-demo-web-assay.ipynb .
Jika Anda mengunduh dataset lengkap, isinya harus diekstraksi menjadi data/ , mencerminkan organisasi data_subsample/ .
data_subsample/ berisi html mentah ( data_subsample/input/ ) dan perantara untuk subsset acak dari 400 hasil pencarian dari sampel 15K kami.
data_subsample/
├── input
│ └── google_search
└── intermediary
├── element_metadata.jsonl.gz
└── google_search
Dataset yang lebih kecil ini dikirimkan dengan repositori untuk menunjukkan metodologi kami dengan cara yang tepat waktu dan kurang sumber daya daripada dataset penuh.
element_metadata.json1.gz adalah metadata elemen spasial yang diproses kembali dari uji web. Sebagian besar analisis kami menggunakan dataset ini, apakah itu dari subset atau dataset lengkap.
Hak Cipta 2020, The Markup News Inc.
Redistribusi dan penggunaan dalam bentuk sumber dan biner, dengan atau tanpa modifikasi, diizinkan dengan ketentuan bahwa kondisi berikut dipenuhi:
Redistribusi kode sumber harus mempertahankan pemberitahuan hak cipta di atas, daftar kondisi ini dan penafian berikut.
Redistribusi dalam bentuk biner harus mereproduksi pemberitahuan hak cipta di atas, daftar kondisi ini dan penafian berikut dalam dokumentasi dan/atau bahan lain yang disediakan dengan distribusi.
Baik nama pemegang hak cipta maupun nama -nama kontributornya tidak dapat digunakan untuk mendukung atau mempromosikan produk yang berasal dari perangkat lunak ini tanpa izin tertulis sebelumnya.
Perangkat lunak ini disediakan oleh pemegang hak cipta dan kontributor "sebagaimana adanya" dan setiap jaminan tersirat atau tersirat, termasuk, tetapi tidak terbatas pada, jaminan tersirat dari dapat diperjualbelikan dan kebugaran untuk tujuan tertentu ditolak. Dalam hal apa pun pemegang atau kontributor hak cipta tidak akan bertanggung jawab atas kerusakan langsung, tidak langsung, insidental, khusus, teladan, atau konsekuensial (termasuk, tetapi tidak terbatas pada, pengadaan barang atau layanan pengganti; hilang Disarankan tentang kemungkinan kerusakan tersebut.