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"
)

Introduction

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.

Dataset Limitations

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.

Loading and Exploring the Dataset

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

Cleaning and Preparing the Dataset

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

Chart 1 — Student Dependence on ChatGPT

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")

Chart 2 — AI Usage and Academic Performance

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")

Chart 3 — Why Students Turn to ChatGPT

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")

Chart 4 — AI Usage Across Academic Departments

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")

Chart 5 — AI Dependency and Student Aptitude

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'

Conclusion

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.

References

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

Generative AI Acknowledgement

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.