ที่เก็บนี้มีรหัสเพื่อทำซ้ำการค้นพบที่แสดงในเรื่องราวของเรา "ผลการค้นหาอันดับต้น ๆ ของ Google น่าประหลาดใจ! มันคือ Google" จากซีรี่ส์ของเรา Google The Giant
วิธีการของเราอธิบายไว้ใน "วิธีที่เราวิเคราะห์ผลการค้นหาของ Google"
ตัวเลขและตารางจากการวิเคราะห์ของเราสามารถพบได้ในโฟลเดอร์ data
เนื่องจากชุดข้อมูลเต็มรูปแบบของเรามีขนาดใหญ่เกินไปที่จะวางใน GitHub เราจึงให้บริการชุดย่อยในโฟลเดอร์ data-subsample
หากต้องการใช้ชุดข้อมูลเต็มรูปแบบโปรดดูข้อมูลการดาวน์โหลด
เครื่องมือแยกวิเคราะห์เว็บเชิงพื้นที่ใหม่ของเราสามารถพบได้ใน utils/web_assay.py
สมุดบันทึก Jupyter ที่ใช้สำหรับการประมวลผลข้อมูลล่วงหน้าและการวิเคราะห์เป็น avialble ในโฟลเดอร์ notebooks
คำอธิบายสำหรับโน้ตบุ๊กแต่ละใบมีการระบุไว้ในส่วนโน้ตบุ๊กด้านล่าง
ตรวจสอบให้แน่ใจว่าคุณติดตั้ง Python 3.6+ เราใช้ Miniconda เพื่อสร้างสภาพแวดล้อมเสมือนจริงของ Python 3.8
จากนั้นติดตั้งแพ็คเกจ Python:
pip install -r requirements.txt
แพ็คเกจบางส่วนมีการพึ่งพาเพิ่มเติม ( geckodriver , xvfb , GLFW ) ที่ระบุไว้ในส่วนด้านล่าง
ซีลีเนียมใช้ในการดำเนินการระบบอัตโนมัติของเบราว์เซอร์ในระหว่างการรวบรวมข้อมูลและขั้นตอนการประมวลผลล่วงหน้า แม้ว่าเราจะดาวน์โหลดซีลีเนียมเมื่อเราติดตั้งข้อกำหนดของ Python (ด้านบน) คุณต้องตรวจสอบให้แน่ใจว่าได้ดาวน์โหลด Firefox ซึ่งต้องใช้ Geckodriver คำแนะนำการติดตั้งโดยละเอียดอยู่ในเอกสารของซีลีเนียม
เราใช้ pyvirtualdisplay สำหรับการท่องเว็บแบบไม่มีหัว แม้ว่าสิ่งนี้จะครอบคลุมในไฟล์ข้อกำหนด Python แต่ตรวจสอบอีกครั้งว่าคุณมีการพึ่งพาเช่นการติดตั้ง xvfb มีคำแนะนำโดยละเอียดในเอกสารของ PyvirtualDisplay หากคุณไม่จำเป็นต้องทำการท่องเว็บแบบไม่มีหัวนี่ไม่ใช่ข้อกำหนด
สำหรับ Debian:
sudo apt-get install xvfb xserver-xephyr vnc4server xfonts-base
เราใช้พอร์ต Python ดั้งเดิมของไลบรารีกราฟ P5.JS เพื่อวาดรูปแบบโปรแกรม P5 ใช้ GLFW สำหรับการดำเนินการบางอย่างบนกราฟิก OpenGL ความต้องการแตกต่างกันเล็กน้อยตามระบบปฏิบัติการของคุณโปรดตรวจสอบเอกสาร P5 เพื่อให้มั่นใจว่าคุณมีข้อกำหนดที่จำเป็น
สำหรับ Mac OS:
brew install glfw
สำหรับ Debian:
sudo apt-get install libglfw3-dev libglfw3
repo นี้มีชุดย่อย (n = 400) ของชุดข้อมูลสุดท้ายของเรา (n = 15k) ใน data_subsample/ ไดเรกทอรี ชุดย่อยแสดงวิธีการของเราอย่างเพียงพอและให้ตัวเลขที่เทียบเท่ากับชุดข้อมูลเต็มรูปแบบ
อย่างไรก็ตามหากคุณต้องการใช้ชุดข้อมูลแบบเต็มคุณสามารถค้นหาได้ที่นี่:
# 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
หรือถ้าคุณไว้วางใจเราคุณสามารถเรียกใช้สคริปต์ต่อไปนี้:
sh data/download-full-dataset.sh
สคริปต์จะดาวน์โหลดไฟล์ tar.xz สองไฟล์และแกะไฟล์ใน data/ โฟลเดอร์
เราขอแนะนำให้ทำงานแบบแห้งพร้อมข้อมูลชุดย่อยที่พบใน data_subsample/ ก่อนทำสิ่งนี้!
หลังจากที่คุณมีชุดข้อมูลแบบเต็มคุณสามารถพลิกสวิตช์นี้ในจุดเริ่มต้นของสมุดบันทึก Jupyter ใน notebooks/
use_full_dataset = True
หลังจากดาวน์โหลดซีลีเนียมตรวจสอบให้แน่ใจว่ามันใช้งานได้! เราสร้างการทดสอบเพื่อให้แน่ใจว่าไดรเวอร์เหล่านี้ทำงานและคุณสามารถเลียนแบบอุปกรณ์มือถือ นี่เป็นสิ่งจำเป็นในขั้นตอนการประมวลผลข้อมูลล่วงหน้าเพื่อให้ได้ตำแหน่งและมิติขององค์ประกอบ
นี่คือวิธีการทดสอบเหล่านั้น
เปลี่ยนไดเรกทอรีเป็นโฟลเดอร์ทดสอบ:
cd tests
จากนั้นมีการทดสอบสองครั้ง - การทดสอบตัวแยกวิเคราะห์ความเป็นไปได้
python test_parsers.py
และหนึ่งที่ทดสอบโฟลว์การทดสอบเว็บแบบเต็มโดยใช้ตัวอย่างหลายตัวอย่างในโฟลเดอร์ data/tests
python test_assay.py
หากคุณต้องการซ้ำผลลัพธ์ของเราโน้ตบุ๊กควรเรียกใช้ตามลำดับ
อย่างไรก็ตามหากคุณต้องการภาพรวมอย่างรวดเร็วของวิธีการคุณเพียงแค่ต้องกังวลกับสมุดบันทึกด้วยเครื่องหมายดอกจัน (*)
การสาธิตการใช้งานจริงของการตรวจสอบการทำงานของเว็บในผลการค้นหา สิ่งนี้เดินผ่านรหัสพื้นฐานที่อธิบายในวิธีการของเรา
สิ่งนี้เรียกใช้โฟลว์การทดสอบเว็บในชุดข้อมูลอินพุตทั้งหมดของหน้า HTML ที่เรารวบรวม
การประมวลผลข้อมูลล่วงหน้า รวมถึงหมวดหมู่มาตรฐานที่ส่งคืนโดย parsers ทำให้ความยาวของหน้าเว็บเป็นปกติและการคำนวณพื้นที่ใน 50 quantiles
สมุดบันทึกการวิเคราะห์หลักที่ทำซ้ำตัวเลขและตารางที่พบในส่วนการค้นพบของเรา
การทดลองทางความคิดที่แสดงให้เห็นว่าการคำนวณของเราสำหรับ Google และอสังหาริมทรัพย์ที่ไม่ใช่ Gogle จะเปลี่ยนไปอย่างไรหากเราพิจารณาการตีความที่แตกต่างกันของสิ่งที่รวมอยู่ในแต่ละหมวดหมู่ นี่คือส่วนข้อ จำกัด ของเรา
แสดงให้เห็นว่าการคำนวณของอสังหาริมทรัพย์แตกต่างกันระหว่างกลุ่มการค้นหาที่แตกต่างกันอย่างไร การค้นหาจะถูกจัดกลุ่มเข้าด้วยกันตาม "เอนทิตี" ที่ไม่ซ้ำกันหรือหัวข้อการค้นหาจาก Google Trends นี่คือส่วนข้อ จำกัด ของเรา
หลังจากการตรวจสอบการสปอตต์ 700 การค้นหาเราสามารถคำนวณอัตราความผิดพลาดเพื่อความถูกต้องของการจำแนกประเภทของเราและความแม่นยำของขอบเขตอสังหาริมทรัพย์ของเรา เราวัดผลกระทบของข้อบกพร่องทางเทคนิคของเราต่อไปโดยการบัญชีสำหรับพิกเซลที่เราผิดพลาด นี่คือในภาคผนวกของเรา
โฟลเดอร์นี้มีฟังก์ชั่นผู้ช่วยและรหัสสำหรับเครื่องมือแยกวิเคราะห์เว็บเชิงพื้นที่ของเราการทดสอบเว็บ
utils/
├── config.py
├── draw_img.py
├── parsers.py
├── prodigy
│ ├── config
│ │ ├── prodigy.json
│ │ └── serp-help.html
│ └── search_audit.py
├── timeout.py
└── web_assay.py
คลาสพื้นฐานและการค้นหาเว็บของ Google Search อยู่ใน utils/web_assay.py
68 Web Parsers ที่เราใช้ในการจัดหมวดหมู่องค์ประกอบของหน้าการค้นหาของ Google นั้นอยู่ใน utils/parsers.py
คุณจะพบบริบทเพิ่มเติมเกี่ยวกับวิธีการทำงานในภาคผนวกของกระดาษวิธีการของเรา
เสื้อคลุมของเรารอบ P5.js อยู่ใน utils/draw_img.py
คำแนะนำสำหรับเครื่องมือคำอธิบายประกอบการ prodity อยู่ใน utils/prodigy คู่มือคำอธิบายประกอบของเราสำหรับการตรวจสอบข้อผิดพลาดในการตรวจสอบภาพหน้าจอสีอยู่ใน utils/prodigy/config/serp-help.html
ไดเรกทอรีนี้เป็นที่ที่คนกลางและเอาต์พุตจากชุดข้อมูลเต็มรูปแบบจะถูกบันทึกไว้
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 มีตัวอย่างของภาพหน้าจอที่ย้อมด้วยเว็บ assay-เครื่องมือแยกวิเคราะห์เว็บใหม่ของเรา data/error_analysis มีข้อมูลการตรวจสอบสปอตจากสองคำอธิบายประกอบ
data/output มีตารางและตัวเลขที่ใช้ในบทความ การทำงานของคุณ
data/test มี HTML ผลการค้นหาตัวอย่างสำหรับการทดสอบและ notebooks/0-demo-web-assay.ipynb
หากคุณดาวน์โหลดชุดข้อมูลแบบเต็มเนื้อหาควรถูกแยกออกเป็น data/ ทำมิเรอร์องค์กรของ data_subsample/
data_subsample/ มี html ดิบ ( data_subsample/input/ ) และตัวกลางสำหรับชุดย่อยแบบสุ่มของผลการค้นหา 400 ผลจากตัวอย่าง 15k ของเรา
data_subsample/
├── input
│ └── google_search
└── intermediary
├── element_metadata.jsonl.gz
└── google_search
ชุดข้อมูลขนาดเล็กนี้จัดส่งพร้อมที่เก็บข้อมูลเพื่อแสดงวิธีการของเราในลักษณะที่เข้มข้นของทรัพยากรที่ทันเวลาและน้อยกว่าชุดข้อมูลเต็มรูปแบบ
element_metadata.json1.gz เป็นเมตาดาต้าองค์ประกอบเชิงพื้นที่ที่ถูกประมวลผลล่วงหน้าจากการทดสอบเว็บ การวิเคราะห์จำนวนมากของเราใช้ชุดข้อมูลนี้ไม่ว่าจะมาจากชุดย่อยหรือชุดข้อมูลเต็มรูปแบบ
ลิขสิทธิ์ 2020, Markup News Inc.
อนุญาตให้แจกจ่ายและใช้งานในรูปแบบแหล่งที่มาและไบนารีโดยมีหรือไม่มีการแก้ไขได้รับอนุญาตหากเป็นไปตามเงื่อนไขต่อไปนี้:
การแจกจ่ายซ้ำของซอร์สโค้ดจะต้องรักษาประกาศลิขสิทธิ์ข้างต้นรายการเงื่อนไขและข้อจำกัดความรับผิดชอบต่อไปนี้
การแจกจ่ายซ้ำในรูปแบบไบนารีจะต้องทำซ้ำประกาศลิขสิทธิ์ข้างต้นรายการเงื่อนไขและข้อจำกัดความรับผิดชอบต่อไปนี้ในเอกสารและ/หรือวัสดุอื่น ๆ ที่ได้รับการแจกจ่าย
ไม่ว่าจะเป็นชื่อของผู้ถือลิขสิทธิ์หรือชื่อของผู้มีส่วนร่วมในการรับรองหรือส่งเสริมผลิตภัณฑ์ที่ได้จากซอฟต์แวร์นี้โดยไม่ได้รับอนุญาตเป็นลายลักษณ์อักษรล่วงหน้า
ซอฟต์แวร์นี้จัดทำโดยผู้ถือลิขสิทธิ์และผู้มีส่วนร่วม "ตามที่เป็นอยู่" และการรับประกันโดยชัดแจ้งหรือโดยนัยใด ๆ รวมถึง แต่ไม่ จำกัด เพียงการรับประกันโดยนัยของความสามารถในการค้าและความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ ไม่ว่าในกรณีใดผู้ถือลิขสิทธิ์หรือผู้มีส่วนร่วมจะต้องรับผิดชอบต่อความเสียหายทางตรงทางอ้อม, โดยบังเอิญ, พิเศษ, เป็นแบบอย่าง, หรือความเสียหายที่ตามมา (รวมถึง แต่ไม่ จำกัด เพียงการจัดหาสินค้าทดแทนหรือบริการการสูญเสียการใช้ข้อมูลหรือผลกำไรหรือการหยุดชะงักของธุรกิจ แนะนำถึงความเป็นไปได้ของความเสียหายดังกล่าว