Categorias
Biblioteca Ciência de Dados Machine Learning Python

Tutorial PyTorch: um guia rápido para você entender agora os fundamentos do PyTorch

O Python está bem estabelecido como a linguagem ideal para ciência de dados e aprendizado de máquina, e isso se deve em parte à biblioteca de ML de código aberto PyTorch.

A combinação do PyTorch com ferramentas poderosas de construção de rede neural profunda e fáceis de uso, torna-o uma escolha popular entre cientistas de dados. À medida que sua popularidade cresce, mais e mais empresas estão mudando do TensorFlow para o PyTorch, tornando-se agora o melhor momento para começar a usar o PyTorch.

Hoje, vamos te ajudar a entender o que torna o PyTorch tão popular, alguns fundamentos do uso dessa biblioteca e ajudá-lo a fazer seus primeiros modelos computacionais.

 

O que é o PyTorch?

O PyTorch é uma biblioteca Python de aprendizado de máquina de código aberto usada para implementações de aprendizado profundo, como visão computacional (usando TorchVision) e processamento de linguagem natural. Essa biblioteca foi desenvolvida pelo laboratório de pesquisa de IA do Facebook (FAIR) em 2016 e, desde então, é adotada nos campos da ciência de dados e ML.

O PyTorch torna o aprendizado de máquina intuitivo para aqueles que já estão familiarizados com Python e tem ótimos recursos como suporte OOP e gráficos de computação dinâmica.

Junto com a construção de redes neurais profundas, o PyTorch também é ótimo para cálculos matemáticos complexos por causa de sua aceleração de GPU. Esse recurso permite que o PyTorch use a GPU do seu computador para acelerar enormemente os cálculos.

Essa combinação de recursos exclusivos e a simplicidade incomparável do PyTorch o torna uma das bibliotecas de aprendizado profundo mais populares, competindo apenas com o TensorFlow pelo primeiro lugar.

 

Por que usar o PyTorch?

Antes do PyTorch, os desenvolvedores usavam cálculos avançados para encontrar as relações entre erros retro-propagados e peso do nó. Redes neurais mais profundas exigiam operações cada vez mais complicadas, o que restringia o aprendizado de máquina em escala e acessibilidade.

Agora, podemos usar bibliotecas de ML para completar automaticamente todo esse cálculo! As bibliotecas de ML podem computar redes de qualquer tamanho ou formato em questão de segundos, permitindo que mais desenvolvedores criem redes maiores e melhores.

O PyTorch leva essa acessibilidade um passo adiante, comportando-se como o Python padrão. Em vez de aprender uma nova sintaxe, você pode usar o conhecimento existente de Python para começar rapidamente. Além disso, você pode usar bibliotecas Python adicionais com PyTorch, como depuradores populares como o PyCharm.

 

PyTorch vs. TensorFlow

A principal diferença entre PyTorch e TensorFlow é a escolha entre simplicidade e desempenho: o PyTorch é mais fácil de aprender (especialmente para programadores Python), enquanto o TensorFlow tem uma curva de aprendizado, mas tem um desempenho melhor e é mais usado.

  • Popularidade: Atualmente, o TensorFlow é a ferramenta ideal para profissionais e pesquisadores do setor porque foi lançado 1 ano antes do PyTorch. No entanto, a taxa de usuários do PyTorch está crescendo mais rápido do que a do TensorFlow, sugerindo que o PyTorch pode em breve ser o mais popular.

  • Paralelismo de dados: O PyTorch inclui paralelismo de dados declarativo, em outras palavras, ele distribui automaticamente a carga de trabalho do processamento de dados em diferentes GPUs para acelerar o desempenho. O TensorFlow tem paralelismo, mas exige que você atribua o trabalho manualmente, o que costuma ser demorado e menos eficiente.

  • Gráficos dinâmicos vs. estáticos: PyTorch tem gráficos dinâmicos por padrão que respondem a novos dados imediatamente. O TensorFlow tem suporte limitado para gráficos dinâmicos usando o TensorFlow Fold, mas usa principalmente gráficos estáticos.

  • Integrações: PyTorch é bom para usar em projetos na AWS por causa de sua estreita conexão por meio do TorchServe. O TensorFlow está bem integrado com o Google Cloud e é adequado para aplicativos móveis devido ao uso da API Swift.

  • Visualização: O TensorFlow tem ferramentas de visualização mais robustas e oferece um controle mais preciso sobre as configurações do gráfico. A ferramenta de visualização Visdom da PyTorch ou outras bibliotecas de plotagem padrão, como matplotlib, não são tão completas quanto o TensorFlow, mas são mais fáceis de aprender.

 

Fundamentos do PyTorch

Tensores

Os tensores PyTorch são variáveis indexadas (arrays) multidimensionais usadas como base para todas as operações avançadas. Ao contrário dos tipos numéricos padrão, os tensores podem ser atribuídos para usar sua CPU ou GPU para acelerar as operações.

Eles são semelhantes a uma matriz NumPy n-dimensional e podem até ser convertidos em uma matriz NumPy em apenas uma única linha.

Tensores vêm em 5 tipos:

  • FloatTensor: 32-bit float
  • DoubleTensor: 64-bit float
  • HalfTensor: 16-bit float
  • IntTensor: 32-bit int
  • LongTensor: 64-bit int

Como acontece com todos os tipos numéricos, você deseja usar o menor tipo que atenda às suas necessidades para economizar memória. O PyTorch usa  FloatTensor como o tipo padrão para todos os tensores, mas você pode mudar isso usando:

torch.set_default_tensor_type(t)                           

Para inicializar dois FloatTensors:

import torch
# initializing tensors
a = torch.tensor(2)
b = torch.tensor(1)

Os tensores podem ser usados como outros tipos numéricos em operações matemáticas simples.    

# addition
    print(a+b)
    # subtraction
    print(b-a)
    # multiplication
    print(a*b)
    # division
    print(a/b)

Você também pode mover tensores para serem manipulados pela GPU usando cuda.

if torch.cuda.is_available():
x = x.cuda()
y = y.cuda()
x + y

Como tensores são matrizes em PyTorch, você pode definir tensores para representar uma tabela de números:

ones_tensor = torch.ones((2, 2)) # tensor containing all ones
rand_tensor = torch.rand((2, 2)) # tensor containing random values

 

Aqui, estamos especificando que nosso tensor deve ser um quadrado 2×2. O quadrado é preenchido com todos os 1 ao usar a função ones() ou números aleatórios ao usar a função rand().

Redes neurais

PyTorch é comumente usado para construir redes neurais devido aos seus modelos de classificação excepcionais, como classificação de imagem ou redes neurais convolucionais (CNN).

As redes neurais são camadas de nós de dados conectados e ponderados. Cada camada permite que o modelo identifique a qual classificação os dados de entrada correspondem.

As redes neurais são tão boas quanto seu treinamento e, portanto, precisam de grandes conjuntos de dados e estruturas GAN, que geram dados de treinamento mais desafiadores com base naqueles já dominados pelo modelo.

O PyTorch define redes neurais usando o pacote torch.nn, que contém um conjunto de módulos para representar cada camada de uma rede.

Cada módulo recebe tensores de entrada e calcula os tensores de saída, que trabalham juntos para criar a rede. O pacote torch.nn também define funções de perda que usamos para treinar redes neurais.

As etapas para construir uma rede neural são:

  • Construção: Crie camadas de rede neural, configure parâmetros, estabeleça pesos e tendências.
  • Propagação direta: Calcule a saída prevista usando seus parâmetros. Meça o erro comparando a saída prevista e a real.
  • Retropropagação: Depois de encontrar o erro, tire a derivada da função de erro em termos dos parâmetros de nossa rede neural. A propagação para trás nos permite atualizar nossos parâmetros de peso.
  • Otimização iterativa: Minimize erros usando otimizadores que atualizam parâmetros por meio de iteração usando gradiente descendente.

Aqui está um exemplo de uma rede neural em PyTorch:

import torch
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
# 1 input image channel, 6 output channels, 3x3 square convolution
# kernel
self.conv1 = nn.Conv2d(1, 6, 3)
self.conv2 = nn.Conv2d(6, 16, 3)
# an affine operation: y = Wx + b
self.fc1 = nn.Linear(16 * 6 * 6, 120) # 6*6 from image dimension
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)
def forward(self, x):
# Max pooling over a (2, 2) window
x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
# If the size is a square you can only specify a single number
x = F.max_pool2d(F.relu(self.conv2(x)), 2)
x = x.view(-1, self.num_flat_features(x))

x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x
def num_flat_features(self, x):
size = x.size()[1:] # all dimensions except the batch dimension
num_features = 1
for s in size:
num_features *= s
return num_features

net = Net()
print(net)

O nn.module designa que esta será uma rede neural e então a definimos com duas camadas conv2d, que realizam uma convolução 2D, e 3 camadas lineares, que realizam transformações lineares.

A seguir, definimos um método direto para descrever como fazer a propagação direta. Não precisamos definir um método de propagação para trás porque PyTorch inclui uma função backwards() por padrão.

Não se preocupe se isso parece confuso agora, depois vamos cobrir implementações mais simples do PyTorch neste tutorial.

Autograd

Autograd é um pacote PyTorch usado para calcular derivadas essenciais para operações de rede neural. Essas derivadas são chamadas de gradientes. Durante uma passagem para frente, o autograd registra todas as operações em um tensor habilitado para gradiente e cria um gráfico acíclico para encontrar a relação entre o tensor e todas as operações. Essa coleção de operações é chamada de diferenciação automática.

As folhas deste gráfico são tensores de entrada e as raízes são tensores de saída. O Autograd calcula o gradiente traçando o gráfico da raiz à folha e multiplicando cada gradiente usando a regra da cadeia.

Depois de calcular o gradiente, o valor da derivada é preenchido automaticamente como um atributo grad do tensor.

import torch
# pytorch tensor
x = torch.tensor(3.5, requires_grad=True)
# y is defined as a function of x

y = (x-1) * (x-2) * (x-3)
# work out gradients
y.backward()

Por padrão, requires_grad é definido como false e o PyTorch não rastreia gradientes. Especificar requires_grad como True durante a inicialização fará o PyTorch rastrear gradientes para este tensor em particular sempre que realizarmos alguma operação nele.

Este código olha para y e vê que ele veio de (x-1) * (x-2) * (x-3) e calcula automaticamente o gradiente dy / dx, 3x^2 – 12x + 11.

A instrução também calcula o valor numérico desse gradiente e o coloca dentro do tensor x ao lado do valor real de x, 3.5.

Juntos, o gradiente é 3 * (3.5 * 3.5) – 12 * (3.5) + 11 = 5.75.

                                                 Figura 01

 

 

 

 

 

 

 

 

 

Os gradientes se acumulam por padrão, o que pode influenciar o resultado se não for redefinido. Use model.zero_grad() para zerar novamente seu gráfico após cada gradiente.

 

Otimizadores

Os otimizadores permitem que você atualize os pesos e tendências dentro de um modelo para reduzir o erro. Isso permite que você edite como seu modelo funciona sem ter que refazer tudo.

Todos os otimizadores PyTorch estão contidos no pacote torch.optim, com cada esquema de otimização projetado para ser útil em situações específicas. O módulo torch.optim permite que você construa um esquema de otimização abstrato apenas passando uma lista de parâmetros. O PyTorch tem muitos otimizadores para escolher, o que significa que quase sempre há um que melhor se adapta às suas necessidades.

Por exemplo, podemos implementar o algoritmo de otimização comum, SGD (Stochastic Gradient Descent), para suavizar nossos dados.

import torch.optim as optim
params = torch.tensor([1.0, 0.0], requires_grad=True)
learning_rate = 1e-3
## SGD
optimizer = optim.SGD([params], lr=learning_rate)

Depois de atualizar o modelo, use optimizer.step() para dizer ao PyTorch para recalcular o modelo.

Sem usar otimizadores, precisaríamos atualizar manualmente os parâmetros do modelo, um por um, usando um loop:

for params in model.parameters():
params -= params.grad * learning_rate

No geral, os otimizadores economizam muito tempo, permitindo que você otimize a ponderação dos dados e altere o modelo sem refazê-lo.

 

Gráficos de computação com PyTorch

Para entender melhor o PyTorch e as redes neurais, é importante praticar com gráficos de computação. Esses gráficos são essencialmente uma versão simplificada de redes neurais com uma sequência de operações usadas para ver como a saída de um sistema é afetada pela entrada.

Em outras palavras, a entrada x é usada para encontrar y, que então é usada para encontrar a saída z.

                                                            Figura 02

 

 

 

 

 

 

 

Imagine que  y e z são calculados assim:

y = x^2

z = 2y + 3

No entanto, estamos interessados em como a saída z muda com a entrada x, então precisaremos fazer alguns cálculos:

dz/dx = (dz/dy) * (dy/dx)

dz/dx = 2.2x

dz/dx = 4x

Usando isso, podemos ver que a entrada x = 3,5 fará com que z = 14.

Saber definir cada tensor em termos dos outros (y e z em termos de x, z em termos de y, etc.) permite que o PyTorch construa uma imagem de como esses tensores estão conectados.

                                                          Figura 03

 

 

 

 

 

 

 

 

 

Esta imagem é chamada de gráfico computacional e pode nos ajudar a entender como o PyTorch funciona nos bastidores.

Usando esse gráfico, podemos ver como cada tensor será afetado por uma mudança em qualquer outro tensor. Esses relacionamentos são gradientes e são usados para atualizar uma rede neural durante o treinamento.

Esses gráficos são muito mais fáceis de fazer usando o PyTorch do que manualmente. Então, agora que entendemos o que está acontecendo nos bastidores, vamos tentar fazer esse gráfico.

import torch
# set up simple graph relating x, y and z
x = torch.tensor(3.5, requires_grad=True)
y = x*x
z = 2*y + 3
print("x: ", x)
print("y = x*x: ", y)
print("z= 2*y + 3: ", z)
# work out gradients
z.backward()
print("Working out gradients dz/dx")

# what is gradient at x = 3.5
print("Gradient at x = 3.5: ", x.grad)

Isso mostra que z = 14, exatamente como encontramos manualmente acima!

 

Mãos à obra com PyTorch: gráfico computacional de vários caminhos

Agora que você viu um gráfico computacional com um único conjunto relacional, vamos tentar um exemplo mais complexo.

Primeiro, defina dois tensores, a e b, para funcionar como nossas entradas. Certifique-se de definir requires_grad=True para que possamos fazer gradientes na linha.

import torch
# set up simple graph relating x, y and z
a = torch.tensor(3.0, requires_grad=True)
b = torch.tensor(2.0, requires_grad=True)

Em seguida, configure as relações entre nossa entrada e cada camada de nossa rede neural, x, y e z. Observe que z é definido em termos de x e y, enquanto x e y são definidos usando nossos valores de entrada a e b.

import torch
# set up simple graph relating x, y and z
a = torch.tensor(3.0, requires_grad=True)
b = torch.tensor(2.0, requires_grad=True)

x = 2*a + 3*b
y = 5*a*a + 3*b*b*b
z = 2*x + 3*y

Isso cria uma cadeia de relacionamentos que o PyTorch pode seguir para entender todos os relacionamentos entre os dados.

Agora podemos calcular o gradiente dz/da​​ seguindo o caminho de volta de z para  a.

Existem dois caminhos, um passando por x e outro por y. Você deve seguir os dois e adicionar as expressões de ambos os caminhos. Isso faz sentido porque ambos os caminhos de a a z contribuem para o valor de z.

Teríamos encontrado o mesmo resultado se tivéssemos calculado dz/da usando a regra da cadeia do cálculo.

                                               Figura 04

 

 

 

 

 

 

 

 

 

 

O primeiro caminho por x nos dá 2 * 2 e o segundo caminho por y nos dá 3 * 10a. Assim, a taxa na qual z varia com a é 4 + 30a.

Se a é 22, então dz/da​​ é 4+30∗2=64.

Podemos confirmar isso no PyTorch adicionando uma propagação para trás de z e pedindo o gradiente (ou derivado) de a.

import torch
# set up simple graph relating x, y and z
a = torch.tensor(2.0, requires_grad=True)
b = torch.tensor(1.0, requires_grad=True)
x = 2*a + 3*b
y = 5*a*a + 3*b*b*b
z = 2*x + 3*y
print("a: ", a)
print("b: ", b)
print("x: ", x)
print("y: ", y)
print("z: ", z)
# work out gradients
z.backward()
print("Working out gradient dz/da")
# what is gradient at a = 2.0
print("Gradient at a=2.0:", a.grad)

Próximos passos para o seu aprendizado

Parabéns, você concluiu seu início rápido de PyTorch e Redes Neurais! A conclusão de um gráfico computacional é uma parte essencial da compreensão de redes de aprendizado profundo.

À medida que você aprender habilidades e aplicativos avançados de aprendizado profundo, você desejará explorar:

  • Redes neurais complexas com otimização
  • Design de visualização
  • Treinamento com GANs

Vamos continuar aprendendo juntos!

Fonte: PyTorch tutorial: a quick guide for new learners

 

 

Categorias
Ciência de Dados Dica de Leitura Python

10 artigos indispensáveis sobre Ciência de Dados para ler no Medium

A plataforma Medium é um dos melhores espaços na internet para estudantes de ciência de dados. Lá, existe uma diversidade enorme de profissionais compartilhando seus conhecimentos em artigos sobre programação, estatística, machine learning e outras áreas relacionadas ao data science.

São muitos os conteúdos para profissionais de dados no Medium, por isso, hoje destacamos 10 artigos dessa plataforma que trazem assuntos essenciais para qualquer cientista de dados. Esses conteúdos, como é próprio dos trabalhos com qualidade, contribuirão na sua carreira.

Mas antes de apresentarmos a lista, lembre que é possível ler todos os artigos no Medium de graça. Caso você não consiga acessar algum texto na plataforma porque atingiu o limite de conteúdos gratuitos, basta copiar o link do artigo e enviar como mensagem para você mesmo no Twitter. Pronto, agora é só clicar no link e ler.

Isso dito, vamos para os artigos!

 

01- Entendendo Rede Neural Convolucional (CNN) – Deep Learning          

As redes neurais convolucionais são amplamente usadas para, por exemplo, classificação de imagens, detecção de objetos e reconhecimento facial. Tendo essas como algumas de suas principais possibilidades de aplicação, fica entendido o porquê dos grandes esforços investidos no desenvolvimento da CNN.

E um artigo que te ajudará a entender como as máquinas decifram imagens é o “Compreensão da Rede Neural Convolucional (CNN) – Deep Learning”. Nele, o cientista de dados Prabhu Raghav explica alguns conceitos básicos de CNN e as etapas envolvidas neste processo.

Raghav organiza seu texto nestes seis tópicos, cada um deles dedicado a explicar uma das etapas envolvidas no processamento das redes neurais convolucionais: camada de convolução, strides, preenchimento, não linearidade (ReLU), camada de pooling e camada totalmente conectada. 

 

02- Entendendo self em Python – Código rápido

Depois de começar a usar o Python, não há como escapar da palavra “self “. Ela é vista nas definições de métodos e na inicialização de variáveis. Mas entender a ideia por trás disso parece um pouco problemático. E é nisto que este artigo te ajudará, a ter uma ideia intuitiva do que é o self e como você deve usá-lo.

Para isso, o autor, Ashan Priyadarshana, primeiro explora a criação de métodos de instância e classe em Python e, a partir deste quadro, aprofunda a explicação sobre o uso de self em Python.

Ao final do texto você terá conseguido entender por que deve sempre usar self como o primeiro parâmetro de métodos de instância em Python e o que realmente acontece nos bastidores quando chamamos um método de instância.

 

03- Aprendendo Python do zero

Um dos grandes motivos para aprender Python é certamente sua versatilidade; podemos usá-lo em diferentes áreas, como ciência de dados, desenvolvimento web e machine learning.

Diante disso, não é surpreendente a popularidade dessa linguagem de programação, que é adotada pelas também popularíssimas Google, Netflix, Quora, Pinterest e Spotify.

Se assim como essas gigantes, você também quer codificar em Python, o artigo “Aprendendo Python do zero” te ajudará. Nesse texto, por meio de exemplos de aplicação prática, você entenderá a teoria que estrutura o ambiente Python e também como se dão algumas de suas funções essenciais.

Veja o conteúdo básico sobre Python que você entenderá melhor com este artigo:

  • Como as variáveis em Python funcionam
  • Como funciona o controle de fluxo — condicionais
  • Como Python lida com loop, iteração, mais especificamente while e for
  • Como listas funcionam
  • Dicionários, uma estrutura de dados de chave-valor
  • Como iteramos sobre essas estruturas de dados
  • Objetos e Classes
  • Atributos como dados de um objeto
  • Métodos como comportamento de um objeto
  • Usando getters e setters em Python & decorator property
  • Encapsulamento: ocultando informações
  • Herança: herdando comportamentos e características.

 

04- Além do Pandas: Spark, Dask, Vaex e outras tecnologias de big data lutando frente a frente

Ao enfrentar um novo problema de ciência de dados, uma das primeiras perguntas a fazer é qual tecnologia usar. E foi pensando nisso que Jonathan Alexander, que acompanha intensamente o universo das ferramentas de big data, realizou testes para comparar a performance de tecnologias de conversão de dados e, assim, escolher a mais adequada para exploração, limpeza e conversão de dados tabulares. O objetivo é comparar as tecnologias em suas APIs, desempenho e facilidade de uso.

Alexander compartilhou os resultados e etapas desses testes em seu artigo no  Medium, “Beyond Pandas: Spark, Dask, Vaex and other big data technologies battling head to head”.

O conjunto de dados escolhidos para os testes foi o “Billion Row Taxi”, de 100 GB. As ferramentas selecionadas para comparação foram Dask DataFrame, PySpark, Koalas, Vaex, Turicreate e Datatable.

Acompanhe o artigo completo para entender como essas ferramentas se comportam em diferentes categorias, como complexidade de codificação e recursos. Conhecer as particularidades dessas tecnologias te ajudará a escolher a solução adequada para seus diferentes projetos de big data. 

 

05- Use o Docker e o Airflow para implantar seu fluxo de trabalho de Data Science

Este artigo busca ajudar cientistas de dados a aprimorar sua compreensão de como seu código seria executado em um ambiente de produção.

Assim, esta matéria é uma introdução, baseada no passo a passo para o uso do Airflow e do Docker, de como se pode articular a escrita de um código para o nível de produção. O autor explica os diferentes estágios em um fluxo de trabalho de data science e como projetar DAG e pipeline para um determinado problema. Além disso, também fornece uma visão geral de como usar a UI do Airflow.

 

06- Como analisar 100 GB de dados no seu laptop com Python

É cada vez mais comum os cientistas de dados enfrentarem conjuntos de dados de 50 GB ou mesmo 500 GB. Algo importante sobre trabalhar com esse tipo de conjunto de dados é que eles são pequenos o suficiente para caber no disco rígido de seu laptop comum, mas muito grandes para caber na RAM. Portanto, eles já são complicados de abrir e inspecionar, quanto mais de explorar ou analisar.

Neste artigo, Jovan Veljanoski apresenta uma nova abordagem para dados dessas dimensões: o Vaex. Essa é uma biblioteca de DataFrame de código aberto que permite a visualização, exploração e análise em conjuntos de dados tabulares que são tão grandes quanto seu disco rígido. Para fazer isso, o Vaex emprega conceitos como mapeamento de memória, algoritmos out-of-core eficientes e lazy evaluations.

Esta matéria de introdução ao Vaex te ajudará a aliviar alguns dos seus problemas com dados dessa proporção, pelo menos quando se trata de conjuntos de dados tabulares.

 

07- 5 operações em conjuntos Python que você precisa saber

Estruturas de dados são os blocos de construção para scripts Python. Eles mantêm ou contêm os dados de uma maneira específica para fazer com que os scripts funcionem com mais eficiência. Portanto, é crucial aprender a interagir com as estruturas de dados.

Os conjuntos (sets) são uma das principais estruturas de dados em Python. E neste artigo são apresentadas as características dos sets e examinadas cinco operações comumente usadas nos conjuntos.

 

08- Aprenda Ciência de Dados em 10 anos – 3 lições de Peter Norvig (diretor de aprendizado de máquina da Google)

A demanda industrial, acadêmica e governamental por profissionais de ciência de dados qualificados é enorme, e continua crescendo rapidamente. A contínua “corrida de dados” está, portanto, atraindo profissionais com diversas formações, como física, matemática, estatística, economia e engenharia.

O mercado tem urgência por mais cientistas de dados, mas a formação desses profissionais exige muito tempo e esforço.

Inspirado pelo texto de Peter Norving sobre quanto tempo leva para se tornar um especialista em programação, Benjamin Obi Tayo compartilha em “Teach Yourself Data Science in 10 Yearspassos essenciais para dominar os fundamentos da ciência de dados.

Ao longo dessa conversa, Benjamin Obi Tayo te ajudará a encontrar as respostas para duas perguntas que todos os iniciantes em data science devem se fazer:

  1. Quanto tempo leva para aprender os fundamentos da ciência de dados?
  2. Quais recursos usar para aprender ciência de dados?

De forma geral, este artigo vem para nos lembrar que para tornar-se um cientista de dados é preciso tempo, esforço, energia, paciência e comprometimento. Ou seja, cuidado com aquela conversa de “aprenda ciência de dados em quatro semanas”.

 

09- 6 práticas recomendadas para tornar suas funções Python mais legíveis

Você já olhou para uma função que escreveu um mês antes e achou difícil entendê-la em até 3 minutos? Se sim, é hora de refatorar seu código. Se você levar mais de 3 minutos para entender seu próprio código, imagine quanto tempo isto tomará de seus colegas.

Se você deseja que seu código seja reutilizável, ele deve ser legível.

E em seu artigo sobre como escrever código limpo em Python, a cientista de dados Khuyen Tran detalha seis práticas para tornar as funções mais legíveis e mais fáceis de detectar erros. Ela diz que as funções devem ser curtas, fazer uma única coisa, conter código com o mesmo nível de abstração, ter menos de quatro argumentos, não ter duplicação e usar nomes descritivos.

Acompanhe o texto completo para entender como utilizar essas práticas e escrever códigos python muito mais legíveis. 

 

10- Tipos de conjuntos de dados em ciência de dados, mineração de dados e aprendizado de máquina

Para tomar qualquer decisão sobre como lidar com um conjunto de dados, é preciso entender com qual tipo de dados você está trabalhando. E nisso Tarun Gupta te ajudará com seu artigo “Types of Data Sets in Data Science, Data Mining & Machine Learning”.

Antes de tratar especificamente de cada tipo de dataset, Gupta explica dimensionalidade, esparsidade e resolução, que são características gerais dos datasets. A partir disso, ele destrincha os três tipos de conjuntos de dados: dados de registro (record data), dados baseados em gráficos (graph-based data) e dados ordenados (ordered data).  

 

Esses foram os 10 artigos selecionados para nossa lista de hoje, mas não faltam excelentes conteúdos de data science no Medium, como é o caso das publicações que fazemos lá. Então, Acompanhe o Insight Lab no Medium.

E quais outros artigos te ajudaram a ser um cientista de dados melhor? Compartilha aqui nos comentários com a gente e nossos leitores. 

 

Categorias
Deep Learning Inteligência Artificial Keras Python

5 Passos para criar seu 1º Projeto de Deep Learning com Python e Keras

Keras é uma biblioteca aberta de Deep Learning implementada utilizando TensorFlow para diversas linguagens/plataformas, como Python e R, como foco na sua facilidade para utilização. Ela permite modelar e treinar modelos de redes neurais com poucas linhas de código, como você verá no tutorial a seguir.

Nesse tutorial, vamos utilizar o Keras para criar um modelo capaz de classificar se membros de uma população indígena possuem ou não diabetes.

Preparações

Para seguir esse projeto, você precisará ter instalados:

  • Python 3;
  • Bibliotecas SciPy e Numpy;
  • Bibliotecas TensorFlow e Keras;
  • Jupyter Notebook;

Alternativamente, você pode realizar este tutorial na plataforma Google Colab, que já possui todas as dependências instaladas e prontas para que você execute o tutorial no seu navegador.

Após isso, basta criar um novo notebook com o título “projeto_deep_learning” (ou qualquer outro nome), e iniciar o tutorial.

 

1. Carregando os dados

Em uma célula, importe as seguintes bibliotecas Python: 

from numpy import loadtxt
import numpy as np
from keras.models import Sequential
from keras.layers import Dense

Na célula seguinte, carregue os dados da base Pima Indians Diabetes. Essa base possui inicialmente 9 colunas, sendo as 8 primeiras as entradas e a última o resultado esperado. Todas as entradas dessa base são numéricas, assim como as saídas, o que facilita a computação dos dados por modelos de Deep Learning.

 # carregue a base de dados
dataset = loadtxt('https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv', delimiter=',')

 

Em seguida, utilizando a funcionalidade de slice do Python, separe o conjunto de dados entre “Entradas” (X) e “Saídas” (y).

# separe os dados entre entradas (X) e saídas (y)
X = dataset[:,0:8]
y = dataset[:,8]

 

2. Criar o modelo utilizando Keras

Agora que nossos dados foram carregados e ajustados entre entradas e saídas, podemos definir nosso modelo utilizando a biblioteca Keras.

Modelos Keras são definidos como uma sequência de camadas. Nesse tutorial, vamos criar um modelo sequencial e adicionar uma camada de cada.

Primeiramente, precisamos garantir que a camada de entrada tem a quantidade correta de inputs de entrada. Isso pode ser especificado no Keras utilizando o argumento input_dim e o ajustando para 8, nosso número de entradas.

Para esse tutorial, vamos utilizar camadas completamente conectadas, que são definidas no Keras pela classe Dense. Esse projeto utilizará 3 camadas, as quais as duas primeiras utilizarão a função de ativação ReLU e a função Sigmoid na última. Podemos especificar o número de neurônios no primeiro argumento, e a função de ativação com o parâmetro activation.

# definir o modelo com keras
# inicializar o modelo sequencial
model = Sequential()
# inicializar a primeira camada, com 12 neurônios, 8 entradas utilizando a função ReLU
model.add(Dense(12, input_dim=8, activation='relu'))
# inicializar a segunda camada com 8 neurônios e a função ReLU
model.add(Dense(8, activation='relu'))
# inicializar a última camada (camada de saída) com um neurônio e a função Sigmoid
model.add(Dense(1, activation='sigmoid'))

 

3. Compilando o modelo

Com nosso modelo definido, precisamos compilá-lo. A compilação ocorre utilizando bibliotecas como Theano ou TensorFlow, onde a melhor forma de representar a rede para treinar e fazer predições utilizando o hardware disponível é selecionada.

Ao compilar, precisamos especificar algumas propriedades, como a função de perda, otimizador e a métrica que será utilizada para avaliar o modelo. Foge ao escopo do tutorial apresentar esses conceitos, mas vamos utilizar a função de perda de Entropia Cruzada Binária, o otimizador Adam (que utiliza o gradiente descendente) e acurácia como métrica.

# compile the keras model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

 

4. Treinando o modelo

Como nosso modelo definido e compilado, precisamos treiná-lo, ou seja, executar o modelo utilizando nossos dados. Para treinar o modelo, basta chamar a função fit() para o modelo.

O treinamento ocorre através de épocas, e cada época é dividida em lotes, onde uma época é uma passagem por todas as linhas do conjunto de testes, e um lote é composto de uma ou mais amostras (quantidade definida pelo usuário) consideradas pelo modelo antes que seja feita a atualização dos seus pesos.  Aqui, vamos executar 150 épocas com lotes de tamanho 10 (um número considerado pequeno). 

# treinar o modelo keras
model.fit(X, y, epochs=150, batch_size=10)

5. Avaliando o modelo

Agora que estamos com nosso modelo treinado, precisamos avaliá-lo. Essa avaliação vai dizer o quão bem o modelo foi construído utilizando o conjunto de dados de treinamento. Esse pequeno projeto foi construído para ser simples, mas você pode separar os dados entre dados de treinamento e de teste para avaliar o desempenho do modelo com novos dados.

Para avaliar como o modelo se comportou para os dados de treinamento, basta passar os mesmos dados de entrada e saída para a função evaluate() . Essa função retorna uma lista com a perda e a acurácia do modelo para o conjunto de dados.

# avaliando o modelo keras
_, accuracy = model.evaluate(X, y)
print('Acurácia: %.2f' % (accuracy*100))

Conclusão

Com esse tutorial, podemos acompanhar em 5 passos o ciclo de vida de um modelo de Deep Learning, da sua concepção até a sua avaliação. Você pode expandir o que foi feito neste tutorial para, por exemplo, ajustar o modelo (é possível obter uma acurácia maior do que a obtida?), salvar o modelo (para utilização em outros projetos), plotar a curva de aprendizado, entre outras ideias.

 

Para mais tutoriais, continue atento ao nosso Blog.

 

Este texto foi baseado no tutorial disponibilizado em: Your First Deep Learning Project in Python with Keras Step-By-Step

 

 

Categorias
Biblioteca Deep Learning Python

8 bibliotecas de Deep Learning mais usadas em Python

Se você se interessa por Deep Learning, dos neurônios mais simples aos mais complexos, mas não sabe qual é a melhor biblioteca para seu projeto, nós te damos uma força! Esta lista com 8 bibliotecas tem a finalidade de ajudar você na sua escolha, apresentando de maneira resumida e direta cada biblioteca. Vamos lá?!

 

1. Pytorch

O PyTorch é classificado como “Tensores e redes neurais dinâmicas em Python com forte aceleração de GPU”. Tensores são uma construção matemática usada pesadamente em física e engenharia. Um tensor de rank dois é um tipo especial de matriz; pegar o produto interno de um vetor com o tensor produz outro vetor com uma nova magnitude e uma nova direção. 

A aceleração de GPU é uma das mais modernas estruturas das Deep Neural Networks. Uma rede neural dinâmica é aquela que pode mudar de iteração para iteração, por exemplo, permitindo que um modelo PyTorch adicione e remova camadas ocultas durante o treinamento para melhorar sua precisão e generalidade. O PyTorch recria o grafo em tempo real em cada etapa de iteração. Em contraste, o TensorFlow, por padrão, cria um único grafo de fluxo de dados, otimiza o código do grafo para desempenho e depois treina o modelo.

Enquanto o  modo de execução ávido é uma opção relativamente nova no TensorFlow, é a única maneira de executar o PyTorch: chamadas de API são executadas quando invocadas, em vez de serem adicionadas a um grafo para serem executadas posteriormente.

O PyTorch integra bibliotecas de aceleração como Intel MKL e Nvidia cuDNN e NCCL (Nvidia Collective Communications Library) para maximizar a velocidade. Seus principais backend são gravados como bibliotecas independentes com uma API C99. Ao mesmo tempo, o PyTorch não é uma ligação do Python em um framework monolítico de C ++. A intenção é que ele seja profundamente integrado ao Python e permita o uso de outras bibliotecas Python.

 

2. Theano

Sem o Theano, não existiria nada perto da quantidade de bibliotecas de deep learning que temos hoje, especificamente em Python. Da mesma forma que sem o NumPy, não poderíamos ter SciPy, scikit-learn e scikit-image, o mesmo pode ser dito sobre Theano e abstrações de alto nível de aprendizagem profunda.

Basicamente, Theano é uma biblioteca Python usada para definir, otimizar e avaliar  expressões matemáticas envolvendo matrizes multidimensionais. Esta biblioteca consegue isso através de forte integração com NumPy e o uso transparente da GPU.

Embora você  possa construir redes de aprendizagem profunda em Theano, podemos pensar nesta biblioteca como blocos de construção para redes neurais, da mesma forma que o NumPy serve como os blocos de construção para a computação científica. Na verdade, a maioria das bibliotecas mencionadas nesta matéria envolve o Theano para torná-lo mais conveniente e acessível.

Embora não seja uma comparação perfeita, construir uma rede neural convolucional no Theano é como escrever uma máquina de vetores de suporte (SVM) em Python nativo com apenas uma pitada de NumPy.

 

3. Lasagne

Lasagne é uma leve e de fácil manipulação, usada para construir e treinar redes em Theano. Sua leveza não se destina a ser um invólucro pesado em torno de Theano como Keras é. Embora isso faça com que seu código seja mais detalhado, esta biblioteca o libera de quaisquer restrições, enquanto fornece blocos de construção modulares baseados em Theano.

Simplificando: Lasagne funciona como um meio-termo entre a programação de baixo nível de Theano e as abstrações de alto nível de Keras.

 

4. TensorFlow

Semelhante ao Theano, o TensorFlow é uma biblioteca de código aberto para computação numérica usando grafos de fluxo de dados, que é tudo o que uma rede neural realmente é. Originalmente desenvolvida pelos pesquisadores da equipe do Google Brain, na organização de pesquisa Machine Intelligence do Google, a biblioteca desde então é de código aberto e disponibilizada ao público.

Um benefício principal do TensorFlow (em comparação com Theano) é a  computação distribuída, especialmente entre várias GPUs, embora isso seja algo que está sendo trabalhado no Theano. É bom lembrar que desde sua 2ª versão o Tensor-Flow incorporou o Keras, trazendo uma API muito mais amigável.

 

5. Keras

Sem dúvidas, uma das bibliotecas Python de deep learning mais querida por programadores. Keras é uma biblioteca de rede neural modular que pode usar tanto Theano ou TensorFlow como um backend. A principal motivação por trás do Keras é que você deve ser capaz de experimentar rapidamente e ir da ideia ao resultado o  mais rápido possível.

Arquitetar redes em Keras parece fácil e natural. Inclui alguns dos algoritmos de última geração para otimizadores (Adam, RMSProp), normalização (BatchNorm) e camadas de ativação (PReLU, ELU, LeakyReLU).

Esta biblioteca também dá grande ênfase às Redes Neurais Convolucionais, o que é extremamente valioso do ponto de vista da visão computacional.

Mais especificamente, você pode construir facilmente redes baseadas em sequência (onde as entradas fluem linearmente pela rede) e redes baseadas em grafos (onde as entradas podem “pular” certas camadas, apenas para serem concatenadas posteriormente). Isso torna a implementação de arquiteturas de rede mais complexas, como GoogLeNet e SqueezeNet,  muito mais fácil.

 

6. mxnet

Esta biblioteca Python de Deep Learning possui o foco em redes de classificação de imagem de treinamento. Apesar de exigir um pouco mais de código para criar uma rede em mxnet, o que esta biblioteca oferece é um número incrível de ligações de linguagem (C ++, Python, R, JavaScript, etc.)

A biblioteca mxnet realmente brilha para computação distribuída, permitindo treinar sua rede em várias máquinas CPU / GPU e até mesmo em clusters AWS, Azure e YARN.

Lembre-se, é necessário um pouco mais de código para colocar um experimento em execução no mxnet (em comparação com Keras), mas se você deseja distribuir o treinamento em várias GPUs ou sistemas, o recomendável seria o mxnet.

 

7. Sklearn-theano

Há momentos em que você não precisa treinar uma Rede Neural Convolucional (RNC) de ponta a ponta. Em vez disso, você precisa tratar a RNC como um extrator de recursos. Isso é especialmente útil em situações em que você não tem dados suficientes para treinar uma RNC completa do zero. Em vez disso, basta passar suas imagens de entrada por uma arquitetura pré-treinada popular, como OverFeat, AlexNet, VGGNet ou GoogLeNet, e extrair recursos das camadas FC ou qualquer camada que você decidir usar.

Simplificando, isso é exatamente o que sklearn-theano permite que você faça. Você não pode treinar um modelo do zero com ele, mas é  fantástico para tratar redes como extratores de recursos.

 

8. Nolearn

Enquanto Keras envolve Theano e TensorFlow em uma API mais amigável, Nolearn faz o mesmo, apenas para Lasagne. Além disso, todo o código no Nolearn é compatível com o scikit-learn, o que é um grande bônus.

Uma dica é usar o Nolearn para implementação de Deep Belief Networks (DBNs).

Gostou de mais esta dica Insigth? Quais bibliotecas você incluiria na lista?

 

Fonte: Pyimagesearch e CIO.

 

Categorias
Dica de Leitura Machine Learning Não categorizado Python

Dica de leitura: Python Machine Learning 3ª Edição

O livro Python Machine Learning, 3ª edição é um guia abrangente de Machine Learning e Deep Learning com Python. De forma didática, o livro ensina todos os passos necessários servindo como leitura de referência enquanto você cria seus sistemas. Contendo explicações claras e exemplos, o livro inclui todas as técnicas essenciais de Machine Learning (ML).

Neste livro os autores Sebastian Raschka e Vahid Mirjalili ensinam os princípios por trás do ML, permitindo que você construa seus próprios modelos e aplicativos.

Revisado e ampliado para conter TensorFlow 2.0, esta nova edição apresenta aos leitores os novos recursos da API Keras, bem como as últimas adições ao scikit-learn. Ele contém ainda, técnicas de aprendizado por reforço de última geração com base em aprendizado profundo, e uma introdução aos GANs.

Outro conteúdo importante que esta obra traz é o subcampo de Natural Language Processing (NLP), esta obra também te ajudará a aprender como usar algoritmos de Machine Learning para classificar documentos.

 

Você aprenderá a:
  • Dominar as estruturas, modelos e técnicas que permitem que as máquinas “aprendam” com os dados;
  • Usar biblioteca scikit-learn para Machine Learning e TensorFlow para Deep Learning;
  • Aplicar Machine Learning à classificação de imagens, análise de sentimento, aplicativos inteligentes da Web e treinar redes neurais, GANs e outros modelos;
  • Descobrir as melhores práticas para avaliar e ajustar modelos;
  • Prever resultados de destino contínuos usando análise de regressão;
  • Aprofundar-se em dados textuais e de mídia social usando análise de sentimento

 

Para quem é este livro

Iniciante em Python e interessado em Machine Learning e Deep Learning, este livro é para você que deseja começar do zero ou ampliar seu conhecimento de ML.  Direcionado a desenvolvedores e cientistas de dados que desejam ensinar computadores a aprenderem com dados.

 

Aproveite a leitura

O livro Python Machine Learning poderá ser seu companheiro nos estudos, seja você um desenvolvedor Python iniciante em ML ou apenas alguém que queira aprofundar seu conhecimento sobre os desenvolvimentos mais recentes.

 

Bons estudos!

Categorias
Pandas Programação Python

6 truques do Pandas para impulsionar sua análise de dados

O Pandas é uma das melhores bibliotecas Python para análise de dados. Esta biblioteca open source oferece estrutura de dados de alto nível com um excelente desempenho para simplificar tarefas complicadas de manipulação de dados. Sua grande variedade de ferramentas possibilita traduzir operações complexas com dados em um ou dois comandos, além de possuir métodos internos para agrupar, filtrar e combinar dados.

 

Conheça agora, os seis truques mais úteis dos Pandas para acelerar sua análise de dados.

 

  1. Selecionar colunas por tipo de dados;
  2. Converter cadeias de caracteres em números;
  3. Detectar e manipular valores ausentes;
  4. Converter um recurso numérico contínuo em um recurso categórico;
  5. Criar um DataFrame a partir da área de transferência;
  6. Construir um DataFrame a partir de vários arquivos.

Confira aqui o repositório no Github para obter o código-fonte.

 

1. Selecione colunas por tipos de dados

Aqui estão os tipos de dados do DataFrame Titanic:

df.dtypes

 

PassengerId int64

Survived int64

Pclass int64

Name object

Sex object

Age float64

SibSp int64

Parch int64

Ticket object

Fare float64

Cabin object

Embarked object

dtype: object

 

Digamos que você precise selecionar as colunas numéricas.

df.select_dtypes(include='number').head()

 

Isso inclui as colunas int e float. Você também pode usar esse método para:

 

  • selecionar apenas colunas de objeto;
  • selecionar vários tipos de dados;
  • excluir certos tipos de dados.

 

# select just object columns

df.select_dtypes(include='object')

 

# select multiple data types

df.select_dtypes(include=['int', 'datetime', 'object'])

 

# exclude certain data types

df.select_dtypes(exclude='int')

 

2. Converta sequências de caracteres em números

 

Existem dois métodos para converter uma string em números no Pandas:

  • O método astype()
  • O método to_numeric()

Vamos criar um exemplo de DataFrame para ver a diferença.

df = pd.DataFrame({ 'product': ['A','B','C','D'],

                 'price': ['10','20','30','40'], 

                'sales': ['20','-','60','-'] 

                })

 

 

As colunas de price e sales são armazenadas como uma cadeia de caracteres e, portanto, resultam em colunas de objeto:

df.dtypes

 

product    object

price      object

sales      object

dtype: object

 

Podemos usar o primeiro método astype()para realizar a conversão na coluna de price da seguinte maneira:

 

# Use Python type

df['price'] = df['price'].astype(int)

 

# alternatively, pass { col: dtype }

df = df.astype({'price': 'int'})

 

No entanto, isso resultaria em um erro se tentássemos usá-lo na coluna de sales. Para consertar isso, podemos usar to_numeric() com o argumento errors='coerce'.

 

df['sales'] = pd.to_numeric(df['sales'], errors='coerce')

 

Agora, valores inválidos são convertidos para  NaN e o tipo de dado é float.

 

3. Detectar e manipular valores ausentes

Uma maneira de detectar valores ausentes é usar o método info(). Veja na coluna Non-Null Count.

df.info()

 

RangeIndex: 891 entries, 0 to 890

Data columns (total 12 columns):

#   Column       Non-Null Count  Dtype 

---  ------       --------------  ----- 

0   PassengerId  891 non-null    int64 

1   Survived     891 non-null    int64 

2   Pclass       891 non-null    int64 

3   Name         891 non-null    object

4   Sex          891 non-null    object

5   Age          714 non-null    float64

6   SibSp        891 non-null    int64 

7   Parch        891 non-null    int64 

8   Ticket       891 non-null    object

9   Fare         891 non-null    float64

10  Cabin        204 non-null    object

11  Embarked     889 non-null    object

dtypes: float64(2), int64(5), object(5)

memory usage: 83.7+ KB

 

Quando o conjunto de dados é grande, podemos contar o número de valores ausentes. df.isnull().sum() retorna o número de valores ausentes para cada coluna.

 

df.isnull().sum()

 

PassengerId      0

Survived         0

Pclass           0

Name             0

Sex              0

Age            177

SibSp            0

Parch            0

Ticket           0

Fare             0

Cabin          687

Embarked         2

dtype: int64

 

df.isnull().sum().sum() retorna o número total de valores ausentes.

 

df.isnull().sum().sum()

 

886

 

Além disso, também podemos descobrir a porcentagem de valores que estão faltando, executando: df.isna().mean()

 

PassengerId    0.000000

Survived       0.000000

Pclass         0.000000

Name           0.000000

Sex            0.000000

Age            0.198653

SibSp          0.000000

Parch          0.000000

Ticket         0.000000

Fare           0.000000

Cabin          0.771044

Embarked       0.002245

dtype: float64

 

Eliminando valores ausentes

 

Para descartar linhas se houver algum valor NaN:

df.dropna(axis = 0)

Para descartar colunas se houver algum valor NaN:

df.dropna(axis = 1)

Para descartar colunas nas quais mais de 10% dos valores estão ausentes:

df.dropna(thresh=len(df)*0.9, axis=1)

 

Substituindo valores ausentes

 

Para substituir todos os valores de NaN por um escalar:

df.fillna(value=10)

Para substituir os valores de NaN pelos valores da linha anterior:

df.fillna(axis=0, method='ffill')

Para substituir os valores de NaN pelos valores da coluna anterior:

df.fillna(axis=1, method='ffill')

Você também pode substituir os valores de NaN pelos valores da próxima linha ou coluna:

# Replace with the values in the next row

df.fillna(axis=0, method='bfill')

# Replace with the values in the next column

df.fillna(axis=1, method='bfill')

 

A outra substituição comum é trocar os valores de NaN pela média. Por exemplo, para substituir os valores de NaN na coluna Idade pela média.

 

df['Age'].fillna(value=df['Age'].mean(), inplace=True)

 

4. Converta um recurso numérico contínuo em um recurso categórico

 

Na etapa de preparação dos dados, é bastante comum combinar ou transformar recursos existentes para criar outro mais útil. Uma das maneiras mais populares é criar um recurso categórico a partir de um recurso numérico contínuo.

 

Observe a coluna Age do dataset do Titanic:

 

df['Age'].head(8)

 

0    22.0

1    38.0

2    26.0

3    35.0

4    35.0

5     NaN

6    54.0

7     2.0

Name: Age, dtype: float64

 

Age é um atributo numérico contínuo, mas se você desejar convertê-la em um atributo categórico, por exemplo, converta as idades em grupos de faixas etárias: ≤12, Teen (≤18), Adult (≤60) e Older (>60).

 

A melhor maneira de fazer isso é usando a função Pandas cut():

 

import sys

 

df['ageGroup']=pd.cut(

   df['Age'],

   bins=[0, 13, 19, 61, sys.maxsize],

   labels=['<12', 'Teen', 'Adult', 'Older']

)

 

Usar a função head(),na coluna age Group, deverá exibir as informações da coluna.

df['ageGroup'].head(8)

 

0    Adult

1    Adult

2    Adult

3    Adult

4    Adult

5      NaN

6    Adult

7      <12

Name: ageGroup, dtype: category

Categories (4, object): [<12 < Teen < Adult < Older]

 

5. Crie um DataFrame a partir da área de transferência

 

A função Pandas read_clipboard() é uma maneira muito útil de inserir dados em um DataFrame de forma rápida..

Suponha que tenhamos os seguintes dados e desejemos criar um DataFrame a partir dele:

 

    product   price

0    A         10

1    B         20

2    C         30

4    D         40

 

Só precisamos selecionar os dados e copiá-los para a área de transferência. Então, podemos usar a função para ler um DataFrame.

 

df = pd.read_clipboard ()

df

 

6. Crie um DataFrame a partir de vários arquivos

Seu dataset pode se espalhar por vários arquivos, mas você pode querer lê-lo em um único DataFrame.

Uma maneira de fazer isso é ler cada arquivo em seu próprio DataFrame, combiná-los e excluir o DataFrame original. Porém, isso seria ineficiente em memória.

Uma solução melhor é usar o módulo interno glob  (graças aos truques do Data School Pandas).

 

Neste caso, glob() estará procurando no diretório de dados, todos os arquivos CSV que começam com a palavra ” data_row_ “. O glob()recupera nomes de arquivos em uma ordem arbitrária, e é por isso que classificamos a lista usando a função sort().

 

Para dados em linha

Digamos que nosso dataset esteja distribuído por 2 arquivos em linhas: data_row_1.csv e data_row_2.csv.

 

Para criar um DataFrame a partir dos 2 arquivos:

 

files = sorted(glob('data/data_row_*.csv'))

pd.concat((pd.read_csv(file) for file in files), ignore_index=True)

 

sorted(glob('data/data_row_*.csv')) recupera nomes de arquivos. Depois disso, lemos cada um dos arquivos usando read_csv()e passamos os resultados para a função concat(), que conectará as linhas em um único DataFrame. Além disso, para evitar um valor duplicado no índice, dizemos ao concat()que ignore o index (ignore_index=True) e, em vez disso, use o índice inteiro padrão.

 

 

Para dados em colunas

Digamos que nosso dataset esteja distribuído em 2 arquivos em colunas: data_col_1.csv e data_col_2.csv.

 

Para criar um DataFrame a partir dos 2 arquivos:

files = sorted(glob('data/data_col_*.csv'))

pd.concat((pd.read_csv(file) for file in files), axis=1)

Desta vez, dizemos à função concat() para conectar ao longo do eixo das colunas.

————-

Isso é tudo!

Obrigada pela leitura e continue acompanhando nossos postagens em Data Science.

 

Texto original: B. Chen

 

 

Categorias
Big Data Ciência de Dados Python

Conheça o PyMove: biblioteca Python para identificação de trajetórias padrões, mineração e análise de dados

O Insight Lab é formado por um time multidisciplinar de pesquisadores que vão desde de alunos de graduação a especialistas. Com o propósito de  desenvolver pesquisas na área de Data Science, que possam beneficiar a outros pesquisadores e a sociedade em geral, nossos pesquisadores estão sempre atentos às necessidades que as mudanças e as novas tecnologias proporcionam. 

Observamos com isso, por exemplo, que o crescente uso de sensores GPS e barateamento de tecnologias móveis, nos últimos anos, têm gerado um grande volume de dados de trajetórias. Esses dados podem trazer respostas para facilitar diversas atividades que impactam diretamente na vida das pessoas. Pensando nisso, o quê um Cientista de Dados pode fazer a partir daí?

O que é uma trajetória?

Bem, antes de tudo é muito importante entendermos o que é uma trajetória. Uma trajetória é uma sequência de pontos cronologicamente ordenados, que representam o movimento de um objeto em um espaço geográfico. Cada ponto é formado por uma marcação de tempo e coordenadas geoespaciais (latitude,longitude). As trajetórias podem representar movimentos de diferentes objetos, como:pessoas, veículos e animais.

O que podemos fazer com os dados de trajetória?

Esse tipo de dado é muito valioso não só para a Computação, mas também para áreas como Geografia, Sociologia e Urbanização, sendo bastantes utilizados para aplicações como: sistemas de transporte inteligentes e computação urbana; análise de mobilidade sustentável; no rastreamento de fenômenos naturais e identificação de padrões de migração animal e etc.

Como trabalhar com esse dado?

Para que seja possível extrair informações dos dados e realizar análises consistentes dos mesmos, é preciso que um conjunto de atividades de mineração de dados, que veremos em mais detalhes a seguir, sejam executadas. Embora haja um grande volume de trabalhos e aplicações, nota-se a ausência de softwares e ferramentas que possam auxiliar pesquisadores em todo o processo para lidar e extrair as informações que esses dados possam oferecer.

Com isso, nós do Insight Data Science Lab estamos trabalhando para a elaboração de uma biblioteca open-source para Python que contemple o conjunto de etapas e atividades para lidar com esses dados: o PyMove!

O que é o PyMove?

O PyMove surgiu em meados de 2018 com o objetivo de ser uma biblioteca Python extensível que comporte um grande número de operações dentro das etapas de mineração de dados de trajetória!

O PyMove propõe :

  • Uma sintaxe familiar e semelhante ao Pandas;
  • Documentação clara;
  • Extensibilidade, já que você pode implementar sua estrutura de dados principal manipulando outras estruturas de dados, como o Dask DataFrame, matrizes numpy, etc., além de adicionar novos módulos;
  • Flexibilidade, pois o usuário pode alternar entre diferentes estruturas de dados;
  • Operações para pré-processamento de dados, mineração de padrões e visualização de dados.
Modelagem do Pymove
Estrutura de dados

A atual estrutura do PyMove é fortemente influenciada pelo trabalho de Yu Zheng, o qual propõe um paradigma que serve como um guia para realizar trabalhos de mineração de dados de trajetória. A figura 2.1.1 mostra a versão adaptada desse paradigma adotada no PyMove.

Figura 2.1.1. Um paradigma para mineração de trajetória. Fonte: Adaptado de [4]
A seguir, iremos destrinchar cada etapa citada na figura 2.1.1.
Pré-processamento

O pré-processamento de dados é uma etapa de extrema importância na mineração dos dados. Nela são realizadas atividades com o objetivo de melhorar a qualidade do dados para obtenção de melhores resultados em processamentos e análises futuras. Existem quatro técnicas básicas para esta etapa: filtragem de ruído, detecção de pontos de parada, compressão e segmentação de trajetória.

Filtragem de ruído

Alguns pontos da trajetória podem estar inconsistentes devido a problemas nos dispositivos de coleta de dados, na comunicação, ou em outros fatores externos, tais pontos são denominados ruídos. As técnicas de filtragem de ruído procuram realizar a remoção ou alinhamento desses dados ruidosos com a rede de ruas. Os pontos p5 e p9 na Figura 3.1 são, neste contexto, dados com ruído.

Figura 3.1. Trajetória com pontos lidos incorretamente. Fonte: adaptado de [1]
Detecção de pontos de parada

Pontos onde os objetos ficaram parados ou se movimentando ao redor, por um determinado limite de tempo, são chamados pontos de parada. Estes pontos podem representar: shoppings, atrações turísticas, postos de gasolina, restaurantes, entre outros. Os pontos de parada nos permitem representar uma trajetória como uma sequência de pontos com significado.
A figura 3.2 mostra uma trajetória, após a execução de um algoritmo, para detectar pontos de parada onde são encontrados três pontos de parada: casa, trabalho e supermercado. Esses pontos podem representar essa trajetória, como pontos p1, p2 e p3, respectivamente.

Compressão

Tem como objetivo reduzir o tamanho dos dados de trajetória através de um conjunto de técnicas, com o objetivo de evitar sobrecarga de processamento e minimizar a carga no armazenamento de dados, gerando uma representação mais compactada  que descreve a trajetória de um objeto.

Figura 3.2. Resultado da execução de um algoritmo de detecção de pontos de parada. Fonte: adaptado de [2].

Na Figura 3.3 podemos ver o resultado da compressão de uma trajetória, inicialmente ela é representada por doze pontos, mas após a compressão este número é reduzido para quatro pontos.

Figura 3.3. Demonstração da aplicação de uma técnica de compreensão de dados de trajetórias. Fonte: adaptado de [2].
Segmentação

Nesta etapa, a trajetória é subdividida em segmentos, de tal forma que os dados pertencentes ao mesmo segmento tenham comportamento homogêneo. A segmentação ajuda a descobrir padrões sobre os dados, diminui a complexidade computacional e é um passo obrigatório para processos de análise, como a clusterização e a classificação. A Figura 3.4 apresenta um exemplo de segmentação de trajetória pelo tempo fixo de duas horas, resultando em três novos segmentos.

Figura 3.4. Segmentação de uma trajetória com base no intervalo de tempo igual a duas horas. Fonte: adaptado de [2]
Map-matching

Como foi mencionado acima, os pontos gerados em uma trajetória podem não corresponder precisamente à real localização de onde o objeto em movimento passou, (figura 3.5-a).

Esta falta de precisão não é desejável para alguns tipos de aplicações, entre elas: as que trabalham com análise de fluxo de trânsito ou serviços de navegação (ZHENG,2015). Para resolver esses e outros problemas, são aplicados algoritmos de map-matching, que têm como objetivo alinhar os pontos da trajetória com a rede de ruas, (figura 3.5-b).

Figura 3.5 (a e b). Uma trajetória, antes e depois da aplicação do Map-matching. Fonte: adaptado de [1].
Indexação e recuperação de trajetórias

Durante o processo de mineração de dados de trajetórias, acabamos por precisar acessar frequentemente diferentes segmentos e amostras das trajetórias. Com o grande volume de dados, esses acessos podem demandar tempo e processamento. Por isso, é necessário a adoção de técnicas eficazes para o gerenciamento desses dados, oferecendo a recuperação rápida dos dados.

Os dois principais tipos de consultas, mostrado na Figura 2.1.1 – Um paradigma para mineração de trajetória.
  • KNN: esse tipo de consulta recupera as K, primeiras trajetórias com a distância agregada mínima, para alguns pontos ou uma trajetória específica.

Nas consultas de pontos buscamos por trajetórias que possuam uma boa conexão com os locais/pontos pesquisados, em vez de saber se a trajetória é semelhante à consulta em forma.

Nas consulta por trajetória buscamos encontrar os registros que possuam uma rota ou segmento de trajetória parecida. Essa consulta necessita da definição de uma função que delimite a similaridade e distância entre trajetórias.

  • Intervalo de consultas: recuperam os dados de trajetórias que estão contidos em um espaço ou intervalo. Essa técnica contém três abordagens para consultas de intervalo espaço-temporal.
  1. A primeira abordagem considera o tempo como a terceira dimensão além das informações que delimitam o espaço geográfico.
  2. A segunda abordagem divide um período em vários intervalos de tempo, criando um índice espacial individual.
  3. A terceira abordagem leva em consideração o espaço geográfico, dividindo-o em grades, as chamadas grids, e cria um índice temporal para as trajetórias que caem em cada célula dessa grade. Cada segmento que cai em uma grade é representado por um ponto com as coordenadas iguais ao ponto com horário inicial e o ponto com horário final do segmento.

A Figura 4 mostra as técnicas para melhoria da indexação e recuperação de dados e segmentos de trajetórias. Em (a) é mostrada a técnica de Intervalo de consulta. Nela são recuperados os pontos e segmentos de trajetórias dentro da região retangular tracejada em vermelho. Já em (b) e (c) são mostradas o uso da técnica de consulta via KNN, sendo a primeira consultas por pontos e a segunda consulta por segmentos de trajetórias similares.

Figura 4. Demonstração das abordagens utilizadas para indexação e recuperação de trajetórias. Fonte: adaptado de [4].
Modelos

Muitas aplicações exigem informações instantâneas a partir dos dados de trajetória, como é o caso de aplicações de guia de viagens ou detecção de anomalias de tráfego. Essas informações exigem algoritmos eficazes e muitas vezes são adquiridas por meio de técnicas de mineração de dados. Essas técnicas podem ser enquadradas em áreas, como classificação, detecção de anomalias, mineração de padrões e incertezas da trajetória. Abaixo é explorado o conceito de cada uma dessas técnicas.

Classificação

Trajetórias e segmentos podem ser classificados de diferentes modos e em diferentes categorias, como em: tipo de atividade, modos de transporte e até mesmo o movimento, através do uso de técnicas e algoritmos de aprendizado supervisionado.

Em geral, a classificação da trajetória é composta por três etapas principais:

  1. Utilização de métodos de segmentação da trajetória para prover segmentos;
  2. Extração de características de cada segmento;
  3. Criação de modelos para classificar cada segmento.
Detecção de anomalias

Anomalias, no contexto de dados espaço temporais, consistem em pontos ou até mesmo segmentos de uma trajetória que possuem um comportamento anormal. Não segue o padrão dos dados que representam uma trajetória, como é o caso dos pontos destacados em vermelho na Figura 3.1. Essas anomalias podem ser desencadeados por diversos eventos como: um acidente de trânsito, que obriga os carros a mudarem rapidamente de velocidade, um desvio de uma rota comum por conta de uma obra ou por estar perdido no caminho. A etapa de detecção de anomalias, se preocupa em encontrar esses pontos e/ou segmentos que violem um certo padrão de uma trajetória.

Mineração de padrões

Diferentes padrões de mobilidade podem ser identificados numa trajetória individual ou em um conjunto de trajetórias. Os padrões de mobilidade de trajetória em quatro categorias: Clusterização de trajetórias, Moving Together Patterns, , Padrões Periódicos e Padrões de Frequências Sequenciais.

  1. Clusterização: as técnicas dessa categoria têm como finalidade agrupar trajetórias em busca de algum padrão ou característica que diferenciem grupos.
  2. Moving Together Patterns: essa categoria reúne técnicas que procuram detectar indivíduos e/ou objetos que se movem juntos por determinado período de tempo, sendo bastante útil para detectar padrões. Esses padrões podem ter diversas aplicações, como ajudar a entender fenômenos de migração e tráfego de espécies.
  3. Padrões Periódicos: reúne técnicas que procuram identificar comportamentos e padrões temporais em trajetórias, como a ida a um dentista durante um intervalo de tempo, ou até mesmo os animais, que migram anualmente de um lugar a outro. A análise deste tipo de padrão auxilia na previsão de comportamentos futuros do objeto e na compressão de dados.
  4. Padrões de Frequências Sequenciais: reúne técnicas que possuem a finalidade de encontrar padrões onde objetos partilhem a mesma sequência de localização, num período similar de tempo. Os pontos da sequência não necessariamente precisam ser pontos consecutivos na trajetória original. Essas técnicas são amplamente utilizados em aplicações como recomendação de trajetória, predição de localização, compressão de dados.
Incerteza em trajetórias

Indivíduos e objetos realizam movimentos contínuos em determinados locais em que trafegam. Porém, devido à limitação de algumas aplicações ou por questão de economia de energia dos sensores, os dados que representam essa trajetória são enviados periodicamente. Desse modo, a localização desse indivíduo e/ou objeto será incerta, ou até mesmo desconhecida, entre dois pontos que descrevem sua trajetória.

Na Figura 6 é perceptível que entre dois pontos é possível tomar caminhos diferentes, por exemplo: partindo do ponto p1 é possível chegar ao ponto p2 de diferentes formas. Este contexto ocasiona a incerteza dos caminhos tomados entre pontos de uma trajetória.

Nessa linha de pesquisa, há duas sub-áreas, descritas a seguir:

  • Redução de incertezas: consiste em desenvolver técnicas que visam diminuir a incerteza da trajetória entre dois pontos.
  • Preservação de privacidade: consiste em desenvolver técnicas que visam ampliar a incerteza de trajetórias sem afetar a qualidade de um serviço ou o uso desses dados, visando proteger um usuário do vazamento de privacidade causado pela divulgação de suas trajetórias.
Figura 6. Demonstração de uma trajetória formada por três pontos, p1, p2 e p3. Fonte: adaptado de [4].
Visualização de trajetórias

A aplicação de técnicas de visualização de dados nos grandes volumes de dados de trajetórias podem facilitar a compreensão do comportamento de objetos em movimento, como veículos e descoberta de tráfego, social, geoespacial e até padrões econômicos. Essas visualizações podem ser combinadas com procedimentos de processamento dos dados, visando diminuir, limpar e filtrar os dados.

Para visualizar dados de trajetória são necessárias técnicas que exploram canais visuais como cor, tamanho, forma, orientação aplicadas a diferentes marcas como pontos, linhas, áreas, volumes e superfícies para representar estes dados, transformando-os em representações visuais apropriadas.

Há diferentes técnicas de visualização a serem aplicadas como:
  • Gráfico de Linhas: visualizações orientadas ao tempo enfatiza a exibição de padrões, periodicidade, tendências e anormalidade dos dados de trajetória. Nesse tipo de representação é amplamente utilizado gráfico de linhas, onde o eixo X delimita o tempo e o Y outra característica do dado, como os picos de velocidade de uma trajetória.
  • Mapa estáticos: são abordagens bastante comuns para representar informações de localização geográfica, como a análise de trajetórias de mobilidade ou fluxo de tráfego em uma rede distribuída. Convencionalmente, uma trajetória é representada por uma linha ou uma curva, podendo explorar combinações de variáveis, como cor, tamanho e direção, em relação às suas propriedades.
  • Clusters: Quando há uma grande massa de dados de trajetória, pode haver sobreposição de pontos em uma visualização. Com isso as visualizações com clusters em mapas ajudam bastante em análises, visto que um grupo de pontos que em determinado momento se sobrepunham, tornam-se um só. Essa técnica permite obter uma visão geral rápida de seus conjuntos de clusters.
Visualização dos dados de gorjetas das viagens de táxis fazendo uso do gráfico de linhas para demonstrar a quantidade de gorjetas obtidas pelas viagens de táxi no período de tempo de 1 a 7 de maio de 2011. Cada linha representa a gorjeta por viagem em uma região. Fonte: Wei Chen, Fangzhou Guo, and Fei-Yue Wang. A survey of traffic data visualization. IEEE Transactions on Intelligent Transportation Systems, 16:2970–2984, 12 2015.

 

Exploração do uso de recursos visuais para visualização em mapas estáticos. Fonte: adaptado de [3].
  • Mapas de Calor: Essa visualização é gerada a partir de uma matriz de células, onde cada célula é colorida de forma gradiente com base em valores ou função dos dados, sendo bastante útil quando é necessário gerar visualizações para grande volume de dados, fornecendo uma visão geral dos maiores e menores valores dos dados.

 

Visualização de todos os pontos sob um mapa gerado pelo Folium. Fonte: documentação Folium.

 

Utilização da técnica de cluster para visualizar os pontos sob um mapa gerado pelo Folium. Fonte: documentação Folium.
Tutorial

Depois de explorar mais sobre a arquitetura do PyMove e vislumbrar o mundo dos dados de trajetória, agora vamos botar a mão na massa!

Neste tutorial iremos entender como representar dados de trajetória no PyMove, aplicar funções de pré-processamento e visualização de dados existentes no PyMove!

Para isso, vamos utilizar o conjunto de dados utilizado neste trabalho, o Geolife GPS trajectory dataset, [5]. Ele é resultado da coleta realizada no projeto Geolife, da Microsoft Research Asia, por 178 usuários por mais de quatro anos. Esses dados registram uma grande variedade de movimentos de dos usuários, incluindo não só caminhos rotineiros, como também atividades esportivas e de lazer, amplamente distribuídos em mais de 30 cidades da China e em algumas cidades localizadas nos EUA e na Europa.

Esse conjunto de dados possui 17.621 trajetórias, registradas por GPS, com uma distância total de 1.251.654 quilômetros e duração de 48.203 horas. Os dados estão dispostos em 182 pastas, numeradas de 000 à 181, onde cada uma simbolizava um usuário. Os arquivos que contém os dados de localização possuem os valores separados por vírgula, onde representam, respectivamente, a latitude, longitude, campo sem valor, altitude, número de dias que passaram após a data 30/12/1999, data e tempo.

Por limitações de processamento e em busca de diversidade, nesse trabalho são utilizados os dados dos usuários 000, 010, 011 e 100, totalizando em 1.206.506 pontos de trajetórias.

Instalação do PyMove

Primeiro, vamos clonar o repositório!
COMANDO 1: git clone -b developer https://github.com/InsightLab/PyMove

Segundo, vamos criar um ambiente!
COMANDO 2: conda create -n pymove pip python=3.7

Terceiro, acesse o ambiente recém criado.
COMANDO 3: conda activate pymove

Quarto, vamos instalar as dependências da nossa biblioteca!
COMANDO 4: cd PyMove python setup.py install

Quinto, agora é só usar!
COMANDO 5: import pymove

 

Referências:

[1] G. A. M. Gomes, E. Santos, and C. A. Vidal. VISUALIZAÇÃO INTERATIVA DE DINÂMICAS DE TRÁFEGO ATRAVÉS DE DADOS DE TRAJETÓRIAS. PhD thesis, PD thesis, Universidade Federal do Ceará, 2018.

[2] G. A. M. Gomes, E. Santos, and C. A. Vidal. VISUALIZAÇÃO INTERATIVA DE DINÂMICAS DE TRÁFEGO ATRAVÉS DE DADOS DE TRAJETÓRIAS. PhD thesis, PD thesis, Universidade Federal do Cear´a, 2018.

[3] Tiago Gon¸calves, Ana Afonso, and Bruno Martins. Visualization techniques of trajectory data: Challenges and imitations. CEUR Workshop Proceedings, 1136, 01 2013.

[4] Yu Zheng. Trajectory data mining: An overview. ACM Transaction on Intelligent Systems and Technology, September 2015.

[5] Yu Zheng, Hao Fu, Xing Xie, Wei-Ying Ma, and Quannan Li. GeoLife User Guide 1.2. Microsoft Reasearch Asia, 2(April 2007):31–34, 2011

Categorias
Ciência de Dados Destaque Python

Conheça o livro “Learning Geospatial Analysis with Python”

Nem só de álcool gel e máscara consiste o kit quarentena. Hoje, vamos aproveitar a sexta-feira + quarentena para te indicar um novo livro: Learning Geospatial Analysis with Python: Understand GIS fundamentals and perform remote sensing data analysis using Python 3.7.

Dos dez capítulos, o autor, Joel Lawhead, dedica os três primeiros à ambientação dos leitores no cenário da Análise Geoespacial. Para a estruturação de desenvolvimento do tema, divide o campo em suas áreas específicas, como Sistema de Informações Geográficas (SIG), sensoriamento remoto, dados de elevação, modelagem avançada e dados em tempo real. A partir do capítulo 4, o autor inicia o aprofundamento da parte computacional, introduzindo o uso de ferramentas como NumPy, GEOS, Shapely e Python Imaging Library.

O foco do livro é fornecer uma “base sólida no uso da poderosa linguagem e estrutura Python para abordar a análise geoespacial de maneira eficaz”, como afirma o próprio autor. Para isso, Lawhead privilegia a aplicação do tema, sempre que possível, no ambiente Python. O esforço para se concentrar no Python, sem dependências, é um dos grandes diferenciais de “Learning Geospatial Analysis with Python” em relação aos outros materiais disponíveis sobre o assunto.

 

Veja a divisão do livro por capítulos: 

1- Aprendendo sobre Análise Geoespacial com Python.

2- Aprendendo dados geoespaciais.

3- O cenário da tecnologia geoespacial.

4- Python Toolbox Geoespacial.

5- Sistema de Informações Geográficas e Python.

6- Python e Sensoriamento Remoto.

7- Python e Dados de Elevação.

8- Modelagem Geoespacial Avançada de Python.

9- Dados em tempo real.

10- Juntando tudo.

 

Conheça o autor*:

Joel Lawhead é um profissional de gerenciamento de projetos certificado pelo PMI, um profissional de GIS certificado e o diretor de informações da NVision Solutions Inc., uma empresa premiada especializada em integração de tecnologia geoespacial e engenharia de sensores para NASA, FEMA, NOAA, Marinha dos EUA , e muitas outras organizações comerciais e sem fins lucrativos.

*Trecho extraído de amazon.com.

 

Aproveita que está aqui com a gente e leia também:

12 bibliotecas do Python para análise de dados espaço-temporais (Parte 1) – (Parte 2)

 

Categorias
Ciência de Dados Python

12 bibliotecas do Python para análise de dados espaço-temporais (Parte 2)

Na semana passada, nós publicamos a primeira parte da lista de “12 bibliotecas Python para análise de dados espaço-temporais“. Você já leu? Hoje, vamos falar sobre mais seis bibliotecas desse tipo.

Acompanhe a segunda parte:

 

7. OSMnx

É uma biblioteca do Python voltada para análise de redes urbanas. Seus recursos principais incluem: o download automatizado de fronteiras políticas e a construção de pegadas, o download personalizado e automatizado, a construção de dados de rede de rua do OpenStreetMap, a correção algorítmica da topologia de rede, a capacidade de salvar redes de rua em disco como shapefiles, arquivos GraphML ou SVG, e a capacidade de analisar redes de rua, incluindo rotas de cálculo, projetando e visualizando redes, além de calcular medidas métricas e topológicas.

Se você quer saber mais sobre OSMnx, nós indicamos este artigo:

OSMnx: New Methods for Acquiring, Constructing, Analyzing, and Visualizing Complex Street Networks

 

8. Folium

É uma biblioteca código aberto do Python voltada para visualização de dados geoespaciais, em mapas interativos, utilizando a biblioteca Leaflet.js. O Folium possibilita uma fácil utilização dos elementos gráficos do Leaflet, permitindo uma grande flexibilidade para manipular os atributos de um mapa e de seus elementos. Além disso, ele possui diversas visualizações implementadas, tendo destaque para a facilidade de uso das visualizações em função do tempo, como o HeatMapWithTime. O Folium é uma ótima biblioteca quando deseja-se montar uma visualização final dos dados com uma maior riqueza de detalhes interativos.

 

9. Mplleaflet

 É uma biblioteca Python que converte um gráfico matplotlib em uma página da web contendo um mapa Leaflet. O objetivo do Mplleaflet é permitir o uso de Python e Matplotlib para visualizar dados geográficos em mapas deslizantes sem ter que escrever qualquer Javascript ou HTML. Além disso, ele automatiza a escolha do mapa base, o usuário não precisa se preocupar com o seu conteúdo, ou seja, estradas, linhas costeiras, etc.

 

10. Missingno

 É uma biblioteca Python para visualização de dados perdidos em datasets. Suas visualizações incluem diversos gráficos (matriz, barras, mapa de calor, dendrograma, dentre outros) para analisar lacuna de dados ausentes em séries temporais. 

 

11. SciPy

É uma coleção de algoritmos matemáticos e funções de conveniência construída sobre a extensão NumPy de Python e, portanto, com alto desempenho. SciPy fornece recursos para acessar classes de alto nível para manipulação e visualização de dados. Com o SciPy, uma sessão Python interativa torna-se um ambiente de processamento de dados e protótipos de sistemas concorrentes, como MATLAB, IDL, Octave, R-Lab e SciLab.

 

12. Fiona

Ela é uma biblioteca que foca em ler e escrever dados, em estilo Python IO padrão. Fiona pode ler e escrever dados usando formatos GIS multicamadas e sistemas de arquivos virtuais compactados. Em trabalhos de análise de trajetória, Fiona é uma ótima ferramenta, visto que ela é fácil de usar, flexível e confiável. 

 

 

 

Categorias
Ciência de Dados Dados Python

12 bibliotecas do Python para análise de dados espaço-temporais (Parte 1)

Dados espaço-temporais envolvem a união de duas áreas: séries temporais e Geoestatística. Com esses dados você observa o evento por duas frentes: do ponto de vista temporal e a partir do local em que isso acontece.

Uma linha de pesquisa desenvolvida aqui no Insight Lab é a análise de dados espaço-temporais. Nossos pesquisadores, Nicksson Arrais, Francisco Carlos Júnior e João Castelo Branco,  prepararam uma seleção com opções de bibliotecas para trabalhar com dados espaço-temporais no ambiente Python.

Acompanhe a primeira parte dessa lista:

1. GeoPandas

É um projeto open source para facilitar o trabalho com dados geoespaciais em Python. GeoPandas estende os tipos de dados do pandas fornecendo operações espaciais em tipos geométricos. O GeoPandas combina as capacidades do Pandas e da biblioteca Shapely, fornecendo operações geoespaciais do Pandas e uma interface de alto nível para múltiplas geometrias do Shapely. Ele permite que você faça facilmente operações em Python que de outra forma exigiria um banco de dados espacial como o PostGIS.

 

2. PySAL

É uma biblioteca multiplataforma de código aberto para ciência de dados geoespaciais, com ênfase em dados vetoriais geoespaciais escritos em Python. PySAL suporta o desenvolvimento de aplicações de alto nível para análise espacial, como a detecção de clusters espaciais e hot-spots, construção de outliers de gráficos de regressão de dados espaciais e modelagem estatística em redes geograficamente incorporados econometria espacial exploratória e análise de dados espaço-temporais. Os analistas espaciais que possam estar a realizar projetos de investigação que exijam um scripting personalizado, uma análise de simulação extensiva, ou aqueles que procuram fazer avançar o estado da arte na análise espacial devem também considerar o PySAL como uma base útil para o seu trabalho.

 

3. PyMove

É uma biblioteca de código aberto para análises de trajetória, desenvolvida pelo Insight Lab, que envolve tanto as visualizações de trajetórias, pontos de interesses e eventos, quanto o processamento de dados sobre múltiplas trajetórias de forma eficiente. O PyMove fornece ao usuário um ambiente único de análise e visualizações de dados de trajetória, sendo bastante fácil de usar, extensível e ágil.

 

4. Scikit-Mobility

É uma biblioteca para simulação e análise da mobilidade humana em Python. A biblioteca permite: gerir e manipular dados de mobilidade de vários formatos (registos de detalhes de chamadas, dados GPS, dados de redes sociais baseadas na localização, dados de inquéritos, etc.); extrair métricas e padrões de mobilidade humana de dados, tanto a nível individual como colectivo (por exemplo, comprimento dos deslocamentos, distância característica, matriz origem-destino, etc.). O Scikit-Mobility conta com diversos modelos para simular trajetórias e métricas para comparação de trajetórias como raio de rotação, motivos diários, entropia de mobilidade, matrizes origem-destino, além de uma implementação simples e eficiente baseada nas bibliotecas populares como Python NumPy, Pandas e Geopandas 

Confira também este artigo sobre o Scikit-Mobility:

Scikit-Mobility: an open-source Python library for human mobility analysis and simulation

 

5. Moving Pandas

É uma extensão da biblioteca Pandas e sua extensão espacial GeoPandas para adicionar funcionalidade quando se lida com dados de trajetória. No Moving Pandas, uma trajetória é uma série de geometrias ordenadas pelo tempo. Essas geometrias e atributos associados são armazenados em um GeoDataFrame, uma estrutura de dados fornecida pela biblioteca de GeoPandas. A principal vantagem do Moving Pandas é que, sendo baseado no GeoPandas, ele permite que o usuário execute várias operações em trajetórias, como recortá-las com polígonos e computar interseções com polígonos. No entanto, por estar focado no conceito de trajetória, o Moving Pandas não implementa nenhuma característica específica da análise de mobilidade, como leis estatísticas de mobilidade, modelos generativos, funções padrão de pré-processamento e métodos para avaliar o risco de privacidade em dados de mobilidade.

 

6. Shapely

Uma das principais bibliotecas em Python para manipulação e análise de objetos geométricos planares. Devido à sua construção ser baseada na biblioteca GEOS (mesma engine do PostGIS), a biblioteca Shapely possui as principais funções para operações de objetos geométricos. A partir das estruturas de dados principais de ponto, linha e polígonos você conseguirá visualizar objetos geométricas e realizar facilmente operações simples como: interseção e união. E também operações mais complexas como convex hull e construção de estrutura com múltiplos objetos geométricos. Para trabalhar com dados georreferenciados em Python, a nossa dica é que Shapely seja umas das primeiras bibliotecas estudadas.

Continue acompanhando nossas publicações. Em breve postaremos a segunda parte desta lista com mais 6 bibliotecas. Até logo!

Sair da versão mobile