<div dir="ltr"><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">Senhores,<br><br></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">Como alguns apontaram os dados que preciso vem dando um curl no url. Com código python sugerido pelo Alisson de alguma forma identifica a estrutura com que é organizada os dados e já retorna em tabela. Será que não teria uma forma de imitar o que python faz pelo R? Eu suspeito que seja uma estrutura possível de passar um "parsador". Se fosse html ou xml daria para usar um XML::htmlTreeParse(), mas pelo pouco que conheço é outra forma de organização. Atualmente eu tô fazendo assim mas eu gostaria de melhorar o código.<br>
<br><span style="font-family:courier new,monospace">##-----------------------------------------------------------------------------<br><br>## Lê e joga em arquivo testo.<br>system("curl <a href="http://www.whoscored.com/Teams/1232">http://www.whoscored.com/Teams/1232</a> > page.txt")<br>
<br>## Pega só a linha com o conteúdo que interessa e joga em outro<br>## arquivo. Em seguida substitui as aspas por espaço vazio (quando não<br>## necessárias, aspas não são bem vindas).<br>system("grep \"DataStore.prime('stage-player-stat'\" page.txt > line.txt")<br>
system("sed 's/'\\\"'//g' line.txt > Line.txt")<br><br>x <- readLines("Line.txt")<br>str(x)<br><br>## 1 quebra.<br>x <- unlist(strsplit(x, split="\\[\\{"))<br>str(x)<br>
<br>## 2 quebra.<br>y <- unlist(strsplit(x[2], split="\\},\\{"))<br>str(y)<br><br>## Substituição de `,` por `;`.<br>y <- gsub(",(\\S)", ";\\1", y)<br>str(y)<br><br>## Quebra os campos.<br>
z <- strsplit(y, split=";")<br>str(z)<br><br>## Organização.<br>L <- lapply(z,<br> function(w){<br> w <- strsplit(w, ":")<br> i <- sapply(w, length)==2<br>
w <- w[i]<br> x <- do.call(rbind, w)<br> y <- x[,2]<br> y <- gsub("\\W", "", y)<br> names(y) <- x[,1]<br> y<br>
})<br><br>M <- do.call(rbind, L)<br>M <- as.data.frame(M, stringsAsFactors=FALSE)<br>M <- as.data.frame(lapply(M,<br> function(x){<br> y <- as.integer(x)<br>
if(all(<a href="http://is.na">is.na</a>(y))) return(x) else return(y)<br> }), stringsAsFactors=FALSE)<br>str(M)<br><br>##-----------------------------------------------------------------------------<br>
</span><br></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">Eu sei que tem partes não elegantes aí. O tratamento dos dados não é perfeito. Requer muito ajuste fino e é por isso que acredito que deve ter uma forma mais simples. A minha suspeita é se não tem como imitar o que é feito pelo python na sugestão do Alisson.<br>
<br></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">Outro ponto é que essa base de dados tem 57 colunas. Tem muita informação. Tem valores se o jogador deu ou levou foi drible. Se ele levou cartão amarelo uma ou duas vezes e se levou vermelho. Veja um recorde do str().<br>
<br><span style="font-family:courier new,monospace"> $ Yellow : int 0 0 0 1 0 1 0 0 0 0 ...<br> $ SecondYellow : int 0 0 0 0 0 0 0 0 0 0 ...<br> $ Red : int 0 0 0 0 0 0 0 0 0 0 ...<br>
$ AerialWon : int 3 2 5 0 3 0 3 3 1 0 ...<br> $ AerialLost : int 1 0 3 0 2 1 7 1 4 0 ...<br> $ WasDribbled : int 1 2 0 1 1 3 1 1 1 0 ...<br> $ Dribbles : int 0 2 0 0 4 2 0 1 0 0 ...<br>
$ Height : int 172 176 189 172 178 167 185 171 179 191 ...<br> $ Weight : int 67 72 86 71 69 58 75 70 81 86 ...<br></span><br> Quantas disputas de bolas aéreas ganhas ou perdidas. Só nessa dá pra ver se a chance de ganhar uma disputa aérea depende da altura do jogador, um típico binomial. É muito produtivo trabalhar com dados assim em aula, por isso o empenho em obtê-los.<br>
</div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif"><br></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">Grato a todos pela ajuda, fico no aguardo por qualquer novidade.<br>
</div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">Walmes.<br></div></div>