- Project 1 Brief
- Data Collection in txt format
- Find the Player ID
- Find the Player Name
- Find the Player State
- Find Total Points
- Find Player’s Pre Rating
- Drop spaces in findings
- Create a dataframe
- Look at structure of the dataframe
- Find Opponent of Each Player
- Map each player’s opponent to Pre Rating
- Calculate Average Pre Chess Rating of Opponent
- Add the Average Pre Chess Rating of Opponent to the dataframe
library(knitr)
library(rmdformats)
## Global options
options(max.print="75")
opts_chunk$set(echo=FALSE,
cache=TRUE,
prompt=FALSE,
tidy=TRUE,
comment=NA,
message=FALSE,
warning=FALSE)
opts_knit$set(width=75)Project 1 Brief
In this project, we have a text file with chess tournament results where the information has some structure. The purpose of the project is to create a structured .csv file with below variables as columns.
- Player’s Name
- Player’s State
- Total Number of Points
- Player’s Pre Rating
- Average Pre Chess Rating of Opponents
The first information would be : Gary Hua, ON, 6.0, 1794, 1605
Data Collection in txt format
## Installing package into 'C:/Users/Anil Akyildirim/Documents/R/win-library/3.6'
## (as 'lib' is unspecified)
## package 'stringr' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\Anil Akyildirim\AppData\Local\Temp\Rtmpi8EUhK\downloaded_packages
# created a file variable and assign the txt url
# header is false
#skipped first 4 rows as it is dont need them.
file <- 'https://raw.githubusercontent.com/anilak1978/chess-tournament/master/tournamentinfo.txt'
raw_data <- read.table(file, header = FALSE, sep = ',', skip = 4)
head(raw_data)## V1
## 1 1 | GARY HUA |6.0 |W 39|W 21|W 18|W 14|W 7|D 12|D 4|
## 2 ON | 15445895 / R: 1794 ->1817 |N:2 |W |B |W |B |W |B |W |
## 3 -----------------------------------------------------------------------------------------
## 4 2 | DAKSHESH DARURI |6.0 |W 63|W 58|L 4|W 17|W 16|W 20|W 7|
## 5 MI | 14598900 / R: 1553 ->1663 |N:2 |B |W |B |W |B |W |B |
## 6 -----------------------------------------------------------------------------------------
Find the Player ID
#1 or more digit numbers, look for the ones that ends with white space and |
player_id <- unlist(str_extract_all(unlist(raw_data), "\\d{1,}(?=\\s\\|)"))
player_id## [1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14"
## [15] "15" "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28"
## [29] "29" "30" "31" "32" "33" "34" "35" "36" "37" "38" "39" "40" "41" "42"
## [43] "43" "44" "45" "46" "47" "48" "49" "50" "51" "52" "53" "54" "55" "56"
## [57] "57" "58" "59" "60" "61" "62" "63" "64"
Find the Player Name
# All letters, any word character and a space after that and match it two or more times.
player_name <- unlist(str_extract_all(unlist(raw_data), "([[:alpha:]]+\\s){2,}"))
player_name## [1] "GARY HUA " "DAKSHESH DARURI "
## [3] "ADITYA BAJAJ " "PATRICK H SCHILLING "
## [5] "HANSHI ZUO " "HANSEN SONG "
## [7] "GARY DEE SWATHELL " "EZEKIEL HOUGHTON "
## [9] "STEFANO LEE " "ANVIT RAO "
## [11] "CAMERON WILLIAM MC LEMAN " "KENNETH J TACK "
## [13] "TORRANCE HENRY JR " "BRADLEY SHAW "
## [15] "ZACHARY JAMES HOUGHTON " "MIKE NIKITIN "
## [17] "RONALD GRZEGORCZYK " "DAVID SUNDEEN "
## [19] "DIPANKAR ROY " "JASON ZHENG "
## [21] "DINH DANG BUI " "EUGENE L MCCLURE "
## [23] "ALAN BUI " "MICHAEL R ALDRICH "
## [25] "LOREN SCHWIEBERT " "MAX ZHU "
## [27] "GAURAV GIDWANI " "SOFIA ADINA "
## [29] "CHIEDOZIE OKORIE " "GEORGE AVERY JONES "
## [31] "RISHI SHETTY " "JOSHUA PHILIP MATHEWS "
## [33] "JADE GE " "MICHAEL JEFFERY THOMAS "
## [35] "JOSHUA DAVID LEE " "SIDDHARTH JHA "
## [37] "AMIYATOSH PWNANANDAM " "BRIAN LIU "
## [39] "JOEL R HENDON " "FOREST ZHANG "
## [41] "KYLE WILLIAM MURPHY " "JARED GE "
## [43] "ROBERT GLEN VASEY " "JUSTIN D SCHILLING "
## [45] "DEREK YAN " "JACOB ALEXANDER LAVALLEY "
## [47] "ERIC WRIGHT " "DANIEL KHAIN "
## [49] "MICHAEL J MARTIN " "SHIVAM JHA "
## [51] "TEJAS AYYAGARI " "ETHAN GUO "
## [53] "JOSE C YBARRA " "LARRY HODGE "
## [55] "ALEX KONG " "MARISA RICCI "
## [57] "MICHAEL LU " "VIRAJ MOHILE "
## [59] "SEAN M MC CORMICK " "JULIA SHEN "
## [61] "JEZZEL FARKAS " "ASHWIN BALAJI "
## [63] "THOMAS JOSEPH HOSMER " "BEN LI "
Find the Player State
# all letters two of them together that ends with white space and |, ends with space and look for
player_state <- unlist(str_extract_all(unlist(raw_data), "([[:alpha:]]){2}\\s(?=\\|)"))
player_state## [1] "ON " "MI " "MI " "MI " "MI " "OH " "MI " "MI " "ON " "MI " "MI "
## [12] "MI " "MI " "MI " "MI " "MI " "MI " "MI " "MI " "MI " "ON " "MI "
## [23] "ON " "MI " "MI " "ON " "MI " "MI " "MI " "ON " "MI " "ON " "MI "
## [34] "MI " "MI " "MI " "MI " "MI " "MI " "MI " "MI " "MI " "MI " "MI "
## [45] "MI " "MI " "MI " "MI " "MI " "MI " "MI " "MI " "MI " "MI " "MI "
## [56] "MI " "MI " "MI " "MI " "MI " "ON " "MI " "MI " "MI "
Find Total Points
# digit , period followed by digit.
total_points <- unlist(str_extract_all(unlist(raw_data), "\\d\\.\\d"))
total_points## [1] "6.0" "6.0" "6.0" "5.5" "5.5" "5.0" "5.0" "5.0" "5.0" "5.0" "4.5"
## [12] "4.5" "4.5" "4.5" "4.5" "4.0" "4.0" "4.0" "4.0" "4.0" "4.0" "4.0"
## [23] "4.0" "4.0" "3.5" "3.5" "3.5" "3.5" "3.5" "3.5" "3.5" "3.5" "3.5"
## [34] "3.5" "3.5" "3.5" "3.5" "3.0" "3.0" "3.0" "3.0" "3.0" "3.0" "3.0"
## [45] "3.0" "3.0" "2.5" "2.5" "2.5" "2.5" "2.5" "2.5" "2.0" "2.0" "2.0"
## [56] "2.0" "2.0" "2.0" "2.0" "1.5" "1.5" "1.0" "1.0" "1.0"
Find Player’s Pre Rating
#3 or 4 digit number that starts and ends with sspace
players_pre_rating <- unlist(str_extract_all(unlist(raw_data), "[^->] \\d{3,4}(?=\\s)|[^->] \\d{3,4}[[:alpha:]][[:digit:]]| \\d{3,4}[[:alpha:]][[:digit:]]"))
players_pre_rating <- str_replace_all(players_pre_rating, pattern = ":", replacement = "")
players_pre_rating <- str_replace_all(players_pre_rating, pattern = " ", replacement = "")
players_pre_rating <- str_replace_all(players_pre_rating, pattern = "P[[:digit:]]", replacement = "")
players_pre_rating## [1] "1794" "1553" "1384" "1716" "1655" "1686" "1649" "1641" "1411" "1365"
## [11] "1712" "1663" "1666" "1610" "1220" "1604" "1629" "1600" "1564" "1595"
## [21] "1563" "1555" "1363" "1229" "1745" "1579" "1552" "1507" "1602" "1522"
## [31] "1494" "1441" "1449" "1399" "1438" "1355" "980" "1423" "1436" "1348"
## [41] "1403" "1332" "1283" "1199" "1242" "377" "1362" "1382" "1291" "1056"
## [51] "1011" "935" "1393" "1270" "1186" "1153" "1092" "917" "853" "967"
## [61] "955" "1530" "1175" "1163"
Drop spaces in findings
Create a dataframe
## player_id player_name player_state total_points
## 1 1 GARY HUA ON 6.0
## 2 2 DAKSHESH DARURI MI 6.0
## 3 3 ADITYA BAJAJ MI 6.0
## 4 4 PATRICK H SCHILLING MI 5.5
## 5 5 HANSHI ZUO MI 5.5
## 6 6 HANSEN SONG OH 5.0
## players_pre_rating
## 1 1794
## 2 1553
## 3 1384
## 4 1716
## 5 1655
## 6 1686
Look at structure of the dataframe
## 'data.frame': 64 obs. of 5 variables:
## $ player_id : Factor w/ 64 levels "1","10","11",..: 1 12 23 34 45 56 62 63 64 2 ...
## $ player_name : Factor w/ 64 levels "ADITYA BAJAJ",..: 24 12 1 51 28 27 23 21 59 5 ...
## $ player_state : Factor w/ 3 levels "MI","OH","ON": 3 1 1 1 1 2 1 1 3 1 ...
## $ total_points : Factor w/ 11 levels "1.0","1.5","2.0",..: 11 11 11 10 10 9 9 9 9 9 ...
## $ players_pre_rating: Factor w/ 64 levels "1011","1056",..: 57 37 22 55 50 53 49 48 26 20 ...
We need to convert to numerical variables in order to find the Average Pre Chess Rating of Opponents.
Convert to numerical variables
# convert o numerical variables
df$player_id <- as.numeric(df$player_id)
df$total_points <- as.numeric(df$total_points)
df$players_pre_rating <- as.numeric(df$players_pre_rating)
str(df)## 'data.frame': 64 obs. of 5 variables:
## $ player_id : num 1 12 23 34 45 56 62 63 64 2 ...
## $ player_name : Factor w/ 64 levels "ADITYA BAJAJ",..: 24 12 1 51 28 27 23 21 59 5 ...
## $ player_state : Factor w/ 3 levels "MI","OH","ON": 3 1 1 1 1 2 1 1 3 1 ...
## $ total_points : num 11 11 11 10 10 9 9 9 9 9 ...
## $ players_pre_rating: num 57 37 22 55 50 53 49 48 26 20 ...
Find Opponent of Each Player
# one or more digit number that ends with |
options(max.print = 2000)
opponent_player <- unlist(str_extract_all(unlist(raw_data), "(\\d{1,}|[[:blank:]]{1})(?=\\|)"))
opponent_player[opponent_player==" "] <- NA
opponent_player <- as.numeric(opponent_player)
opponent_player## [1] NA NA NA 39 21 18 14 7 12 4 NA NA NA NA NA NA NA NA NA NA NA NA NA
## [24] 63 58 4 17 16 20 7 NA NA NA NA NA NA NA NA NA NA NA NA NA 8 61 25
## [47] 21 11 13 12 NA NA NA NA NA NA NA NA NA NA NA NA NA 23 28 2 26 5 19
## [70] 1 NA NA NA NA NA NA NA NA NA NA NA NA NA 45 37 12 13 4 14 17 NA NA
## [93] NA NA NA NA NA NA NA NA NA NA NA 34 29 11 35 10 27 21 NA NA NA NA NA
## [116] NA NA NA NA NA NA NA NA 57 46 13 11 1 9 2 NA NA NA NA NA NA NA NA
## [139] NA NA NA NA NA 3 32 14 9 47 28 19 NA NA NA NA NA NA NA NA NA NA NA
## [162] NA NA 25 18 59 8 26 7 20 NA NA NA NA NA NA NA NA NA NA NA NA NA 16
## [185] 19 55 31 6 25 18 NA NA NA NA NA NA NA NA NA NA NA NA NA 38 56 6 7
## [208] 3 34 26 NA NA NA NA NA NA NA NA NA NA NA NA NA 42 33 5 38 NA 1 3
## [231] NA NA NA NA NA NA NA NA NA NA NA NA NA 36 27 7 5 33 3 32 NA NA NA
## [254] NA NA NA NA NA NA NA NA NA NA 54 44 8 1 27 5 31 NA NA NA NA NA NA
## [277] NA NA NA NA NA NA NA 19 16 30 22 54 33 38 NA NA NA NA NA NA NA NA NA
## [300] NA NA NA NA 10 15 NA 39 2 36 NA NA NA NA NA NA NA NA NA NA NA NA NA
## [323] NA 48 41 26 2 23 22 5 NA NA NA NA NA NA NA NA NA NA NA NA NA 47 9
## [346] 1 32 19 38 10 NA NA NA NA NA NA NA NA NA NA NA NA NA 15 10 52 28 18
## [369] 4 8 NA NA NA NA NA NA NA NA NA NA NA NA NA 40 49 23 41 28 2 9 NA
## [392] NA NA NA NA NA NA NA NA NA NA NA NA 43 1 47 3 40 39 6 NA NA NA NA
## [415] NA NA NA NA NA NA NA NA NA 64 52 28 15 NA 17 40 NA NA NA NA NA NA NA
## [438] NA NA NA NA NA NA 4 43 20 58 17 37 46 NA NA NA NA NA NA NA NA NA NA
## [461] NA NA NA 28 47 43 25 60 44 39 NA NA NA NA NA NA NA NA NA NA NA NA NA
## [484] 9 53 3 24 34 10 47 NA NA NA NA NA NA NA NA NA NA NA NA NA 49 40 17
## [507] 4 9 32 11 NA NA NA NA NA NA NA NA NA NA NA NA NA 51 13 46 37 14 6
## [530] NA NA NA NA NA NA NA NA NA NA NA NA NA NA 24 4 22 19 20 8 36 NA NA
## [553] NA NA NA NA NA NA NA NA NA NA NA 50 6 38 34 52 48 NA NA NA NA NA NA
## [576] NA NA NA NA NA NA NA NA 52 64 15 55 31 61 50 NA NA NA NA NA NA NA NA
## [599] NA NA NA NA NA 58 55 64 10 30 50 14 NA NA NA NA NA NA NA NA NA NA NA
## [622] NA NA 61 8 44 18 51 26 13 NA NA NA NA NA NA NA NA NA NA NA NA NA 60
## [645] 12 50 36 13 15 51 NA NA NA NA NA NA NA NA NA NA NA NA NA 6 60 37 29
## [668] 25 11 52 NA NA NA NA NA NA NA NA NA NA NA NA NA 46 38 56 6 57 52 48
## [691] NA NA NA NA NA NA NA NA NA NA NA NA NA 13 57 51 33 NA 16 28 NA NA NA
## [714] NA NA NA NA NA NA NA NA NA NA NA 5 34 27 NA 23 61 NA NA NA NA NA NA
## [737] NA NA NA NA NA NA NA 11 35 29 12 NA 18 15 NA NA NA NA NA NA NA NA NA
## [760] NA NA NA NA 1 54 40 16 44 21 24 NA NA NA NA NA NA NA NA NA NA NA NA
## [783] NA 20 26 39 59 21 56 22 NA NA NA NA NA NA NA NA NA NA NA NA NA 59 17
## [806] 58 20 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 12 50 57 60 61
## [829] 64 56 NA NA NA NA NA NA NA NA NA NA NA NA NA 21 23 24 63 59 46 55 NA
## [852] NA NA NA NA NA NA NA NA NA NA NA NA NA 14 32 53 39 24 59 NA NA NA NA
## [875] NA NA NA NA NA NA NA NA NA 5 51 60 56 63 55 58 NA NA NA NA NA NA NA
## [898] NA NA NA NA NA NA 35 7 27 50 64 43 23 NA NA NA NA NA NA NA NA NA NA
## [921] NA NA NA 18 24 21 61 8 51 25 NA NA NA NA NA NA NA NA NA NA NA NA NA
## [944] 17 63 NA 52 NA 29 35 NA NA NA NA NA NA NA NA NA NA NA NA NA 26 20 63
## [967] 64 58 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 29 42 33 46 NA 31
## [990] 30 NA NA NA NA NA NA NA NA NA NA NA NA NA 27 45 36 57 32 47 33 NA NA
## [1013] NA NA NA NA NA NA NA NA NA NA NA 30 22 19 48 29 35 34 NA NA NA NA NA
## [1036] NA NA NA NA NA NA NA NA NA 25 NA 44 NA 57 NA NA NA NA NA NA NA NA NA
## [1059] NA NA NA NA NA 14 39 61 NA 15 59 64 NA NA NA NA NA NA NA NA NA NA NA
## [1082] NA NA 62 31 10 30 NA 45 43 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
## [1105] 11 35 45 NA 40 42 NA NA NA NA NA NA NA NA NA NA NA NA NA 7 36 42 51
## [1128] 35 53 NA NA NA NA NA NA NA NA NA NA NA NA NA NA 31 2 41 23 49 NA 45
## [1151] NA NA NA NA NA NA NA NA NA NA NA NA NA 41 NA 9 40 43 54 44 NA NA NA
## [1174] NA NA NA NA NA NA NA NA NA NA 33 34 45 42 24 NA NA NA NA NA NA NA NA
## [1197] NA NA NA NA NA NA NA 32 3 54 47 42 30 37 NA NA NA NA NA NA NA NA NA
## [1220] NA NA NA NA 55 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
## [1243] NA 2 48 49 43 45 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 22 30
## [1266] 31 49 46 42 54 NA NA NA NA NA NA NA NA NA NA
Map each player’s opponent to Pre Rating
# total 7 rounds of games played
round_1 <- opponent_player[seq(4, length(opponent_player),10)]
round_1 <- round_1[seq(1, length(round_1), 2)]
round_2 <- opponent_player[seq(5, length(opponent_player),10)]
round_2 <- round_2[seq(1, length(round_2), 2)]
round_3 <- opponent_player[seq(6, length(opponent_player),10)]
round_3 <- round_3[seq(1, length(round_3), 2)]
round_4 <- opponent_player[seq(7, length(opponent_player),10)]
round_4 <- round_4[seq(1, length(round_4), 2)]
round_5 <- opponent_player[seq(8, length(opponent_player),10)]
round_5 <- round_5[seq(1, length(round_5), 2)]
round_6 <- opponent_player[seq(9, length(opponent_player),10)]
round_6 <- round_6[seq(1, length(round_6), 2)]
round_7 <- opponent_player[seq(10, length(opponent_player),10)]
round_7 <- round_7[seq(1, length(round_7), 2)]
rounds <- matrix(c(round_1, round_2, round_3, round_4, round_5, round_6, round_7), ncol = 7)
rounds## [,1] [,2] [,3] [,4] [,5] [,6] [,7]
## [1,] 39 21 18 14 7 12 4
## [2,] 63 58 4 17 16 20 7
## [3,] 8 61 25 21 11 13 12
## [4,] 23 28 2 26 5 19 1
## [5,] 45 37 12 13 4 14 17
## [6,] 34 29 11 35 10 27 21
## [7,] 57 46 13 11 1 9 2
## [8,] 3 32 14 9 47 28 19
## [9,] 25 18 59 8 26 7 20
## [10,] 16 19 55 31 6 25 18
## [11,] 38 56 6 7 3 34 26
## [12,] 42 33 5 38 NA 1 3
## [13,] 36 27 7 5 33 3 32
## [14,] 54 44 8 1 27 5 31
## [15,] 19 16 30 22 54 33 38
## [16,] 10 15 NA 39 2 36 NA
## [17,] 48 41 26 2 23 22 5
## [18,] 47 9 1 32 19 38 10
## [19,] 15 10 52 28 18 4 8
## [20,] 40 49 23 41 28 2 9
## [21,] 43 1 47 3 40 39 6
## [22,] 64 52 28 15 NA 17 40
## [23,] 4 43 20 58 17 37 46
## [24,] 28 47 43 25 60 44 39
## [25,] 9 53 3 24 34 10 47
## [26,] 49 40 17 4 9 32 11
## [27,] 51 13 46 37 14 6 NA
## [28,] 24 4 22 19 20 8 36
## [29,] 50 6 38 34 52 48 NA
## [30,] 52 64 15 55 31 61 50
## [31,] 58 55 64 10 30 50 14
## [32,] 61 8 44 18 51 26 13
## [33,] 60 12 50 36 13 15 51
## [34,] 6 60 37 29 25 11 52
## [35,] 46 38 56 6 57 52 48
## [36,] 13 57 51 33 NA 16 28
## [37,] NA 5 34 27 NA 23 61
## [38,] 11 35 29 12 NA 18 15
## [39,] 1 54 40 16 44 21 24
## [40,] 20 26 39 59 21 56 22
## [41,] 59 17 58 20 NA NA NA
## [42,] 12 50 57 60 61 64 56
## [43,] 21 23 24 63 59 46 55
## [44,] NA 14 32 53 39 24 59
## [45,] 5 51 60 56 63 55 58
## [46,] 35 7 27 50 64 43 23
## [47,] 18 24 21 61 8 51 25
## [48,] 17 63 NA 52 NA 29 35
## [49,] 26 20 63 64 58 NA NA
## [50,] 29 42 33 46 NA 31 30
## [51,] 27 45 36 57 32 47 33
## [52,] 30 22 19 48 29 35 34
## [53,] NA 25 NA 44 NA 57 NA
## [54,] 14 39 61 NA 15 59 64
## [55,] 62 31 10 30 NA 45 43
## [56,] NA 11 35 45 NA 40 42
## [57,] 7 36 42 51 35 53 NA
## [58,] 31 2 41 23 49 NA 45
## [59,] 41 NA 9 40 43 54 44
## [60,] 33 34 45 42 24 NA NA
## [61,] 32 3 54 47 42 30 37
## [62,] 55 NA NA NA NA NA NA
## [63,] 2 48 49 43 45 NA NA
## [64,] 22 30 31 49 46 42 54
Calculate Average Pre Chess Rating of Opponent
Add the Average Pre Chess Rating of Opponent to the dataframe
## player_id player_name player_state total_points
## 1 1 GARY HUA ON 11
## 2 12 DAKSHESH DARURI MI 11
## 3 23 ADITYA BAJAJ MI 11
## 4 34 PATRICK H SCHILLING MI 10
## 5 45 HANSHI ZUO MI 10
## 6 56 HANSEN SONG OH 9
## players_pre_rating avg_opponent_player
## 1 57 1605.286
## 2 37 1469.286
## 3 22 1563.571
## 4 55 1573.571
## 5 50 1500.857
## 6 53 1518.714