Curso de dBASE II
Uma base de dados grande


Você está em: MarMSX >> Cursos >> dBASE II

Uma base de dados grande

A fim de testar a capacidade do dBASE II para o MSX, iremos utilizar uma base de dados grandes, obtida do repositório de dados da UCI [1]. Trata-se de dados de transações de vendas online de uma loja do reino unido, ocorridas entre 1/12/2010 e 9/12/2011.

Os campos da tabela são os seguintes:

A tabela possui 541909 registros (linhas) e o arquivo 23 MB. O dBASE II possui um limite de 65535 registros. Exite ainda outra limitação para o MSX que é o tamanho do disquete, que é de 720 Kb, onde este ainda deve possuir o MSX-DOS e os arquivos do dBASE.

Esta tabela foi otimizada para análise e data science. Ela foi desnormalizada e possui uma série de replicações, como por exemplo, o nome dos produtos. Para uma venda, é necessário somente o código do produto e não sua descrição.

O primeiro passo é desmembrar a tabela em duas: produto e venda.

A tabela produto irá ter os valores únicos de código com sua respectiva descrição. Os campos são:

A tabela venda terá o campo "Description" removido, o campo "InvoiceDate" desmembrado em dois novos campos: "Date" e "Hour".

Foram removidos desta tabela as vendas canceladas (InvoiceNo começando com "C") e também os valores faltantes e atípicos. Com isso tudo, reduzimos bastante o tamanho da tabela. Entretanto, para caber em um disquete do MSX, selecionamos apenas as vendas do dia 1/12/2010 a 5/12/2010. O arquivo final ficou com 5045 registros e 331 KB.

Os arquivos no formato CSV foram convertidos para DBF através da ferramenta JavaScript dBASE II.

Descrição e local das tabelas

Tabela produto:

. use produto
. display structure
Estrutura para o arquivo :PRODUTO .DBF
Número de registros :03916
Data da última atualização :09/02/24
Uso primário do banco de dados.
Cpo       Nome      Tipo Tam.    Dec.
001     STOCKCODE    C    012          
002     DESCRIPTIO   C    035          
** TOTAL **             00048  

Tabela venda:

. use b:venda
. display structure
Estrutura para o arquivo :VENDA   .DBF
Número de registros :05045
Data da última atualização :09/02/24
Uso primário do banco de dados.
Cpo       Nome      Tipo Tam.    Dec.
001     INVOICENO    C    006          
002     STOCKCODE    C    012          
003     QUANTITY     N    004          
004     UNITPRICE    N    006    002   
005     CUSTOMERID   C    005          
006     COUNTRY      C    015          
007     DATE         C    010          
008     HOUR         C    008          
** TOTAL **             00067

Download:

Tabelas produto e venda: base_vendas.zip

Testes na tabela venda

Por maior que seja a tabela, ela não é carregada toda na memória do MSX. São carregados blocos de registros na memória, conforme a necessidade. O cabeçalho do arquivo DBF contém todas as informações necessárias para se obter um determinado registro diretamente no arquivo. Por isso é que podemos ter um arquivo DBF tão grande para os padrões do MSX.

O teste a seguir irá listar as cinco primeiras linhas da tabela venda e a última linha.

. use venda
. display next 5
00001  536365 85123A           6    2.55 17850 United Kingdom  2010-12-01 08:26:00 
00002  536365 71053            6    3.39 17850 United Kingdom  2010-12-01 08:26:00 
00003  536365 84406B           8    2.75 17850 United Kingdom  2010-12-01 08:26:00 
00004  536365 84029G           6    3.39 17850 United Kingdom  2010-12-01 08:26:00 
00005  536365 84029E           6    3.39 17850 United Kingdom  2010-12-01 08:26:00 
. go bottom
. display
05045  537036 85135C           1    7.95 15545 United Kingdom  2010-12-03 17:28:00 

Agora vamos comparar com a listagem do arquivo CVS correspondente no PC:

      InvoiceNo StockCode  Quantity  UnitPrice  CustomerID         Country        Date      Hour
0        536365    85123A         6       2.55       17850  United Kingdom  2010-12-01  08:26:00
1        536365     71053         6       3.39       17850  United Kingdom  2010-12-01  08:26:00
2        536365    84406B         8       2.75       17850  United Kingdom  2010-12-01  08:26:00
3        536365    84029G         6       3.39       17850  United Kingdom  2010-12-01  08:26:00
4        536365    84029E         6       3.39       17850  United Kingdom  2010-12-01  08:26:00
...         ...       ...       ...        ...         ...             ...         ...       ...
5040     537036     84879         8       1.69       15545  United Kingdom  2010-12-03  17:28:00
5041     537036     22943         1       4.95       15545  United Kingdom  2010-12-03  17:28:00
5042     537036     22837         5       4.65       15545  United Kingdom  2010-12-03  17:28:00
5043     537036    35004C         1       5.45       15545  United Kingdom  2010-12-03  17:28:00
5044     537036    85135C         1       7.95       15545  United Kingdom  2010-12-03  17:28:00

Uma venda é composta de diversos itens que o cliente compra. Cada item pode ter n unidades. Cada venda é identificada com um InvoiceNo único.

Um bom teste é ver se o dBASE II do MSX é capaz de retornar corretamente todos os itens de uma compra.

. display for InvoiceNo="536365"
00001  536365 85123A           6    2.55 17850 United Kingdom  2010-12-01 08:26:00 
00002  536365 71053            6    3.39 17850 United Kingdom  2010-12-01 08:26:00 
00003  536365 84406B           8    2.75 17850 United Kingdom  2010-12-01 08:26:00 
00004  536365 84029G           6    3.39 17850 United Kingdom  2010-12-01 08:26:00 
00005  536365 84029E           6    3.39 17850 United Kingdom  2010-12-01 08:26:00 
00006  536365 22752            2    7.65 17850 United Kingdom  2010-12-01 08:26:00 
00007  536365 21730            6    4.25 17850 United Kingdom  2010-12-01 08:26:00 

O resultado no PC:

   InvoiceNo StockCode  Quantity  UnitPrice  CustomerID         Country        Date      Hour
0     536365    85123A         6       2.55       17850  United Kingdom  2010-12-01  08:26:00
1     536365     71053         6       3.39       17850  United Kingdom  2010-12-01  08:26:00
2     536365    84406B         8       2.75       17850  United Kingdom  2010-12-01  08:26:00
3     536365    84029G         6       3.39       17850  United Kingdom  2010-12-01  08:26:00
4     536365    84029E         6       3.39       17850  United Kingdom  2010-12-01  08:26:00
5     536365     22752         2       7.65       17850  United Kingdom  2010-12-01  08:26:00
6     536365     21730         6       4.25       17850  United Kingdom  2010-12-01  08:26:00

Vamos calcular agora o total de cada item.

. display Quantity * UnitPrice for InvoiceNo="536365"
00001        15.30 
00002        20.34 
00003        22.00 
00004        20.34 
00005        20.34 
00006        15.30 
00007        25.50 

No PC:

0    15.30
1    20.34
2    22.00
3    20.34
4    20.34
5    15.30
6    25.50

Por fim, vamos calcular o total da venda.

. sum Quantity * UnitPrice for InvoiceNo="536365"
139.12

No PC:

139.12

Exercícios

1. Calcular o total de vendas para franceses durante o período avaliado.

. sum Quantity * UnitPrice for Country="France"
1281.24

2. Calcular o total de vendas para cada país

. copy to tabpais field Quantity,UnitPrice,Country
. use tabpais
. copy structure to tabpais2

Edita a nova tabela:

. use tabpais2
. modify structure
          Nome      Tip.Tam. Dec
Campo 01 :QUANTITY   N  004  000
Campo 02 :UNITPRICE  N  006  002
Campo 03 :COUNTRY    C  015  000
Campo 04 :TOTAL      N  010  002
. append from tabpais
. replace all total with Quantity * UnitPrice
. index on Country to idxcou
. total on Country to tabtotal field total
. use tabtotal
. display all
00001      6    8.50 Australia            358.25 
00002     12    2.10 Belgium              346.10 
00003      4    9.95 EIRE                2605.73 
00004     24    3.75 France              1281.24 
00005      6    2.95 Germany              972.36 
00006     12    1.25 Italy                427.80 
00007     96    1.85 Netherlands          192.60 
00008     50    0.42 Norway              1919.14 
00009     32    2.55 Poland               248.16 
00010      6    2.95 Portugal             131.80 
00011     70    1.65 Spain                620.00 
00012     30    2.95 Switzerland          303.40 
00013      6    2.55 United Kingdom    108208.15 

No PC:

Country               Total
Australia            358.25
Belgium              346.10
EIRE                2605.73
France              1281.24
Germany              972.36
Italy                427.80
Netherlands          192.60
Norway              1919.14
Poland               248.16
Portugal             131.80
Spain                620.00
Switzerland          303.40
United Kingdom    108208.15

Conclusão

O dBASE II mostrou-se bastante robusto para o processamento de dados no arquivo testado. Entretanto, cada operação leva bastante tempo para ser completada. Os testes foram feitos em um emulador com velocidade aumentada em 5X.

Para análises mais detalhadas, à vezes são necessários diversos passos, como no exercício 2. Além disso, no exercício foi necessário mover os arquivos temporários para um outro disco, devido ao fato de encher o disco em uso.

Há uma outra opção para análises que é através do modo programado, que será visto em outro curso. No modo programado, podemos calcular média, valor mínimo, valor máximo etc.



Referências:

[1]- Chen,Daqing. (2015). Online Retail. UCI Machine Learning Repository. Em: https://archive.ics.uci.edu/dataset/352/online+retail.



<< Anterior dBASE II Próxima >>