23
4/5 de Maio de 2 004 Entradas, Saídas e Anál ise de Dados 1 Entradas, Saídas e Análise de Dados Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

Embed Size (px)

Citation preview

Page 1: 4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004 Entradas, Saídas e Análise de Dados

1

Entradas, Saídas e Análise de Dados

Pedro BarahonaDI/FCT/UNL

Maio 2004

Page 2: 4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004 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: 4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004 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: 4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004 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: 4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004 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: 4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004 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 = Σ ei2

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

Page 7: 4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004 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: 4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004 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) n

b =

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 xi2 – b xi ) = 0

Page 9: 4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004 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) n

b =

Σ (xi yi – m xi2 – b xi ) = 0 permite-nos 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: 4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004 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) n

b =

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: 4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004 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: 4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004 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: 4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004 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: 4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004 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: 4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004 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: 4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004 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: 4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004 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: 4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004 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: 4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004 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: 4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004 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: 4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004 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: 4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004 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: 4/5 de Maio de 2004Entradas, Saídas e Análise de Dados1 Pedro Barahona DI/FCT/UNL Maio 2004

4/5 de Maio de 2004 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 “^”).

.