Mais

5.5 Sismic Reflection Jupyter Notebook - Geociências

5.5 Sismic Reflection Jupyter Notebook - Geociências


Instruções

  • Para usar esta página, leia o texto entre cada uma das janelas de código python e pressione RUN para executar o código na caixa.
  • É necessário executar cada uma das caixas em ordem.
  • Não clique em reiniciar nas células, a menos que você volte ao topo da página e recomece.
  • Se você modificar o código, essa modificação não permanecerá após você sair ou atualizar esta página.
  • Você deve executar simulações / células que requerem entrada do usuário para serem concluídas. Certifique-se de ver a mensagem informando que uma célula está completa antes de prosseguir para a próxima célula. Veja por que você deve fazer isso:
    • Essas células não podem ser executadas novamente até que a simulação seja concluída, caso contrário, nenhuma saída será gerada.
    • Todas as células a seguir não serão executadas até que a célula de entrada do usuário seja concluída.
  • Para menus suspensos: Você não precisa executar novamente as células com o menu para alterar sua seleção. No entanto, você deve executar novamente todas as células a seguir para implementar a mudança.

Seja paciente, algumas vezes pode levar de 1 a 2 minutos para o kernel do juypter iniciar.

Um exemplo interativo de reflexão sísmica de camada única.

Perguntas-chave: Considere-os conforme você avança nesta página.

  • As ondas com ângulos de incidência maiores ou menores viajam mais longe?
  • Compare os dois segmentos dos vários caminhos de raios entre si: como eles são semelhantes ou diferentes?
  • O espaçamento do ponto de ressalto depende da espessura da camada? Por que ou por que não?

Primeiro, vamos importar as bibliotecas necessárias.

Agora vamos criar nosso modelo de 1 camada. Esta célula solicitará que você escolha uma espessura de camada e o espaçamento entre os receptores e, em seguida, plotará seu modelo. Matematicamente, este modelo é criado selecionando os locais do receptor e calculando os ângulos de incidência necessários para atingir esses locais, dada a espessura da camada.

Perguntas-chave: Considere-os conforme você avança nesta página.

  • As ondas com ângulos de incidência maiores ou menores viajam mais longe?
  • Compare os dois segmentos dos vários caminhos de raios entre si: como eles são semelhantes ou diferentes?
  • O espaçamento do ponto de ressalto depende da espessura da camada? Por que ou por que não?

MyCarta

Entre 2 e 3 anos atrás comecei a transformar minha paixão de longa data pelo processamento de imagens, e particularmente pelo processamento morfológico de imagens, para a tarefa de segmentação de falhas.

Na época, compartilhei meu código preliminar, do qual fiquei muito feliz, em um notebook Jupyter, que pode ser executado de forma interativa neste repositório GitHub.

Duas áreas precisam ser melhoradas para aproximar o fluxo de trabalho inicial de um de produção. O primeiro está no lado do processamento de imagem e morfologia que estou pensando em incluir: uma maneira melhor de limpar poda de falhas muito curtas para eliminar segmentos espúrios na esqueletização resulta na distribuição de von Mises em vez da distribuição padrão para filtrar ângulos de mergulho baixos. Eu sei como melhorar todos esses aspectos e tenho alguns trechos de código em vários locais no meu Mac, mas ainda não estou pronto para fazer isso.

A segunda área, do lado sísmico, é a capacidade de trabalhar com dados 3D. Este tem sido um ponto sensível há algum tempo.

Surge o segyio, uma biblioteca rápida e de código aberto, desenvolvida precisamente para trabalhar com arquivos SEGY. Para ser justo, segyio já existe há algum tempo, como bem sei por ser membro da comunidade Software Underground (balançado), mas foi há apenas um mês ou mais que comecei a mexer nele.

Esta postagem é principalmente para compartilhar com a comunidade o que eu aprendi na minha primeira sessão de playground (com algumas dicas muito úteis de Jørgen Kvalsvik, um membro do balançado, e um dos criadores do segyio), o que me permitiu criar um volume de segmentação de falhas 3D (e me divertir muito no processo) a partir de um volume de similaridade (ou descontinuidade).

O fluxo de trabalho, que você pode executar interativamente neste repositório GitHub segyio-notebooks (procure o tutorial 01 & # 8211 Basic) é resumido pictoricamente na Figura 1 e compreende as etapas abaixo:

  • use segy-io para importar dois volumes sísmicos no formato de arquivo SEGY do conjunto de dados F3, offshore Holanda, licenciado CC-BY-SA: um volume de similaridade e um volume de amplitude (com suavização do filtro mediano direcionado por mergulho aplicado)
  • manipular a semelhança para criar um volume de descontinuidade / falha
  • criar uma máscara de falha e exibir algumas fatias de tempo de amplitude com falhas sobrepostas
  • escrever o volume da falha no arquivo SEGY usando segy-io, reutilizando os cabeçalhos do arquivo de entrada

Figura 1. Fluxo de trabalho de segmentação de falha sísmica 3D ingênuo em Python.

Obtenha os blocos de notas no GitHub (procure o tutorial 01 e # 8211 Basic)

ISENÇÃO DE RESPONSABILIDADE: As etapas descritas no tutorial não pretendem ser um fluxo de trabalho de segmentação de falha de qualidade de produção. Eles funcionam razoavelmente bem no volume de semelhanças pequeno e limpo, habilmente selecionado para a ocasião, mas é apenas um exemplo simples.


Notas da reunião

Notas das reuniões do Fatiando: decisões do grupo, discussões, atualizações, etc.

Verde

Processamento e interpolação de dados espaciais com um toque de aprendizado de máquina

Transform2020-lightning

Cadernos e slides mostrados nas conversas relâmpago do TRANSFORM2020

Vira-lata

Um amigo para buscar seus arquivos de dados

Rockhound-data

Um lugar para formatar dados para consumo RockHound

Harmônica

Modelagem direta, inversão e processamento de dados gravimétricos e magnéticos

Boule

Elipsóides de referência para geodésia, geofísica e cálculos de coordenadas

2021-gsh

Fale sobre o Fatiando para a Sociedade Geofísica de Houston

Arquivos fonte dos logotipos Fatiando a Terra

Egu2021

Apresentação enviada para EGU2021 sobre Boule e Harmônica

Transform21

Material para o tutorial de gaita em Transform21

.github

Modelos para problemas e solicitações pull compartilhados entre nossos projetos

Erizo

Interpolação elástica de múltiplos componentes de deslocamento de solo GPS / GNSS.

Rockhound

Baixe modelos geofísicos / conjuntos de dados e carregue-os em Python

Contribuindo

Diretrizes e instruções para contribuir com o Fatiando a Terra, incluindo políticas de autoria, manutenção e código de conduta

Fatiando.github.io

Fontes HTML para fatiando.org. NÃO FAÇA PEDIDOS DE PUXE AQUI. Os arquivos são atualizados manualmente quando uma nova versão é feita.

Local na rede Internet

Fonte Sphinx usada para gerar a página www.fatiando.org

Fatiando

Kit de ferramentas Python para modelagem e inversão em geofísica. DESCONTINUADO em favor de nossas novas bibliotecas (consulte www.fatiando.org)

Integração contínua

Scripts para gerenciar serviços de integração contínua: configurar ambientes, implantar artefatos de construção, etc

Manutenção

Acompanhar as tarefas de manutenção dos repositórios Fatiando por meio de problemas

Transform2020

Material para o tutorial Verde na Transform 2020

Wavefd

Propagação de onda sísmica de diferença finita 2D

Modelo de pacote

Um modelo de cookiecutter para a criação de novos pacotes Fatiando

Deeplook

Uma estrutura para resolver problemas inversos

Moldador

Modelagem direta de gravidade 2D interativa.

Dev Arquivado

Hospeda a compilação de desenvolvimento da documentação. NÃO EDITE DIRETAMENTE. Os commits são enviados pelo TravisCI a partir do repositório fatiando / fatiando.

Adesivo

Arquivos fonte para adesivos Fatiando a Terra

Geométrico Arquivado

Estudo de caso para retirar o fatiando.mesher em um novo pacote

V0.5 arquivado

Documentação para v0.5 construída usando sphinx. Hospeda os arquivos HTML gerados.

V0.4 Arquivado

Documentação para v0.4 construída usando sphinx. Hospeda os arquivos HTML gerados.

Principais idiomas

Tópicos mais usados

Pessoas

Você não pode realizar essa ação neste momento.

Você fez login com outra guia ou janela. Recarregue para atualizar sua sessão. Você saiu em outra guia ou janela. Recarregue para atualizar sua sessão.


Queimando a superfície na subsuperfície

Anteriormente, descrevi algumas das razões pelas quais não obtemos um evento de superfície do solo limpo em dados sísmicos terrestres, como fazemos com o fundo de água na sísmica marinha. Em dados terrestres, a pior parte da imagem está bem na superfície. Mas o nível do solo não é apenas difícil de ver, é impossível ver. Como o caminhão vibrador está no chão, não há reflexo dessa superfície. Mesmo se houvesse algum tipo de evento lá, os processadores aplicam uma borracha mágica no topo da seção - o mudo - para apagar as chegadas antecipadas. Portanto, não é possível ver o terreno nos dados da terra e você não pode escolher o que não está lá.

Mas ainda quero saber onde está o chão. Por que não podemos aplicar um evento de 'reflexão' sísmica no nível do solo na seção?

O que você precisa

Precisamos do nível do solo, que é em profundidade, é claro, no domínio do tempo da seção sísmica. Para calcular isso, vamos chamá-lo de (t_ mathrm), precisamos de três informações em cada localização de rastreamento: o elevação do solo (G ), o dado de referência sísmica (SRD) que chamarei de (D ), e o velocidade de substituição (V_ mathrm).

Elevação do solo. Se você tiver sorte, poderá encontrar a elevação do solo correspondente a cada traço armazenado nos cabeçalhos dos traços. A elevação do solo pode estar localizada nos bytes 41-44 ou 45-48 do cabeçalho do rastreamento, que correspondem ao elevação do grupo receptor e a elevação da superfície da fonte, respectivamente. Estes devem ser os mesmos para um rastreamento empilhado, mas como com qualquer meta-dado para fazer com SEGY, esta informação pode estar escondida em outro lugar, ou completamente perdida. E se você não tiver sorte, talvez precise vasculhar os relatórios de processamento em busca das informações que faltam. Se você tiver ainda mais azar (como eu tive neste exemplo), você não terá nenhum tipo de relatório de processamento para recorrer e terá que inventar outra coisa. No acompanhamento Caderno Jupyter, Recorri à interpolação de um perfil de elevação digitalizado de um gráfico JPEG da linha sísmica. Portanto, se você não tiver mais opções, poderá encontrar refúgio nessas parcelas herdadas!

Este perfil é particularmente instável, porque o datum de referência sísmica (vermelho) não é o mesmo em todo o perfil

Datum de referência sísmica. E para tornar a vida ainda mais complicada, o dado de referência sísmica não é plano em todo o perfil. Ele desce e então se torna plano (linha vermelha abaixo). Não me pergunte quais são as vantagens de processar dados para um dado variável, mas sejam elas quais forem, espero que compensem as desvantagens de confundir facilmente o dado com um dado plano.

A velocidade de substituição é fornecido no sidelabel da imagem raster online (mostrado à direita). É 10.000 pés / s ou 3.048 m / s.

Os locais de byte 53-56 e 57-60 são os marcadores de posição de cabeçalho de rastreamento padrão reservados para manter o elevação do datum no grupo receptor e a elevação do datum na fonte. Novamente, para um rastreamento empilhado, eles devem ter o mesmo valor. Se esses campos forem zeros, verifique os campos da extensão do cabeçalho do rastreamento. Se eles ficarem vazios, e se o datum for horizontal, ele pode estar listado no cabeçalho de texto do arquivo.

Converter elevação em tempo

Por definição, o datum de referência sísmica é horizontal no domínio do tempo (linha vermelha abaixo). Observe como a elevação do solo - no domínio do tempo - traça principalmente como valores negativos (antes) do tempo zero. Em outras palavras, a maior parte do terreno está sendo cortada pelo topo da seção. Então, se quisermos ver, precisamos mudar tudo para o campo de visão. Conceitualmente, isso significa ajustar o datum de referência sísmica para que flutue inteiramente acima do nível do solo. Computacionalmente, podemos conseguir isso facilmente preenchendo o topo dos dados com zeros.

Uma representação no domínio do tempo do nível do solo ao longo do perfil sísmico. A superfície da terra se estende acima do início dos dados sísmicos para a maioria dos locais ao longo do perfil.

Faça do solo um evento selecionável

Como um pedaço final de pós-processamento, poderíamos realmente queimar o nível do solo nos dados como uma espécie de evento sísmico sintético. O motivo pelo qual gosto desse conceito é que ele alivia a necessidade de desenterrar relatórios de processamento antigo, confundir dados de cabeçalho ausentes ou, pior, manter e remover arquivos de texto externos contendo informações de elevação. Eu digo, vamos torná-lo independente. Vamos colocá-lo diretamente nos dados para que possa ser tratado como qualquer outro reflexo sísmico. Por que eu faria isso?

  • Você pode ver onde pode haver dobra, velocidade ou outros problemas relacionados à topografia.
  • Você pode ver imediatamente a polaridade dos dados.
  • Você poderia usar a largura de banda dos dados para fazer o pseudo-refletor, dando uma dica visual ao intérprete.
  • Manter o controle dos ajustes de amplitude e rotações de fase seria autodocumentado e reversível.
  • você poderia rastreá-lo automaticamente para obter um mapa topográfico (ou apenas obtê-lo do processador).
  • Isso parece legal!

Perfil sísmico com nível do solo SINTETICAMENTE ABAIXADO NO TOPO. Bandlimited, é claro, para que você possa fazer o Autotrack até o conteúdo do seu coração!

Eu construí deliberadamente um reflexo de banda limitada, em oposição a colocar uma ponta afiada no nível do solo. O problema com um pico é que ele tem largura de banda infinita. Ele contém frequências mais altas do que a imagem, então, como Carl Reine comentou no último post, isso pode não funcionar bem com atributos sísmicos. Além disso, há o problema de selecionar um valor de amplitude para atribuir ao pico: não queremos introduzir amplitudes que estão ridiculamente fora do intervalo dos dados existentes.

A imagem inteira

Proponho que este truque sintético do nível do solo seja adotado como o novo padrão para qualquer processamento e interpretação sísmica terrestre. A grande questão é que isso pode ser feito tão facilmente por intérpretes e tecnólogos de dados sísmicos quanto pelas empresas de processamento que criam o resto da imagem. Percebo que estamos adicionando coisas aos dados que não são realmente sinais. Fazemos coisas não reais para sinais o tempo todo. A questão é: os benefícios superam a artificialidade?

Esta é a visão de toda a seção:

A seção inteira, nível do solo incluído.

Os detalhes deste exercício podem ser encontrados neste Jupyter Notebook.

A sísmica é a linha 36_77_PR do repositório de dados USGS.

SEG Y rev 2 Formato de troca de dados. Comitê de Normas Técnicas SEG. Rascunho 2.0, janeiro de 2015.


Uma oportunidade para um impacto significativo - junte-se a nós!

Os impactos das mudanças climáticas e a necessidade de gestão de recursos baseada em dados são alguns dos desafios mais críticos e complexos que a sociedade enfrenta hoje. Nos últimos anos, passamos por secas severas na Califórnia e estamos no meio de crises de gestão de água no Vale Central, enquanto incêndios florestais devastadores destruíram comunidades inteiras. Por meio dessa parceria entre pesquisadores e desenvolvedores Jupyter, esperamos contribuir para o avanço das soluções baseadas na ciência para esses desafios, tanto contribuindo diretamente para a pesquisa quanto melhorando o ecossistema aberto de ferramentas disponíveis para pesquisadores e as partes interessadas impactadas por essas questões .

Se o desenvolvimento de tecnologia de código aberto para o avanço da pesquisa em geociências e além o entusiasma, entre em contato! Na UC Berkeley, vamos contratar em 2 posições: uma posição de dev-ops com foco no JupyterHub e implantações de infraestrutura compartilhada, e uma função orientada para o JupyterLab com foco em extensões, painéis e interatividade. Haverá também uma vaga no NCAR para um engenheiro de software visando melhorias para melhorar a experiência do usuário de fluxos de trabalho Xarray e Dask.

Mesmo se você não estiver procurando um novo emprego, existem outras maneiras de se envolver com as comunidades Jupyter e Pangeo. Damos as boas-vindas aos novos participantes das reuniões semanais Pangeo (às quartas-feiras alternando entre 4p GMT e 8p GMT) e há chamadas da comunidade Jupyter mensais, que são abertas e devem ser acessíveis a um grande público. Fora das chamadas, as conversas gerais do Jupyter acontecem no discurso do Jupyter e as conversas do Pangeo são normalmente no Pangeo GitHub.


Matplotlib.pyplot.imshow¶

Exibir dados como uma imagem, ou seja, em um raster regular 2D.

A entrada pode ser dados RGB (A) reais ou dados escalares 2D, que serão renderizados como uma imagem em pseudocolor. Para exibir uma imagem em tons de cinza, configure o mapeamento de cores usando os parâmetros cmap = 'cinza', vmin = 0, vmax = 255.

O número de pixels usados ​​para renderizar uma imagem é definido pelo tamanho dos eixos e o dpi da figura. Isso pode levar a artefatos de aliasing quando a imagem é reamostrada porque o tamanho da imagem exibida geralmente não corresponde ao tamanho de X (consulte suavização de imagem). A reamostragem pode ser controlada por meio do interpolação parâmetro e / ou rcParams [& quotimage.interpolation & quot] (padrão: 'suavização').

Os dados da imagem. As formas de matriz suportadas são:

  • (M, N): uma imagem com dados escalares. Os valores são mapeados para cores usando normalização e um mapa de cores. Veja os parâmetros norma, cmap, vmin, vmax.
  • (M, N, 3): uma imagem com valores RGB (0-1 float ou 0-255 int).
  • (M, N, 4): uma imagem com valores RGBA (0-1 float ou 0-255 int), ou seja, incluindo transparência.

As primeiras duas dimensões (M, N) definem as linhas e colunas da imagem.

Os valores RGB (A) fora do intervalo são cortados.

cmap str ou Colormap, padrão: rcParams [& quotimage.cmap & quot] (padrão: 'viridis')

A instância Colormap ou o nome do mapa de cores registrado usado para mapear dados escalares para cores. Este parâmetro é ignorado para dados RGB (A).

norma Normalize, opcional

A instância Normalize usada para dimensionar dados escalares para o intervalo [0, 1] antes de mapear para cores usando cmap. Por padrão, um escalonamento linear mapeando o valor mais baixo para 0 e o mais alto para 1 é usado. Este parâmetro é ignorado para dados RGB (A).

A proporção de aspecto dos eixos. Este parâmetro é particularmente relevante para imagens, pois determina se os pixels de dados são quadrados.

Este parâmetro é um atalho para chamar explicitamente Axes.set_aspect. Veja lá para mais detalhes.

  • 'igual': Garante uma proporção de 1. Os pixels serão quadrados (a menos que os tamanhos dos pixels sejam explicitamente não quadrados nas coordenadas de dados usando extensão).
  • 'auto': Os eixos são mantidos fixos e o aspecto é ajustado para que os dados caibam nos eixos. Em geral, isso resultará em pixels não quadrados.

O método de interpolação usado.

Os valores suportados são 'nenhum', 'suavizado', 'mais próximo', 'bilinear', 'bicúbico', 'spline16', 'spline36', 'hanning', 'hamming', 'hermite', 'kaiser', 'quádrica' , 'catrom', 'gaussian', 'bessel', 'mitchell', 'sinc', 'lanczos', 'blackman'.

Se interpolação for 'nenhum', então nenhuma interpolação é executada nos back-ends Agg, ps, pdf e svg. Outros back-ends voltarão ao "mais próximo". Observe que a maioria dos renderizadores SVG realiza interpolação na renderização e que o método de interpolação padrão que implementam pode ser diferente.

Se interpolação é o padrão 'suavizado', então a interpolação 'mais próxima' é usada se a imagem for ampliada em mais de um fator de três (ou seja, o número de pixels de exibição é pelo menos três vezes o tamanho da matriz de dados). Se a taxa de aumento da resolução for menor que 3, ou a imagem for reduzida, a interpolação 'hanning' será usada para atuar como um filtro anti-aliasing, a menos que a imagem seja aumentada exatamente por um fator de dois ou um.

Consulte Interpolações para imshow para obter uma visão geral dos métodos de interpolação suportados e Suavização de imagem para uma discussão sobre suavização de imagem.

Alguns métodos de interpolação requerem um parâmetro de raio adicional, que pode ser definido por Filterrad. Além disso, o filtro de redimensionamento da imagem antigrain é controlado pelo parâmetro filternorm.

alfa float ou array-like, opcional

O valor de mistura alfa, entre 0 (transparente) e 1 (opaco). Se alfa é uma matriz, os valores de mistura alfa são aplicados pixel por pixel, e alfa deve ter a mesma forma que X.

vmin, vmax flutuar, opcional

Ao usar dados escalares e não explícitos norma, vmin e vmax definir o intervalo de dados que o mapa de cores cobre. Por padrão, o mapa de cores cobre todo o intervalo de valores dos dados fornecidos. Seu uso está obsoleto vmin/vmax quando norma é dada. Ao usar dados RGB (A), parâmetros vmin/vmax são ignorados.

Coloque o índice [0, 0] da matriz no canto superior esquerdo ou inferior esquerdo dos eixos. A convenção (o padrão) 'superior' é normalmente usada para matrizes e imagens.

Observe que o eixo vertical aponta para cima para 'inferior', mas para baixo para 'superior'.

Veja a origem e extensão no tutorial imshow para exemplos e uma descrição mais detalhada.

extensão flutuadores (esquerda, direita, inferior, superior), opcional

A caixa delimitadora nas coordenadas de dados que a imagem preencherá. A imagem é alongada individualmente ao longo de xey para preencher a caixa.

A extensão padrão é determinada pelas seguintes condições. Pixels têm tamanho de unidade em coordenadas de dados. Seus centros estão em coordenadas inteiras e suas coordenadas centrais variam de 0 a colunas-1 horizontalmente e de 0 a linhas-1 verticalmente.

Observe que a direção do eixo vertical e, portanto, os valores padrão para superior e inferior dependem de origem:

  • Para origin == 'upper', o padrão é (-0,5, numcols-0,5, numrows-0,5, -0,5).
  • Para origin == 'lower', o padrão é (-0.5, numcols-0.5, -0.5, numrows-0.5).

Veja a origem e extensão no tutorial imshow para exemplos e uma descrição mais detalhada.

filternorm bool, padrão: True

Um parâmetro para o filtro de redimensionamento da imagem antigrain (consulte a documentação antigrain). Se filternorm é definido, o filtro normaliza os valores inteiros e corrige os erros de arredondamento. Ele não faz nada com os valores de ponto flutuante de origem, ele corrige apenas números inteiros de acordo com a regra de 1.0, o que significa que qualquer soma de pesos de pixel deve ser igual a 1.0. Portanto, a função de filtro deve produzir um gráfico da forma adequada.

Filterrad float & gt 0, padrão: 4.0

O raio do filtro para filtros que têm um parâmetro de raio, ou seja, quando a interpolação é um de: 'sinc', 'lanczos' ou 'homem negro'.

redimensionamento bool, padrão: rcParams [& quotimage.resample & quot] (padrão: True)

Quando Verdadeiro, use um método de reamostragem completo. Quando Falso, reamostrar apenas quando a imagem de saída for maior do que a imagem de entrada.

url str, opcional

Defina o url do AxesImage criado. Consulte Artist.set_url.

Esses parâmetros são passados ​​para o construtor do artista AxesImage.

matshow Trace uma matriz ou array como uma imagem.

A não ser que extensão for usado, os centros dos pixels estarão localizados em coordenadas inteiras. Em outras palavras: a origem coincidirá com o centro do pixel (0, 0).

Existem duas representações comuns para imagens RGB com um canal alfa:

  • Alfa reto (não associado): os canais R, G e B representam a cor do pixel, desconsiderando sua opacidade.
  • Alfa pré-multiplicado (associado): os canais R, G e B representam a cor do pixel, ajustada para sua opacidade por multiplicação.

imshow espera imagens RGB adotando a representação alfa direta (não associada).

Além dos argumentos descritos acima, esta função pode ter um dados argumento de palavra-chave. Se tal dados argumento for fornecido, todos os outros argumentos também podem ser strings s, que são interpretadas como dados [s] (a menos que isso acione uma exceção).

Objetos passados ​​como dados deve oferecer suporte ao acesso ao item (dados [s]) e aos testes de associação (s nos dados).


O conjunto de dados que usaremos vem de um exercício de classe da Universidade de Kansas nos campos de gás Hugoton e Panoma. Para obter mais informações sobre a origem dos dados, consulte Dubois et al. (2007) e o bloco de notas Jupyter que acompanha este tutorial em http://github.com/seg. & # 911 e # 93

A seguinte parte do código devo dar todo o crédito ao autor deste seg wiki http://wiki.seg.org/wiki/Facies_classification_using_machine_learning. No entanto, há duas mudanças principais: em primeiro lugar, a função sns.pairplot mudou, então o formato correto deve ser & gt & gt & gt sns.pairplot (feature_vectors, hue = 'Facies') a segunda é que, como usamos a rede neural, todos os códigos ao longo com a máquina de vetor de suporte deve ser alterado para rede neural.

O conjunto de dados consiste em sete recursos (cinco medições de registro wireline e duas variáveis ​​indicadoras) e um rótulo de fácies em intervalos de profundidade de meio pé. Na terminologia de aprendizado de máquina, o conjunto de medições em cada intervalo de profundidade compreende um vetor de característica, cada um dos quais está associado a um aula (o tipo de fácies). Usaremos a biblioteca pandas para carregar os dados em um dataframe, que fornece uma estrutura de dados conveniente para trabalhar com dados well-log.

Podemos usar data.describe () para fornecer uma visão geral rápida da distribuição estatística dos dados de treinamento (Tabela 1).

Podemos ver na linha de contagem na Tabela 1 que temos um total de 3232 vetores de recursos no conjunto de dados. Os vetores de recursos consistem nas seguintes variáveis:

  1. Raio gama (GR)
  2. Resistividade (ILD_log10)
  3. Efeito fotoelétrico (PE)
  4. Diferença de porosidade de densidade de nêutrons (DeltaPHI)
  5. Porosidade média de densidade de nêutrons (PHIND)
  6. Indicador não marinho / marinho (NM_M)
  7. Posição relativa (RELPOS)

Existem nove classes de fácies (numeradas de 1 a 9) identificadas no conjunto de dados. A Tabela 2 contém as descrições associadas a essas classes. Observe que nem todas essas fácies são completamente discretas, algumas se mesclam gradualmente umas com as outras. Pode-se esperar que ocorram erros de classificação dessas fácies vizinhas. A coluna de fácies adjacente na Tabela 2 lista essas classes relacionadas.

Tabela 2. Rótulos de fácies com suas descrições.
Facies Descrição Etiqueta Facies adjacente
1 Arenito não marinho WL 2
2 Siltito de curso não marinho CSiS 1,3
3 Siltito fino não marinho FSiS 2
4 Siltito marinho e xisto SiSh 5
5 Mudstone em 4,6
6 Wackestone WS 5,7,8
7 Dolomite D 6,8
8 Packstone-grainstone PS 6,7,9
9 Bafflestone de algas filoides BS 7,8

Para avaliar a precisão do classificador, removeremos um poço do conjunto de treinamento para que possamos comparar os rótulos de fácies previstos e reais.

& gt & gt & gt test_well = data [data [‘Well Name’] == ‘NEWBY’]

Vamos extrair os vetores de recursos e os rótulos de fácies associados do conjunto de dados de treinamento:

& gt & gt & gt features = [‘GR’, ‘ILD_log10’, ‘DeltaPHI’, ‘PHIND’, ‘PE’, ‘NM_M’, ‘RELPOS’]

Os gráficos cruzados são uma ferramenta familiar para visualizar como duas propriedades variam com o tipo de rocha. Este conjunto de dados contém cinco medições de registro, e podemos empregar a biblioteca marítima muito útil https://seaborn.pydata.org/ (Waskom et al., 2016) para criar uma matriz de crossplots para visualizar a variação entre as medições de registro em o conjunto de dados. & # 912 e # 93

Cada painel na Figura 1 (próxima página) mostra a relação entre duas das variáveis ​​nos eixos xey, com um gráfico de barras empilhadas mostrando a distribuição de cada ponto ao longo da diagonal. Cada ponto é colorido de acordo com sua fácies (consulte o bloco de notas Jupyter associado a este tutorial para obter mais detalhes sobre como gerar cores para este gráfico). Não está claro a partir desses gráficos cruzados quais relações existem entre as medidas e os rótulos de fácies. É aqui que o aprendizado de máquina será útil.


X linhas de Python: gráfico AVO

A análise de amplitude versus deslocamento (ou, mais apropriadamente, ângulo) é um componente central da interpretação quantitativa. O método AVO é baseado no fato de que a refletividade de uma interface geológica não depende apenas das propriedades acústicas da rocha (velocidade e densidade) em ambos os lados da interface, mas também do ângulo do raio incidente. Felizmente, essa refletividade angular codifica as informações das propriedades da rocha elástica. Resumindo: AVO é incrível.

Como você deve saber, sou um grande fã de modelagem direta - prever a resposta sísmica de um modelo terrestre. Portanto, vamos modelar a resposta da interface entre um modelo muito simples de apenas duas camadas de rocha. E faremos isso em apenas algumas linhas do Python. O fluxo de trabalho é direto:

  1. Defina as propriedades de um modelo de xisto, esta será a camada superior.
  2. Defina um modelo de arenito com salmoura em seus poros, esta será a camada inferior.
  3. Defina uma areia saturada com gás para comparação com a areia úmida.
  4. Defina uma faixa de ângulos para calcular a resposta.
  5. Calcule a resposta da areia salgada na interface, dadas as propriedades da rocha e a faixa de ângulos.
  6. Para comparação, calcule a resposta da areia gasosa com os mesmos parâmetros.
  7. Trace a caixa de salmoura.
  8. Trace a caixa de gás.
  9. Adicione uma legenda ao gráfico.

É isso - nove linhas! Aqui está o resultado:

Uma vez que temos as propriedades da rocha, o ponto chave está no meio:

shuey2 é uma das muitas funções em Bruges - aqui ele fornece a aproximação de Shuey de dois termos, mas contém muitas outras equações úteis. Praticamente tudo o mais em nossa rotina de plotagem do AVO é apenas contabilidade e plotagem.

Como em todas essas postagens, você pode acompanhar o código no Notebook Jupyter. Você pode ver isso no GitHub ou executá-lo você mesmo no cada vez mais fragmentado MyBinder (que está fora do ar no momento em que este artigo foi escrito. Estou trabalhando em uma alternativa).

O que você gostaria de ver em x linhas de Python? Solicitações são bem-vindas!


Descrição

O material neste volume fornece a teoria básica necessária para compreender os princípios por trás da imagem da subsuperfície da Terra usando sismologia de reflexão e refração. Para sismologia de reflexão, o produto final é uma & quot seção de registro & quot de uma coleção de & quotwiggly traços & quot que são registrados no campo a partir do qual as informações sobre as propriedades da estrutura de subsuperfície e rocha podem ser derivadas. Para a maior parte, os princípios de imagem são os mesmos, independentemente da profundidade do alvo, o mesmo fundo matemático é necessário para visar um lençol freático raso e para investigar a base da & quotcrosta continental da terra a uma profundidade de 30-50 km.