Desenvolver um Dashboard com dados de cirurgias de apendicectomia salvas no banco de dados da anestech usando Elastic Search e Kibana.
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
Nesta atividade pude aprender bastante sobre o uso ELK (Elastic + Kibana) assim como o funcionamento de bancos de dados mais complexos.
Treinar um modelo para detectar anomalias de perda e ganho de sangue em uma cirurgia, usando informações existentes no banco de dados
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 id
s 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.
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
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.