Introdução à Análise de Dados com NumPy (um tapa na face)

Minhas anotações sobre uma das principais ferramentas de um Cientista de Dados, a linguagem Python e seu módulo NumPy.

O que abordaremos aqui?

  • Módulos Python para Análise de Dados
  • Estrutura de Dados
  • NumPy (biblioteca matemática, base de Machine Learning)

Preciso realmente aprender uma linguagem de programação?

É preciso aprender uma ferramenta analítica.

Data Science é a junção de diferentes áreas de conhecimento e trabalhar como cientista de dados sem conhecer ao menos uma ferramenta analítica não faz nenhum sentido.

Existem algumas ferramentas analíticas, mas as linguagens de programação oferecem uma série de vantagens.

Linguagem R -> Análise Estatística

A linguagem R é uma linguagem estatística com grande foco em análise de dados. Portanto, R pode ser usada em algumas etapas do processo de analytics.

R é excelente em análise estatística e com algoritmos de Machine Learning

Linguagem Python -> Processo Holístico

Linguagem completa, umas das linguagens mais usadas. Foi criada com propósito de uso geral, mas tem evoluído muito no campo de análise de dados através de pacotes e módulos criados especificamente para esse tipo de atividade.

Python é muito eficiente no trabalho de pré-procesamento, aquele que é feito imediatamente antes à criação dos modelos preditivos. Outra vantagem da linguagem Python é poder realizar todo processo, do início ao fim.

Comparação Linguagem R e Python

Por que aprender linguagem de programação como Ferramenta Analítica?

  • R e Python são linguagens gratuitas e podem ser usadas livremente, reduzindo custos com licenciamento de software, por exemplo.
  • Embora R e Python requeiram mais trabalho manual para criar uma solução de análise, elas oferecem muito mais flexibilidade.
  • Todo o conhecimento adquirido com R e Python, pode ser facilmente aplicado em outras soluções analíticas.
  • Soluções Microsoft, Oracle e IBM, dão suporte a R e Python, como forma de estender as funcionalidades de suas soluções.
  • As duas linguagens possuem uma grande e ativa comunidade e muita documentaçãodisponível.

Por que a linguagem Python para Análise de Dados?

  • Cada vez mais dados para analisar (Big Data)
  • Cada vez menos tempo (Soluções de Análise em Tempo Real)
  • Fácil de Aprender
  • Muito popular
  • De uso geral
  • Linguagem Interpretada
Python pode ser usado em todo o processo de análise de dados

Principais módulos Python para Análise de Dados

Python, quanto linguagem de programação, possui seus comandos e funções built-in. É o que chamamos de linguagem pura.

Módulos populares em Python

Pydata Stack

Pydata Stack é um conjunto de pacotes Python específicos para trabalhar com Ciêncida de Dados.

Pydata Stack

Numpy

Como base desse diagrama temos o NumPy que serve para computação numérica, o NumPy é um dos pacotes mais incríveis da linguagem Python, é um resumo matemático que oferece uma série de funções matemáticas prontas com alta performance.

Praticamente tudo que for feito para data science em Python, o Numpy estará presente de alguma forma, porque ele é a base para outros pacotes.

Scipy, Pandas, Matplotlib e Bokeh

Uma camada logo acima temos o SciPy que é para computação científica, o Pandas que é uma espécie de Excel para linguagem Python e o Matplotlib e o Bokeh que são dois pacotes para visualização de dados para construir gráficos.

Outros pacotes do diagrama

  • scikit-image para visão computacional
  • statsmodels para estatística
  • scikit-learn para machine learning

Tudo que precisamos fazer é instalar o pacote, ao instalarmos o Anaconda já temos os pacotes do PyData Stack e então, começar a usar as funções.

Numpy

Um dos principais pacotes para ciência de dados, significa numerical python é o pacote fundamental para computação matemática em Python.

Dificilmente usaremos o NumPy sozinho, mas sim com outros pacotes Python, uma vez que ele oferece a base fundamental para a construção de estruturas de dados para análise.

O propósito principal do NumPy é servir como um container para os dados, de forma que possamos utilizá-los no processo de análise e ainda manipular os dados entre diferentes algoritmos.

Arrays, a principal estrutura de dados em Numpy

Os arrays em NumPy são muito mais eficientes do que as opções básicas da linguagem Python, ou seja, se desejarmos criar uma lista de dados em Python, podemos fazer isso com Python puro. Se quisermos fazer o mesmo em NumPy, a perfomance será muito melhor, ou seja, aprender a usar o NumPy além de permitir realizar outras atividades em ciência de dados também permite uma performance maior.

Pandas

Pandas é um pacote de análise de dados de alta performance. Com Python podemos criar DataFrames e Séries de dados.

Durante todo o processo de análise, precisamos de DataFrames, tabelas que encontramos em bancos de dados ou tabelas que temos em excel.

DataFrames, a principal estrutura de dados em Pandas

Colocar os dados em DataFrames nos proporciona uma série de habilidades para podermos fatiar, manipular, modificar dados como se estivessemos no excel, só que via programação, além de podermos trabalhar com séries temporais.

Pandas possibilita:

  • Pandas pode processar dados em diferentes formatos, como dados de séries temporais, matrizes, dados estruturados ou não estruturados.
  • Facilita muito o trabalho de carga e importação de dados em arquivos csv. ou de bancos de dados, conseguimos conectar diretamente em bancos de dados e trazemos os dados em formato de dataframe no Pandas e então iniciamos o processo de análise.
  • Fornece funções para as mais variadas etapas de pré-processamento, como: subsetting, slicing, filtros, merge, agrupamentos, ordenação, reshape. Ou seja, uma planilha excel com linhas e colunas onde manipulamos de forma eficiente
  • Permite facilmente tratar dados missing, ou seja, dados não disponíveis, fazer rapidamente o tratamento de objetos criados com o pacote Pandas.
  • Pode ser usado para converter dados, bem como aplicar modelagem estatística.
  • É totalmente integrado com outros pacotes Python, como SciPy, NumPye Scikit-Learn.

Um Pouco de Numpy…

Importando biblioteca

import numpy as np

Criando array unidimensional (lista)

array1 = np.array([10, 20, 30, 40])

Criando array bi-dimensional (matriz)

array2 = np.array([[100, 83, 15], [42, 78, 0]])
array2

Chamando atributos

verificando o formato (shape) do arrayarray1.shape
Uma dimensão com 4 elementos.
# Verificando o formato (shape) da matrizarray2.shape
Duas linhas e três colunas
# Verificando o número de dimensõesarray2.ndim
Duas dimensões composto por linhas x colunas

Em python tudo é objeto, com métodos e atributos.

Método: realiza ação no objeto

Atributo: característica do objeto

Método

array2.max()
Maior valor do array

Atributo

array2.ndim
Número de dimensões do array

Criando estruturas de dados com arange

array3 = np.arange(15)
array3

Usando start/end (exclusive)

array4 = np.arange(0,15,5)
array4

Criando estruturas de dados com np.linspace

# Argumento: (start, end, n° de elementos)array5 = np.linspace(0, 3, 4); array5

Numpy.zeros (array de 0)

Importante para reserver na memória do computador o objeto e depois preencher esse array com os números de acordo com a necessidade

array6 = np.zeros((10, 8)); array6
Matriz de 0 (10 x 8)

Numpy.ones (array de 1)

array7 = np.ones((2, 3, 7)); array8
Matriz de 1 (2, 3, 7)

Numpy.eye

array8 = np.eye(3); array8
Cria uma matriz identidade de diagonal 1.

Numpy.diag

array9 = np.diag((2, 1, 4, 6)); array 9
Criar uma matriz diagonal especificando os valores da diagonal.

Numpy.random.rand (distribuição gaussiana)

np.random.seed(100) # Set seedarray10 = np.random.rand(5); array10
rand(n) produz uma sequência de números randômicos uniformemente distribuídos com range de 0 a n.
array11 = np.random.rand(5); array11
A função rand(n) produz uma sequência de números com distribuição normal gaussiana.

Numpy.empty

array12 = np.empty((3, 2); array12
Matriz 3 x 2 preenchida com zeros

Numpy.tile (azulejo)

np.array([[9, 4], [3, 7]])
np.tile(np.array([[9, 4], [3, 7]]), 4)
np.tile(np.array([[9, 4], [3, 7]]), (2,2))

Especificando o tipo de Array

array13 = np.array([8, -3, 5, 9], type = "float"); array13
array13.dtype

Numpy detecta que um dos valores é decimal

array15 = np.array([2.0, 4, 6, 8])
array15.dtype

Tipo <U10

O tipo u10 no numpy serve para representar as strings

array16 = np.array(['Análise', 'de', 'dados', 'com Python'])
array16.dtype
array17 = np.array([True, False, True])
array17.dtype
array18 = np.array([7, -3, 5.24])
array18.dtype

Converter o tipo de dado do Array para inteiro

array18.astype(int)

Operações com Arrays:

Multiplicação

array19 = np.arange(0, 30) * 5
array19
Array começando por 0, com 30 elementos e multiplicando por 5.

Elevando Array a uma potência

array20 = np.arange(5) ** 4; array20
Pega cada elemento da sequência do array e eleva àpotência determinada

Somando um número a cada elemento do array

array21 = np.arange(0, 30) + 1
array21

Operações entre Arrays

array22 = np.arange(0, 30, 3) + 3
array23 = np.arange(1, 11)
print(array22, array23)

Operações básicas entre Arrays

Se não estivessemos usando numpy, seria mais complexo de operarmos.

array22 - array23array22 + array23array22 / array23array22 * array23

Comparar Arrays

array22 > array23

Indexação e Slicing|Fatiamento com Numpy:

Vamos supor que desejamos buscar apenas algumas células específicas de uma planilha no Excel, para fazer isso utilizamos o conceito de Slicing|Fatiamento, onde buscamos apenas uma parte dos dados dentro da estrutura de dados, seja um vetor ou matriz.

Indexação

Para trabalhar com slicing precisamos conhecer o conceito de indexação em linguagem Python que possui algumas particularidades.

O índice é uma espécie de endereço onde o dado está guardado na estrutura, em Python temos é um conjunto de enreços, que são os índices, que apontam para os dados.

Podemos manipular esses índices da forma mais conveniente:

array1 = np.arange(5); array1

Primeiro elemento do Array em Python

array1[0]
A indexação em Python começa em 0

Segundo elemento do Array

array1[1]
Segundo elemento

Último elemento do Array, indexaçãgo negativa

array[-1]
Último elemento

Criando outro Array

array2 = np.arange(5); array2

Invertendo Array

array1[::-1]

Trabalhando com Array Multi-Dimensional:

from IPython.display import Image
Image('Numpy.png')

Slicing da Matriz

array3 = np.array([
[190, 290, 490],
[129, 458, 567],
[761, 902, 346]]); array3

Slicing da Matriz

array3[2, 1]
array3[1, 1] = 10; array3
Atribuindo um valor

Retornando a terceira linha completa da matriz

array3[2, ]

Retornando todas as linhas da segunda coluna

array3[:, 1]

Slicing de Arrays:

Queremos retornar elementos que comecem com índice 5 até o 10, saltando de 2 em 2, lembrando que o índice 10 é exclusivo.

array5 = np.arange(50) * 2; array5

Retornar elementos que comecem com índice 5 ao 10

Queremos retornar elementos que comecem com índice 5 até o 10, saltando de 2 em 2, lembrand que o índice 10 é exclusivo.

array5[5:10:2]

Retornando todos os valores até elemento de índice 4 exclusivo

array5[:4]

Retornando todos os valorse a partir do índice 4

array5[4:]

Slicing não altera o objeto original

array5

Técnicas de Slicing para alterar elementos ou conjuntos

Podemos usar as técnicas de slicing para alterar elementos ou conjuntos de elementros dentro do array

array5[:3] = 1; array5

Atribuindo um Array a uma parte de outro Array

array5[:4] = np.ones(4); array5

Criando Subset de um Array:

array7 = np.arange(12); array7
array8 = array7[::2]; array8

Copiando Array com numpy.copy( )

array9 = np.arange(8); array9
Muito útil, assim não modificaremos o array original
array10 = array9.copy(); array10
Cópia do Array 9

Transposição e Reshaping de Arrays:

array1 = np.array([
65, 23, 19],
[41, 87, 10]]); array1
array1.T
np.transpose(array1)
Apenas outra notação

Broadcasting

array2 = np.array([[33, 34, 35]])
array2.T
array2.T + array2

Transformando Matrizes em Vetores:

Criando um Array Multidimensional

array3 = np.array(np.arange(1, 6), np.arange(10, 15)])
array3

Treansformando objeto bidimensional em unidimensional com ravel( )

Pegamos a primeira linha da matriz e colocamos em um vetor, pegamos a segunda linha da matriz e concatenamos ao mesmo vetor.

array3.ravel()

Concatenando Matriz Transposta em um único vetor

array3.T.ravel()

Operadores Lógicos:

Criando uma matriz 4x4 randômica

np.random.seed(100)
array4 = np.random.randint(1, 10, size = (4, 4))
array4

Retornando qualquer elemento de acordo com a regra

Vamos chamar a função any() que retorna qualquer coisa baseada em uma regra.

Queremos saber se tem algo no array4, ou seja, na matriz|objeto bidimensional, que qualquer elemento dividido por 7 seja igual a zero.

O símbolo de % é o resto da divisão. Logo, cada elemento do array dividido por 7 tem resto igual a zero?

np.any((array4 % 7) == 0)
Nenhum elemento da matriz tem divisão por 7 igual a 0.

A função any() é um recurso capaz de verificar se temos valores missing, números com determinada regra dentro do conjunto de dados.

Retornar “tudo” de acordo com a regra

A função all() pergunta se tem todos os elementos de acordo com a regra, ou seja, todos os elementos do array são menores do que 11?

np.all(array4 < 11)

Reshaping, mudando o shape dos dados

Transformamos um objeto unidimensional em multidimensional. Convertemos um vetor unidimensional em uma matriz de 3 linhas por 5 colunas.

array5 = np.arange(1, 16); 
array5.reshape(3, 5)

Ordenando o Array

array7 = np.array([[3, 2], [10, -1]]); array7

Ordenando por linha

array7.sort(axis = 1); array7
array8 = np.array([[3, 2], [10, -1]])

Ordenando por coluna

array8.sort(axis = 0); array8

Até aqui abordamos os módulos para análise de dados e uma breve introdução à biblioteca Numpy, a partir de agora veremos a fantástica biblioteca Pandas:

Introdução à Análise de Dados com Pandas (um tapa na face)

Obrigado.

Composing a repository of books (i bought), authors (i follow) & blogs (direct ones) for my own understanding.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store