Fala galera do mundo dos dados! Espero que estejam todos bem e se cuidando. Todo mundo algum dia já teve ou vai ter problemas com a velocidade da internet. Você já precisou medir essa velocidade? Ah Tiago, um monte de sites faz isso, e você está certo. Mas se você quiser verificar o dia todo, para fazer uma reclamação com o seu fornecedor? Ou simplesmente por curiosidade? O Python pode te ajudar de uma forma bem simples com a biblioteca SpeedTest.
Vou deixar um repositório no GitHub prontinho para você fazer o clone e se divertir, com um notebook para fazer o teste e acompanhar os resultados. Ainda de quebra, deixar os dados guardados em uma planilha de Excel. Vamos rapidinho conhecer alguns conceitos e #PartiuCode.
O que é a biblioteca SpeedTest?
A biblioteca SpeedTeste tem como principal função, testar a largura de banda da internet usando o speedtest.net. Aqui vamos fazer um passo a passo para monitorar a conexão, medindo as taxas de download e upload. Sem mais delongas, vamos aos códigos.
Partiu Teste de Velocidade da Internet
Quando você contrata uma internet residencial, você espera que a velocidade de conexão seja igual a contratada. Mas será que sua conexão de internet entrega o que foi contratado? Olha o resultado que vamos conseguir chegar aqui.

Observe no gráfico acima, como em um dado momento, a taxa de download e upload estão abaixo do que se espera. É isso mesmo, criaremos um código bem prático para monitorar as taxas de download e upload como mostrado no gráfico acima. Assim podemos responder a pergunta que fiz logo no inicio deste tópico, depois me conta o resultado dos seus testes. Let’s go passo a passo do código.
Instalando e Importando Bibliotecas
Primeiramente, vamos começar instalando uma biblioteca necessária para nossa solução. A speedtest pode ser instalada com o código abaixo. Esse procedimento só vai ser necessário durante a primeira execução.
pip install speedtest
Feito isso, podemos fazer a importação de todas bibliotecas que utilizaremos ao longo da solução. Temos a speedtest que vai fazer a medição da conexão, a datetime para pegar a data e hora no momento do teste, a pandas para estruturar o nossos dados para gravação, a time utilizaremos para fazer uma espera no código e a matplotlib e seaborn são bibliotecas gráficas para visualização dos dados.
import speedtest from datetime import datetime import pandas as pd from time import sleep import matplotlib.pyplot as plt import seaborn as sns
Agora vamos fazer uma salada de frutas com essas bibliotecas e criar uma função para testar nossa conexão.
Função para Testar Velocidade da Internet
A função teste_internet, consiste em fazer a leitura de uma tabela Excel (dados.xlsx), realizar os testes de velocidade tanto de upload quanto de download (velocidade_download, velocidade_upload) e salvar (df.to_excel) essas informações na tabela carregada. Observe os detalhes no trecho de código abaixo com comentários por blocos.
# Função para testar velocidade de conexão def teste_internet(): # lendo base de dados de testes anteriores df = pd.read_excel('dados.xlsx', sheet_name='base') # Instanciando a função de test do Speedtest s = speedtest.Speedtest() s.get_servers() s.get_best_server() # Testando velocidades velocidade_download = round(s.download(threads=None)*(10**-6)) velocidade_upload = round(s.upload(threads=None)*(10**-6)) # Capturando data e hora do teste data_atual = datetime.now().strftime('%d/%m/%Y') hora_atual = datetime.now().strftime('%H:%M') # Atualizando base de dados dos testes df.loc[len(df)] = [data_atual, hora_atual, velocidade_download, velocidade_upload] df.to_excel('dados.xlsx', sheet_name='base', index=False) return data_atual, hora_atual, velocidade_download, velocidade_upload
Fazendo uma tradução técnica para quem curte os detalhes. O dataframe df vai ser carregado com os dados na planilha dados.xlsx na aba base. Em seguida vamos instanciar a variável s com a função Speedtest(), responsável por fazer teste de conexão e acrescentaremos as funções get_servers() e get_best_server(), responsáveis respectivamente por selecionar o servidor de origem da conexão e o melhor servidor destino para conectar e fazer o teste. Dando sequência, as variáveis velocidade_download e velocidade_upload receberão os resultados dos testes. A data e hora do teste vão estar nas variáveis data_atual e hora_atual, obtidas com a função now() e formatadas com a função strftime(). Finalizamos gravando os dados de data atual, hora atual, velocidade download e velocidade upload no dataframe df e exportamos com a função to_excel() para gravação do arquivo.
Muita coisa né? Mas é bem simples! Vamos executar a função e ver os resultados.
Resultados do Teste de Velocidade da Internet
Agora é a hora da verdade, vamos executar a função teste_internet criada acima. Criaremos mais duas variáveis para definir quantos testes vamos fazer e qual vai ser o intervalo entre os testes. A variável segundos é só para otimizar o código, e fazer o cálculo do tempo de espera entre um teste e outro.
# Definição de variáveis para teste quantidade_testes = 10 intervalo_minutos = 1 segundos = 60 # Loop para execução dos testes for q in range(quantidade_testes): data_atual, hora_atual, velocidade_download, velocidade_upload = teste_internet() print('Teste {}/{} Data: {} Hora: {} Download: {} Upload: {}'.format(q+1, quantidade_testes, data_atual, hora_atual, velocidade_download, velocidade_upload)) if (q+1) < quantidade_testes: sleep(intervalo_minutos*segundos)
Após o loop for ser executado vamos obter o seguinte resultado, que pode ser observado na figura abaixo.

Além do resultado obtido em tela, foi gravado o arquivo dados.xlsx com o resultado do teste feito acima. É tudo e somente isso nossa brincadeira de hoje.
Velocidade da Internet ao Cubo
Como resultado, foi apresentado uma forma de realizar o seu próprio teste de conexão com o Python e a biblioteca speedtest. Assim podemos ter os nossos próprios datasets de teste de velocidade da internet.
Para que vai servir isso Tiago? Sua criatividade é o limite! Eu utilizei para provar ao meu fornecedor de internet que estava tendo problemas com a conexão, pois sempre que era feito o teste unitário a conexão estava boa. Então deixei o script rodando por 12 horas e apresentei os horários onde apresentava lentidão.
Dessa forma, espero que você tenha curtido o conteúdo, não esqueça de mandar aquele feedback e compartilhar nosso conteúdo com a comunidade. No GitHub tem a solução completa, um abraço e até próxima.
Conteúdos ao Cubo
Por fim, deixo algumas sugestões de conteúdos anteriores também do Dados ao Cubo, sempre falando sobre o mundo dos dados.
- Introdução a Competições de Ciência de Dados no Kaggle
- AutoML (Automated Machine Learning) com ML.Net
- Entre Vieses e Causalidades: Como (não) ser Enganado pelos Dados
- DataViz com Power BI
- Sistemas de Recomendações com Surprise
- Consultar Dados com Streamlit e o PostgreSQL
- Análise de Dados com Numpy Python
Finalizo com um convite para você ser Parceiro de Publicação Dados ao Cubo e escrever o próximo artigo, compartilhando conhecimento para toda a comunidade de dados. Não esqueça de assinar a nossa Newsletter para ficar por dentro de todas as novidades.

Baiano, apaixonado por dados e tecnologia, amante das inovações tecnológicas que facilitam a vida humana! Formado em Engenharia da Computação e com MBA em Gestão da Informação e Business Intelligence e especialização em Data Science. Atualmente atua como Data Tech Lead na Lopes, além de Professor na área de dados e nas horas vagas cria uns modelos de Machine Learning com Python e soluções diversas com dados!