Baixada NERD – 22/10/2022 – Manipulando Dados com Python

No dia 22/10/22, a comunidade participou do evento do Baixada Nerd na ETEC Itanhaém palestrando sobre manipulação de dados com Python.

Altair Ribeiro falou sobre a ingestão de dados, manipulação e visualização de grandes volumes de dados e a versatilidade ao utilizar python para big data.


Arquivos para Download

  • Arquivo do notebook para o Jupyter Notebook.

Arquivo do Notebook – Baixe aqui: ETEC 22/10/22 - Manipulação de Dados - Notebook (629 downloads )

Arquivo de Dados – Baixe Aqui: ETEC - 22/10/22 - ifood.csv - Arquivo de dados compactado (554 downloads )


Imagens do Evento da Baixada Nerd

Notebook

etec_22_10_22

Py013 – Comunidade de Python da Baixada Santista

Manipulando Dados

1. Importando as bibiliotecas

In [456]:
# Importa das bibliotecas necessárias para manipular os dataframes (dados)
import numpy as np
import pandas as pd
import seaborn as sea
from pandas import Grouper
import matplotlib.pyplot as plt
%matplotlib inline

2. Carregando os arquivos de dados utilizando o Pandas

In [457]:
# lê o arquivo de dados "network.csv" em um diretório padrão. Nomeie o arquivo de log para "network.csv"
# municipio = pd.read_csv('Base_MUNIC_2020.csv')
ifood = pd.read_csv('ifood.csv', sep=";")

3. Examinando os tipos de dados

In [458]:
# Tipos dos dados
ifood.dtypes
Out[458]:
categoria              object
tempo_entrega           int64
CodMun                  int64
preco_minimo_pedido     int64
nome_restaurante       object
faixa_preco            object
url                    object
dtype: object

4. Alterando o tipo de CodMun de “int64” para “object”, porque não será necessário realizar cálculo com ele

In [459]:
ifood = ifood.astype({'CodMun':object})

5. Examinando novamente os dados

In [460]:
# Tipos dos dados
ifood.dtypes
Out[460]:
categoria              object
tempo_entrega           int64
CodMun                 object
preco_minimo_pedido     int64
nome_restaurante       object
faixa_preco            object
url                    object
dtype: object

6. Quantidade de registros (linha) e variáveis (colunas)

In [461]:
# Formato dos dados
ifood.shape
Out[461]:
(406399, 7)

7. Uma amostragem dos dados do início e do fim do arquivo

In [464]:
#ifood.head(30)
ifood.tail()
Out[464]:
categoria tempo_entrega CodMun preco_minimo_pedido nome_restaurante faixa_preco url
406394 Açaí 60 4309209 300 Açaí da Duda Muito barato https://www.ifood.com.br/delivery/gravatai-rs/…
406395 Açaí 50 4309209 100 Pede aí açaí Muito barato https://www.ifood.com.br/delivery/cachoeirinha…
406396 Açaí 40 4309209 0 Açaí do Jeitinho Brasileiro Muito barato https://www.ifood.com.br/delivery/gravatai-rs/…
406397 Lanches 60 4309209 200 Classic Burger Muito barato https://www.ifood.com.br/delivery/gravatai-rs/…
406398 Doces & Bolos 20 4309209 0 Cacau Show – Cachoerinha Shopping Moderado https://www.ifood.com.br/delivery/cachoeirinha…

8. Alterando a forma de visualização

In [465]:
# Inversão da forma de visualização dos dados
ifood.T
Out[465]:
0 1 2 3 4 5 6 7 8 9 406389 406390 406391 406392 406393 406394 406395 406396 406397 406398
categoria Marmita Açaí Bebidas Carnes Brasileira Lanches Brasileira Congelados Lanches Lanches Doces & Bolos Lanches Lanches Lanches Lanches Açaí Açaí Açaí Lanches Doces & Bolos
tempo_entrega 27 61 70 63 58 67 46 40 41 47 40 50 50 60 60 60 50 40 60 20
CodMun 5300108 5300108 5300108 5300108 5300108 5300108 5300108 5300108 5300108 5300108 4309209 4309209 4309209 4309209 4309209 4309209 4309209 4309209 4309209 4309209
preco_minimo_pedido 100 100 50 200 200 200 200 100 200 200 140 130 200 150 150 300 100 0 200 0
nome_restaurante Cantina Arte & Sabor Raruty Açaí Raiz Toma na Kombi Churrasquinho do Barriga´s Prime Restaurante Clara Quitutes & Cia Loca Como Tú Madre Frutos de Goiás 710 Sul Lemos Cozinha Club House Burguer Churros no Copo Jcs Lancheria Hamburgueria Duarte ki-sabor Pizza Cone del Miko Açaí da Duda Pede aí açaí Açaí do Jeitinho Brasileiro Classic Burger Cacau Show – Cachoerinha Shopping
faixa_preco Muito barato Muito barato Moderado Muito barato Muito barato Barato Muito caro Muito barato Moderado Moderado Muito barato Muito barato Moderado Barato Muito barato Muito barato Muito barato Muito barato Muito barato Moderado
url https://www.ifood.com.br/delivery/brasilia-df/… https://www.ifood.com.br/delivery/brasilia-df/… https://www.ifood.com.br/delivery/brasilia-df/… https://www.ifood.com.br/delivery/brasilia-df/… https://www.ifood.com.br/delivery/brasilia-df/… https://www.ifood.com.br/delivery/brasilia-df/… https://www.ifood.com.br/delivery/brasilia-df/… https://www.ifood.com.br/delivery/brasilia-df/… https://www.ifood.com.br/delivery/brasilia-df/… https://www.ifood.com.br/delivery/brasilia-df/… https://www.ifood.com.br/delivery/viamao-rs/ch… https://www.ifood.com.br/delivery/viamao-rs/jc… https://www.ifood.com.br/delivery/alvorada-rs/… https://www.ifood.com.br/delivery/viamao-rs/ki… https://www.ifood.com.br/delivery/alvorada-rs/… https://www.ifood.com.br/delivery/gravatai-rs/… https://www.ifood.com.br/delivery/cachoeirinha… https://www.ifood.com.br/delivery/gravatai-rs/… https://www.ifood.com.br/delivery/gravatai-rs/… https://www.ifood.com.br/delivery/cachoeirinha…

7 rows × 406399 columns

9. Agrupando os dados

In [466]:
ifood.groupby(['CodMun', 'categoria', 'nome_restaurante', 'faixa_preco']).sum()
Out[466]:
tempo_entrega preco_minimo_pedido
CodMun categoria nome_restaurante faixa_preco
1100023 Açaí Açai Sport Barato 60 0
Açaí Mania Barato 60 100
Açaí Mix Cremoso Muito barato 20 100
Imperio Acai e Petiscaria Muito barato 45 0
Mega Sorvetes e Açaí Muito barato 50 120
5300108 Árabe Souk Restaurante Arabe Caro 67 200
Tarbush – Comidas Árabes Muito caro 38 100
Teggiano Muito barato 50 300
Valença Narg Pub Muito barato 80 200
Árabe Gourmet Muito caro 44 200

403085 rows × 2 columns

10. Copiando o dataframe original

In [467]:
cp_ifood = ifood.copy()

11. Vendo uma amostra do dataframe copiado

In [468]:
cp_ifood.head()
Out[468]:
categoria tempo_entrega CodMun preco_minimo_pedido nome_restaurante faixa_preco url
0 Marmita 27 5300108 100 Cantina Arte & Sabor Muito barato https://www.ifood.com.br/delivery/brasilia-df/…
1 Açaí 61 5300108 100 Raruty Açaí Raiz Muito barato https://www.ifood.com.br/delivery/brasilia-df/…
2 Bebidas 70 5300108 50 Toma na Kombi Moderado https://www.ifood.com.br/delivery/brasilia-df/…
3 Carnes 63 5300108 200 Churrasquinho do Barriga´s Muito barato https://www.ifood.com.br/delivery/brasilia-df/…
4 Brasileira 58 5300108 200 Prime Restaurante Muito barato https://www.ifood.com.br/delivery/brasilia-df/…

12. Eliminando algumas colunas e atribuindo a outro dataframe

In [469]:
# df_cp = cp_ifood.drop(['CodMun', 'preco_minimo_pedido', 'nome_restaurante', 'faixa_preco','url'], axis=1)
In [470]:
df_cp = cp_ifood.drop(['tempo_entrega','preco_minimo_pedido', 'nome_restaurante', 'faixa_preco','url'], axis=1)

13. Verificando novamente a amostra do novo dataframe sem as colunas excluídas

In [471]:
df_cp.head()
Out[471]:
categoria CodMun
0 Marmita 5300108
1 Açaí 5300108
2 Bebidas 5300108
3 Carnes 5300108
4 Brasileira 5300108

14. Agrupando as categorias de restaurantes (limitado a n tipos)

In [473]:
df_grupos = df_cp.groupby(['categoria'],sort=True).count().head(20)
# df_grupos = df_cp.groupby(['categoria'],sort=False).count().head(20)

15. Verificando os agrupamentos

In [474]:
df_grupos
Out[474]:
CodMun
categoria
Africana 92
Alemã 191
Argentina 358
Asiática 155
Açaí 22110
Baiana 154
Bebidas 13375
Brasileira 73348
Cafeteria 3136
Carnes 8394
Casa de Sucos 357
Chinesa 1912
Colombiana 48
Congelados 2101
Congelados Fit 197
Contemporânea 578
Conveniência 3162
Coreana 64
Cozinha Rápida 2527
Crepe 225

16. Plotando os dados dos grupos

In [475]:
df_grupos.plot(kind='barh', figsize=(8,8))
Out[475]:
<matplotlib.axes._subplots.AxesSubplot at 0x2282e611c88>

17. Contando as categorias de restaurantes

In [476]:
cp_ifood['categoria'].value_counts()
Out[476]:
Lanches            98946
Brasileira         73348
Doces & Bolos      39828
Pizza              36819
Açaí               22110
                   ...  
Colombiana            48
Típica do Norte       31
Grega                  6
Paranaense             4
Marroquina             1
Name: categoria, Length: 61, dtype: int64

Exemplo de gráfico utilizando a biblioteca Seaborn

1. Mapa Termal

In [477]:
### 1. Gráfico de Barras
import matplotlib.pyplot as plt
import seaborn as sns
# sns.set_theme()
# Load the example flights dataset and convert to long-form
flights_long = sns.load_dataset("flights")
flights = flights_long.pivot("month", "year", "passengers")
# Draw a heatmap with the numeric values in each cell
f, ax = plt.subplots(figsize=(9, 6))
sns.heatmap(flights, annot=True, fmt="d", linewidths=.5, ax=ax)
Out[477]:
<matplotlib.axes._subplots.AxesSubplot at 0x2280fd1e978>

2. Gráfico de Dispersão

In [478]:
import seaborn as sns
import matplotlib.pyplot as plt
# sns.set_theme(style="whitegrid")
# Load the example diamonds dataset
diamonds = sns.load_dataset("diamonds")
# Draw a scatter plot while assigning point colors and sizes to different
# variables in the dataset
f, ax = plt.subplots(figsize=(6.5, 6.5))
sns.despine(f, left=True, bottom=True)
clarity_ranking = ["I1", "SI2", "SI1", "VS2", "VS1", "VVS2", "VVS1", "IF"]
sns.scatterplot(x="carat", y="price",
                hue="clarity", size="depth",
                palette="ch:r=-.2,d=.3_r", 
                hue_order=clarity_ranking,
                sizes=(1, 8), linewidth=0,
                data=diamonds, ax=ax)
Out[478]:
<matplotlib.axes._subplots.AxesSubplot at 0x2280f7107b8>

3. Gráfico de barras Verticais

In [479]:
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
# sns.set_theme(style="white", context="talk")
rs = np.random.RandomState(8)
# Set up the matplotlib figure
f, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(7, 5), sharex=True)
# Generate some sequential data
x = np.array(list("ABCDEFGHIJ"))
y1 = np.arange(1, 11)
sns.barplot(x=x, y=y1, palette="rocket", ax=ax1)
ax1.axhline(0, color="k", clip_on=False)
ax1.set_ylabel("Sequencial")
# Center the data to make it diverging
y2 = y1 - 5.5
sns.barplot(x=x, y=y2, palette="vlag", ax=ax2)
ax2.axhline(0, color="k", clip_on=False)
ax2.set_ylabel("Divergente")
# Randomly reorder the data to make it qualitative
y3 = rs.choice(y1, len(y1), replace=False)
sns.barplot(x=x, y=y3, palette="deep", ax=ax3)
ax3.axhline(0, color="k", clip_on=False)
ax3.set_ylabel("Qualitativo")
# Finalize the plot
sns.despine(bottom=True)
plt.setp(f.axes, yticks=[])
plt.tight_layout(h_pad=2)

3. Gráfico de Barras Horizontais

In [480]:
import seaborn as sns
import matplotlib.pyplot as plt
# sns.set_theme(style="whitegrid")
# Initialize the matplotlib figure
f, ax = plt.subplots(figsize=(6, 15))
# Load the example car crash dataset
crashes = sns.load_dataset("car_crashes").sort_values("total", ascending=False)
# Plot the total crashes
sns.set_color_codes("pastel")
sns.barplot(x="total", y="abbrev", data=crashes,
            label="Total", color="b")
# Plot the crashes where alcohol was involved
sns.set_color_codes("muted")
sns.barplot(x="alcohol", y="abbrev", data=crashes,
            label="Alcoolizados", color="b")
# Add a legend and informative axis label
ax.legend(ncol=2, loc="lower right", frameon=True)
ax.set(xlim=(0, 24), ylabel="Estados Americanos",
       xlabel="Colisões de automóveis por bilhão de milhas")
sns.despine(left=True, bottom=True)