Começando nos Estudos de Data Science com Python e Pandas
Tags: datascience, python, pandas, programming
Published: 2023-11-24 15:02:33

Entrar no universo de data science vem se tornando cada vez fácil. Isto pois há uma crescente implementação neste mercado de bibliotecas e linguagens de alto-nível, como o Pandas e o Python, para que a manipulação de um alto número de dados não se torne uma tarefa complicada.

---

<center>
<h2>Tabela de Conteúdos</h2>
</center>

- [1. Introdução](#1-introdução)
- [2. Entendendo a Biblioteca Pandas](#2-entendendo-a-biblioteca-pandas)
- [3. Estrutura de Dados](#3-estrutura-de-dados)
  - [3.1. DataFrames](#31-dataframes)
  - [3.2. Series](#32-series)
- [4. Querying](#4-querying)
- [5. Conclusão](#5-conclusão)

---

## 1. Introdução

Como um programador web venho dedicando meu tempo ao estudo de tecnologias relacionadas a front-end. No entanto, percebi que uma das linguagens que me introduziram à programação estava empoeirada na minha estante, o Python. Havia um bom tempo desde que eu sequer toquei nela novamente, e isso me incomodou.

Foi conhecendo o data science, através de um programa de estudos que utilizava o Python e o Pandas, que eu decidi desempoeirar a coitada e abraçar uma nova jornada na minha vida. Este artigo contêm o meu aprendizado até o momento sobre a biblioteca.

## 2. Entendendo a Biblioteca Pandas

O Pandas foi uma biblioteca originalmente criada para fins internos à uma empresa, mas que com o tempo, foi se tornando parte da comunidade open-source, e hoje possui a contribuição de muitos desenvolvedores ao redor do mundo para sua evolução.

Seu principal objetivo é trabalhar com informações, sejam tabuladas ou em sequência (em tabela ou em lista). Além de apresentar poderosas ferramentas e integrações com outras bibliotecas que compõem o universo do data science no Python.

Seus dois tipos de estruturas mais comuns são o `DataFrame` e a `Series`, que apesar de possuirem a função em comum de armazenar dados, são manuseados de formas diferentes, e um depende do outro para coexistirem.

## 3. Estruturas de Dados

### 3.1. DataFrames

Sendo uma estrutura tabulada, o `DataFrame` armazena os dados de forma parecida com o Excel ou CSV, atribuindo à uma matriz de duas dimensões linhas e colunas, que quando em conjunto, apontam para uma única célula de informação.

|           | Coluna | Coluna | Coluna | Coluna |
|-----------|--------|--------|--------|--------|
| **Linha** | Célula | Célula | Célula | Célula |
| **Linha** | Célula | Célula | Célula | Célula |
| **Linha** | Célula | Célula | Célula | Célula |

Sua criação pode ser realizada através de listas, dicionários, arrays do Numpy, ou outro DataFrame. Para a leitura de arquivos, o Pandas possui funções auxiliares que possuem o nome seguindo o formato `read_T()`, sendo `T` o tipo do arquivo, como por exemplo csv (`read_csv()`); html (`read_html()`); excel (`read_excel()`); etc.

Utilizarei abaixo dois exemplos que aprendi durante meus estudos, um dataset sobre carros: (1) escrito manualmente como lista; (2) lido de um arquivo CSV:

```python
import pandas as pd

# Definição dos dados
dados = [
    {'Nome': 'Jetta Variant', 'Motor': 'Motor 4.0 Turbo', 'Ano': 2003, 'Quilometragem': 44410.0, 'Zero_km': False, 'Valor': 88078.64},
    {'Nome': 'Passat', 'Motor': 'Motor Diesel', 'Ano': 1991, 'Quilometragem': 5712.0, 'Zero_km': False, 'Valor': 106161.94},
    {'Nome': 'Crossfox', 'Motor': 'Motor Diesel V8', 'Ano': 1990, 'Quilometragem': 37123.0, 'Zero_km': False, 'Valor': 72832.16}
]

dataframe = pd.DataFrame(dados)
dataframe
```

![table-data](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/85ztsq2kj9mft1uhy4mv.png)

```python
import pandas as pd

# Leitura do arquivo CSV
carros = pd.read_csv('db.csv', sep=';', index_col='Nome')
carros
```

![table-data](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xwh7xlurw8e1xjdlruob.png)

Como é possivel ver, ambos os casos trazem as mesmas colunas, porém com quantidades diferentes de linhas. Por conter muitas linhas no arquivo, o _display_ da tabela encurta a quantidade para apenas 10, que é o padrão.

### 3.2. Series

As `Series` são sequencias de dados e possuem uma estrutura similar a uma lista no Python. Elas podem ser criadas a partir de uma lista, um dicionário, ou array do Numpy.

```python
carros = ['Jetta Variant', 'Passat', 'Crossfox']
pd.Series(carros)
```
| Índice        | Valor         |
|---------------|---------------|
| 0             | Jetta Variant |
| 1             | Passat        |
| 2             | Crossfox      |
| dtype: object |               |

## 4. Querying

Uma das ferramentas poderosas de um `DataFrame` é sua habilidade de executar _queries_ (pesquisas) em cima dos dados. O retorno de uma query pode tanto ser uma cópia do `DataFrame` que possui apenas os valores requeridos, ou uma `Series` de índice ou booleana.

As queries podem ser realizadas tanto dentro de colchetes (`[]`) após o nome do `DataFrame`, quando usando o método `query()`.

```python
# Usando colchetes
dataframe[dataframe.ColumnName == "VALOR"]
dataframe[dataframe['ColumnName'] == "Valor"]

# Usando query()
dataframe.query('ColumnName == "Valor"')
```

A razão de utilizar uma ou outra é meramente sintática, isto pois o _query_ por colchetes possui uma estrutura não muito convencional no Python e pode ser considerada complicada. Já o `query()` utiliza a sintáxe própria do Python para realizar as buscas, então é uma alternativa mais amigável:

```python
df[(df.IsActive == True) & (df.Name.str.startswith("Nicholas"))]

df.query('IsActive == True and Name.str.startswith("Nicholas")')
```

## 5. Conclusão

O Pandas é uma biblioteca muito poderosa e que abrange diversas ferramentas úteis para manipulação de dados. Sua integração direta com o Numpy permite aos cientistas de dados realizarem suas operações muito mais facilmente.

Como podem ver, estou ainda no começo e pretendo continuar estudando mais sobre essa área para agregar aos meus projetos. Dados são importantes hoje em dia, e é util aprender a manusea-los quando necessário.