|
1 |
| -# Datagrid |
| 1 | +# **DataGrid** |
2 | 2 |
|
3 |
| -This project aims to implement a Datagrid. |
| 3 | +Este é um módulo que implementa a lógica de negócios de um DataGrid utilizando algoritmos aprendidos na disciplina Projeto e Análise de Algoritmos (FGV EMAp). |
4 | 4 |
|
5 |
| -[This is a coursework for the Design and Algorithms Analysis - FGV EMAp] |
| 5 | +## **Manual de Instruções** |
| 6 | + |
| 7 | +A classe DataGrid foi pensada especificamente para ser utilizada em conjuntos de dados que sigam o seguinte padrão: |
| 8 | + |
| 9 | +Coluna | Tipo do dado | Tipo de busca | Extra |
| 10 | +--- | --- | --- | --- |
| 11 | +id | integer | exato | único |
| 12 | +owner_id | string | exato | Exatamente 5 caracteres alfanuméricos |
| 13 | +creation_date | string | intervalo | Formato: AAAA-MM-DD hh:mm:ss |
| 14 | +count | integer | intervalo | |
| 15 | +name | string | contém | Tamanho máximo de 20 caracteres |
| 16 | +content | string | contém | |
| 17 | + |
| 18 | +Cada registro no DataGrid é considerado um $\texttt{Event}$. |
| 19 | + |
| 20 | +Para inicializar a classe DataGrid, basta importar o módulo e instanciar a classe. Certifique-se de que seu script consegue acessar a pasta na qual se encontra o módulo DataGrid, por exemplo: |
| 21 | + |
| 22 | +```python |
| 23 | +import sys |
| 24 | +sys.path.append('src/') |
| 25 | + |
| 26 | +from datagrid import DataGrid |
| 27 | +``` |
| 28 | + |
| 29 | +Inicialize a classe DataGrid com: |
| 30 | + |
| 31 | +```python |
| 32 | +datagrid = DataGrid() |
| 33 | +``` |
| 34 | + |
| 35 | +A classe DataGrid possui os seguintes métodos: |
| 36 | + |
| 37 | +- `read_csv(file, sep = ',', encoding = 'utf-8')`: popula o datagrid a partir dos dados no arquivo CSV cujo caminho é passado como |
| 38 | +parâmetro, considerando o separador e o encoding definidos; |
| 39 | + |
| 40 | +- `show(start=0, end=100, prints = False, returns = True)`: exibe as entradas do DataGrid, limitando a exibição ao intervalo definido pelos parâmetros. $\texttt{returns=True}$ retorna a lista de objetos da classe $\texttt{Event}$ entre $\texttt{start}$ e $\texttt{end}$, e o $\texttt{prints=True}$ faz o display do conteúdo desses objetos. Apresenta a tabela no seu estado atual de ordenação. |
| 41 | + |
| 42 | +- `insert_row(row)`: insere novos eventos no DataGrid. Recebe um dicionário contendo os dados do evento a ser inserido e cria uma instância de $\texttt{Event}$ a partir desses dados. O dicionário deve ter como chaves os nomes das colunas e como valores os dados a serem inseridos, conforme o padrão descrito na tabela acima. |
| 43 | + |
| 44 | +- `delete_row(column, value)`: remove eventos do DataGrid. Recebe o nome da coluna e o valor a ser buscado nessa coluna. Remove todos os eventos que possuem o valor buscado na coluna especificada. Se `column = 'positions'`, remove elementos de acordo com a posição (índice) na tabela. Nesse caso, `value` pode ser tanto um intervalo identificado por uma tupla `(start, end)` ou um único valor inteiro positivo. |
| 45 | + |
| 46 | +- `search(column, value)`: busca eventos no DataGrid. Recebe o nome da coluna e o valor a ser buscado nessa coluna. Retorna uma lista de objetos da classe $\texttt{Event}$ que possuem o valor buscado na coluna especificada. |
| 47 | + |
| 48 | +- `sort(column, direction = 'asc')`: ordena o DataGrid. Recebe o nome da coluna e a direção da ordenação. Para ordenar em ordem decrescente, basta passar `direction = 'desc'`. |
| 49 | + |
| 50 | +- `select_count(i, j, how = 'median-of-medians')`: retorna a lista de objetos da classe $\texttt{Event}$ entre as posições $i$ e $j$ da tabela considerando a coluna `count` ordenada de forma crescente. A operação não altera a estrutura interna do DataGrid. Também é possível passar o parâmetro `how = 'quickselect'` ou `how = 'heapsort'` para escolher qual algoritmo será utilizado para realizar a operação. |
| 51 | + |
| 52 | +O arquivo [`demo.ipynb`](demo.ipynb) contém um exemplo de uso da classe DataGrid utilizando dados gerados aleatoriamente pelo arquivo [`dataGenerator.py`](dataGenerator.py). Os comentários sobre as operações realizadas no notebook dizem respeito aos resultados utilizando o arquivo [`fake_data_100.csv`](data/fake_data100.csv), com 100 linhas. |
| 53 | + |
| 54 | +## **Geração de dados aleatórios** |
| 55 | + |
| 56 | +Caso deseje gerar dados aleatórios para testar o módulo DataGrid, basta executar o arquivo [`dataGenerator.py`](dataGenerator.py). Lembre-se de alterar o(s) valor(es) da lista `n`, ao final do arquivo, para definir quantos arquivos deseja gerar e quantas linhas cada um deles deve conter. |
0 commit comments