Ferramentas Utilizadas
Python 3
Pyecharts
Requests
Expressões Regulares
Aquisição de Dados
A fonte de dados utilizada é o Índice TIOBE, que registra o posicionamento anual de diversas linguagens de programação.
O processo de obtenção dos dados é realizado através de uma requisição HTTP:
def obter_dados_fonte(url): try: resposta = requests.get(url, timeout=10) resposta.raise_for_status() return resposta.text except requests.exceptions.RequestException as e: print(f"Erro ao obter dados: {e}") return None
</div>### Processamento dos Dados
Após a obtenção do conteúdo HTML, utilizamos expressões regulares para extrair as informações relevantes sobre os rankings históricos.
<div>
def processar_dados_html(conteudo_html): lista_datas = [] dados_retorno = [] nomes_linguagens = []
# Extrai a série de dados do conteúdo HTML
serie_dados = ''.join(re.findall(r'series: (.*?)\}\);', conteudo_html, re.DOTALL))
pontos_dados = re.findall(r'({.*?})', serie_dados, re.DOTALL)
for item in pontos_dados:
# Extrai o nome da linguagem
linguagem = ''.join(re.findall(r"{name : '(.*?)'", item))
nomes_linguagens.append(linguagem)
# Extrai os dados de data e valor
informacoes_temporais = re.findall(r"\[Date.UTC(.*?)\]", item)
for info_tempo in informacoes_temporais:
info_limpa = re.sub(r'[()]', "", info_tempo)
valor = info_limpa.split(',')[-1].strip()
data = '-'.join(map(lambda x: x.strip(), info_limpa.split(',')[:-1]))
if linguagem == "Java":
lista_datas.append(data)
dados_retorno.append({data: {linguagem: valor}})
# Estruturação dos dados em um dicionário organizado
estrutura_dados = {data: {lingua: 0 for lingua in nomes_linguagens} for data in lista_datas}
# Preenchimento com os valores reais
for chave, valor in estrutura_dados.items():
for item in dados_retorno:
for item_chave, item_valor in item.items():
if chave == item_chave:
valor.update(item_valor)
return estrutura_dados
</div>### Geração da Visualização
Utilizando a biblioteca Pyecharts, criamos uma visualização interativa que mostra a evolução do ranking das linguagens ao longo do tempo.
<div>
def criar_grafico_temporal(dados_estruturados): # Configuração da linha do tempo linha_tempo = Timeline().add_schema(play_interval=300, width="100%", height="500px")
# Linguagens a serem exibidas no gráfico
linguagens_exibidas = ['C', 'Java', 'Python', 'C++', 'C#', 'Visual Basic',
'JavaScript', 'PHP', 'SQL', 'Assembly language']
# Geração de um gráfico para cada ano
for data, valores in dados_estruturados.items():
grafico_barras = (
Bar()
.add_xaxis(linguagens_exibidas)
.add_yaxis("Popularidade", [valores.get(ling, 0) for ling in linguagens_exibidas],
label_opts=opts.LabelOpts(position="right"))
.reversal_axis()
.set_global_opts(
title_opts=opts.TitleOpts(f"Ranking de Linguagens de Programação - {data}"),
legend_opts=opts.LegendOpts(is_show=False),
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="shadow")
)
)
linha_tempo.add(grafico_barras, data)
# Renderização do gráfico final
linha_tempo.render("evolucao_ranking_linguagens.html")
print("Visualização gerada com sucesso: evolucao_ranking_linguagens.html")
</div>### Integração do Processo
Para executar todo o fluxo de trabalho, podemos criar uma função principal que coordnea todas as etapas:
<div>
def main(): # URL do índice TIOBE url_tiobe = "https://www.tiobe.com/tiobe-index/"
# 1. Obter dados da fonte
html_conteudo = obter_dados_fonte(url_tiobe)
if not html_conteudo:
return
# 2. Processar os dados obtidos
dados_processados = processar_dados_html(html_conteudo)
# 3. Gerar visualização interativa
criar_grafico_temporal(dados_processados)
if name == "main": main()
</div>O resultado final é um arquivo HTML interativo que permite visualizar a evolução do posicionamento das linguagens de programação ao longo dos últimos 20 anos, com uma animação suave que mostra as mudanças de popularidade temporalmente.
</div>