Python

Velocidade da Internet com a Biblioteca SpeedTest Python

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 Conexão

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.

Velocidade da internet

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 Conexão

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

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.

Teste da internet

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.

Conclusões

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.

Gostou? Compartilhe!

Você pode gostar:

Comentários: