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

Slides:



Advertisements
Apresentações semelhantes
«Forte do Bom Sucesso (Lisboa) – Lápides 1, 2, 3» «nomes gravados, 21 de Agosto de 2008» «Ultramar.TerraWeb»
Advertisements

Continuidade: sem interrupções
Programação em Java Prof. Maurício Braga
Programação de Computadores
UNIVERSIDADE FEDERAL DE UBERLÂNDIA ENGENHARIA CIVIL INTRODUÇÃO À ALGORITMOS Professora: Fabíola Gonçalves.
Redes de computadores II
TÉCNICAS DE PROGRAMAÇÃO I
Marco Antonio Montebello Júnior
1 Exercício prático 7 Private Sub cmdExecutar_Click() If optLer Then frmLer.Show Else frmEscrever.Show End If End Sub Private Sub cmdSair_Click() End End.
SISTEMAS DE INFORMAÇÃO Sistemas de Bancos de Dados 2º Semestre – 2010 Pedro Antonio Galvão Junior Fone: 9531 – 7555.
2 de Junho de 2005Conclusão1 Pedro Barahona DI/FCT/UNL Junho 2005.
1 Conclusão DI/FCT/UNL 1º Semestre 2004/ Ciclos de Simulação A técnica usada no exemplo da queda livre pode ser utilizada para trajectórias a duas.
Tipos de igualdade X = Y é verdadeiro se X é igual a Y. X is E é verdadeiro se X é a avaliação da expressão E. E1 =:= E2 é verdadeiro se a avaliação da.
Introdução à Linguagem Prolog
Algoritmos para Seleção Simples
Algoritmos para Operações de Conjuntos AULA 19 Profa. Sandra de Amo GBC053 – BCC
Mineração de Preferências (a partir de amostras superiores e inferiores) J.Pei et al. KDD 2008 AULA 18 Data Mining Profa. Sandra de Amo.
Algoritmos para Projeção e Operações de Conjuntos AULA 22 Profa. Sandra de Amo GBC053 – BCC
Adaptado de material da profa. Maria Aparecida Livi
Prolog: Predicados Built-in 2
LIFE: predicados, funções e sorts built-in Jacques Robin Paulo Oliva Leonardo Lemos DI-UFPE.
Consultas ad-hoc de estatísticas disponíveis na Web Idevan Gonçalves Freire Junior
LINGUAGEM C.
PROGRAMAÇÃO MODULAR (com uso de subprogramas)
FLI – ModelSim Pedro Velho.
THOBER CORADI DETOFENO, MSC. Aula 07
Decomposição em fatores primos
Pesquisa operacional Ferramentas disponíveis para utilização Lindo
Linguagem PHP Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Área de Desenvolvimento de Sistemas
YACC.
Felipe Dias Maria Fernanda
Geórgia Maria e Maria das Graças
7 Abstração Genérica Unidades genéricas e instanciação.
Pesquisa operacional Ferramentas disponíveis para utilização Lindo
Universidade Federal de Itajubá
Linguagem C Strings.
Introdução a Programação JAVA
O Portal do Estudante de Computação
Capítulo 10 Strings & File I/O. Strings Strings são um conjunto de Caracteres ASCII. No Controle de Instrumentação pode-se converter valores numéricos.
Progressão Aritmética
Otavio Bergmann e Raphael Miollo Parte 2 – Investigação e apresentação.
PROGRAMAÇÃO ESTRUTURADA II
Linguagem de Programação II Parte VII
SISTEMAS OPERACIONAIS
Funções Universidade Federal de Ouro Preto - UFOP
Arvore de Diretório. Arvore de Diretório Arvore de Diretório.
Entradas e Saídas Comando PRINT Direciona um dado não formatado para a saída padrão (exemplo: tela) PRINT,,,... Comando READ Lê um dado não formatado da.
Monitoria de Sistemas Inteligentes
Flora-2 Aula de Laboratório Arquivo do Exemplo  Baixar os arquivos “safari.flr” de ~apln/aulamci em um diretório acessível pelo unix (subpasta no diretório.
Linguagem Funcional 2 Linguagem Funcional 2 - LF2 Estende LF1 com funções de alta ordem Uma função passa a ser um valor O contexto inclui um único componente:
Computação Eletrônica
Blackbox Ferramenta de Planejamento em IA Jairson Vitorino, 06 de maio de 2005
Monitoria GDI Aula Prática
Procedimentos Pré-definidos em prolog comunicação
Vetor Prof. Guilherme Baião S. Silva Adaptações:
Ceça Moraes – Introdução à Programação SI1
PROGRAMAÇÃO WEB AULA 02 Prof. Gustavo Linhares Instituto Federal de Educação, Ciência e Tecnologia do Norte de Minas Gerais.
“Introdução a Computação” Capítulo II Estruturas de Dados
Análise Léxica Prof. Alexandre Monteiro
Fundamentos da Linguagem C#
Ferramentas de Planejamento em IA Blackbox Planner.
FLORID: Predicados built-in Departamento de Informática UFPE Jeferson Valadares Recife, fevereiro de 1999.
Conceituando o uso de funções em linguagens de programação
Daniel Paulo SQL Módulo I Daniel Paulo
© Copyright 2008 Algoritmos e Estruturas de Dados 1 IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Adriana Libório Fernandes Lins Arthur Cavalcanti.
PROJETO 2: ALUNOS UFRPE Parte 1. Dividindo para conquistar 1. Interação com o usuário 2. Leitura e escrita em arquivos 3. Regra de negócio para executar.
Monitoria GDI Aula Prática Aula 1: SQL + PL 1. Estudo de caso - continuação Pegar arquivo GDI.zip em Descompactar arquivo: o criacaoTabelas.SQL.
José Antônio da Cunha 2/6/2016 José Antônio - CEFET-RN 1 Disciplina: Banco de Dados.
Fundamentos de Programação 1 Slides 18 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Arquivos Seqüências ou de Texto ”. 1.
Transcrição da apresentação:

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 * 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

Normalizaçõ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

Problemas encontrados durante a implementaçã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 t 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

Criação de BDs dos times * Extrair estruturas das home-pages: teamstatsoff:page = " statistics/1998/teamstatoff.html". teamstatsdef:page = " statistics/1998/teamstatdef.html". * Modelar a Web page::url. X.get[] :- X:page.

Criação de BDs dos times * Criando os objetos (times) atl:time[nome->"Atlanta"]. bos:time[nome->"Boston"].... was:time[nome->"Washington"]. * Buscando as tabelas T:tb :- match(teamstatsoff.get,".\(.*\n\)* ","",_tmp), match(_tmp,"\(.*[0-9][0-9].*\)","",T). * Exemplo Team G Fgm-Fga PCT 3pm-3pa PCT Ftm-Fta PCT AVG LA Lakers Minnesota

Criação de BDs dos times Carregando a base de dados Time: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

Demo 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"

Criação de BDs dos jogadores * Criando os objetos (times) atl:time[nome->"Atlanta"]. bos:time[nome->"Boston"].... was:time[nome->"Washington"]. * Buscando as home-pages: atl[webpage -> " teamstats/atl.html". atl.webpage:url.

Criação de BDs dos jogadores * Buscando as tabelas T:tb :- match(atl.webpage.get,"<td align =\"left\">\n \(.*\n\)* ","", 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: Rebounds G Min PPG RPG APG Off- Def- Tot AST Stl BLK To PF Shaquille Oneal Eddie Jones Kobe Bryant

Criação de BDs dos jogadores Carregando a base de dados Time[jogador ->> {X}; -> 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).

Demo ao vivo Answer to query : ?- -> NOME; -> FGM; -> FGA; -> FTM; -> FTA; -> PTS].... Time/van X/"Reeves " PTS/"1209" FTA/"316" FTM/"223" FGA/"942" FGM/"493" NOME/"Reeves "...

Leitura 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).

Transformando o arquivo de entrada num 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

Có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 ).

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_line

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)

dynamic(timex)? toTendex :- T = time, T, T =time(fga=>FGA, reb=>REB, 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 times

import("lists")? sort(L,F) -> gen_quicksort (L, order => -> 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 times

>teams? Lista em ordem decrescente: team(nome => Utah,tendex => 1618) team(nome => Phoenix,tendex => ) team(nome => LA Lakers,tendex => ) team(nome => San Antonio,tendex => ) team(nome => Chicago,tendex => ) team(nome => Minnesota,tendex => ) team(nome => Seattle,tendex => ) team(nome => Indiana,tendex => 1240) Execução