Skip to content

Instantly share code, notes, and snippets.

@ArturCSegat
Last active July 2, 2024 15:01
Show Gist options
  • Save ArturCSegat/a974162dc341c671e8952de7a2a7d878 to your computer and use it in GitHub Desktop.
Save ArturCSegat/a974162dc341c671e8952de7a2a7d878 to your computer and use it in GitHub Desktop.
Relatório de Estagio com o Time de dados

Relatório de Estagio com o Time de dados

Artur Camera Segat

Atividade 1 - Dashboard Apendicectomia

Objetivo:

Desenvolver um Dashboard com dados de cirurgias de apendicectomia salvas no banco de dados da anestech usando Elastic Search e Kibana.

Processo:

A linguagém de programação que me pareceu mais adequada para esta atividade foi Python, pois a lingugagem possui uma boa biblioteca para interagir com o servidor Elastic Search.

Após extrair os seguintes dados do banco de dados:

     procedure name
     procedure date
     procedures tev_risk
     procedures type
     patient name
     patient age
     patient gender
     patient destination
     anesthesia start
     anesthesia end

Criei um mapeamento JSON para o Elastic Search, isso é importante para diferenciar dados númericos, de texto, e de tempo, o que é essenciais para criação de visualizações no Kibana.

"mappings": {
    "properties": {
        "name": {"type": "text"},
        "date": {"type": "date", "format": "yyyy-MM-dd HH:mm:ss"},
        "patient_name": {"type": "text"},
        "patient_age": {"type": "integer"},
        "patinet_gender": {"type": "text"},
        "risk": {"type": "integer"},
        "surgery_type": {"type": "text"},
        "time_under_anesthesia": {"type": "date", "format": "HH:mm:ss"},
        "patinet_destination": {"type": "text"},
        }
}

Aṕos mapear os dados do banco de dados para classes em Python, e então converter as classes para JSON de acordo com os mapeamentos, é bastante simples inserir os dados em uma cluster Elastic Search usando a API de inserção bulk, que insere grandes quantidades de dados de uma só vez.

Alguns exemplos de gráficos gerados no Dashboard:

Quantidade de procedimentos ao longo do tempo -------------- Risco por idade do paciente

Conclusão:

Nesta atividade pude aprender bastante sobre o uso ELK (Elastic + Kibana) assim como o funcionamento de bancos de dados mais complexos.

Atividade 2 - Deteção de Anomalias de Perda e Ganho de Sangue

Objetivo:

Treinar um modelo para detectar anomalias de perda e ganho de sangue em uma cirurgia, usando informações existentes no banco de dados

Processo:

Novamente escolhi fazer a maior parte do processo em Python pela faclidade de uso da biblioteca scikit-learn para machine learning assim como a biblioteca matplotlib para a visualização de dados.

Extrair os dados do banco mostrou-se um pouco mais complexo do que antecipei devido a os dados de quantidade de perda ou ganho e tipo de perda ou ganho estarem em tabelas diferentes, por isso tive de identificar quais ids específicos se referiam a dados de balanço de sangue ou não.

Feito isso pode-se colocar em um gráfico bi-dimensional cada cirurgia usando para coordenada X a quantidade de sangue ganha em ml e para Y a quantidade de sangue perdida.

Para realizar a separaçao dos dados em normal e anormal usei dois algoritmos de clusterização Kmeans e DBSCAN No gráfico a esquerda os pontos verde escuro representam os pontos normais, definido analizando a densidade de pontos naquela região comparado com o resto dos dados. No gráfico a direita, uma região bastante semelhante está marcada em verde claro, essa também representa os pontos normais, e foi calculada por um ajuste iterativo do centro das outras três regiões (roxo, vermelhor e azul claro). Essas regiões, denominadas clusters, tem um número predefinido, neste caso 4 (K = 4). Este número foi definido como 4 ao analizar o gráfico do cotovelo deste conjunto de pontos

Neste gráfico temos como X o número de clusters e como Y a soma das distancias de cada ponto ao centro de sua região. $$Y = \sum_{i=1}^{k} \sum_{x \in C_i} (x - \mu_i)^2 $$

O metodo do cotovelo consiste em encontrar o "cotovelo" do gráfico, que neste caso séria 4, o que demonstra o número de clusters que melhor reparte os dados.

Com estes modelos DBSCAN e Kmeans é facil julgar novas entradas de dados como anomalias ou dados normais apenas as comparando com dados ja existentes e suas classificações

Conclusão:

Esta atividade me ensinou muito sobre os fundamentos de algoritmos de aprendizagem não supervisionada, assim como ajudou a me familiarizar com as bibliotecas scikit-learn e matplotlib que são amplamentes utilizados no campo de Data Science.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment