23
20 de Abril de 2 006 Entradas, Saídas e Anál ise de Dados 1 Entradas, Saídas e Análise de Dados Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

Embed Size (px)

Citation preview

Page 1: 20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006 Entradas, Saídas e Análise de Dados

1

Entradas, Saídas e Análise de Dados

Pedro BarahonaDI/FCT/UNL

Introdução aos Computadoers e à Programação2º Semestre 2005/2006

Page 2: 20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006 Entradas, Saídas e Análise de Dados

2

Regressão Linear : Um ExemploExemplo• Um dado produto é fabricado numa linha de produção por

lotes. Os lotes são encomendados pelos clientes e têm um número variável de exemplares do produto, de acordo com a ordem do cliente.

• A empresa produtora está interessada em desenvolver um modelo de produção, de forma a poder prever

– Qual o tempo que demora cada lote a ser produzido– Quais os lotes que são produzidos em mais ou menos

tempo que o esperado, de forma a poderem ser analisados os factores que facilitam ou dificultam o fabrico.

• Para fazer esse estudo a empresa detem um histórico da produção de vários lotes no passado.

Page 3: 20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006 Entradas, Saídas e Análise de Dados

3

Regressão Linear : Um Exemplo• O modelo desenvolvido tem em conta que

– Antes de se começar a produzir o produto é necessário gastar um dado tempo (t0: tempo de setup) para preparar um conjunto de recursos (por exemplo, máquinas e instalações).

– Uma vez estabelecida essa preparação o número de peças produzidas é basicamente proporcional ao tempo, demorando um tempo t1 a fabricar cada peça.

• Assim parece apropriado um modelo do tipo, em que o tempo T que necessário para se produzirem P peças é dado por

T = t1 P + t0

• O problema consiste pois em determinar os valores de t0 e t1 a partir dos dados históricos.

Page 4: 20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006 Entradas, Saídas e Análise de Dados

4

Análise de Dados – Regressão Linear• Este problema é apenas um exemplo de aplicação da técnica de

análise de dados, denominada, regressão linear, que na sua forma geral se pode descrever por

• Regressão Linear: Dado um conjunto de dados, xi e yi verificar se eles estão numa relação linear

Y = m X +b• O problema tem dois subproblemas:

– Determinar os valores de m e b mais apropriados aos valores dos vários pares de valores xi – yi.

– Avaliar se é razoável assumir a relação linear acima, ou seja, se os pares de valores <xi,yi> a “suportam” (ou ainda, se existe uma boa correlação linear entre X e Y).

Page 5: 20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006 Entradas, Saídas e Análise de Dados

5

Análise de Dados – Regressão Linear• Podemos ilustrar esta técnica com dois exemplos gráficos

x

y y

x

X e Y têm uma forte correlação linear

X e Y têm uma fraca correlação linear

Os valores de m (inclinação da recta) e de b (intersecção da recta com o eixo Y) são idênticos nos dois casos

Page 6: 20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006 Entradas, Saídas e Análise de Dados

6

Determinação de m e de b• O tratamento matemático para a determinação dos valores de

m e b é relativamente simples e consiste em determinar os valores de m e b que minimizem o erro entre os resultados esperados e os resultados experimentais.

• Para cada ponto xi-yi o erro “experimental” é dado por

ei = yi – (m xi + b)

O erro E que se pretende minimizar é o erro quadrático médio, E = Σ ei

2

• Assim sendo o problema reduz-se a determinar os valores de m e b que minimizam o erro E.

Page 7: 20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006 Entradas, Saídas e Análise de Dados

7

Determinação de m e de b• O mínimo de uma função em relação a uma variável ocorre

quando a derivada dessa função em ordem a essa variável é nula. Assim sendo há que obter os zeros da derivada de E em relação a m e a b.

– Nota 1: Assume-se uma função contínua e continuamente derivável, caso contrário o mínimo pode não ocorrer no zero da derivada.

– Nota 2: A função E tem duas variáveis, m e b. A análise em Rn justifica que o mínimo deve corresponder ao zero das duas derivadas.

– Nota 3: Como o mínimo de E = F coincide com o mínimo de E2 = F, pode minimizar-se F = E2 = Σei

• Os valores de m e b que minimizam o erro são assim determinados como aqueles que verificam

= 0 e = 0 F m

F b

Page 8: 20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006 Entradas, Saídas e Análise de Dados

8

Determinação de m e de b• Ora = 0

F b

Σ (yi – m xi – b)2

b= 0

Σ – 2 (yi – m xi – b) = 0Σ (yi – m xi – b) = 0Σ (yi – m xi) – n b= 0 Σ (yi – m xi) nb =

F m

• Por outro lado, = 0 Σ (yi – m xi – b)2

m= 0

Σ – 2 xi (yi – m xi – b) = 0Σ xi (yi – m xi – b) = 0Σ (xi yi – m xi

2 – b xi ) = 0

Page 9: 20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006 Entradas, Saídas e Análise de Dados

9

Determinação de m e de b• Usando agora o valor de na fórmula

Σ (yi – m xi) nb =

Σ (xi yi – m xi2 – b xi ) = 0 podemos obter o valor de m:

Σ (xi yi – m xi2 – 1/n xi Σ (yi – m xi)) = 0

Σ (n xi yi – n m xi2 ) – Σ xi Σ (yi – m xi) = 0

n Σ xi yi – m n Σ xi2 – Σ xi Σ yi + m Σ xi Σ xi = 0

m [n Σ xi2 – (Σ xi)2] = n Σ xi yi – Σ xi Σ yi

n Σ xi yi – Σ xi Σ yi

n Σ xi2 – (Σ xi)2

... obtendo-se assim m =

Page 10: 20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006 Entradas, Saídas e Análise de Dados

10

Determinação de m e de b• Assim, dados vectores X e Y, com n valores de xi e yi os

valores de m e de b podem ser obtidos através das fórmulas

n Σ xi yi – Σ xi Σ yi

n Σ xi2 – (Σ xi)2

m = Σ (yi – m xi) nb =

Sx = sum(X); Sy = sum(Y);

Sxx = sum(X.*X); Sxy = sum(X.*Y);

m = (n * Sxy – Sx*Sy) / (n*Sxx – Sx^2)

b = (Sy – m * Sx) / n

• Em Octave, estas fórmulas podem calcular-se através do seguinte conjunto de equações

Page 11: 20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006 Entradas, Saídas e Análise de Dados

11

Correlação entre X e Y• Para medir a qualidade da relação linear entre X e Y pode

usar-se o coeficiente de correlação r.

• Este coeficiente (cuja derivação exige um maior conhecimento de estatística) varia entre 1 (correlação perfeita) e 0 (correlação nula).

• O seu valor em OCTAVE pode ser obtido através das equações anteriores e ainda de

Syy = sum(Y.*Y);

r = (n * Sxy – Sx*Sy) / sqrt ((n*Sxx – Sx^2)* (n*Syy – Sy^2)

r = n Σ xi yi – Σ xi Σ yi

[n Σ xi2 – (Σ xi)2] [n Σ yi

2 – (Σ yi)2]

Page 12: 20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006 Entradas, Saídas e Análise de Dados

12

Armazenamento de Dados• Quando a quantidade de dados é grande, não é razoável ou

mesmo possível introduzi-los “manualmente” num programa.

• Tipicamente esses dados são armazenados em ficheiros que têm de ser lidos pelos programas que os tratam.

• As funções básicas de manutenção de ficheiros (criação, alteração e destruição, localização, acesso ao seu conteúdo, etc.) são definidas no sistema de ficheiros (file system) , componente do sistema operativo (Operating System - Windows, Linux, MacOS, ...).

• Todas as linguagens de programação têm acesso a essas funções básicas (primitivas), implementadas através de chamadas ao sistema, mas que são disponibilizadas ao nível da linguagem através de instruções próprias.

Page 13: 20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006 Entradas, Saídas e Análise de Dados

13

Armazenamento de Dados• Existe uma grande variedade de formas nessas instruções mas

algumas características são razoavelmente gerais:– Antes de se escrever ou ler num ficheiro, este tem de ser aberto num

modo apropriado (leitura, escrita, leitura/escrita,...).– Na abertura de um ficheiro, este é associado a um “canal” com um

identificador (tipicamente um número) único. Todos os acessos ao ficheiro referem esse valor e não o nome com que o ficheiro é conhecido no sistema de ficheiros.

– Os acessos de leitura e escrita de dados dos ficheiros dependem da forma como os dados são codificados. Estes podem ser armazenados como texto ou numa forma codificada que optimiza o espaço.

– Após todos os acessos pretendidos terem sido executados, um ficheiro devem ser fechado.

• Como estas operações podem ser muito variadas, vamos centrar-nos nos acessos a ficheiros texto em OCTAVE.

Page 14: 20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006 Entradas, Saídas e Análise de Dados

14

Entrada de Dados• Após a abertura de um ficheiro texto, ele pode ser lido de

duas formas básicas:– Leitura caracter a caracter, sendo tarefa do programador interpretar

as sequências de caracteres como números, palavras, etc...– Leitura de acordo com determinados padrões (templates) em que

existem primitivas da linguagem que interpretam directamente os caracteres para o tipo de dados pretendido.

• Por exemplo, assumamos que um ficheiro tem a sequência de caracteres “ 23 45.2 ”. Neste caso podemos

– ler os 11 caracteres e tendo em atenção os espaços interpretar esses caracteres como dois números (um inteiro e outro decimal).

– Indicar como padrão de leitura um inteiro seguido de um decimal que são retornados em variáveis indicadas.

Page 15: 20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006 Entradas, Saídas e Análise de Dados

15

Saída de Dados• O armazenamento de dados num ficheiro segue passos

semelhantes. A abertura de um ficheiro em modo escrita, cria um ficheiro, que pode ser escrito de duas formas básicas:

– Escrita caracter a caracter, sendo tarefa do programador criar as sequências adequadas de caracteres para representar números, palavras, etc...

– Escrita de acordo com determinados padrões (templates) disponibilizados por primitivas da linguagem.

• Por exemplo, para se escreverem os dados 23 e 45.2 num ficheiro ( “ 23 45.2 ”), pode-se

– escrever os 11 caracteres sequencialmente, isto é, ‘ ’,‘ ’,‘2’,’3’,‘ ’,‘ ’,‘4’,‘5’,‘.’,’2’,‘ ’

– indicar como padrão de escrita um inteiro (com 4 dígitos, seguido de um espaço, seguido de um decimal com 5 casas, incluindo uma casa decimal, seguido de um espaço.

Page 16: 20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006 Entradas, Saídas e Análise de Dados

16

Exemplo de Regressão Linear188 606.3940 161.35145 396.18

.........

61 196.93139 357.33

• Assumamos pois um ficheiro em duas colunas, em que

– A primeira coluna representa o número de peças de cada lote (Pi)

– A segunda coluna, o número de horas necessárias para produzir esse lote (Ti)

•Estabelecer uma relação linear T = t1 P + t0 ; e• Escrever um ficheiro em 3 colunas em

que:– As duas primeiras colunas são como antes– A 3ª coluna, representa a diferença entre o

tempo estimado e o tempo gasto efectivamente .

188 606.39 19.51 40 161.35 19.55 145 396.18 -61.39

.............

61 196.93 -8.03 139 357.33 -82.19

Objectivos:

Page 17: 20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006 Entradas, Saídas e Análise de Dados

17

Entrada de Dados

[fid,msg] = fopen("linear.txt", "r");i = 0; X = zeros(0,1); Y = zeros(0,1);[xi,yi,count] = fscanf(fid,"%i%f",”C”);while !feof(fid) i = i + 1; X(i) = L(1); Y(i) = L(2); [xi,yi,count] = fscanf(fid,"%i%f",”C”);endwhile;n=i;fclose(fid);

188 606.3940 161.35145 396.18...113 445.6988 248.63

• A instrução fopen abre o ficheiro com o nome “linear.txt”, em modo de leitura (“r” - read), e atribui-lhe um ´número de canal ‘fid’, usado posteriormente.

• A instrução fclose fecha o canal com número ‘fid.

Page 18: 20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006 Entradas, Saídas e Análise de Dados

18

Entrada de Dados

[xi,yi,count] = fscanf(fid,"%i%f",”C”);xi = 188yi = 606.39count = 2

188 606.3940 161.35145 396.18...113 445.6988 248.63

• A instrução [xi,yi,count] = fscanf(fid,"%i%f",”C”) permite ler dados

– do canal de entrada (1º argumento - fid)– de acordo com um padrão (template - ,"%i%f") – como na linguagem C (3º argumento – “C”)– os dados efectivamente lidos são colocados nas variáveis xi e yi – o seu número é colocado na variável count.

• Neste caso, são lidos 2 números do canal de entrada. O primeiro é um inteiro ("%i") e o segundo é decimal ("%f").

Page 19: 20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006 Entradas, Saídas e Análise de Dados

19

Entrada de Dados

[xi,yi,count] = fscanf(fid,"%i%f",”C”) F = feof(fid). count = 2, xi = 88, yi = 248.63, F = 0

[xi,yi,count] = fscanf(fid,"%i%f",2) F = feof(fid). count = 0, xi = [], yi = [], F = 1

188 606.3940 161.35145 396.18...113 445.6988 248.63

• Quando não há mais dados para ler, a instrução [xi,yi,count] = fscanf(fid,"%i%f",”C”)

retorna xi e Yi vazios (xi = yi = []) e count = 0. • Normalmente existe uma função “end of file” para indicar se

a última leitura já foi feita após o fim do ficheiro. Em Octave essa função é expressa por feof(fid).

Page 20: 20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006 Entradas, Saídas e Análise de Dados

20

Entrada de Dados

i = 0; X = zeros(0,1); Y = zeros(0,1);[xi,yi,count] = fscanf(fid,"%i%f",”C”);while !feof(fid) i = i + 1; X(i) = xi; Y(i) = yi; [xi,yi,count] = fscanf(fid,"%i%f",”C”);endwhile;n = i;

• A instrução fscanf pode pois ser usada no ciclo abaixo, que instancia os vectores X e Y.

• Notas:1. A chamada de fscanf é feita antes do ciclo. 2. A condição de entrada no ciclo é !feof3. A variável n guarda o número de pontos X e Y lidos.

Page 21: 20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006 Entradas, Saídas e Análise de Dados

21

Tratamento dos Dados

sx = sum(X); sy = sum(Y);sxy = sum(X.*Y);sxx = sum(X.*X); syy = sum(Y.*Y);

m = (n*sxy-sx*sy)/(n*sxx-sx^2);b = (sy-m*sx)/n;r = (n*sxy-sx*sy)/sqrt((n*sxx-sx^2)*(n*syy-sy^2));

E = zeros(1,n);for i = 1:n E(i) = Y(i) - (m * X(i) + b);endfor;

• Uma vez obtidos os vectores X e Y com n pontos, os parâmetros m, b e r da regressão linear podem ser recalculados, bem como os erros (valores observados e os valores esperados).

.

Page 22: 20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006 Entradas, Saídas e Análise de Dados

22

Saída dos Dados

[fid,msg] = fopen("linear_out.txt", "w");

for i = 1:n fprintf(fid,"%5i %7.2f %7.2f\n", X(i),Y(i),E(i));endfor;

fclose(fid);

• As instruções fopen e fclose são semelhantes, mas com modo de escrita (“w” - write).

• A instrução fprintf escreve no canal de saída com identificador fid os 3 valores indicados com formatos

– Inteiro com 5 dígitos (1º dado – X(i))– Decimal, com 7 casas, das quais duas decimais (2º/3º dado – Y(i) e E(i))– Separados por espaços (no template) e com mudança de linha (“\n”)

.

Page 23: 20 de Abril de 2006Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Introdução aos Computadoers e à Programação 2º Semestre 2005/2006

20 de Abril de 2006 Entradas, Saídas e Análise de Dados

23

Visualização dos Dados

Ax = [0, max(X)]; Ay = [min(E),max(Y)]; As = [Ax,Ay];Y2 = [m*min(Ax)+b, m*max(Ax)+b];clg; hold on; axis(As);plot(Ax,[0,0],'6');plot(X,Y,'@33');plot(Ax,Y2,'2');plot(X,E,'^1');

• Ax e Ay , e portanto As, definem os limites dos eixos dos X e Y (na realidade P – nº de peças e T – tempo de fabrico).

• Os vários plots destinam-se ao eixo X, os valores X e Y (na forma de pontos – formato “@)”, a recta de regressão (Y2 tem os dois pontos limites) e finalmente os erros (na forma de linhas de impulso – formato “^”).

.