análise das estatísticas dos times e jogadores em life

20
Análise das estatísticas dos Análise das estatísticas dos times e jogadores em Life times e jogadores em Life Jeferson Valadares Idevan Gonçalves Freire Júnior Reginaldo Valadares

Upload: phelan-owen

Post on 30-Dec-2015

20 views

Category:

Documents


3 download

DESCRIPTION

Análise das estatísticas dos times e jogadores em Life. Jeferson Valadares Idevan Gonçalves Freire Júnior Reginaldo Valadares. Objetivos - Motivação. Extrair estatísticas a partir de páginas na Web Carrega-las como fatos em um BDD Completa-las com estatísticas derivadas - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Análise das estatísticas dos times e jogadores em Life

Análise das estatísticas dos times e Análise das estatísticas dos times e jogadores em Lifejogadores em Life

Jeferson ValadaresIdevan Gonçalves Freire JúniorReginaldo Valadares

Page 2: Análise das estatísticas dos times e jogadores em Life

Objetivos - MotivaçãoObjetivos - Motivação

Extrair estatísticas a partir de páginas na Web Carrega-las como fatos em um BDD Completa-las com estatísticas derivadas Pre-processamento para mineração Estudo de caso:

• derivar a partir das estatísticas elementares padrões de basquete (ex, pts, reb, ast etc.)

• estatísticas compostas medindo o desempenho global dos jogadores e dos times

• Tendex básico = (pts + reb + ast + stl + blk - (FGA-FGM) - (FTA-FTM) -TO)) / game_num

• Tendex normalizados por vários fatores

Page 3: Análise das estatísticas dos times e jogadores em Life

Normalizações de TendexNormalizações de Tendex

Tendex básico de time Tendex de jogador normalizado por ritmo de

jogo Tendex de jogador normalizado por ritmo de

jogo e minutos jogados

Page 4: Análise das estatísticas dos times e jogadores em Life

Problemas encontrados durante a Problemas encontrados durante a implementaçãoimplementação

Florid é uma ferramenta limitada:• Falta conversão de strings para inteiros• Falta cálculo com números reais• Falta regras genéricas para decompor strings em

substrings predicado built-in substring pode ser chamado apenas

com 2 variáveis instanciadas

• Expressões regulares para fazer parsing não permitem analisar padrões sensíveis ao contexto

Solução: pipeline de FLORID com LIFE

Page 5: Análise das estatísticas dos times e jogadores em Life

Criação de BD’s dos timesCriação de BD’s dos times

Extrair estruturas das home-pages:teamstatsoff:page =

"http://www.di.ufpe.br/~streak/espn.sportszone.com/nba/

statistics/1998/teamstatoff.html".

teamstatsdef:page =

"http://www.di.ufpe.br/~streak/espn.sportszone.com/nba/

statistics/1998/teamstatdef.html".

Modelar a Webpage::url.

X.get[] :- X:page.

Page 6: Análise das estatísticas dos times e jogadores em Life

Criação de BD’s dos timesCriação de BD’s dos times

Criando os objetos (times)atl:time[nome->"Atlanta"].

bos:time[nome->"Boston"].

...

was:time[nome->"Washington"].

Buscando as tabelasT:tb :-

match(teamstatsoff.get,"<pre>.\(.*\n\)*</pre>","",_tmp),

match(_tmp,"\(.*[0-9][0-9].*\)","",T).

Exemplo

<pre><b>Team G Fgm-Fga PCT 3pm-3pa PCT Ftm-Fta PCT AVG</b>

LA Lakers 82 3146-6536 .481 497-1418 .350 1863-2741 .680 105.5Minnesota 82 3157-6844 .461 303-873 .347 1673-2263 .739 101.1

Page 7: Análise das estatísticas dos times e jogadores em Life

Criação de BD’s dos timesCriação de BD’s dos times

Carregando a base de dadosTime:time[ast->T] :- _tmp:tb,

strcat("\(.*", Time.nome, Strtmp),

strcat(Strtmp, "\)[ ]*[0-9]*-[0-9]*[ ]*\([0-9]*\)[ ]*\([0-9]*\)[ ]*\([0-9]*\)[ ]*\([0-9]*\)[ ]*\([0-9]*\)\(.*\)", Str),match(_tmp, Str, "\3", T).

Analogamente para pts,reb, blk, fga, fgm, fta, ftm, fto

Page 8: Análise das estatísticas dos times e jogadores em Life

Demo ao vivoDemo ao vivo

Answer to query :

?- TIME:time[nome -> NOME; fgm -> FGM; fga -> FGA; ftm -> FTM; fta -> FTA; pts -> PTS].

TIME/atl PTS/"95.8" FTA/"2312" FTM/"1749"

FGA/"6352" FGM/"2887" NOME/"Atlanta"

TIME/bos PTS/"95.9" FTA/"1964" FTM/"1425"

FGA/"6924" FGM/"3012" NOME/"Boston”

...

TIME/was PTS/"97.2" FTA/"2156" FTM/"1489"

FGA/"6811" FGM/"3080" NOME/"Washington"

Page 9: Análise das estatísticas dos times e jogadores em Life

Criação de BD’s dos jogadoresCriação de BD’s dos jogadores

Criando os objetos (times)atl:time[nome->"Atlanta"].

bos:time[nome->"Boston"].

...

was:time[nome->"Washington"].

Buscando as home-pages:atl[webpage ->

"http://www.di.ufpe.br/~streak/espn.sportszone.com/nba/

teamstats/atl.html".

atl.webpage:url.

Page 10: Análise das estatísticas dos times e jogadores em Life

Criação de BD’s dos jogadoresCriação de BD’s dos jogadores Buscando as tabelasT:tb :- match(atl.webpage.get,"<td align

=\"left\">\n<pre>\(.*\n\)*</pre>","", T).

U:tb2:- match(T:tb, "\(.*\n\)*", "", U).

V:tb3 :- match(U:tb2,"\([A-Z][a-z]* [a-zA-Z]*\)

*\([0-9]*\)[---]\([0-9]*\)\(.*\)","",V).

V:tb4 :- match(U:tb2,"\([A-Z][a-z']* [a-zA-Z']*\)

*\([0-9][0-9]?\) *.*","",V).

Exemplo:<pre><b> Rebounds G Min PPG RPG APG Off- Def- Tot AST Stl BLK To

PF</b></pre></font><br><img src="/img/blueline.gif" width="465" height="1" vspace=0><br clear=all>

</td></tr><tr><td align="left"><pre>Shaquille Oneal 60 2175 28.3 11.4 2.4 208- 473- 681 142 39 144

175 193Eddie Jones 80 2910 16.9 3.8 3.1 85- 217- 302 246 160 55 146 164Kobe Bryant 79 2056 15.4 3.1 2.5 79- 163- 242 199 74 39 157 180

Page 11: Análise das estatísticas dos times e jogadores em Life

Criação de BD’s dos jogadoresCriação de BD’s dos jogadores

Carregando a base de dadosTime[jogador ->> {X}; jogador@(X,gp) -> Y] :-

_T1:tb3, _T2:tb4, Time:time,

match(_T1:tb3,"\([A-Z][a-z]* [a-zA-Z]*\) *\([0-9][0-

9]*\).\([0-9][0-9]*\)","\1",X),

match(X,"\([A-Z][a-zA-Z]*\) *\([a-zA-Z]*\)","\1”,X1),

strcat(X1,".*",X3),

match(X,"\([A-Z][a-zA-Z]*\) *\([a-zA-Z]*\)","\2",X2),

strcat(X2," .*",X4), strcat(X3,X4,X5),

match(_T2,X5,"",Y1),

match(Y1,"[a-zA-Z'] [a-zA-Z]* *\([0-9][0-9]*\) *\([0-

9][0-9]*\) *\([0-9][0-9]*.[0-9]\) *\([0-9][0-9]*.[0-

9]\) *\([0-9][0-9]*.[0-9]\)","\1",Y).

Page 12: Análise das estatísticas dos times e jogadores em Life

Demo ao vivoDemo ao vivo

Answer to query : ?- Time[jogador@(X,nome) ->

NOME; jogador@(X,fgm) -> FGM; jogador@(X,fga) ->

FGA; jogador@(X,ftm) -> FTM; jogador@(X,fta) ->

FTA; jogador@(X,pts) -> PTS].

...

Time/van X/"Reeves " PTS/"1209" FTA/"316"

FTM/"223" FGA/"942" FGM/"493" NOME/"Reeves "

...

Page 13: Análise das estatísticas dos times e jogadores em Life

Leitura de arquivos em LifeLeitura de arquivos em Life

Arquivo de entrada (nba1) no formato:atl:time[nome -> "Atlanta"; fgm -> "2887"; fga -> "6352"; ftm ->

"1749”].bos:time[nome -> "Boston"; fgm -> "3012"; fga -> "6924"; ftm ->

"1425”].

Primeiro passo do programa: (troca de caracteres)

clear1 :-X=system("cat nba1 | tr \\- \\= | tr '\[' '\(' | tr '\]' '\)' | tr '\;' '\,' > nba1x").

Arquivo resultado (nba1x):atl:time(nome => "Atlanta", fgm => "2887", fga => "6352", ftm

=> "1749”).bos:time(nome => "Boston", fgm => "3012", fga => "6924", ftm

=> "1425”).

Page 14: Análise das estatísticas dos times e jogadores em Life

Transformando o arquivo de entrada Transformando o arquivo de entrada num conjunto de declaraçõesnum conjunto de declarações

Ler o arquivo resultado linha por linha Filtrar os elementos indesejados da linha Escrever linha no arquivo nba1y Dados de entrada já podem ser lidos (load) e

entendidos pelo Life Calcular Tendex de cada time Mostrar a lista em ordem decrescente

Page 15: Análise das estatísticas dos times e jogadores em Life

Código - proc_fileCódigo - proc_file

proc_file :- open_in(nba1x, In), open_out(nba1y, Out), repeat, get_line(Line), ( Line = end_of_file, close(In), close(Out), ! ; (( substr(Line,4,1)=":", Line1 <- filter(Line), write(substr(Line1,5,strlen(Line1)-4)),nl)), fail ).

Page 16: Análise das estatísticas dos times e jogadores em Life

get_line(Line) :- get(Char),get_rest(Char,"", Line).

get_rest(Char,Line,R):- ( Char = end_of_file, nl, R <- Char, ! ; Char = 10, R=Line, ! ; Line1 = strcon(Line,chr(Char)), get(Char1), get_rest(Char1,Line1,R)).

Código - get_lineCódigo - get_line

Page 17: Análise das estatísticas dos times e jogadores em Life

filter("") -> "".filter(S) -> R | H = hds(S), T = tls(S), H1 = hds(T), (( digit(H1), asc(H ) = 34, R=filter(T), ! ; digit(H) , asc(H1) = 34,

R=strcon(H,filter(tls(T))), ! ; R=strcon(H,filter(T)), ! )).Resultado da aplicação de filter(S):atl:time(nome => "Atlanta", fgm => "2887", fga => "6352", ftm =>

"1749”).time(nome => "Atlanta", fgm => 2887, fga => 6352, ftm => 1749).

Código - filter(S)Código - filter(S)

Page 18: Análise das estatísticas dos times e jogadores em Life

dynamic(timex)?

toTendex :-T = time, T , T =time(fga=>FGA, reb=>REB, nome=>N),FGA\===@,

REB:==@,T1=time,T1,T1=time(fga=>FGA1,reb=>REB1,nome=>N),REB1\

===@,FGA1:==@,TENDEX = T.pts+T1.reb+T1.ast+T1.stl+T1.blk-(T.fga-T.fgm)-(T.fta-

T.ftm)-T1.to, assert(timex(nome=>N, tendex => TENDEX)), fail.toTendex.

Cálculo do Tendex dos timesCálculo do Tendex dos times

Page 19: Análise das estatísticas dos times e jogadores em Life

import("lists")?sort(L,F) -> gen_quicksort (L, order => F).sort_func(@(tendex=>X), @(tendex=>Y)) -> X>Y.bagTendex(B) :- X=timex, B=bagof(X,X).

geraTendex :- bagTendex(X), X4=sort(X,sort_func), write("Lista por ordem decrescente de Tendex"), nl, nl, wl(X4),nl.

wl([]) :- !.

wl([X|Xs]) :- write(X),nl,wl(Xs). .

Ordenação dos timesOrdenação dos times

Page 20: Análise das estatísticas dos times e jogadores em Life

>teams?Lista em ordem decrescente:team(nome => Utah,tendex => 1618)team(nome => Phoenix,tendex => 1554.6)team(nome => LA Lakers,tendex => 1430.5)team(nome => San Antonio,tendex => 1355.5)team(nome => Chicago,tendex => 1345.7)team(nome => Minnesota,tendex => 1312.1)team(nome => Seattle,tendex => 1264.6)team(nome => Indiana,tendex => 1240)

ExecuçãoExecução