Este repositório contém código para reproduzir as descobertas apresentadas em nossa história, "o principal resultado de pesquisa do Google? Surpresa! É o Google" da nossa série, Google The Giant.
Nossa metodologia é descrita em "Como analisamos os resultados da pesquisa do Google".
Os números e tabelas de nossa análise podem ser encontrados na pasta data .
Como nosso conjunto de dados completo era muito grande para ser colocado no GitHub, fornecemos um subconjunto na pasta de data-subsample .
Para usar o conjunto de dados completo, consulte os dados de download.
Nossa nova ferramenta de análise espacial da Web pode ser encontrada no utils/web_assay.py .
Os notebooks Jupyter usados para pré -processamento e análise de dados são Avialble na pasta notebooks .
As descrições para cada notebook estão descritas na seção Notebooks abaixo.
Certifique -se de ter o Python 3.6+ instalado, usamos o Miniconda para criar um ambiente virtual do Python 3.8.
Em seguida, instale os pacotes Python:
pip install -r requirements.txt
Alguns dos pacotes têm dependências adicionais ( geckodriver , xvfb , GLFW ) observadas nas seções abaixo.
O selênio é usado para executar a automação do navegador durante as etapas de coleta de dados e pré -processamento. Embora baixemos o Selenium quando instalamos os requisitos do Python (acima), você deve fazer o download também do Firefox, que requer o Geckodriver. As instruções detalhadas de instalação estão na documentação do selênio.
Usamos o PyvirtualDisplay para navegar sem cabeça. Embora isso seja abordado no arquivo de requisitos do Python, verifique duas vezes que você possui dependências como xvfb instalado. Existem instruções detalhadas na documentação do PyvirtualDisplay. Se você não precisar fazer a navegação sem cabeça, isso não é um requisito.
Para Debian:
sudo apt-get install xvfb xserver-xephyr vnc4server xfonts-base
Utilizamos uma porta python nativa da biblioteca gráfica P5.js para desenhar formas programaticamente. O P5 usa o GLFW para determinadas operações nos gráficos OpenGL, os requisitos diferem um pouco com base no seu sistema operacional, verifique a documentação P5 para garantir que você tenha os requisitos necessários.
Para Mac OS:
brew install glfw
Para Debian:
sudo apt-get install libglfw3-dev libglfw3
Este repo possui um subconjunto (n = 400) do nosso conjunto de dados final (n = 15k) no data_subsample/ diretório. O subconjunto ilustra suficientemente nossa metodologia e fornece números comparáveis ao conjunto de dados completo.
No entanto, se você quiser usar o conjunto de dados completo, poderá encontrá -lo aqui:
# 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, se você confia em nós, pode executar o seguinte script:
sh data/download-full-dataset.sh
O script baixará dois arquivos tar.xz e descompactará na data/ pasta.
Sugerimos uma corrida a seco com os dados do subconjunto encontrados em data_subsample/ antes de fazer isso!
Depois de ter o conjunto de dados completo, você pode alternar esse switch no início dos notebooks Jupyter nos notebooks/ .
use_full_dataset = True
Depois de baixar o Selenium, verifique se está funcionando! Criamos testes para garantir que esses drivers funcionem e que você possa emular um dispositivo móvel. Isso é necessário na etapa de pré -processamento de dados para obter a localização e as dimensões dos elementos.
Aqui está como fazer esses testes.
Altere os diretórios para a pasta de testes:
cd tests
Depois, há dois testes - um que testa a fodução do analisador
python test_parsers.py
e um que testa o fluxo completo do ensaio da Web usando vários exemplos na pasta data/tests .
python test_assay.py
Se você deseja reeroduzir nossos resultados, os notebooks devem ser executados sequencialmente.
No entanto, se você deseja uma visão geral rápida da metodologia, só precisa se preocupar com os notebooks com um asterix (*).
Uma demonstração prática da funcionalidade de ensaios da Web em um resultado de pesquisa. Isso percorre o código subjacente que está explicando em nosso método.
Isso executa o fluxo de ensaio da Web durante toda a entrada do conjunto de dados de entrada das páginas HTML que coletamos.
Pré -processamento de dados. Inclui a padronização de categorias retornadas por analisadores, normalização da duração das páginas da Web e a área de cálculo em 50 quantis.
O principal caderno de análise que reproduz as figuras e tabelas encontradas em nossa seção de descobertas.
Um experimento de pensamento que mostra como nossos cálculos para o Google e o Google Real Estate mudariam se tivéssemos considerado diferentes interpretações do que está incluído em cada categoria. Isso está em nossa seção de limitações.
Mostra como os cálculos do setor imobiliário diferem entre os diferentes grupos de pesquisas. As pesquisas são agrupadas com base em "entidades" exclusivas ou tópicos de pesquisa do Google Trends. Isso está em nossa seção de limitações.
Após a verificação de 700 pesquisas coradas, conseguimos calcular as taxas de erro para a precisão de nossas classificações e a precisão de nossos limites imobiliários. Medimos ainda o impacto de nossas deficiências técnicas, contabilizando os pixels que mal ou menos ou menos classificados. Isso está no nosso apêndice.
Esta pasta contém funções e código auxiliares para nossa ferramenta espacial de análise da web, ensaio da web.
utils/
├── config.py
├── draw_img.py
├── parsers.py
├── prodigy
│ ├── config
│ │ ├── prodigy.json
│ │ └── serp-help.html
│ └── search_audit.py
├── timeout.py
└── web_assay.py
A classe base e o ensaio da Web de pesquisa do Google estão no utils/web_assay.py .
Os 68 analisadores da Web que usamos para categorizar elementos da página de pesquisa do Google estão em utils/parsers.py .
Você encontrará mais contexto sobre como eles funcionam no apêndice do nosso artigo de métodos.
Nosso invólucro em torno do P5.js está no utils/draw_img.py .
As instruções para a produtividade da ferramenta de anotação estão no utils/prodigy . Nosso guia de anotação para verificação de capturas de tela manchada de erro está em utils/prodigy/config/serp-help.html .
Este diretório é onde os intermediários e saídas do conjunto de dados completos são salvos.
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 contém exemplos de capturas de tela coradas usando o ensaio da Web-nossa nova ferramenta de análise da Web. data/error_analysis contém dados de verificação de pontos de dois anotadores.
data/output contêm tabelas e figuras usadas em nosso artigo de trabalho .
data/test contêm alguns resultados de pesquisa de amostra 'html para testes e os notebooks/0-demo-web-assay.ipynb .
Se você baixar o conjunto de dados completo, o conteúdo deve ser extraído em data/ , espelhando a organização de data_subsample/ .
data_subsample/ contém o html bruto ( data_subsample/input/ ) e intermediários para uma subesset aleatória de 400 resultados de pesquisa em nossa amostra de 15k.
data_subsample/
├── input
│ └── google_search
└── intermediary
├── element_metadata.jsonl.gz
└── google_search
Esse conjunto de dados menor é enviado com o repositório para demonstrar nossa metodologia de maneira oportuna e menos intensiva em recursos do que o conjunto de dados completo.
element_metadata.json1.gz é os metadados do elemento espacial pré -processado retornados do ensaio da web. A maior parte da nossa análise usa esse conjunto de dados, seja do subconjunto ou do conjunto de dados completo.
Copyright 2020, The Markup News Inc.
Redistribuição e uso em formulários de origem e binária, com ou sem modificação, são permitidos, desde que as seguintes condições sejam atendidas:
As redistribuições do código -fonte devem manter o aviso de direitos autorais acima, esta lista de condições e o seguinte aviso.
As redistribuições em formato binário devem reproduzir o aviso de direitos autorais acima, esta lista de condições e o seguinte aviso na documentação e/ou outros materiais fornecidos com a distribuição.
Nem o nome do detentor dos direitos autorais nem os nomes de seus colaboradores podem ser usados para endossar ou promover produtos derivados deste software sem permissão prévia por escrito específica.
Este software é fornecido pelos detentores de direitos autorais e colaboradores "como está" e quaisquer garantias expressas ou implícitas, incluindo, entre outros, as garantias implícitas de comercialização e condicionamento físico para um determinado objetivo. 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, EVEN IF Aconselhado sobre a possibilidade de tais danos.