Baixe o app para aproveitar ainda mais
Prévia do material em texto
Linguagem de Programação Aplicada Material Teórico Responsável pelo Conteúdo: Prof. Dr. Alcides Teixeira Barboza Junior Revisão Textual: Prof. Me. Luciano Vieira Francisco Bibliotecas para Manipulação de Dados • Introdução; • Pacote Numpy; • Pacote Pandas; • Pacote Matplotlib. • Aprender como usar as bibliotecas do Python; • Praticar o uso da biblioteca de manipulação de matrizes e vetores; • Praticar o uso da biblioteca de manipulação de planilhas; • Conhecer os princípios básicos da biblioteca Matplotlib. OBJETIVOS DE APRENDIZADO Bibliotecas para Manipulação de Dados Orientações de estudo Para que o conteúdo desta Disciplina seja bem aproveitado e haja maior aplicabilidade na sua formação acadêmica e atuação profissional, siga algumas recomendações básicas: Assim: Organize seus estudos de maneira que passem a fazer parte da sua rotina. Por exemplo, você poderá determinar um dia e horário fixos como seu “momento do estudo”; Procure se alimentar e se hidratar quando for estudar; lembre-se de que uma alimentação saudável pode proporcionar melhor aproveitamento do estudo; No material de cada Unidade, há leituras indicadas e, entre elas, artigos científicos, livros, vídeos e sites para aprofundar os conhecimentos adquiridos ao longo da Unidade. Além disso, você tam- bém encontrará sugestões de conteúdo extra no item Material Complementar, que ampliarão sua interpretação e auxiliarão no pleno entendimento dos temas abordados; Após o contato com o conteúdo proposto, participe dos debates mediados em fóruns de discus- são, pois irão auxiliar a verificar o quanto você absorveu de conhecimento, além de propiciar o contato com seus colegas e tutores, o que se apresenta como rico espaço de troca de ideias e de aprendizagem. Organize seus estudos de maneira que passem a fazer parte Mantenha o foco! Evite se distrair com as redes sociais. Mantenha o foco! Evite se distrair com as redes sociais. Determine um horário fixo para estudar. Aproveite as indicações de Material Complementar. Procure se alimentar e se hidratar quando for estudar; lembre-se de que uma Não se esqueça de se alimentar e de se manter hidratado. Aproveite as Conserve seu material e local de estudos sempre organizados. Procure manter contato com seus colegas e tutores para trocar ideias! Isso amplia a aprendizagem. Seja original! Nunca plagie trabalhos. UNIDADE Bibliotecas para Manipulação de Dados Introdução A análise de dados necessita de várias passagens para manipulação, criação e/ ou transformação dos dados que se deseja extrair informações. Você já conheceu os conceitos básicos do Python e aprendeu como trabalhar com orientação a obje- tos, agora aprimoraremos ainda mais o seu leque de ferramentas. Preparar os dados que serão analisados é um dos trabalhos em que o analista de dados é mais solicitado, afinal, estatísticas e relatórios só podem ser feitos se os dados forem úteis para essa tarefa. Trabalhar com os dados de forma direta, ou seja, sem usar nenhum auxílio de pacotes de código pronto é possível, porém, isso demanda tempo e, em muitos ca- sos, boa parte do que se precisa fazer já foi implementado em pacotes específicos da linguagem. Nesse sentido, já tínhamos visto o PyData Stack, que apresenta diversos pacotes para trabalhar com dados, estatísticas, planilhas e gráficos, de modo que agora es- tudaremos os principais pacotes que nos darão as bases necessárias para manipular e preparar os dados que serão analisados e posteriormente exibidos em diferentes tipos de gráficos – os principais pacotes são o Numpy, Pandas e Matplotlib. Então vamos lá! Pacote Numpy Numerical Python (Numpy) é um pacote de computação matemática, científica, de engenharia e de ciência de dados no Python. Fornece a base necessária para muitas aplicações de inteligência artificial e, principalmente, para análise de dados. Utilizando esse pacote teremos suporte para arrays e matrizes de forma simples, além de termos também uma vasta quantidade de funções matemáticas para mani- pularmos os objetos criados. Com o Numpy podemos, por exemplo, manipular arrays multidimensionais, utilizar as ferramentas que traz para trabalharmos com a leitura de datasets que possuem como base arrays, além de realizarmos operações de álgebra linear. Quando mencionamos dados numéricos, Numpy é o pacote mais eficiente para manipular e armazenar esses dados se comparado a outros pacotes do Python. Agora você se pergunta: mas o que são arrays? Em uma resposta direta, pode- mos definir como uma estrutura de dados em programação, estes que representam vetores ou, em outras palavras, uma estrutura que representa um conjunto de dados. Formalmente, um array Numpy é definido como um conjunto de dados que possui o mesmo tipo de dado e são indexados por um número inteiro positivo, 8 9 iniciando por 0. Neste momento você deve tê-lo associado à ideia de listas – e você está certo(a). Entender esses conceitos com o Numpy ajudará na compreensão dos demais pacotes analisados nesta Unidade. O objeto padrão do Numpy é o ndarray, oferecendo uma variedade de funções, sendo as principais: • ndim: retorna o número de dimensões do objeto; • shape: retorna a quantidade de linhas e colunas do objeto; • size: retorna a quantidade de elementos do objeto; equivale ao produto entre os valores retornados pelo shape. A primeira coisa que você precisa saber é que com o Anaconda, o pacote Numpy já vem instalado, necessitando apenas que você faça a importação do pacote em seu código. Para importarmos o pacote, utilizamos no início de nosso script o comando import numpy as np. Neste comando, importamos o pacote e utilizamos as suas ferramentas por meio do alias np; ressaltamos que este nome poderia ser outro, mas por padrão se adota np – sigla para Numpy. Se você quiser ver qual é a sua versão do Numpy instalado, digite, no Jupyter, após a importação do pacote, np.__version__. Você também pode obter um help – resumido – sobre array na própria ferramenta digitando help(np.array) – veja o exemplo do resultado deste comando na Figura 1: Figura 1 – Help do comando np.array 9 UNIDADE Bibliotecas para Manipulação de Dados Para visualizar a lista de comandos do Numpy, digite dir(np) e você terá uma lista tal como a apresentada na Figura 2: Figura 2 – Exemplo da lista de comandos do pacote Numpy Vejamos alguns casos de uso para o Numpy – procure testar estes comandos no seu computador. Exemplos: # Lembre-se de sempre importar o pacote antes de iniciar o uso import numpy as np # Podemos criar um vetor a partir de uma lista: vet = np.array([1, 2, 3, 4, 5]) print(vet) # Saída [1 2 3 4 5] # Listar os métodos associados diretamente ao vetor criado dir(vet) # A partir do momento em que criamos o vetor, temos métodos específicos do numpy # O método cumsum efetua a soma dos elementos do vetor, sempre acumulando os valores vet1.cumsum() # saída array([ 1, 3, 6, 10, 15]) # Se criamos uma lista, perceba que os métodos mudam list = [1, 2, 3, 4, 5] dir(list) # Compare com a listagem do dir(vet), existem mais opções # Para imprimir um elemento do vetor, seguimos o mesmo princípio da lista 10 11 vet[0] # Alterando um elemento do array, mesmo princípio da lista vet[4] = 100 print(vet) # saída [ 1 2 3 4 100] # Não é possível incluir elemento de outro tipo vet[0] = ‘Novo elemento’ # Dará um erro: ValueError: invalid literal for int() with base 10: ‘Olá Mundo’ # Na lista podemos inserir o elemento de outro tipo e não teremos erro list[0]=”oi” # Verificando o formato do array print(vet.shape) # saída (5,) Vejamos alguns casos de funções úteis do Numpy. Exemplos: # A função arange cria um vetor contendo uma progressão aritmética, os pa- râmetros da função são (start, stop, step) # Vamos criar um array do número 0 até o número 5, com intervalos de 0.25 # O valor de stop não entra no intervalo vet2 = np.arange(0, 5.25, 0.25) print(vet2)# Saída do comando print: [0. 0.25 0.5 0.75 1. 1.25 1.5 1.75 2. 2.25 2.5 2.75 3. 3.25 3.5 3.75 4. 4.25 4.5 4.75 5. ] # Podemos criar um vetor com valores zerados, usando a função zeros(qtd) vet3 = np.zeros(10) print(np.zeros(10)) # saída [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] # Se necessário, podemos criar um vetor com a diagonal principal com o valor 1 e demais valores com o número 0 vet4 = np.eye(3) print(vet4) # Saída da linha anterior [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] # Array de valores booleanos vet5 = np.array([True, False, True, True, False]) print(vet5) # Saída: [ True False True True False] 11 UNIDADE Bibliotecas para Manipulação de Dados # Array de palavras (strings) vet6 = np.array([‘Python’, ‘R’, ‘Java’, ‘JavaScript’]) print(vet6) # Saída: [‘Python’ ‘R’ ‘Java’ ‘JavaScript’] # O método linspace retorna números espaçados uniformemente em um intervalo especificado, se não for especificada a quantidade da amostra, são geradas 50 amostras. vet7 = np.linspace(0, 5) vet7 # Saída para a linha acima: array([0. , 0.10204082, 0.20408163, 0.30612245, 0.40816327, 0.51020408, 0.6122449 , 0.71428571, 0.81632653, 0.91836735, 1.02040816, 1.12244898, 1.2244898 , 1.32653061, 1.42857143, 1.53061224, 1.63265306, 1.73469388, 1.83673469, 1.93877551, 2.04081633, 2.14285714, 2.24489796, 2.34693878, 2.44897959, 2.55102041, 2.65306122, 2.75510204, 2.85714286, 2.95918367, 3.06122449, 3.16326531, 3.26530612, 3.36734694, 3.46938776, 3.57142857, 3.67346939, 3.7755102 , 3.87755102, 3.97959184, 4.08163265, 4.18367347, 4.28571429, 4.3877551 , 4.48979592, 4.59183673, 4.69387755, 4.79591837, 4.89795918, 5. ]) # Podemos especificar a quantidade da amostra vet8 = np.linspace(0, 5, num=10) #ou vet8 = np.linspace(0, 5, 10) vet8 # Saída para a linha acima array([0. , 0.55555556, 1.11111111, 1.66666667, 2.22222222, 2.77777778, 3.33333333, 3.88888889, 4.44444444, 5. ]) Além de arrays – vetores unidimensionais –, podemos trabalhar também com matrizes no Numpy. Vejamos alguns exemplos: # Criando uma matriz, array dentro de array matriz = np.array([[1,2,3],[4,5,6]]) print(matriz) # Saída da linha acima [[1 2 3], [4 5 6]] # Se listarmos as dimensões da matriz, teremos 2 print(matriz.shape) # Saída (2, 3) = linhas,colunas # Criando uma matriz 3x3 apenas com números 1, podemos usar também a função zeros vista anteriormente matriz1 = np.ones((3,3)) 12 13 print(matriz1) [[1. 1. 1.] [1. 1. 1.]] # Para saber a quantidade de elementos da matriz usamos a função size matriz2.size # Saída: 9 # Para alterar um elemento da matriz, devemos informar o número da linha e coluna matriz1[1,0] = 100 print(matriz1) # Saída da linha acima: [[ 0. 0. 0.] [100. 0. 0.] [ 0. 0. 0.]] Veremos mais algumas funções do Numpy, por exemplo, para manipular valo- res randômicos e um pouco de estatística. Ressaltamos que as funções apresenta- das nesta seção podem ser utilizadas em vetores ou matrizes. Exemplos: # Usando o método rand() para sortear valores aleatórios print(np. random.rand(10)) # Saída da linha acima [0.32876755 0.8059542 0.38401033 0.96814204 0.242465 0.30801586 0.26278155 0.92680311 0.10689803 0.62445356] # Podemos criar uma matriz 4x4 com valores aleatórios matriz2 = np.random.randn(4,4) print(matriz2) [[ 0.08434813 -0.57019078 0.49043017 -0.15646221] [ 0.07023537 -0.62354684 -0.931547 -1.06172253] [ 2.26762334 -0.88633445 0.92539156 -1.32223354] [ 1.43526113 1.6686621 1.00884179 -0.92217206]] # Vamos criar um vetor v = np.array([10, 33, 78, 100, 175]) # A média de uma amostra é o valor que aponta para onde mais se concentram os dados, vamos usar a função mean() np.mean(v) # Saída: 79.2 # Já o desvio padrão mostra o quanto de variação existe em relação à média. Vamos usar o método std() np.std(v) # saída: 57.50617358162513 13 UNIDADE Bibliotecas para Manipulação de Dados # A variância de uma variável aleatória é uma medida da sua dispersão indicando o quanto os valores estão longe do esperado np.var(v) # saída: 3306.96 # Podemos fazer o somatório dos números do array com sum() np.sum(v) # saída: 396 # Para retornar o produto dos elementos np.prod(d) # saída: 450450000 # Para criar um conjunto (10x2) de uma distribuição normal usamos randn() v1 = np.random.randn(10,2) # Vamos ver algumas funções para fatiamento dos dados v2 = np.arange(10) print(v2) # saída: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) # Podemos fatiar o array usando [start:end:step] v2[1:9:2] # Saída: array([1, 3, 5, 7]) # Os vetores podem ser comparados com “==”, é comparado cada valor v3 = np.array([2, 2, 3, 1]) v4 = np.array([4, 5, 3, 1]) v3 == v4 # Saída: array([False, False, True, True]) # Podemos pesquisar o valor mínimo e máximo de um array v3.min() # saída 1 v3.max() # Saída 3 # Para criar um array com elementos repetidos a partir dos valores de outro vetor v5 = np.repeat(v3, 3) v5 # Saída: array([2, 2, 2, 2, 2, 2, 3, 3, 3, 1, 1, 1]) # Para juntar dois vetores, usamos o método concatenate v6 = np.concatenate((v3,v4), axis=0) v6 # Saída: array([2, 2, 3, 1, 4, 5, 3, 1]) Pacote Pandas Outra biblioteca ou pacote que compõe o PyData Stack é o Python Data Analysis Library (Pandas). O seu foco está em análise de dados, mas dependendo do caso pode servir para a visualização de dados em formato de tabelas, de modo que podemos preparar os dados que serão apresentados por meio de gráficos no Matplotlib – este que estudaremos na próxima seção. 14 15 Geralmente, quando trabalhamos com Pandas, utilizamos também algumas fun- cionalidades do Numpy, então fique ciente de que provavelmente você importará os dois pacotes para os seus códigos a partir de então. Vale ressaltar que o Pandas é construído sobre a base Numpy. Com o Pandas, temos disponível uma variedade de métodos para se criar, ma- nipular e organizar os dados para serem analisados. Alguns autores o c lassificam como um pacote que manipula “planilhas de dados” ou tabelas, contudo, as suas funcionalidades são bem mais avançadas que uma simples planilha. Ademais, per- mite trabalhar com dados relacionais ou rotulados. Pandas é indicado para trabalhar com dados tabulares – tal como uma tabela de um banco de dados ou planilha Office Excel –; matrizes com séries temporais e conjunto de dados estatísticos de diferentes formas. Algumas tarefas que podemos realizar com o Pandas são as seguintes: • Manusear dados ausentes; • Remover ou adicionar colunas em dataframes; • Mesclagem e associação de dados; • Rotulagem dos eixos dos dados. Consulte a documentação do Pandas para verificar todas as possíveis funcionalidades que podemos ter no pacote, disponível em: http://bit.ly/2Q5abU3Ex pl or Como mencionamos, Pandas trabalha com series e dataframe; de modo geral, dataframe é um conjunto para series – e este é um conjunto de escalares. Como você perceberá, Pandas é uma excelente ferramenta para converter e mapear dados brutos em formatos que possam ser facilmente utilizados com outras ferramentas, tal como para a geração de gráficos, ou ainda para a manipulação de inteligência artificial. Assim, você deve ter percebido que esse pacote é ideal para a fase de preparação dos dados. Nesse pacote teremos dois conceitos fundamentais: • Series (1D): conjunto de dados unidimensionais, composto por um array de dados e um array de labels – rótulos –, conhecido também como índice. Um exemplo para entendê-lo é representar a venda de smartphones de 2014 a 2019 – cujos dados a seguir são fictícios: » 2014 = 14; » 2015 = 20; » 2016 = 6; » 2017 = 10; 15 UNIDADE Bibliotecas para Manipulação de Dados » 2018 = 20; • 2019 = 30. Note que temos, à esquerda, os labels e os dados à direita; • Dataframes (2D): conjunto de dados bidimensionais; é uma forma de re- presentar dados tabulares, tal como uma planilha.Neste tipo de estrutura de dados cada coluna pode ter um tipo de valor diferente como, por exemplo, números inteiros, decimais ou textos. Segue um exemplo visual para você melhor entender esse conceito, cujos dados poderiam representar os países que mais venderam smartphones no período de 2014 a 2019: Tabela 1 – Países que mais venderam smartphones por ano (2014-2019) Ano País Vendas 0 2014 EUA 50 1 2015 China 60 2 2016 Brasil 70 3 2017 Canadá 40 4 2018 Portugal 10 5 2019 Espanha 88 Analisaremos alguns exemplos de uso do pacote Pandas: # Primeiro importaremos o Numpy e depois o Pandas import numpy as np import pandas as pd # Criando series # Uma serie é um array unidimensional composto por labels e dados # Podemos criar uma serie sem label s1 = pd.Series([23, 77, 0, 5, 12]) s1 # Saída: 0 23 1 77 2 0 3 5 4 12 # Caso queira verificar os valores da serie, usamos a propriedade values s1.values # saída: array([23, 77, 0, 5, 12], dtype=int64) # Caso queira verificar os índices da serie s1.index # saída: RangeIndex(start=0, stop=5, step=1) 16 17 # Para criar uma serie e especificar os seus índices, devemos passar cada um dos rótulos s2 = pd.Series([23, 77, 0, 5, 12], index = [‘A’, ‘B’, ‘C’, ‘D’, ‘E’]) s2 # saída: A 23 B 77 C 0 D 5 E 12 s2.index # Saída: Index([‘A’, ‘B’, ‘C’, ‘D’, ‘E’], dtype=’object’) # Para fatiar a serie, podemos usar s2[:2] # Saída: A 23 B 77 # Podemos ainda usar expressões com operadores relacionais # Um exemplo é retornar os elementos maiores que 20 s2[s2>20] # saída: A 23 B 77 # Para trabalhar com uma posição específica da serie, devemos especificar o seu index que pode ser um label ou um índice numérico do array s2[‘A’] # Podemos usar s2[0], temos o mesmo efeito, retorna 23 # Para alterar o valor de uma posição s2[‘A’]=100 s2 # Saída: A 100 B 77 C 0 D 5 E 12 # Imagine que temos uma série faltando valor s3 = pd.Series([23, 77, 0, 5, 12,np.NaN], index = [‘A’, ‘B’, ‘C’, ‘D’, ‘E’,’F’]) # Note que temos np.NaN s3 # Saída: 17 UNIDADE Bibliotecas para Manipulação de Dados A 23.0 B 77.0 C 0.0 D 5.0 E 12.0 F NaN # Podemos verificar se existem dados faltantes ou se os dados são nulos pd.isnull(s3) # Saída: A False B False C False D False E False F True # Podemos também fazer o oposto, verificando qual não é nulo pd.notnull(s3) # Saída: A True B True C True D True E True F False # Se necessário, você pode juntar series s4 = s2 + s3 # Analise a saída dessa concatenação A 123.0 B 154.0 C 0.0 D 10.0 E 24.0 F NaN Perceba que quando concatenamos, os elementos com o mesmo índice são so- mados em valores e os elementos que são diferentes – neste caso, o índice F – são adicionados como novos na junção. Agora que já vimos como criar séries com o Pandas, conferiremos exemplos de criação e manipulação de dataframes: 18 19 # Dataframes possuem index e linhas semelhantes a uma planilha # Inicialmente criaremos um dicionário dados= {‘Ano’:[2014, 2015, 2016, 2017, 2018, 2019], ‘Pais’:[‘EUA’, ‘China’, ‘Bra- sil’, ‘Canada’, ‘Portugal’, ‘Espanha’], ‘Vendas’:[50, 60, 70, 40, 10, 88]} # Podemos criar um dataframe a partir desse dicionário df = pd.DataFrame(dados) df # Saída: Ano Pais Vendas 0 2014 EUA 50 1 2015 China 60 2 2016 Brasil 70 3 2017 Canada 40 4 2018 Portugal 10 5 2019 Espanha 88 # Podemos adicionar colunas que não existem no dicionário quando criarmos o dataframe, lembrando que esses dados serão nulos df2 = pd.DataFrame(dados, columns = [‘Ano’, ‘Pais’, ‘Vendas’, ‘Valores’], index = [‘A’, ‘B’, ‘C’, ‘D’, ‘E’,’F’]) df2 # Saída: Ano Pais Vendas Valores A 2014 EUA 50 NaN B 2015 China 60 NaN C 2016 Brasil 70 NaN D 2017 Canada 40 NaN E 2018 Portugal 10 NaN F 2019 Espanha 88 NaN # Podemos manipular somente uma coluna do dataframe df2[‘Pais’] # Saída: A EUA B China C Brasil D Canada E Portugal F Espanha # É igualmente possível atribuir uma coluna para uma variável 19 UNIDADE Bibliotecas para Manipulação de Dados s = df2[‘Pais’] # Neste caso, pegaremos somente uma serie do dataframe type(s) # Saída: pandas.core.series.Series # Assim como em series, você pode usar propriedades para extrair os índices, as colunas e os valores # Para índices df2.index # Saída: Index([‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’]) df2.columns # Saída: Index([‘Ano’, ‘Pais’, ‘Vendas’, ‘Valores’]) df2.values # Saída: array([[2014, ‘EUA’, 50, nan], [2015, ‘China’, 60, nan], [2016, ‘Brasil’, 70, nan], [2017, ‘Canada’, 40, nan], [2018, ‘Portugal’, 10, nan], [2019, ‘Espanha’, 88, nan]]) # Você também pode fazer fatiamento df2[:2] # Saída: retorna os dois primeiros registros da tabela # Caso precise ver o início dos dados ou o final, podemos usar o head() e tail(), respectivamente df2.head() Ano Pais Vendas Valores A 2014 EUA 50 NaN B 2015 China 60 NaN C 2016 Brasil 70 NaN D 2017 Canada 40 NaN E 2018 Portugal 10 NaN df2.tail() Ano Pais Vendas Valores B 2015 China 60 NaN C 2016 Brasil 70 NaN D 2017 Canada 40 NaN E 2018 Portugal 10 NaN F 2019 Espanha 88 NaN Agora, vejamos alguns exemplos juntando o Pandas e Numpy: # É possível usar o Numpy para preencher a coluna de nosso dataframe, de- nominada Valores e que inicialmente estava vazia # Preencheremos com valores randômicos 20 21 df2[‘Valores’]= np.random.rand(6)*100 df2 # Saída: Ano Pais Vendas Valores A 2014 EUA 50 98.256404 B 2015 China 60 55.816375 C 2016 Brasil 70 66.287141 D 2017 Canada 40 72.741869 E 2018 Portugal 10 98.622144 F 2019 Espanha 88 79.809936 # Um método bem interessante é o describe(), que descreve os dados do data- frame; este método retorna: # count = número de registros (linhas) # mean = média dos calores por coluna # std = desvio padrão # min = valor mínimo da amostra # quartis = 25%, 50% e 75% # max = valor máximo da amostra df2.describe() Ano Vendas Valores count 6.000000 6.000000 6.000000 mean 2016.500000 53.000000 78.588978 std 1.870829 26.795522 17.284336 min 2014.000000 10.000000 55.816375 25% 2015.250000 42.500000 67.900823 50% 2016.500000 55.000000 76.275903 75% 2017.750000 67.500000 93.644787 max 2019.000000 88.000000 98.622144 # É possível fatiar o dataframe por meio do nome dos índices df2[‘A’:’C’] # saída: Ano Pais Vendas Valores A 2014 EUA 50 98.256404 B 2015 China 60 55.816375 C 2016 Brasil 70 66.287141 # Podemos pesquisar e retornar os dados somente de um índice df2.loc[‘D’] 21 UNIDADE Bibliotecas para Manipulação de Dados # Saída: Ano 2017 Pais Canada Vendas 40 Valores 72.7419 Como você deve ter percebido, Pandas é um pacote sofisticado para manipular dados, podendo ser utilizado junto ao Numpy para preparar os dados que serão examinados. É comum prepararmos dados com esses pacotes para, então, plotar- mos – desenharmos – gráficos com a biblioteca Matplotlib – que veremos a seguir. Estudamos os princípios básicos dos dois pacotes – Numpy e Pandas –, de modo que não deixe de consultar os Materiais Complementares para conhecer outras possibilidades que esses recursos nos trazem. Pacote Matplotlib Até este momento você estudou os dois principais pacotes para análise de da- dos, os quais fornecem as ferramentas necessárias para preparar os dados e, ainda, trabalhar com estatísticas. Mas como você poderia representar de forma visual a grande quantidade de dados? É aqui que entra o pacote ou a biblioteca Matplotlib, que nos ajudará a visualizar os dados de forma gráfica, auxiliando na análise desses. Considerando que Matplotlib é extenso, não deixe de consultar os Materiais Complementares para se aprofundar nos diversos comandos desse pacote, pois aqui abordaremos apenas as principaisestruturas, ou as mais comuns; assim, vá além e tente outros modos de representar os seus dados. Considerando que com Matplotlib podemos representar os dados de diferentes for- mas, vejamos algumas graficamente – a seguinte Figura apresenta um gráfico de linhas: Tão simples quanto parece, pessoal. tempo (s) vo lta ge m (m V) 0.00 0.00 0.25 0.25 0.50 0.50 0.75 0.75 1.00 1.00 1.25 1.25 1.50 1.50 1.75 1.75 2.00 2.00 Figura 3 – Gráfico de linhas Fonte: matplotlib.org 22 23 Você pode também criar histogramas, representando os dados tabulados e di- vididos em categorias ou classes. Em geral, separamos os dados em categorias e contamos a quantidade de valores que se encaixam em cada uma dessas categorias. Pr ob ab ili da de de de ns id ad e Historgrama do IQ: µ = 100, σ =15 Inteligência 60 80 100 120 140 0.000 0.005 0.010 0.015 0.020 0.025 0.030 0.035 Figura 4 – Histograma Fonte: matplotlib.org Se precisar, poderá representar os dados em gráfico de barras, útil para realizar algumas comparações entre as distribuições das variáveis – a seguinte Figura apre- senta um modelo vertical: Flexões 16th 60th 73rd 95th 37th Agilidade Corrida 0 10 20 30 40 50 60 70 80 90 100 14 17sec 12:52 min:sec 48 sec 7 laps Re su lta do do s T es te s Classi�cação Percentual entre os Meninos da 2ª Série Tamanho do Coorte Johnny Doe Flexão de Braço Teste de Marcapasso Figura 5 – Gráfi co de barras Fonte: matplotlib.org Outro gráfico bem conhecido é o de setores – cujo nome popular é gráfico de pizza –, útil para mostrar dados proporcionais de diferentes categorias, em que as figuras geralmente são em percentuais. 23 UNIDADE Bibliotecas para Manipulação de Dados 15.0% 10.0% 45.0% 30.0% Dogs Logs Hogs Frogs Figura 6 – Gráfico de setores Fonte: matplotlib.org Um gráfico amplamente utilizado para representar dados em um eixo vertical e horizontal e que exibe o quanto uma variável pode afetar outra é o de dispersão – veja um exemplo: Volume e percentual de mudança Figura 7 – Gráfico de dispersão Fonte: matplotlib.org Agora que já visualizamos os principais gráficos ou formas de visualizar os nossos dados com Matplotlib, conferiremos como criá-los por meio dos códigos no Python. Para utilizar o pacote Matplotlib, devemos importá-lo tal como fizemos com os outros pacotes já estudados. É válido e muitas vezes necessário importar o Numpy e Pandas, pois prepararão os dados que mostraremos com Matplotlib. 24 25 Vejamos alguns exemplos: import numpy as np import matplotlib.pyplot as plt # Construiremos um gráfico de linhas, para isso precisamos definir os va- lores de x e y x = np.linspace(0,10,20) y = x**2 # As seguintes instruções devem ser colocadas em uma única entrada para que tudo seja executado junto plt.plot(x, y) # Gera o gráfico de linha com x,y plt.xlabel(‘Variável do eixo X’) # Configura o rótulo do eixo x plt.ylabel(‘Variável do eixo Y’) # Configura o rótulo do eixo y plt.title(‘Gráfico de linha’) # Título do gráfico plt.show() # Saída: Figura 8 – Gráfi co de linha com Matplotlib Criaremos um gráfico de barras para mostrar, por exemplo, a porcentagem de uso de diferentes linguagens de programação: import numpy as np import matplotlib.pyplot as plt linguagens = (‘Python’, ‘C++’, ‘Java’, ‘Perl’, ‘Scala’, ‘Lisp’) x = np.arange(len(linguagens)) # criar o intervalo no eixo x de 0 - n # Valores do eixo y referentes ao uso das linguagens y_performance = [10,8,6,4,2,1] 25 UNIDADE Bibliotecas para Manipulação de Dados # Insira o seguinte bloco em uma linha no jupyter plt.bar(x, y_performance, align=’center’) plt.xticks(x, linguagens ) # Configura os valores do eixos x e y plt.ylabel(‘Taxa de uso’) plt.title(‘Uso de linguagens de programação’) plt.show() Figura 9 – Gráfi co de barras Imagine que você necessite demonstrar a porcentagem de vendas de telefones celulares em relação ao sistema operacional; neste caso, você poderia optar em empregar um gráfico de setor, em que cada setor representaria um sistema opera- cional com a sua porcentagem de vendas associada. Exemplo: import matplotlib.pyplot as plt labels = ‘Android’, ‘Blackberry’, ‘Windows Phone’, ‘iOS’ vendas = [40, 20, 10, 30] # Valores não reais cores = [‘lightyellow’, ‘lightgreen’, ‘lightcoral’, ‘lightskyblue’] explode = (0.1, 0, 0, 0) # Separa um setor do gráfico, destaque plt.pie(sizes, explode = explode, labels = labels, colors = cores, autopct = ‘ %.f%%’, shadow = True, startangle = 0) plt.axis(‘equal’) plt.show() # Saída: 26 27 Blackberry Windows Phone iOS Android 40% 30% 10% 20% Figura 10 – Gráfi co de setor Agora criaremos um histograma com Matplotlib: import numpy as np import matplotlib.pyplot as plt dados = [43,45,53,56,56,57,58,66,67,73,74,79, 80,80,81,81,81,82,83,83,84,88,89,91, 91,92,92,97,99,99,100,100,101,102,102,102, 103,104,107,108,109,113,114,118,121,123,126,128, 137,138,139,144,145,147,156,162,174,178,179,184, 191,198,211,214,243,249,329,380,403,511,522,598] bins = [0,100,200,300,400,500,600] # Intervalos das frequências plt.grid(color=’#cccccc’, linestyle=’-’, zorder=1) # Grade do gráfico plt.hist(dados, zorder=2, bins=bins) # Saída: 27 UNIDADE Bibliotecas para Manipulação de Dados Figura 11 – Histograma simples # Se quisermos mostrar os valores no histograma, devemos criá-lo associado a uma variável plt.grid(color=’#cccccc’, linestyle=’-’, zorder=1) aux = plt.hist(dados, zorder=2, bins=bins) # A variável aux possui os valores do eixo x e y gerados no gráfico # aux é uma matriz # (array([30., 32., 4., 2., 1., 3.]), array([ 0, 100, 200, 300, 400, 500, 600])) # Precisamos fazer uma repetição para exibir os valores dentro do gráfico for i in np.arange(len(bins)-1): plt.text(aux[1][i]+30,aux[0][i],str(aux[0][i])) # Saída: Figura 12 – Histograma completo 28 29 Para finalizar este estudo sobre Matplotlib, vejamos um gráfico de dispersão que mostra a relação entre o peso e a altura de dois grupos de pessoas – exemplo meramente explicativo: import matplotlib.pyplot as plt import numpy as np # Grupo A peso1 = [57,58.2,58.6,59.6,59.8,60.2,60.5,60.6,60.7,61.3,61.3,61.4,61.8,61.9,62.3] altura1 = [100.7,195.6,94.3,127.1,111.7,159.7,135,149.9,124.3,112.9,176.7,110.2,123. 9,161.9,107.8] # Grupo B peso2 = [62.9,63,63.1,63.2,63.3,63.4,63.4,63.4,63.5,63.6,63.7,64.1,64.3,64.3,64.7,64.8,65] altura2 = [151.8,156.3,136.1,124.2,156.3,130,181.2,255.9,163.1,123.1,119.5,179.9,114.8, 174.1,108.8,105.4,141.4] # Gerando o gráfico plt.scatter(peso1, altura1, marker=’*’, color=’r’, label=”GrupoA”) plt.scatter(peso2, altura2, marker=’*’, color=’g’, label=”GrupoB”) plt.xlabel(‘Peso’, fontsize=16) plt.ylabel(‘Altura’, fontsize=16) plt.title(‘Altura vs Peso’,fontsize=20) plt.legend() plt.show() # Saída: Figura 13 – Gráfi co de dispersão 29 UNIDADE Bibliotecas para Manipulação de Dados Chegamos ao final desta Unidade, onde você percebeu que a junção entre Numpy, Pandas e Matplotlib nos fornece uma ferramenta completa de análise de dados. Embora nos exemplos de gráficos não tenhamos utilizado o Pandas, este pode ser aplicado com Matplotlib – a justificativa de não usar aqui esse pacote é para manter os exemplos de gráficos simples, focando essencialmente nos comandos básicos do Matplotlib. Agora que você já conheceu os conceitos dos três pacotes – Numpy, Pandas, Matplotlib –, procure testar os exemplos e consultar a documentação de cada pacote para analisar os recursos mais avançados; note que em nossos comandos para gerar os gráficos, utilizamos algumas configurações extras, tais como os ti- pos marcados, as cores, entre outras. Então, explore as documentações nos sites indicados como Materiais Complementares. 30 31 Material Complementar Indicações para saber mais sobre os assuntos abordados nesta Unidade: Sites Tutorial do Numpy http://bit.ly/2sR6U2U Iniciando o uso doPandas http://bit.ly/2Q5rqV9 Tutorial do Matplotlib http://bit.ly/2PIR1UV Documentação do Python 3.x http://bit.ly/2PFrcoK 31 UNIDADE Bibliotecas para Manipulação de Dados Referências BECKER, J. L. Estatística Básica: Transformando Dados em Informação. Porto Alegre, RS: Bookman, 2015. CASTRO, L. N. de. Introdução à Mineração de Dados: Conceitos Básicos, Al- goritmos e Aplicações. São Paulo: Saraiva, 2016. PERKOVIC, L.; VIEIRA, D. Introdução à Computação usando Python: um foco no desenvolvimento de aplicações. Rio de Janeiro: LTC, 2016. 32
Compartilhar