Alura > Cursos de Data Science > Cursos de Engenharia de Dados > Conteúdos de Engenharia de Dados > Primeiras aulas do curso Databricks: análise de dados

Databricks: análise de dados

Primeiros passos - Apresentação

Boas-vindas ao curso de Databricks: análise de dados! Meu nome é Allan Spadini.

Autodescrição: sou um homem branco, tenho cabelos e olhos castanho-escuros. Cabelos curtos. Estou em um cenário que ao fundo tem algumas luzes de cor roxa e ciano e na parede tem uma espuma preta no formato de uma colmeia.

Neste curso estudaremos a API da biblioteca Pandas dentro do PySpark. Para isso, usaremos dados do Prouni.

Esses dados do Prouni terão informações de cursos de graduação no geral e vamos focar nos cursos de medicina, para fornecer informações para quem está querendo estudar medicina no Brasil, quem precisa de bolsa ou até quem precisa de acesso às universidades públicas.

Este curso é voltado para você, que já conhece um pouco sobre Data Science e sobre as bibliotecas Pandas e outras bibliotecas de visualização de dados.

Aprenderemos boas práticas para você que está trabalhando com dados um pouco maiores, big data, e tem alguma dificuldade com as ferramentas que já conhece. Para quem quer estudar o PySpark aproveitando seus conhecimentos prévios em Pandas.

Espero você nos próximos vídeos!

Primeiros passos - Carregamento e leitura de dados

Neste curso, utilizaremos dados do Prouni (Programa Universidade Para Todos) dentro do Databricks, utilizando a API da Pandas dentro do PySpark.

Para isso, estamos usando a versão community do Databricks. Nosso objetivo aqui é carregar os dados relacionados a cursos de medicina.

Dentro do Databricks, na seção "Compute", a primeira coisa que precisamos ter é criar um novo cluster.

Para isso, clicaremos em "Create compute". No campo "Cluster name" daremos o nome genérico de "cluster" e, em seguida, clicar no botão "Create Cluster". Ele demora um pouco para fazer essa criação.

Além de ter essa máquina criada, precisamos ter os dados que utilizaremos no decorrer do curso. Esses dados serão disponibilizados dentro do DBFS do Databricks.

No menu lateral esquerdo, temos a opção "Data", que é onde colocamos os nossos dados.

Ao clicarmos em "Data", a opção selecionada por padrão é a Database Tables, mas não é essa que queremos. Vamos selecionar a opção "DBFS".

Dentro da DBFS clicaremos em "tables > FileStore". Em seguida, clicaremos em "Upload" para selecionar o arquivo que queremos. Vamos selecionar dois arquivos: cursos-prouni.csv e reajuste.csv. Depois que eles carregarem, clicaremos em "Done".

Feito isso, ao clicarmos em "FileStore" veremos os dois arquivos que carregamos. Na seta que aparece à direita do nome do arquivo, teremos a opção "copy path" para copiar o endereço desse arquivo. Vamos copiar o endereço do File API Format.

/dbfs/FileStore/cursos_prouni.csv

O que faremos com esse endereço?

Vamos abrir um notebook, dentro do Databricks, para começarmos a carregar e entender esses dados.

No menu lateral, clicaremos em "Workspace" e na na seta que aparece ao lado do e-mail de usuário, selecionaremos a opção "Create > Notebook".

Vai abrir uma janela na qual podemos escolher a linguagem padrão, o cluster que queremos usar e podemos nomear esse notebook. Vamos nomeá-lo como Prouni_estudo e clicar em "Create".

Ele criou o notebook, já está vinculado ao cluster que nós criamos.

Feito isso, podemos colocar o endereço que copiamos e removeremos a parte inicial do endereço, vamos apagar o trecho "/dbfs", deixar o endereço entre aspas simples. O endereço será adicionado a uma variável chamada local_do_arquivo:

local_do_arquivo = '/FileStore/cursos_prouni.csv'

Podemos executar essa célula com o atalho "Shift + Enter".

Agora, podemos começar a trabalhar com o Pandas dentro do PySpark.

Poderíamos fazer import pandas as pd? Na verdade sim, mas não é essa Pandas que estamos trabalhando aqui. A que estamos trabalhando é a que está dentro do PySpark.

Então, vamos escrever o seguinte comando:

Para termos uma diferença que indica que estamos trabalhando com essa biblioteca dentro do PySpark, vamos importá-la como ps.

Além disso, vamos ler o arquivo.Vamos inserir ps.read_csv(), informando a variável local_do_arquivo como parâmetro. Por fim, colocaremos essa informação dentro de um DataFrame chamado df.

import pyspark.pandas as ps

df = ps.read_csv(local_do_arquivo)

Vamos pressionar "Shift + Enter" para executar esses comandos.

Ele executou o comando, mas logo abaixo do comando apareceu o ícone de uma lâmpada amarela que nos trouxe duas informações:

Pandas API on Spark: If index_col is not specified for read_csv, the default index is attached which can cause additional overhead.

Instrument ML code with MLflow: Use MLflow to track metrics, params, and models from your training code.

A mensagem que aparece mais embaixo tem a ver com o MLflow, machine learning, mas neste curso não nos preocuparemos com esse tipo de informação porque não lidaremos com machine learning.

E a primeira informação é sobre a Pandas API on Spark. Está fazendo referência a o que estamos usando e reclamando que não passamos o index_col, ou seja, não passamos uma coluna de índice. Isso não é comum, na biblioteca pandas, geralmente, ele não reclama disso.

Ele está informando que, se passarmos a informação da coluna de índice, a leitura do arquivo será mais eficiente.

Então, agora vamos ler o arquivo que carregamos e tentar identificar se existe alguma coluna que seria útil carregar como um índice para o nosso DataFrame.

Para visualizar as primeiras linhas do arquivo usaremos o seguinte comando:

df.head()

Temos diversas colunas, colunas para o grau do curso, turno, valor da mensalidade, etc. Temos uma coluna em especial, que pode ser importante para nós que é a coluna curso_id, é um id que identifica cada curso dentro dessa tabela. Por isso, vamos passar essa coluna curso_id como informação para o read.csv().

Lembrando que o ideal é que já tivéssemos conhecimento antecipado sobre os dados e já carregasse esses dados de forma mais eficiente, certo?

Agora, vamos adicionar mais um parâmetro para o read_csv(). Depois de local_do_arquivo adicionaremos uma vírgula e vamos indicar o index_col que será a coluna curso_id.

import pyspark.pandas as ps

df = ps.read_csv(local_do_arquivo, index_col='curso_id')

Ao executarmos, note que ele não exibiu o ícone daquela lâmpada com sugestões.

Agora, podemos executar o comando df.head() novamente. E temos um índice chamado curso_id na primeira coluna.

Primeiros passos - Entendendo o conjunto de dados

Para entender um pouco mais esses dados, vamos tentar visualizar o tamanho desses dados. Para isso, executaremos o comando df.shape.

df.shape

Out[6]: (41447,19)

Temos 41.447 linhas nesse DataSet e temos 19 colunas.

Cada uma das colunas tem uma informação diferente, mas eu dei uma olhada nesse DataSet durante a preparação do curso e vi que temos duas colunas com informações que são semelhantes, as colunas curso_busca e nome aparentemente têm a mesma informação.

Será que essas colunas têm exatamente a mesma informação? Vamos tentar responder essa pergunta utilizando o método equals().

df['curso_busca'].equals(df['nome'])

Ao executarmos esse comando, ele vai executar linha por linha de cada coluna citada para verificar se elas são iguais. Será exibida uma lista com cada linha seguida por true.

Para facilitar, podemos usar o sum() e somar todos os trues. Assim saberemos quantas linhas são iguais.

df['curso_busca'].equals(df['nome']).sum()

Out[8]:41447

Tivemos o retorno de que 41447 linhas são iguais. Ou seja, todas as linhas das colunas curso_busca e nome são iguais.

Uma ressalva aqui, na Pandas convencional é retornado um resultado um pouco diferente quando aplicamos o equals(). Ela retorna simplesmente true ou false. Pois ela compara diretamente as duas colunas.

Aqui com a Pandas dentro do PySpark ele compara linha por linha porque eles estão trabalhando de forma eficiente com esse arquivo, então ele separa as linhas desse arquivo em partes diferentes para conseguir fazer isso com processamento paralelo.

Dito isso, outra coisa que podemos tentar, já que descobrimos que temos duas colunas idênticas, é remover uma dessas colunas. Vamos tentar remover a coluna curso_busca usando o método drop(). Depois de abrir e fechar os colchetes, vou colocar uma vírgula e inserir axis=1 para garantir que ele exclua a coluna.

df = df.drop(['curso_busca'],axis=1)

Após executar esse comando, podemos verificar com o df.head() que a coluna curso_busca realmente sumiu. Agora temos apenas a coluna nome.

Para tornar mais fácil de entendermos qual é a informação da coluna nome podemos renomeá-la para nome_curso, com o seguinte comando usando o método rename():

df = df.rename(colums={'nome':'nome_curso'})

Podemos checar se a alteração foi feita usando o comando df.head(). Agora, temos a coluna nome_curso.

Conclusão

Fizemos alguns procedimentos que são comuns quando trabalhamos com o Pandas, quando começamos a entender o arquivo com o qual estamos trabalhando. Também excluímos algumas informações desnecessárias para nosso trabalho.

No próximo vídeo, tentaremos responder algumas perguntas em relação aos cursos de medicina dentro dessa base de dados. Até lá!

Sobre o curso Databricks: análise de dados

O curso Databricks: análise de dados possui 148 minutos de vídeos, em um total de 42 atividades. Gostou? Conheça nossos outros cursos de Engenharia de Dados em Data Science, ou leia nossos artigos de Data Science.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Engenharia de Dados acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas