library(tidyverse)
library(plotly)
library(readr)
library(scales)
library(htmltools)
library(knitr)
theme_set(theme_minimal(base_size = 13))
knitr::opts_chunk$set(
fig.width = 8,
fig.height = 5
)
conversation_colours <- list(
black = "#000000",
white = "#FFFFFF",
casper = "#f1f1f2",
charcoal = "#383838",
tomato = "#d8352a",
indigo = "#29339b",
emerald = "#1f7a5c"
)
Generative AI tools like ChatGPT is very rapidly reshaping how the university students learn, research and complete academic work independently. As we know AI offers very faster access to the information and the academic assistance with growing dependence on these type of systems has also raised many concerns around the critical thinking, independent learning and all long term academic development.
Using student this behavioral data, this article helps us to explore how frequently students are using ChatGPT, why are they relied on it and whether these patterns of heavy AI usage appear connected with the academic performance and aptitude. These findings also reveal that the use of AI is no longer an occasional support tool, it has become deeply integrated into the modern student learning culture.
For this project I have used a publicly available Kaggle dataset which is focused on student ChatGPT usage patterns and behavioral indicator. This dataset do not provide any detailed survey methodology, institutional attribution or participant collection procedures. So, the visualisations in this dataset or article should be interpreted as kind of exploratory behavioural analysis rather than taking definitive scientific findings.
The purpose of this project was to demonstrate a narrative data visualisation technique, interactive storytelling and also multivariate analysis in the context of the current discussions surrounding generative AI and education. This visualisations are only intended to highlight emerging patterns and stimulate a critical discussion rather than establish any causal conclusions.
student_ai <- read_csv("student_ai_usage.csv")
## Rows: 237 Columns: 7
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): Department, Reason_For_Using_ChatGPT
## dbl (5): StudentID, CGPA, ChatGPT_Usage_Frequency_Per_Week, Average_Session_...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
head(student_ai)
## # A tibble: 6 × 7
## StudentID Department CGPA ChatGPT_Usage_Frequency_Pe…¹ Average_Session_Dura…²
## <dbl> <chr> <dbl> <dbl> <dbl>
## 1 1 EXTC 7.55 2 16
## 2 2 IT 7.23 17 119
## 3 3 EXTC 8.11 13 62
## 4 4 EXTC 6.65 17 18
## 5 5 IT 5.42 1 91
## 6 6 IT 7.5 2 57
## # ℹ abbreviated names: ¹ChatGPT_Usage_Frequency_Per_Week,
## # ²Average_Session_Duration_Minutes
## # ℹ 2 more variables: Reason_For_Using_ChatGPT <chr>, Aptitude_Score <dbl>
glimpse(student_ai)
## Rows: 237
## Columns: 7
## $ StudentID <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12…
## $ Department <chr> "EXTC", "IT", "EXTC", "EXTC", "IT", "…
## $ CGPA <dbl> 7.55, 7.23, 8.11, 6.65, 5.42, 7.50, 7…
## $ ChatGPT_Usage_Frequency_Per_Week <dbl> 2, 17, 13, 17, 1, 2, 15, 8, 3, 0, 3, …
## $ Average_Session_Duration_Minutes <dbl> 16, 119, 62, 18, 91, 57, 54, 89, 100,…
## $ Reason_For_Using_ChatGPT <chr> "saves time", "saves time", "no idea"…
## $ Aptitude_Score <dbl> 4, 1, 2, 0, 0, 3, 4, 3, 5, 4, 4, 3, 0…
summary(student_ai)
## StudentID Department CGPA
## Min. : 1 Length:237 Min. :5.020
## 1st Qu.: 60 Class :character 1st Qu.:6.600
## Median :119 Mode :character Median :7.360
## Mean :119 Mean :7.146
## 3rd Qu.:178 3rd Qu.:7.930
## Max. :237 Max. :8.500
## ChatGPT_Usage_Frequency_Per_Week Average_Session_Duration_Minutes
## Min. : 0.000 Min. : 0.00
## 1st Qu.: 2.000 1st Qu.: 19.00
## Median : 6.000 Median : 41.00
## Mean : 7.122 Mean : 45.68
## 3rd Qu.:11.000 3rd Qu.: 62.00
## Max. :20.000 Max. :119.00
## Reason_For_Using_ChatGPT Aptitude_Score
## Length:237 Min. :0.000
## Class :character 1st Qu.:1.000
## Mode :character Median :4.000
## Mean :3.599
## 3rd Qu.:6.000
## Max. :8.000
student_ai_clean <- student_ai %>%
rename(
student_id = StudentID,
department = Department,
cgpa = CGPA,
usage_per_week = ChatGPT_Usage_Frequency_Per_Week,
session_duration = Average_Session_Duration_Minutes,
usage_reason = Reason_For_Using_ChatGPT,
aptitude_score = Aptitude_Score
) %>%
mutate(
department = recode(department,
"Comp" = "Computer Science",
"IT" = "Information Technology",
"EXTC" = "Electronics & Telecom"),
usage_reason = str_to_title(usage_reason),
usage_level = case_when(
usage_per_week <= 3 ~ "Low Usage",
usage_per_week <= 10 ~ "Moderate Usage",
TRUE ~ "High Usage"
),
usage_level = factor(
usage_level,
levels = c("Low Usage", "Moderate Usage", "High Usage")
)
)
head(student_ai_clean)
## # A tibble: 6 × 8
## student_id department cgpa usage_per_week session_duration usage_reason
## <dbl> <chr> <dbl> <dbl> <dbl> <chr>
## 1 1 Electronics & T… 7.55 2 16 Saves Time
## 2 2 Information Tec… 7.23 17 119 Saves Time
## 3 3 Electronics & T… 8.11 13 62 No Idea
## 4 4 Electronics & T… 6.65 17 18 Better Answ…
## 5 5 Information Tec… 5.42 1 91 No Idea
## 6 6 Information Tec… 7.5 2 57 Better Answ…
## # ℹ 2 more variables: aptitude_score <dbl>, usage_level <fct>
summary(student_ai_clean)
## student_id department cgpa usage_per_week
## Min. : 1 Length:237 Min. :5.020 Min. : 0.000
## 1st Qu.: 60 Class :character 1st Qu.:6.600 1st Qu.: 2.000
## Median :119 Mode :character Median :7.360 Median : 6.000
## Mean :119 Mean :7.146 Mean : 7.122
## 3rd Qu.:178 3rd Qu.:7.930 3rd Qu.:11.000
## Max. :237 Max. :8.500 Max. :20.000
## session_duration usage_reason aptitude_score usage_level
## Min. : 0.00 Length:237 Min. :0.000 Low Usage :78
## 1st Qu.: 19.00 Class :character 1st Qu.:1.000 Moderate Usage:99
## Median : 41.00 Mode :character Median :4.000 High Usage :60
## Mean : 45.68 Mean :3.599
## 3rd Qu.: 62.00 3rd Qu.:6.000
## Max. :119.00 Max. :8.000
The growing integration of the generative AI into a student’s life is no longer an experimental thing. Most of the students in the dataset are reported using ChatGPT multiple times every week, suggesting that the AI tools have become a routine part of the modern study habits.
usage_counts <- student_ai_clean %>%
count(usage_level, department) # add department here
chart1 <- ggplot(
usage_counts,
aes(
x = usage_level,
y = n,
fill = department, # colour by department instead
text = paste(
"Usage Level:", usage_level,
"<br>Department:", department,
"<br>Students:", n
)
)
) +
geom_col(width = 0.7, position = "stack") + # stacked bars
scale_fill_manual(
values = c(
"#29339b",
"#d8352a",
"#1f7a5c"
)
) +
labs(
title = "AI Dependency Varies by Department",
subtitle = "Student ChatGPT usage categories broken down by department",
x = "Usage Category",
y = "Number of Students",
fill = "Department"
) +
theme_minimal(base_size = 14) +
theme(
plot.title = element_text(face = "bold", size = 18),
plot.subtitle = element_text(size = 12, color = "grey30")
)
ggplotly(chart1, tooltip = "text")
While the AI tools may improve the efficiency, growing dependence also raises the questions about how can AI assisted learning well connects with the academic performance and the student behaviour.
chart2 <- ggplot(
student_ai_clean,
aes(
x = usage_per_week,
y = cgpa,
size = session_duration,
color = department,
text = paste(
"Department:", department,
"<br>CGPA:", round(cgpa, 2),
"<br>Weekly Usage:", usage_per_week,
"<br>Session Duration:", session_duration, "mins"
)
)
) +
geom_point(
alpha = 0.75
) +
scale_color_manual(
values = c(
"#29339b",
"#d8352a",
"#1f7a5c"
)
) +
labs(
title = "AI Usage and Academic Performance",
subtitle = "Comparing ChatGPT usage, CGPA and session duration across departments",
x = "ChatGPT Usage Per Week",
y = "CGPA",
color = "Department",
size = "Session Duration"
) +
theme_minimal(base_size = 14) +
theme(
plot.title = element_text(
face = "bold",
size = 18
),
plot.subtitle = element_text(
size = 12,
color = "grey30"
)
)
ggplotly(chart2, tooltip = "text")
Students are not only using AI always but many are using it because it makes studying faster and much easier. This has also raised important questions about whether this convenience is going towards the beginning to replace the deeper critical thinking and an independent problem solving technology.
reason_counts <- student_ai_clean %>%
count(usage_reason, usage_level) # add usage_level here
chart3 <- ggplot(
reason_counts,
aes(
x = n,
y = reorder(usage_reason, n),
fill = usage_level, # colour by usage level
text = paste(
"Reason:", usage_reason,
"<br>Usage Level:", usage_level,
"<br>Students:", n
)
)
) +
geom_col(width = 0.7, position = "stack") + # stacked
scale_fill_manual(
values = c(
"#1f7a5c",
"#29339b",
"#d8352a"
)
) +
labs(
title = "Convenience Drives AI Usage — Especially Heavy Users",
subtitle = "Reasons for using ChatGPT, broken down by usage level",
x = "Number of Students",
y = "Reason for Using ChatGPT",
fill = "Usage Level"
) +
theme_minimal(base_size = 14) +
theme(
plot.title = element_text(face = "bold", size = 18),
plot.subtitle = element_text(size = 12, color = "grey30")
) +
expand_limits(x = max(reason_counts$n) + 20)
ggplotly(chart3, tooltip = "text")
AI adoption is not identical across disciplines. Some departments appear to integrate ChatGPT more heavily into student workflows, while others show wider variation in usage behaviour.
chart4 <- ggplot(
student_ai_clean,
aes(
x = department,
y = usage_per_week,
fill = department,
text = paste(
"Department:", department,
"<br>Weekly Usage:", usage_per_week
)
)
) +
geom_boxplot(
alpha = 0.7,
outlier.shape = NA
) +
geom_jitter(
width = 0.15,
alpha = 0.5,
size = 2,
color = "black"
) +
scale_fill_manual(
values = c(
"#29339b",
"#d8352a",
"#1f7a5c"
)
) +
labs(
title = "AI Usage Patterns Differ Across Departments",
subtitle = "Distribution of weekly ChatGPT usage by academic discipline",
x = "Department",
y = "ChatGPT Usage Per Week"
) +
theme_minimal(base_size = 14) +
theme(
plot.title = element_text(
face = "bold",
size = 18
),
plot.subtitle = element_text(
size = 12,
color = "grey30"
),
legend.position = "none"
)
ggplotly(chart4, tooltip = "text")
As the generative AI tool become more increasingly embedded in the education system, concerns are raised around whether to constant the AI assistance which may reduce the independent problem solving and the critical thinking habits among students in thei day to day life.
chart5 <- ggplot(
student_ai_clean,
aes(
x = usage_per_week,
y = aptitude_score,
color = usage_level,
text = paste(
"Usage Level:", usage_level,
"<br>Weekly Usage:", usage_per_week,
"<br>Aptitude Score:", aptitude_score
)
)
) +
geom_point(
size = 3,
alpha = 0.75
) +
geom_smooth(
method = "lm",
se = FALSE,
color = "black",
linewidth = 1
) +
scale_color_manual(
values = c(
"#1f7a5c",
"#29339b",
"#d8352a"
)
) +
labs(
title = "Heavy AI Dependence May Affect Independent Thinking",
subtitle = "Relationship between ChatGPT usage and aptitude scores",
x = "ChatGPT Usage Per Week",
y = "Aptitude Score",
color = "Usage Level"
) +
theme_minimal(base_size = 14) +
theme(
plot.title = element_text(
face = "bold",
size = 18
),
plot.subtitle = element_text(
size = 12,
color = "grey30"
)
)
ggplotly(chart5, tooltip = "text")
## `geom_smooth()` using formula = 'y ~ x'
These findings also suggests that the generative AI has already become a daily routine component of the student learning. While many of the students report using of ChatGPT for their efficiency and improvment of answers, the data highlights the growing patterns of the dependence that may also influence independent thinking and academic habits.
Importantly, the visualisations that do not suggest AI directly causes a weaker academic performance or a lower aptitude. Instead, they only reveal emerging behaviorial pattern that the educators, universities and the students themselves may need to do, that critically reflect on as AI tools continue to evolve within the education systems.
As AI is becoming increasingly embedded in the everyday academic life, the challenges may no longer be in the way that whether students should use AI or not but how can they use it responsibly without slightly weakening their human skills education is designed to develop.
Manasi Bhangale. (2025). ChatGPT Usage and Critical Thinking Dataset. Kaggle.com. https://www.kaggle.com/datasets/manasibhangale/chatgpt-usage-and-critical-thinking-dataset
Python Developer. (2025). Emotion-Labeled Color Palettes for Branding. Kaggle.com. https://www.kaggle.com/datasets/programmer3/emotion-labeled-color-palettes-for-branding
ChatGPT (OpenAI, 2025) was used to assist me with little coding support, workflow guidance, the debugging and the structural planning for this interactive data visualisation project. All the analysis, interpretation, visualisation decisions and final submission content were reviewed, modified and verified by the author that is me.