Compartilhar via


Tutorial: Técnicas do EDA usando notebooks do Databricks

Este tutorial orienta você pelos conceitos básicos da realização da análise exploratória de dados (EDA) usando o Python em um notebook do Azure Databricks, desde o carregamento de dados até a geração de insights por meio de visualizações de dados.

O notebook usado neste tutorial examina dados globais de energia e emissões e demonstra como carregar, limpar e explorar dados.

Você pode acompanhá-lo usando o notebook de exemplo ou criar seu próprio notebook do zero.

O que é o EDA?

A análise de dados exploratórios (EDA) é uma etapa inicial crítica no processo de ciência de dados que envolve analisar e visualizar dados para:

  • Descubra suas principais características.
  • Identificar padrões e tendências.
  • Detectar anomalias.
  • Entenda as relações entre variáveis.

O EDA fornece insights sobre o conjunto de dados, facilitando decisões informadas sobre análises estatísticas adicionais ou modelagem.

Com os notebooks do Azure Databricks, os cientistas de dados podem executar o EDA usando ferramentas familiares. Por exemplo, este tutorial usa algumas bibliotecas comuns do Python para manipular e plotar dados, incluindo:

  • Numpy: uma biblioteca fundamental para computação numérica, fornecendo suporte para vetores, matrizes e uma ampla gama de funções matemáticas para operar nessas estruturas de dados.
  • pandas: uma poderosa biblioteca de análise e manipulação de dados, criada sobre o NumPy, que oferece estruturas de dados como DataFrames para lidar com dados estruturados com eficiência.
  • Plotly: uma biblioteca interativa de grafo que permite a criação de visualizações interativas de alta qualidade para análise e apresentação de dados.
  • Matplotlib: uma biblioteca abrangente para criar visualizações estáticas, animadas e interativas no Python.

O Azure Databricks também fornece recursos internos para ajudá-lo a explorar seus dados na saída do notebook, como filtrar e pesquisar dados em tabelas e ampliar as visualizações. Você também pode usar o Assistente do Databricks para ajudá-lo a escrever código para o EDA.

Antes de começar

Para concluir este tutorial, você precisará do seguinte:

  • Você deve ter permissão para usar um recurso de computação existente ou criar um recurso de computação. Consulte Compute.
  • [Opcional] Este tutorial descreve como usar o assistente para ajudá-lo a gerar código. Consulte Usar o Assistente do Databricks para obter mais informações.

Baixar o conjunto de dados e importar o arquivo CSV

Este tutorial demonstra as técnicas de EDA examinando dados globais de energia e emissões. Para acompanhar, baixe o conjunto de dados de consumo de energia por Nosso Mundo em Dados do Kaggle. Este tutorial usa o owid-energy-data.csv arquivo.

Para importar o conjunto de dados para o workspace do Azure Databricks:

  1. Na barra lateral do workspace, clique em Workspace para navegar até o navegador do workspace.

  2. Arraste e solte o arquivo CSV, owid-energy-data.csv, para o seu workspace.

    Isso abre o modal Importação. Observe a pasta Destino listada aqui. Isso é definido como sua pasta atual no navegador do workspace e se torna o destino do arquivo importado.

  3. Clique em Importar. O arquivo deve aparecer na pasta de destino em seu workspace.

  4. Você precisa do caminho do arquivo para carregar o arquivo em seu notebook mais tarde. Localize o arquivo no navegador do workspace. Para copiar o caminho do arquivo para a área de transferência, clique com o botão direito do mouse no nome do arquivo e selecione Copiar URL/caminho>Caminho completo.

Criar um novo notebook

Para criar um novo bloco de anotações na pasta inicial do usuário, clique em Novo ÍconeNovo na barra lateral e selecione Bloco de Anotações no menu.

Na parte superior, ao lado do nome do bloco de anotações, selecione Python como o idioma padrão do notebook.

Para saber mais sobre como criar e gerenciar notebooks, consulte Gerenciar notebooks.

Adicione cada um dos exemplos de código neste artigo a uma nova célula em seu notebook. Ou use o bloco de anotações de exemplo fornecido para acompanhar o tutorial.

Carregar arquivo CSV

Em uma nova célula do notebook, carregue o arquivo CSV. Para fazer isso, importe numpy e pandas. Essas são bibliotecas python úteis para ciência e análise de dados.

Crie um DataFrame pandas do conjunto de dados para facilitar o processamento e a visualização. Substitua o caminho do arquivo abaixo pelo que você copiou anteriormente.

import numpy as np
import pandas as pd # Data processing, CSV file I/O (e.g. pd.read_csv)
df=pd.read_csv('/Workspace/Users/demo@databricks.com/owid-energy-data.csv') # Replace the file path here with the workspace path you copied earlier

Execute a célula. A saída deve retornar o DataFrame do Pandas, incluindo uma lista de cada coluna e seu tipo.

Saída da célula do DataFrame importado.

Entender os dados

Entender os conceitos básicos do conjunto de dados é crucial para qualquer projeto de ciência de dados. Envolve familiarizar-se com a estrutura, os tipos e a qualidade dos dados em questão.

Em um notebook do Azure Databricks, você pode usar o display(df) comando para exibir o conjunto de dados.

Saída da célula exibindo o conjunto de dados como uma tabela.

Como o conjunto de dados tem mais de 10.000 linhas, esse comando retorna um conjunto de dados truncado. À esquerda de cada coluna, você pode ver o tipo de dados da coluna. Para saber mais, confira Formatar colunas.

Utilize o pandas para obter insights sobre dados

Para entender seu conjunto de dados com eficiência, use os seguintes comandos pandas:

  • O df.shape comando retorna as dimensões do DataFrame, oferecendo uma visão geral rápida do número de linhas e colunas.

    Saída da célula exibindo df.shape.

  • O df.dtypes comando fornece os tipos de dados de cada coluna, ajudando você a entender o tipo de dados com os quais você está lidando. Você também pode ver o tipo de dados para cada coluna na tabela de resultados.

    Saída da célula exibindo df.dtypes.

  • O df.describe() comando gera estatísticas descritivas para colunas numéricas, como média, desvio padrão e percentis, que podem ajudá-lo a identificar padrões, detectar anomalias e entender a distribuição de seus dados. Use-o display() para ver estatísticas de resumo em um formato tabular com o qual você pode interagir. Consulte Explore os dados usando a tabela de saída do notebook do Databricks.

    Saída da célula exibindo df.describe.

Gerar um perfil de dados

Observação

Disponível no Databricks Runtime 9.1 LTS e superior.

Os notebooks do Azure Databricks incluem recursos internos de criação de perfil de dados. Ao exibir um DataFrame com a função de exibição do Azure Databricks, você pode gerar um perfil de dados a partir da saída da tabela.

# Display the DataFrame, then click "+ > Data Profile" to generate a data profile
display(df)

Clique para gerar um perfil de dados da saída da tabela.

Clique +>Perfil de Dados ao lado da Tabela na saída. Isso executa um novo comando que gera um perfil dos dados no DataFrame.

O perfil de dados gerado da saída da tabela.

O perfil de dados inclui estatísticas de resumo para colunas numéricas, de cadeia de caracteres e de data, bem como histogramas das distribuições de valor para cada coluna. Você também pode gerar perfis de dados por meio de programação. Confira Comando summarize (dbutils.data.summarize).

Limpar os dados

A limpeza de dados é uma etapa vital no EDA para garantir que o conjunto de dados seja preciso, consistente e pronto para uma análise significativa. Esse processo envolve várias tarefas principais para garantir que os dados estejam prontos para análise, incluindo:

  • Identificando e removendo dados duplicados.
  • Lidar com valores ausentes, o que pode envolver substituí-los por um valor específico ou remover as linhas afetadas.
  • Padronizar tipos de dados (por exemplo, converter cadeias de caracteres datetimeem ) por meio de conversões e transformações para garantir a consistência. Talvez você também queira converter dados em um formato mais fácil de trabalhar.

Essa fase de limpeza é essencial, pois melhora a qualidade e a confiabilidade dos dados, permitindo uma análise mais precisa e perspicaz.

Dica: usar o Assistente do Databricks para ajudar nas tarefas de limpeza de dados

Você pode usar o Assistente do Databricks para ajudá-lo a gerar código. Crie uma nova célula de código e clique no link de geração ou use o ícone do assistente na parte superior direita para abrir o assistente. Insira uma consulta para o assistente. O assistente pode gerar código Python ou SQL ou gerar uma descrição de texto. Para obter resultados diferentes, clique em Regenerar.

Por exemplo, tente os seguintes prompts para usar o assistente para ajudá-lo a limpar os dados:

  • Verifique se df contém colunas ou linhas duplicadas. Imprima as cópias duplicadas. Em seguida, exclua as duplicatas.
  • Em que formato estão as colunas de data? Altere-o para 'YYYY-MM-DD'.
  • Não vou usar a XXX coluna. Exclui-la.

Confira Obter ajuda de codificação do assistente do Databricks.

Remover dados duplicados

Verifique se os dados têm linhas ou colunas duplicadas. Em caso afirmativo, remova-os.

Dica

Use o assistente para gerar código para você.

Tente inserir o prompt: "Verifique se o DF contém colunas ou linhas duplicadas. Imprima as cópias duplicadas. Em seguida, exclua as duplicatas." O assistente pode gerar código como o exemplo abaixo.

# Check for duplicate rows
duplicate_rows = df.duplicated().sum()

# Check for duplicate columns
duplicate_columns = df.columns[df.columns.duplicated()].tolist()

# Print the duplicates
print("Duplicate rows count:", duplicate_rows)
print("Duplicate columns:", duplicate_columns)

# Drop duplicate rows
df = df.drop_duplicates()

# Drop duplicate columns
df = df.loc[:, ~df.columns.duplicated()]

Nesse caso, o conjunto de dados não tem dados duplicados.

Manipular valores nulos ou ausentes

Uma maneira comum de tratar valores NaN ou Null é substituí-los por 0 para facilitar o processamento matemático.

df = df.fillna(0) # Replace all NaN (Not a Number) values with 0

Isso garante que todos os dados ausentes no DataFrame sejam substituídos por 0, o que pode ser útil para as etapas subsequentes de análise ou processamento de dados em que valores ausentes podem causar problemas.

Datas de reformatação

As datas geralmente são formatadas de várias maneiras em conjuntos de dados diferentes. Eles podem estar em formato de data, cadeias de caracteres ou inteiros.

Para essa análise, trate a year coluna como um inteiro. O código a seguir é uma maneira de fazer isso:

# Ensure the 'year' column is converted to the correct data type (integer for year)
df['year'] = pd.to_datetime(df['year'], format='%Y', errors='coerce').dt.year

# Confirm the changes
df.year.dtype

Isso garante que a year coluna contenha apenas valores inteiros de ano, com quaisquer entradas inválidas convertidas para NaT (Not a Time).

Explore os dados usando a tabela de saída do notebook do Databricks

O Azure Databricks fornece recursos internos para ajudá-lo a explorar seus dados usando a tabela de saída.

Em uma nova célula, use display(df) para exibir o conjunto de dados como uma tabela.

Explore os dados usando a tabela de saída do notebook do Databricks.

Usando a tabela de saída, você pode explorar seus dados de várias maneiras:

Pesquisar os dados em busca de uma cadeia de caracteres ou valor específico

Clique no ícone de pesquisa no canto superior direito da tabela e insira sua pesquisa.

Pesquise um valor na saída da tabela.

Filtrar condições específicas

Você pode usar filtros de tabela internos para filtrar suas colunas para condições específicas. Há várias maneiras de criar um filtro. Consulte os resultados do filtro .

Dica

Use o Assistente do Databricks para criar filtros. Clique no ícone de filtro no canto superior direito da tabela. Insira sua condição de filtro. O Assistente do Databricks gera automaticamente um filtro para você.

Filtre a saída da tabela usando o Assistente.

Criar visualizações usando o conjunto de dados

Na parte superior da tabela de saída, clique em +>Visualização para abrir o editor de visualização.

Adicione uma visualização usando a saída da tabela.

Selecione o tipo de visualização e as colunas que você deseja visualizar. O editor exibe uma visualização do gráfico com base em sua configuração. Por exemplo, a imagem abaixo mostra como adicionar vários gráficos de linhas para exibir o consumo de várias fontes de energia renovável ao longo do tempo.

Configure a visualização usando o editor de visualização.

Clique em Salvar para adicionar a visualização como uma aba na saída da célula.

Consulte Criar uma nova visualização.

Explorar e visualizar os dados usando bibliotecas do Python

Explorar dados usando visualizações é um aspecto fundamental do EDA. As visualizações ajudam a descobrir padrões, tendências e relações dentro dos dados que podem não ser imediatamente aparentes apenas por meio da análise numérica. Use bibliotecas como Plotly ou Matplotlib para técnicas comuns de visualização, incluindo gráficos de dispersão, gráficos de barras, gráficos de linha e histogramas. Essas ferramentas visuais permitem que os cientistas de dados identifiquem anomalias, entendam as distribuições de dados e observem correlações entre variáveis. Por exemplo, gráficos de dispersão podem realçar exceções, enquanto gráficos de série temporal podem revelar tendências e sazonalidade.

Criar uma matriz para países exclusivos

Examine os países incluídos no conjunto de dados criando uma matriz para países exclusivos. A criação de uma matriz mostra as entidades listadas como country.

# Get the unique countries
unique_countries = df['country'].unique()
unique_countries

Saída:

Saída de célula mostrando matriz de países exclusivos.

Perspicácia:

A country coluna inclui várias entidades, incluindo Mundo, Países de Alta Renda, Ásia e Estados Unidos, que nem sempre são diretamente comparáveis. Pode ser mais útil filtrar os dados por região.

Digamos que você queira concentrar sua investigação nos 10 países com as maiores emissões de gases de efeito estufa nos anos 2000. Você pode filtrar os dados para os anos que deseja analisar e os 10 principais países com mais emissões e, em seguida, usar o plotly para criar um gráfico de linhas mostrando suas emissões ao longo do tempo.

import plotly.express as px

# Filter data to include only years from 2000 to 2022
filtered_data = df[(df['year'] >= 2000) & (df['year'] <= 2022)]

# Get the top 10 countries with the highest emissions in the filtered data
top_countries = filtered_data.groupby('country')['greenhouse_gas_emissions'].sum().nlargest(10).index

# Filter the data for those top countries
top_countries_data = filtered_data[filtered_data['country'].isin(top_countries)]

# Plot emissions trends over time for these countries
fig = px.line(top_countries_data, x='year', y='greenhouse_gas_emissions', color='country',
             title="Greenhouse Gas Emissions Trends for Top 10 Countries (2000 - 2022)")
fig.show()

Saída:

Gráfico mostrando tendências de emissões de gases de efeito estufa para os 10 principais emissores de 2000 a 2022.

Perspicácia:

As emissões de gases de efeito estufa subiram de 2000 a 2022, com exceção de alguns países onde as emissões estavam relativamente estáveis, com um leve declínio nesse período.

Filtrar e mapear emissões por região

Filtre os dados por região e calcule as emissões totais de cada região. Em seguida, plote os dados como um gráfico de barras:

# Filter out regional entities
regions = ['Africa', 'Asia', 'Europe', 'North America', 'South America', 'Oceania']

# Calculate total emissions for each region
regional_emissions = df[df['country'].isin(regions)].groupby('country')['greenhouse_gas_emissions'].sum()

# Plot the comparison
fig = px.bar(regional_emissions, title="Greenhouse Gas Emissions by Region")
fig.show()

Saída:

Gráfico mostrando as emissões de gases de efeito estufa por região.

Insight:

A Ásia tem as maiores emissões de gases de efeito estufa. Oceania, América do Sul e África produzem as menores emissões de gases de efeito estufa.

Calcular e grafar o crescimento do compartilhamento de energia renovável

Crie um novo recurso/coluna que calcula o compartilhamento de energia renovável como uma proporção do consumo de energia renovável em relação ao consumo primário de energia. Em seguida, classifique os países com base em sua participação média em energia renovável. Para os 10 principais países, plote seu compartilhamento de energia renovável ao longo do tempo:

# Calculate the renewable energy share and save it as a new column called "renewable_share"
df['renewable_share'] = df['renewables_consumption'] / df['primary_energy_consumption']

# Rank countries by their average renewable energy share
renewable_ranking = df.groupby('country')['renewable_share'].mean().sort_values(ascending=False)

# Filter for countries leading in renewable energy share
leading_renewable_countries = renewable_ranking.head(10).index
leading_renewable_data = df[df['country'].isin(leading_renewable_countries)]
# filtered_data = df[(df['year'] >= 2000) & (df['year'] <= 2022)]
leading_renewable_data_filter=leading_renewable_data[(leading_renewable_data['year'] >= 2000) & (leading_renewable_data['year'] <= 2022)]
# Plot renewable share over time for top renewable countries
fig = px.line(leading_renewable_data_filter, x='year', y='renewable_share', color='country',
             title="Renewable Energy Share Growth Over Time for Leading Countries")
fig.show()

Saída:

Gráfico representando o crescimento da participação de energia renovável ao longo do tempo para os 10 países líderes em energia renovável.

Perspicácia:

Noruega e Islândia estão liderando o mundo em energia renovável, com mais da metade de seu consumo proveniente de energia renovável.

Islândia e Suécia viram o maior crescimento em sua parte de energia renovável. Todos os países viram quedas e aumentos ocasionais, demonstrando como o crescimento do compartilhamento de energia renovável não é necessariamente linear. Curiosamente, a África Média viu uma queda no início da década de 2010, mas se recuperou em 2020.

Gráfico de dispersão: Mostrar o impacto da energia renovável para os principais emissores

Filtre os dados dos 10 principais emissores e use um gráfico de dispersão para examinar o compartilhamento de energia renovável versus as emissões de gases de efeito estufa ao longo do tempo.

# Select top emitters and calculate renewable share vs. emissions
top_emitters = df.groupby('country')['greenhouse_gas_emissions'].sum().nlargest(10).index
top_emitters_data = df[df['country'].isin(top_emitters)]

# Plot renewable share vs. greenhouse gas emissions over time
fig = px.scatter(top_emitters_data, x='renewable_share', y='greenhouse_gas_emissions',
                color='country', title="Impact of Renewable Energy on Emissions for Top Emitters")
fig.show()

Saída:

Gráfico mostrando o impacto da energia renovável nas emissões para os principais emissores.

Perspicácia:

À medida que um país usa mais energia renovável, também tem mais emissões de gases de efeito estufa, o que significa que seu consumo total de energia aumenta mais rápido do que seu consumo renovável. A América do Norte é uma exceção porque suas emissões de gases de efeito estufa permaneceram relativamente constantes ao longo dos anos, à medida que sua parte renovável continuava a aumentar.

Modelar o consumo global de energia projetado

Agregar o consumo global de energia primária por ano e, em seguida, criar um modelo arima (média móvel integrada autoregressiva) para projetar o consumo total de energia global para os próximos anos. Plote o consumo de energia histórico e previsto usando Matplotlib.

import pandas as pd
from statsmodels.tsa.arima.model import ARIMA
import matplotlib.pyplot as plt

# Aggregate global primary energy consumption by year
global_energy = df[df['country'] == 'World'].groupby('year')['primary_energy_consumption'].sum()

# Build an ARIMA model for projection
model = ARIMA(global_energy, order=(1, 1, 1))
model_fit = model.fit()
forecast = model_fit.forecast(steps=10)  # Projecting for 10 years

# Plot historical and forecasted energy consumption
plt.plot(global_energy, label='Historical')
plt.plot(range(global_energy.index[-1] + 1, global_energy.index[-1] + 11), forecast, label='Forecast')
plt.xlabel("Year")
plt.ylabel("Primary Energy Consumption")
plt.title("Projected Global Energy Consumption")
plt.legend()
plt.show()

Saída:

Gráfico mostrando o consumo de energia global histórico e projetado.

Perspicácia:

Esse modelo projeta que o consumo global de energia continuará aumentando.

Notebook de exemplo

Use o bloco de anotações a seguir para executar as etapas neste artigo. Para obter instruções sobre como importar um notebook para um workspace do Azure Databricks, consulte Importar um notebook.

Tutorial: EDA com dados globais de energia

Obter laptop

Próximas etapas

Agora que você executou algumas análises de dados exploratórias iniciais em seu conjunto de dados, experimente estas próximas etapas:

  • Consulte o Apêndice no notebook de exemplo para obter exemplos adicionais de visualização de EDA.
  • Se você tiver encontrado erros ao seguir este tutorial, tente usar o depurador embutido para percorrer seu código. Confira Notebooks de depuração.
  • Compartilhe seu bloco de anotações com sua equipe para que eles possam entender sua análise. Dependendo das permissões que você concede a elas, elas podem ajudar a desenvolver código para aprofundar a análise ou adicionar comentários e sugestões para uma investigação mais aprofundada.
  • Depois de finalizar sua análise, crie um painel de notebook ou um painel de IA/BI com as principais visualizações a serem compartilhadas com os stakeholders.