Análise de Dados Estruturais de Geologia com ChatGPT e Python

{tocify}

Recentemente, com os avanços na inteligência artificial (IA), ferramentas como o ChatGPT têm ajudado a resolver problemas, criar códigos e otimizar processos de forma eficiente. Neste artigo, exploraremos como essa ferramenta pode ser empregada na elaboração de código Python para geração de figuras de análise de geologia estrutural, demonstrando um exemplo prático.


O ChatGPT, uma criação da OpenAI, é um modelo de linguagem de última geração, treinado em uma vasta gama de dados, capaz de compreender e gerar texto em linguagem natural. Ao integrar seu conhecimento e capacidades com a linguagem de programação Python, o ChatGPT se torna uma ferramenta poderosa para pesquisadores, desenvolvedores e engenheiros. Utilizaremos a versão 3.5, gratuita mediante cadastro na página da desenvolvedora da IA.


O Exemplo Prático

Vamos explorar um exemplo prático da utilização do ChatGPT 3.5 na elaboração de um código Python para criar diagramas estereográficos e de rosetas, com base em um conjunto de dados estruturais. Utilizaremos bibliotecas como matplotlib, numpy e mplstereonet para visualizar e analisar dados geológicos. A única que é necessária instalação, provavelmente, é a mplstereonet, já que as demais são comuns em instalações WinPython ou Anaconda.

Os dados estruturais estão estruturados em um arquivo texto (.txt), padrão de saída e compartilhamento do app StereonetMobile, elaborado pelo Prof. Richard W. Allmendinger, disponível para IOs (iPhone). Em outra postagem posso escrever sobre o app e sua utilização para coleta de dados estruturais. Segue exemplo de formatação dos dados gerados a partir de coletas de campo:


No. Type Structure Color Trd/Strk Plg/Dip Longitude Latitude
1 P Joint 255204000 99,82 82,0 -47,4260611 -7,1893534
{codeBox}

Importante ressaltar que o arquivo texto apresenta várias colunas com dados: tipo de medida, latitude, longitude, entre outras. As colunas que utilizaremos são as de número 4 e 5 correspondentes aos dados estruturais STRIKE e DIP que nos interessam. Importante lembrar que a primeira coluna é a de número 0, em Python. Este exemplo da estruturação dos dados também foi inserido via prompt no ChatGPT para que ele pudesse analisá-lo e realizar as alterações do código, incluindo as colunas corretas para análise.


Passo a Passo do Código

Após entrada em prompt, no ChatGPT, do exemplo de código Python fornecido na página do desenvolvedor da biblioteca mplstereonet como forma de fornecer à IA uma referência, houve uma resposta-código que inicia chamando as bibliotecas e direcionando o arquivo texto com os dados estruturais:

"""Created on Nov 21 12:17:35 2023 @author: luiz.fernando with ChatGPT""" # Importa as bibliotecas Python necessárias import matplotlib.pyplot as plt import numpy as np import mplstereonet # Caminho para o arquivo de dados estruturais file_path = 'C:\TEMP\seu-arquivo.txt' {hljs}

Em seguida, carregamos os dados estruturais do arquivo texto usando a biblioteca numpy para processar e limpar os dados. Em seguida, extraímos as informações relevantes (strikes e dips) para a análise estrutural.

# Carregue os dados, pulando o cabeçalho data = np.genfromtxt(file_path, # caminho para arquivo skip_header=1, # pule o cabeçalho usecols=(4, 5), # colunas 4 e 5 delimiter=' ', # delimitador dtype=str) # tipo de dado # Lidando com os valores NaN data[data == '_'] = 'NaN' # Substituindo os , por . data = np.char.replace(data, ',', '.').astype(float) data = data[~np.isnan(data).any(axis=1)] {hljs}


Ao inserir o código fornecido no console IDE Spyder para rodá-lo e produzir a figura desejada, ocorria erro ao lidar as vírgulas (provenientes do app e do meu sistema em Português do iPhone). Assim,  solicitei a correção ao ChatGPT, colando a informação do erro. Em seguida, adotei o mesmo procedimento para corrigir os valores NaN (not a number) que aparecerem como erro.

Todos os erros fornecidos no console do IDE foram informados ao ChatGPT{alertSuccess}

Todas essas etapas de correção foram bastante interativas, como em uma conversa e não demoraram mais do que 5 minutos -- significativamente menos tempo que eu levaria para corrigir ou entender os erros, já que não sou programador profissional.

No código acima, os valores '_' são substituídos por 'NaN', em seguida, a função np.char.replace() é usada para substituir vírgulas por pontos e converter os dados para um tipo numérico com astype(float). Isso permite que a verificação de valores NaN funcione corretamente. Em seguida, os dados são filtrados para remover linhas com valores NaN antes de plotar o diagrama estereográfico.

O código em seguida foi estruturado de maneira a plotar um diagrama estereográfico de polos e um diagrama de roseta para visualizar a distribuição dos dados inseridos. Para que o ChatGPT pudesse entender todo o tratamento dos dados possível, inseri toda a lista de funções e exemplos da biblioteca mplstereonet disponível online e pedi para que fossem corrigidos os eventuais erros, com sugestões de melhorias do código com a finalidade de gerar as figuras da melhor forma possível.

Ainda, solicitei o acréscimo das legendas para ambos os diagramas e também as possibilidades de cores, pedindo a troca das mesmas no diagrama de densidades. No final, ainda requisitei ao ChatGPT que incluísse o número de medidas coletadas em campo. Todas as requisições foram prontamente atendidas, sem erros no código ou na figura final!

# Extrair strike e dip dos dados carregados strikes = data[:, 0] dips = data[:, 1] # Cálculo dos limites dos intervalos do histogram bin_edges = np.arange(-5, 366, 10) # Cria histograma dos strikes number_of_strikes, bin_edges = np.histogram(strikes, bin_edges) # Combina primeiro e último limite para assegurar representação cíclica number_of_strikes[0] += number_of_strikes[-1] # Duplica o histograma para simetria da visualização half = np.sum(np.split(number_of_strikes[:-1], 2), 0) two_halves = np.concatenate([half, half]) # Cria uma figura fig = plt.figure(figsize=(16, 8)) # Adiciona um subplot para a projeção estereográfica ax = fig.add_subplot(121, projection='stereonet') # Acrescenta os polos dos plano no stereonet ax.pole(strikes, dips, c='k', label='Polos dos Planos') # Mostra o contorno/densidade no stereonet contour = ax.density_contourf(strikes, dips, measurement='poles', cmap='viridis') plt.colorbar(contour, ax=ax, label='Densidade de Ocorrência') # Adiciona a legenda da densidade # Remove ticks do estreograma ax.set_azimuth_ticks([]) # Configura título e grid para o plot ax.set_title('Diagrama de Densidades dos Polos', y=1.10, fontsize=15) ax.grid() # Adiciona um subplot para o diagrama de roseta ax = fig.add_subplot(122, projection='polar') # Plota o diagrama de roseta usando barras ax.bar(np.deg2rad(np.arange(0, 360, 10)), two_halves, width=np.deg2rad(10), bottom=0.0, color='.8', edgecolor='k', label='Direção dos Planos') # Customiza as configurações do estereograma polar ax.set_theta_zero_location('N') ax.set_theta_direction(-1) ax.set_thetagrids(np.arange(0, 360, 10), labels=np.arange(0, 360, 10)) ax.set_rgrids(np.arange(1, two_halves.max() + 1, 2), angle=0, weight='black') ax.set_title('Diagrama de Roseta', y=1.10, fontsize=15) # Adiciona legenda ao diagrama de roseta ax.legend(loc='upper right') # Ajusta o layout para melhor visualização fig.tight_layout() # Mostra a figura final plt.show() {hljs}


Resultado

Excelente resultado para pouco mais de 15 minutos de conversa com a IA gratuita da OpenAI! Todo o código estruturado, sem erros e pronto para elaborar novas figuras a partir de dados em arquivos de texto. Utilizando as funcionalidades de plotagem do matplotlib, mplstereonet e manipulação de dados do numpy, conseguimos criar visualizações claras e informativas do conjunto de dados.


Facilidades Oferecidas pelo ChatGPT

O ChatGPT proporciona uma maneira eficiente de entender os requisitos do usuário e fornecer soluções precisas. No exemplo apresentado, o diálogo com o ChatGPT permitiu elaborar um código Python completo para visualização de dados estruturais em diagramas estereográficos.

A interação com o ChatGPT proporcionou um fluxo de trabalho mais fluido, permitindo ajustes no código com base nos requisitos específicos e na experiência do usuário.


Conclusão

O uso do ChatGPT na elaboração de código Python oferece um ambiente flexível e interativo para criar soluções rápidas e precisas. A combinação de recursos de linguagem natural do ChatGPT com a versatilidade da linguagem Python resulta em um processo de desenvolvimento mais eficiente e menos suscetível a erros.

A ferramenta fornece insights, sugestões e soluções detalhadas para problemas específicos, destacando-se como uma ferramenta valiosa para desenvolvedores de todos os níveis de habilidade.

Postar um comentário

Postagem Anterior Próxima Postagem