General Log Informaiton

url <- "https://log.adroit.games/logs/download?game=mhs"

json_data <- fromJSON(url)

pilotTest1 <- as.data.frame(json_data)

pilotTestDates = pilotTest1 %>% mutate(ts = ymd_hms(timestamp, tz = "UTC"),
                                       date = as_date(ts))

daily_span = pilotTestDates %>% group_by(date, player_id) %>% summarise(n_records = n(),
                                                             first_time = min(ts),
                                          last_time = max(ts),
                                          duration = difftime(last_time, first_time,
                                                              units = "secs"),
                                          .groups = "drop") %>%
  mutate(duration_hours = as.numeric(duration, units = "hours")) %>% data.frame()

knitr::kable(daily_span, caption = "Table: General Information for Log Records")
Table: General Information for Log Records
date player_id n_records first_time last_time duration duration_hours
2025-04-24 Test Player 11 2025-04-24 23:37:44 2025-04-24 23:52:58 914.358 secs 0.2539883
2025-04-24 test_player1 1 2025-04-24 23:24:38 2025-04-24 23:24:38 0.000 secs 0.0000000
2025-04-24 test_player2 1 2025-04-24 23:26:00 2025-04-24 23:26:00 0.000 secs 0.0000000
2025-04-25 Test Player 12 2025-04-25 00:07:12 2025-04-25 21:36:31 77359.198 secs 21.4886661
2025-04-28 Test Player 13 2025-04-28 16:02:52 2025-04-28 16:06:54 242.036 secs 0.0672322
2025-04-29 Test Player 1 2025-04-29 21:48:30 2025-04-29 21:48:30 0.000 secs 0.0000000
2025-04-30 Test Player 56 2025-04-30 00:38:48 2025-04-30 14:45:36 50808.213 secs 14.1133925
2025-05-01 Test Player 192 2025-05-01 12:41:51 2025-05-01 23:03:38 37306.625 secs 10.3629514
2025-05-02 Test Player 162 2025-05-02 00:48:14 2025-05-02 20:46:16 71881.669 secs 19.9671303
2025-05-04 Test Player 8 2025-05-04 23:24:52 2025-05-04 23:39:02 849.443 secs 0.2359564
2025-05-05 Test Player 175 2025-05-05 00:03:53 2025-05-05 23:21:05 83832.130 secs 23.2867028
2025-05-06 Test Player 292 2025-05-06 17:57:05 2025-05-06 23:24:38 19652.769 secs 5.4591025
2025-05-07 Test Player 539 2025-05-07 00:24:19 2025-05-07 21:51:25 77226.038 secs 21.4516772
2025-05-08 Test Player 561 2025-05-08 00:01:15 2025-05-08 23:03:10 82914.917 secs 23.0319214
2025-05-09 Test Player 97 2025-05-09 01:56:22 2025-05-09 18:19:30 58987.782 secs 16.3854950
2025-05-10 Test Player 56 2025-05-10 20:03:45 2025-05-10 20:24:07 1222.343 secs 0.3395397
2025-05-11 Test Player 43 2025-05-11 14:15:41 2025-05-11 22:40:00 30258.691 secs 8.4051919
2025-05-12 Test Player 244 2025-05-12 03:10:14 2025-05-12 20:26:18 62164.310 secs 17.2678639
2025-05-13 Test Player 7500 2025-05-13 04:31:25 2025-05-13 21:32:00 61234.670 secs 17.0096306
2025-05-14 Test Player 4312 2025-05-14 12:31:16 2025-05-14 20:09:09 27472.825 secs 7.6313403
2025-05-14 test_player 1 2025-05-14 05:09:28 2025-05-14 05:09:28 0.000 secs 0.0000000
2025-05-14 test_player2 1 2025-05-14 05:21:46 2025-05-14 05:21:46 0.000 secs 0.0000000
2025-05-15 Alden Reese 37 2025-05-15 23:26:52 2025-05-15 23:36:25 572.354 secs 0.1589872
2025-05-15 Aleah Hess 13 2025-05-15 19:45:57 2025-05-15 19:50:37 279.520 secs 0.0776444
2025-05-15 Test Player 1959 2025-05-15 00:19:25 2025-05-15 23:46:07 84402.267 secs 23.4450742
2025-05-16 Cobb-Coleman, Jayden 24 2025-05-16 17:51:58 2025-05-16 18:02:11 612.633 secs 0.1701758
2025-05-16 Gonzalez, Yvonne 76 2025-05-16 15:38:21 2025-05-16 16:09:54 1892.777 secs 0.5257714
2025-05-16 Jones, Jackson 32 2025-05-16 14:15:21 2025-05-16 14:58:44 2602.553 secs 0.7229314
2025-05-16 Kieren O’Bannon 217 2025-05-16 19:23:07 2025-05-16 23:59:25 16577.962 secs 4.6049894
2025-05-16 Lara-Oyola, Ivonne 1 2025-05-16 16:46:43 2025-05-16 16:46:43 0.000 secs 0.0000000
2025-05-16 Lewis, Saniyah 78 2025-05-16 16:48:20 2025-05-16 17:25:11 2211.361 secs 0.6142669
2025-05-16 Neely Capers, Deana 46 2025-05-16 14:08:32 2025-05-16 14:34:15 1543.562 secs 0.4287672
2025-05-16 Russell, Arianna 3 2025-05-16 14:16:20 2025-05-16 14:17:25 65.172 secs 0.0181033
2025-05-16 Test Player 289 2025-05-16 13:07:25 2025-05-16 20:03:14 24949.191 secs 6.9303308
2025-05-16 Unit3testA 16 2025-05-16 02:56:48 2025-05-16 03:03:43 415.175 secs 0.1153264
2025-05-16 Unit3testB 12 2025-05-16 03:06:37 2025-05-16 03:11:18 281.040 secs 0.0780667
2025-05-16 Venable , Ellis 40 2025-05-16 15:08:25 2025-05-16 15:27:14 1128.876 secs 0.3135767
2025-05-17 Kieren O’Bannon 9 2025-05-17 00:00:55 2025-05-17 00:12:55 720.012 secs 0.2000033
2025-05-18 Rodriguez-Suarez, Yainily 5 2025-05-18 21:33:06 2025-05-18 21:35:10 123.636 secs 0.0343433
2025-05-18 Test Player 5 2025-05-18 19:37:14 2025-05-18 21:22:04 6289.880 secs 1.7471889
2025-05-19 Adelia Hans 1 2025-05-19 19:21:28 2025-05-19 19:21:28 0.000 secs 0.0000000
2025-05-19 Ava Dittmer 45 2025-05-19 19:20:48 2025-05-19 19:49:19 1711.184 secs 0.4753289
2025-05-19 Baylee Blank 3 2025-05-19 19:24:58 2025-05-19 19:26:00 61.705 secs 0.0171403
2025-05-19 Dafne Marquez 70 2025-05-19 19:09:24 2025-05-19 19:46:52 2248.253 secs 0.6245147
2025-05-19 Elizabeth Brown 36 2025-05-19 19:41:19 2025-05-19 19:57:15 955.408 secs 0.2653911
2025-05-19 Test Player 173 2025-05-19 13:13:01 2025-05-19 19:54:26 24085.475 secs 6.6904097
2025-05-20 Test Player 104 2025-05-20 17:25:00 2025-05-20 20:51:57 12417.183 secs 3.4492175
2025-05-21 Test Player 339 2025-05-21 16:21:19 2025-05-21 21:20:42 17962.463 secs 4.9895731
2025-05-22 Jones, Jackson 1 2025-05-22 14:56:52 2025-05-22 14:56:52 0.000 secs 0.0000000
2025-05-22 Test Player 125 2025-05-22 04:46:13 2025-05-22 23:28:51 67358.174 secs 18.7106039
2025-05-22 studenttestB 3 2025-05-22 15:26:41 2025-05-22 15:29:46 184.689 secs 0.0513025
2025-05-23 Cobb-Coleman, Jayden 62 2025-05-23 18:00:33 2025-05-23 18:42:07 2493.994 secs 0.6927761
2025-05-23 Gonzalez, Yvonne 72 2025-05-23 15:16:52 2025-05-23 16:02:37 2744.900 secs 0.7624722
2025-05-23 Serecka-Cepero, Daniel 88 2025-05-23 15:43:42 2025-05-23 16:27:27 2624.900 secs 0.7291389
2025-05-23 Test Player 175 2025-05-23 14:45:59 2025-05-23 21:28:03 24123.199 secs 6.7008886
2025-05-25 Test Player 43 2025-05-25 01:24:38 2025-05-25 21:35:18 72639.627 secs 20.1776742
2025-05-27 Test Player 49 2025-05-27 16:58:09 2025-05-27 19:58:21 10811.980 secs 3.0033278
2025-05-28 Test Player 318 2025-05-28 00:48:37 2025-05-28 20:52:28 72230.890 secs 20.0641361
2025-05-29 Test Player 231 2025-05-29 15:21:13 2025-05-29 21:19:51 21517.930 secs 5.9772028
2025-05-30 Test Player 122 2025-05-30 01:00:33 2025-05-30 22:07:40 76027.374 secs 21.1187150
2025-05-30 10 2025-05-30 22:07:39 2025-05-30 23:08:15 3635.862 secs 1.0099617
2025-05-30 65 2025-05-30 22:55:54 2025-05-30 23:39:29 2614.396 secs 0.7262211
2025-05-31 Test Player 19 2025-05-31 00:55:47 2025-05-31 01:00:45 297.369 secs 0.0826025
2025-06-02 Test Player 32 2025-06-02 19:03:03 2025-06-02 20:50:06 6423.143 secs 1.7842064
2025-06-03 Lewis, Saniyah 15 2025-06-03 17:35:48 2025-06-03 17:42:00 372.581 secs 0.1034947
2025-06-03 Test Player 21 2025-06-03 17:37:22 2025-06-03 17:56:12 1129.360 secs 0.3137111
2025-06-03 studenttestB 1 2025-06-03 15:56:51 2025-06-03 15:56:51 0.000 secs 0.0000000
2025-06-04 Test Player 117 2025-06-04 21:21:03 2025-06-04 23:59:20 9496.619 secs 2.6379497
2025-06-04 35 2025-06-04 21:15:36 2025-06-04 21:25:36 600.082 secs 0.1666894
2025-06-05 Test Player 120 2025-06-05 00:00:50 2025-06-05 02:59:20 10710.194 secs 2.9750539
2025-06-05 10 2025-06-05 17:57:00 2025-06-05 21:56:19 14359.276 secs 3.9886878
2025-06-06 Test Player 43 2025-06-06 20:53:11 2025-06-06 21:14:29 1278.018 secs 0.3550050

Dialogue Event Summarization

You can also embed plots, for example:

pilotTest1DialogueEvent = pilotTest1 %>% filter(event_type == "dialogueEvent")

pilotTest1DialogueEventClean = pilotTest1DialogueEvent %>% 
  mutate(event_data = map(event_data, ~ fromJSON(.x, simplifyVector = TRUE))) %>% 
  unnest_wider(event_data) %>% data.frame()

pilotTest1DialogueEventCleanFinish = pilotTest1DialogueEventClean %>% 
  filter(dialogueEventType == "DialogueFinishEvent")

dialogue_daily_span = pilotTest1DialogueEventCleanFinish %>% group_by(player_id, conversationId) %>% summarise(n_records = n(),
                                                             .groups = "drop") %>% 
  arrange(player_id, as.numeric(conversationId)) %>% data.frame()

knitr::kable(dialogue_daily_span, caption = "Table: Daily Dialogue Records per Player")
Table: Daily Dialogue Records per Player
player_id conversationId n_records
Alden Reese 1 2
Alden Reese 5 1
Alden Reese 9 4
Alden Reese 17 1
Aleah Hess 1 1
Aleah Hess 5 1
Ava Dittmer 1 1
Cobb-Coleman, Jayden 1 1
Cobb-Coleman, Jayden 5 1
Dafne Marquez 1 1
Dafne Marquez 5 1
Elizabeth Brown 1 1
Elizabeth Brown 5 1
Gonzalez, Yvonne 1 3
Gonzalez, Yvonne 5 2
Gonzalez, Yvonne 14 3
Gonzalez, Yvonne 21 1
Jones, Jackson 1 1
Jones, Jackson 5 1
Kieren O’Bannon 1 1
Kieren O’Bannon 5 1
Kieren O’Bannon 10 6
Lewis, Saniyah 1 2
Lewis, Saniyah 5 1
Lewis, Saniyah 13 1
Lewis, Saniyah 18 1
Neely Capers, Deana 1 1
Neely Capers, Deana 5 1
Serecka-Cepero, Daniel 1 1
Test Player 0 7
Test Player 1 638
Test Player 2 417
Test Player 3 302
Test Player 4 35
Test Player 5 49
Test Player 6 18
Test Player 7 13
Test Player 8 20
Test Player 9 38
Test Player 10 102
Test Player 11 57
Test Player 12 53
Test Player 13 45
Test Player 14 44
Test Player 15 31
Test Player 16 27
Test Player 17 36
Test Player 18 11
Test Player 19 20
Test Player 20 10
Test Player 21 5
Test Player 22 6
Test Player 23 11
Test Player 24 18
Test Player 25 3
Test Player 26 7
Test Player 27 8
Test Player 28 3
Test Player 29 2
Test Player 30 2
Test Player 32 2
Test Player 33 11
Test Player 36 31
Test Player 37 11
Test Player 39 22
Test Player 40 9
Unit3testA 1 1
Unit3testB 1 1
Venable , Ellis 1 1
Venable , Ellis 5 1
Venable , Ellis 11 1
1 6
2 1
3 2
4 1
2 7
10 2
11 1
12 1
13 1
14 1
17 1
19 1

Argumentation Event Summarization

Argumentation Open Summarization

pilotTest1ArgumentEvent = pilotTest1 %>% filter(event_type == "argumentationEvent")

pilotTest1ArgumentEventClean = pilotTest1ArgumentEvent %>% 
  mutate(event_data = map(event_data, ~ fromJSON(.x, simplifyVector = TRUE))) %>% 
  unnest_wider(event_data) %>% data.frame()

pilotTest1ArgumentEventCleanOpen = pilotTest1ArgumentEventClean %>% filter(actionType == "argumentationSessionOpen")

pilotTest1ArgumentDates = pilotTest1ArgumentEventCleanOpen %>% mutate(ts = ymd_hms(timestamp, tz = "UTC"),
                                                                       date = as_date(ts))

argument_daily_span = pilotTest1ArgumentDates %>% group_by(player_id, argumentationTitle) %>% 
  summarise(n_records = n(),
  .groups = "drop") %>% data.frame()

knitr::kable(argument_daily_span, caption = "Table: Argumentation Open Records per Player")
Table: Argumentation Open Records per Player
player_id argumentationTitle n_records
Alden Reese Unit 3 - Pollution Upstream 1
Gonzalez, Yvonne Unit 3 - Pollution Upstream 1
Kieren O’Bannon Unit 3 - Pollution Upstream 1
Lewis, Saniyah Unit 3 - Pollution Upstream 1
Test Player Unit 1 - Argumentation Tutorial 52
Test Player Unit 1 - Freshwater 47
Test Player Unit 2 – Watershed 6
Test Player Unit 3 - Pollution Upstream 7
Venable , Ellis Unit 3 - Pollution Upstream 1
Unit 1 - Argumentation Tutorial 1
Unit 1 - Freshwater 1

Argumentation Close Summarization

pilotTest1ArgumentEvent = pilotTest1 %>% filter(event_type == "argumentationEvent")

pilotTest1ArgumentEventClean = pilotTest1ArgumentEvent %>% 
  mutate(event_data = map(event_data, ~ fromJSON(.x, simplifyVector = TRUE))) %>% 
  unnest_wider(event_data) %>% data.frame()

pilotTest1ArgumentEventCleanOpen = pilotTest1ArgumentEventClean %>% filter(actionType == "argumentationSessionClose")

pilotTest1ArgumentDates = pilotTest1ArgumentEventCleanOpen %>% mutate(ts = ymd_hms(timestamp, tz = "UTC"),
                                                                       date = as_date(ts))

argument_daily_span = pilotTest1ArgumentDates %>% group_by(player_id, argumentationTitle) %>% 
  summarise(n_records = n(),
  .groups = "drop") %>% data.frame()

knitr::kable(argument_daily_span, caption = "Table: Argumentation Close Records per Player")
Table: Argumentation Close Records per Player
player_id argumentationTitle n_records
Alden Reese Unit 3 - Pollution Upstream 2
Gonzalez, Yvonne Unit 3 - Pollution Upstream 2
Lewis, Saniyah Unit 3 - Pollution Upstream 2
Test Player Unit 1 - Argumentation Tutorial 48
Test Player Unit 1 - Freshwater 41
Test Player Unit 2 – Watershed 7
Test Player Unit 3 - Pollution Upstream 12
Unit 1 - Argumentation Tutorial 1
Unit 1 - Freshwater 1