PaulaMorBla14 / TFG-Baloncesto

Métodos estadísticos aplicados al baloncesto
0 stars 1 forks source link

Nombres de los jugadores cambian según temporada #19

Closed PaulaMorBla14 closed 2 years ago

PaulaMorBla14 commented 2 years ago

https://github.com/PaulaMorBla14/TFG-Baloncesto/blob/3a1fe87c4baaaa09e960f04fee07a9af80b0024f/TFG_MetodosEstadisticosBaloncesto.Rnw#L387-L392

Hay nombres de jugadores que cambian (añaden un "JR." o nombres que se corrigen porque estaban mal escritos...

Ejemplos: Acik, Tutku cambia a Açik, Tutku Agravanis, Dimitrios cambia a Agravanis, Dimitris

Entre otros casos.

¿Qué hago?

solmos commented 2 years ago

Me lo temía. Esto puede ser algo complicado de resolver.

Quizás podrías hacer algo con las distancias entre strings. R tiene una función para esto.

x <- c("Jordan, Micheal", "Acik, Tutku", "Rodriguez, Sergio")
y <- c("Jordan, Micheal", "Açik, Tutku", "Agravanis, Dimitris")

dist_matrix <- adist(x, y)
diag(dist_matrix)
[1]  0  1 16

Con esto puedes identificar los nombres que cambian ligeramente (distancia < 3, por ejemplo). Y luego decidir qué hacer con estos, si homogeneizarlos, o eliminar las filas en los que estos aparezcan. Yo supongo que no habrán muchos casos.

Si haces algo con adist(), podrías añadirlo al trabajo hablando del método que utiliza. Mira ?adist para más detalles.

PaulaMorBla14 commented 2 years ago

No entiendo de donde sacar el segundo vector. Ahora mismo tengo un único vector con todos los nombres (algunos muy parecidos seguidos). O sino tengo los vectores de todas las temporadas separadas.

Lo he intentado hacer el adist con dos temporadas distintas, pero hay jugadores que en una temporada no jugaron y en la siguiente si, por lo que en el momento que un jugador no está, todos los siguientes sale un valor alto (aunque sí que estén en los dos) porque cambia el orden alfabético y ya no se encuentran en la misma posición de los dos vectores.

Yo he probado con la siguiente función: names_duplicated <- lapply(players_vec, agrep, players_vec, value=TRUE)

Que me genera una lista con los 1200 jugadores (a priori) y cuando hay dos que se parecen mucho me aparecen en una misma row, pero aun así no es del todo fiable porque me duplica jugadores en algunos casos.

` > names_duplicated[1:20] [[1]] [1] "ABALDE, ALBERTO"

[[2]] [1] "ABASS, AWUDU"

[[3]] [1] "ABOUDOU, JORDAN"

[[4]] [1] "ABRINES, ALEJANDRO"

[[5]] [1] "ABRINES, ALEJANDRO" "ABRINES, ALEX"

[[6]] [1] "ABROMAITIS, TIM"

[[7]] [1] "ACIK, TUTKU" "AÇIK, TUTKU"

[[8]] [1] "ACIK, TUTKU" "AÇIK, TUTKU"

[[9]] [1] "ACKER, ALEX"

[[10]] [1] "ADAMS, DARIUS"

[[11]] [1] "ADAMS, JOSH"

[[12]] [1] "ADJAGBA, ULYSSE"

[[13]] [1] "AGRAVANIS, DIMITRIOS" "AGRAVANIS, DIMITRIS"

[[14]] [1] "AGRAVANIS, DIMITRIOS" "AGRAVANIS, DIMITRIS"

[[15]] [1] "AGUILAR, PABLO"

[[16]] [1] "AHEARN, BLAKE"

[[17]] [1] "AJINCA, ALEXIS"

[[18]] [1] "AKAY, MERT"

[[19]] [1] "AKIN, FIKRET CAN"

[[20]] [1] "AKINGBALA, AKIN" `

Visualmente puede yo identificar con facilidad los que estan escritos diferente en los diferentes DF, pero por alguna razon que no entiendo me las duplica, por lo que tampoco es útil.

PaulaMorBla14 commented 2 years ago

He creado manualmente un data frame con todos aquellos nombres que aparecen mal en la primera columna y luego en la segunda de forma correcta. Como puedo hacer para que me sustituya el malo por el bueno??

PaulaMorBla14 commented 2 years ago

En esta linia está el data.frame que comentaba:

https://github.com/PaulaMorBla14/TFG-Baloncesto/blob/9f86d010b14c2c251e5dafad4a37e119f524de77/TFG_MetodosEstadisticosBaloncesto.Rnw#L397-L398

solmos commented 2 years ago

Yo lo haría uniendo players_with_errors a tu data frame con todos los jugadores y luego sustituir los valores de la variable de los nombres que tengan un match.

Un ejemplo:

library(dplyr)

players_with_errors <- data.frame(
  wrong = c("Janito James", "Pepto Jordan"),
  right = c("Juanito James", "Pepito Jordan")
)

pbp <- data.frame(
  game = rep(1, 10),
  player = rep(
    c("Sergio Rodriguez", players_with_errors$wrong),
    length.out = 10
  ),
  play_type = sample(c("FG2M", "FG3M"), 10, replace = TRUE)
)

pbp |>
  left_join(name_conversion_df, by = c(player = "wrong")) |>
  mutate(player = ifelse(!is.na(right), right, player))
   game           player play_type         right
1     1 Sergio Rodriguez      FG2M          <NA>
2     1    Juanito James      FG2M Juanito James
3     1    Pepito Jordan      FG2M Pepito Jordan
4     1 Sergio Rodriguez      FG3M          <NA>
5     1    Juanito James      FG2M Juanito James
6     1    Pepito Jordan      FG3M Pepito Jordan
7     1 Sergio Rodriguez      FG3M          <NA>
8     1    Juanito James      FG2M Juanito James
9     1    Pepito Jordan      FG3M Pepito Jordan
10    1 Sergio Rodriguez      FG3M          <NA>