This notebook presents an exploratory data analysis (EDA) of the
built-in mtcars dataset in R.
The objective of this analysis is to understand how different
vehicle characteristics
(such as weight, horsepower, and engine configuration) relate to
fuel efficiency (mpg).
The analysis focuses on identifying patterns and relationships
between variables,
particularly examining how factors like the number of cylinders and
vehicle weight
impact miles per gallon.
To achieve this, we apply data transformation techniques using the
tidyverse package
and generate multiple visualizations using ggplot2. These
visualizations include
scatter plots, line graphs, and bar charts to explore both
individual trends
and grouped summaries.
Key steps in this project:
1. Data preparation and transformation (factor conversion, grouping,
summarization)
2. Exploratory visualization of relationships between variables
3. Comparative analysis across different cylinder categories
This analysis aims to provide clear visual insights into the
structure of the dataset
and highlight the main factors that influence fuel efficiency.
plot(cars)

install.packages("tidyverse")
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/sys_3.4.3.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/bit_4.6.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/ps_1.9.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/farver_2.1.2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/labeling_0.4.3.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/RColorBrewer_1.1-3.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/viridisLite_0.4.3.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/rematch_2.0.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/askpass_1.2.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/bit64_4.6.0-1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/prettyunits_1.2.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/processx_3.8.6.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/backports_1.5.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/generics_0.1.4.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/blob_1.3.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/DBI_1.3.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/tidyselect_1.2.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/withr_3.0.2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/data.table_1.18.2.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/gtable_0.3.6.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/isoband_0.3.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/S7_0.2.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/scales_1.4.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/gargle_1.6.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/uuid_1.2-2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/cellranger_1.1.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/curl_7.0.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/ids_1.0.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/rematch2_2.1.2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/cpp11_0.5.3.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/pkgconfig_2.0.3.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/openssl_2.3.5.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/timechange_0.4.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/utf8_1.2.6.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/systemfonts_1.3.2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/textshaping_1.0.5.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/clipr_0.8.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/crayon_1.5.3.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/vroom_1.7.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/tzdb_0.5.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/progress_1.2.3.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/callr_3.7.6.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/selectr_0.5-1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/broom_1.0.12.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/conflicted_1.2.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/dbplyr_2.5.2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/dplyr_1.2.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/dtplyr_1.3.3.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/forcats_1.0.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/ggplot2_4.0.2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/googledrive_2.1.2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/googlesheets4_1.1.2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/haven_2.5.5.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/hms_1.1.4.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/httr_1.4.8.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/lubridate_1.9.5.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/modelr_0.1.11.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/pillar_1.11.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/purrr_1.2.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/ragg_1.5.2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/readr_2.2.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/readxl_1.4.5.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/reprex_2.1.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/rstudioapi_0.18.0.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/rvest_1.0.5.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/tibble_3.3.1.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/tidyr_1.3.2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/xml2_1.5.2.tar.gz'
trying URL 'http://rspm/default/__linux__/noble/latest/src/contrib/tidyverse_2.0.0.tar.gz'
The downloaded source packages are in
‘/tmp/RtmpHTbFc4/downloaded_packages’
library(tidyverse) # Load the tidyverse package for data manipulation and visualization
library(ggplot2) # Load ggplot2 for creating plots
# Load the mtcars dataset (built into R)
data_mtcars <- mtcars
# View the first few rows to understand the data
head(data_mtcars)
# Convert 'am' (transmission type) and 'cyl' (number of cylinders) to factors for categorical plotting
data_mtcars$am <- as.factor(data_mtcars$am)
data_mtcars$cyl <- as.factor(data_mtcars$cyl)
# Create a scatter plot of car weight vs. miles per gallon, colored by cylinder count
ggplot(data_mtcars, aes(x = wt, y = mpg, color = cyl)) +
geom_point() + # Add points to the plot
labs(title = "Weight vs. Miles Per Gallon", x = "Weight (1000 lbs)", y = "Miles Per Gallon") # Add plot labels

#Create a line graph of ordered mpg by the row number.
data_mtcars_line <- data_mtcars %>% mutate(index = row_number()) #add index column so we can plot it
ggplot(data_mtcars_line, aes(x = index, y = mpg)) +
geom_line() + # add a line to the plot
labs(title = "Miles Per Gallon by Index", x = "Index", y = "Miles Per Gallon") # add plot labels

# Create a horizontal bar chart of the average horsepower grouped by cylinder count
hp_by_cyl <- data_mtcars %>% group_by(cyl) %>% summarize(avg_hp = mean(hp)) # Calculate average horsepower for each cylinder group
ggplot(hp_by_cyl, aes(y = cyl, x = avg_hp)) +
geom_bar(stat = 'identity') + # Create bars based on the calculated averages
labs(title = "Average HP by Cylinder Count", y = "Cylinder Count", x = "Average Horsepower") # Add plot labels

#Create a stacked bar chart of average mpg, disp, hp, and wt, grouped by cyl.
bar_data_mtcars <- data_mtcars %>% group_by(cyl) %>% summarize(mpg = mean(mpg), disp = mean(disp), hp = mean(hp), wt = mean(wt)) %>% pivot_longer(cols = c("mpg", "disp", "hp", "wt"), names_to = "Measurement", values_to = "Average") #Calculate average values for each measurement, and pivot the data into a long format.
ggplot(bar_data_mtcars, aes(x = cyl, fill = Measurement, y = Average)) +
geom_bar(stat = "identity") + #Create bars based on the calculated averages
labs(title = "Average Measurements by Cylinder Count", x = "Cylinder Count", y = "Average Measurement") #add plot labels

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKIyBUaGlzIG5vdGVib29rIHByZXNlbnRzIGFuIGV4cGxvcmF0b3J5IGRhdGEgYW5hbHlzaXMgKEVEQSkgb2YgdGhlIGJ1aWx0LWluIG10Y2FycyBkYXRhc2V0IGluIFIuCiMgVGhlIG9iamVjdGl2ZSBvZiB0aGlzIGFuYWx5c2lzIGlzIHRvIHVuZGVyc3RhbmQgaG93IGRpZmZlcmVudCB2ZWhpY2xlIGNoYXJhY3RlcmlzdGljcyAKIyAoc3VjaCBhcyB3ZWlnaHQsIGhvcnNlcG93ZXIsIGFuZCBlbmdpbmUgY29uZmlndXJhdGlvbikgcmVsYXRlIHRvIGZ1ZWwgZWZmaWNpZW5jeSAobXBnKS4KCiMgVGhlIGFuYWx5c2lzIGZvY3VzZXMgb24gaWRlbnRpZnlpbmcgcGF0dGVybnMgYW5kIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB2YXJpYWJsZXMsIAojIHBhcnRpY3VsYXJseSBleGFtaW5pbmcgaG93IGZhY3RvcnMgbGlrZSB0aGUgbnVtYmVyIG9mIGN5bGluZGVycyBhbmQgdmVoaWNsZSB3ZWlnaHQgCiMgaW1wYWN0IG1pbGVzIHBlciBnYWxsb24uCgojIFRvIGFjaGlldmUgdGhpcywgd2UgYXBwbHkgZGF0YSB0cmFuc2Zvcm1hdGlvbiB0ZWNobmlxdWVzIHVzaW5nIHRoZSB0aWR5dmVyc2UgcGFja2FnZSAKIyBhbmQgZ2VuZXJhdGUgbXVsdGlwbGUgdmlzdWFsaXphdGlvbnMgdXNpbmcgZ2dwbG90Mi4gVGhlc2UgdmlzdWFsaXphdGlvbnMgaW5jbHVkZSAKIyBzY2F0dGVyIHBsb3RzLCBsaW5lIGdyYXBocywgYW5kIGJhciBjaGFydHMgdG8gZXhwbG9yZSBib3RoIGluZGl2aWR1YWwgdHJlbmRzIAojIGFuZCBncm91cGVkIHN1bW1hcmllcy4KCiMgS2V5IHN0ZXBzIGluIHRoaXMgcHJvamVjdDoKIyAxLiBEYXRhIHByZXBhcmF0aW9uIGFuZCB0cmFuc2Zvcm1hdGlvbiAoZmFjdG9yIGNvbnZlcnNpb24sIGdyb3VwaW5nLCBzdW1tYXJpemF0aW9uKQojIDIuIEV4cGxvcmF0b3J5IHZpc3VhbGl6YXRpb24gb2YgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHZhcmlhYmxlcwojIDMuIENvbXBhcmF0aXZlIGFuYWx5c2lzIGFjcm9zcyBkaWZmZXJlbnQgY3lsaW5kZXIgY2F0ZWdvcmllcwoKIyBUaGlzIGFuYWx5c2lzIGFpbXMgdG8gcHJvdmlkZSBjbGVhciB2aXN1YWwgaW5zaWdodHMgaW50byB0aGUgc3RydWN0dXJlIG9mIHRoZSBkYXRhc2V0IAojIGFuZCBoaWdobGlnaHQgdGhlIG1haW4gZmFjdG9ycyB0aGF0IGluZmx1ZW5jZSBmdWVsIGVmZmljaWVuY3kuCgpgYGB7cn0KcGxvdChjYXJzKQpgYGAKCmBgYHtyfQppbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQpgYGAKCgpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpICMgTG9hZCB0aGUgdGlkeXZlcnNlIHBhY2thZ2UgZm9yIGRhdGEgbWFuaXB1bGF0aW9uIGFuZCB2aXN1YWxpemF0aW9uCmxpYnJhcnkoZ2dwbG90MikgIyBMb2FkIGdncGxvdDIgZm9yIGNyZWF0aW5nIHBsb3RzCgojIExvYWQgdGhlIG10Y2FycyBkYXRhc2V0IChidWlsdCBpbnRvIFIpCmRhdGFfbXRjYXJzIDwtIG10Y2FycwoKIyBWaWV3IHRoZSBmaXJzdCBmZXcgcm93cyB0byB1bmRlcnN0YW5kIHRoZSBkYXRhCmhlYWQoZGF0YV9tdGNhcnMpCmBgYAoKCmBgYHtyfQojIENvbnZlcnQgJ2FtJyAodHJhbnNtaXNzaW9uIHR5cGUpIGFuZCAnY3lsJyAobnVtYmVyIG9mIGN5bGluZGVycykgdG8gZmFjdG9ycyBmb3IgY2F0ZWdvcmljYWwgcGxvdHRpbmcKZGF0YV9tdGNhcnMkYW0gPC0gYXMuZmFjdG9yKGRhdGFfbXRjYXJzJGFtKQpkYXRhX210Y2FycyRjeWwgPC0gYXMuZmFjdG9yKGRhdGFfbXRjYXJzJGN5bCkKYGBgCgoKYGBge3J9CiMgQ3JlYXRlIGEgc2NhdHRlciBwbG90IG9mIGNhciB3ZWlnaHQgdnMuIG1pbGVzIHBlciBnYWxsb24sIGNvbG9yZWQgYnkgY3lsaW5kZXIgY291bnQKZ2dwbG90KGRhdGFfbXRjYXJzLCBhZXMoeCA9IHd0LCB5ID0gbXBnLCBjb2xvciA9IGN5bCkpICsKICBnZW9tX3BvaW50KCkgKyAjIEFkZCBwb2ludHMgdG8gdGhlIHBsb3QKICBsYWJzKHRpdGxlID0gIldlaWdodCB2cy4gTWlsZXMgUGVyIEdhbGxvbiIsIHggPSAiV2VpZ2h0ICgxMDAwIGxicykiLCB5ID0gIk1pbGVzIFBlciBHYWxsb24iKSAjIEFkZCBwbG90IGxhYmVscwpgYGAKCgpgYGB7cn0KI0NyZWF0ZSBhIGxpbmUgZ3JhcGggb2Ygb3JkZXJlZCBtcGcgYnkgdGhlIHJvdyBudW1iZXIuCmRhdGFfbXRjYXJzX2xpbmUgPC0gZGF0YV9tdGNhcnMgJT4lIG11dGF0ZShpbmRleCA9IHJvd19udW1iZXIoKSkgI2FkZCBpbmRleCBjb2x1bW4gc28gd2UgY2FuIHBsb3QgaXQKCmdncGxvdChkYXRhX210Y2Fyc19saW5lLCBhZXMoeCA9IGluZGV4LCB5ID0gbXBnKSkgKwogIGdlb21fbGluZSgpICsgIyBhZGQgYSBsaW5lIHRvIHRoZSBwbG90CiAgbGFicyh0aXRsZSA9ICJNaWxlcyBQZXIgR2FsbG9uIGJ5IEluZGV4IiwgeCA9ICJJbmRleCIsIHkgPSAiTWlsZXMgUGVyIEdhbGxvbiIpICMgYWRkIHBsb3QgbGFiZWxzCmBgYAoKCmBgYHtyfQojIENyZWF0ZSBhIGhvcml6b250YWwgYmFyIGNoYXJ0IG9mIHRoZSBhdmVyYWdlIGhvcnNlcG93ZXIgZ3JvdXBlZCBieSBjeWxpbmRlciBjb3VudApocF9ieV9jeWwgPC0gZGF0YV9tdGNhcnMgJT4lIGdyb3VwX2J5KGN5bCkgJT4lIHN1bW1hcml6ZShhdmdfaHAgPSBtZWFuKGhwKSkgIyBDYWxjdWxhdGUgYXZlcmFnZSBob3JzZXBvd2VyIGZvciBlYWNoIGN5bGluZGVyIGdyb3VwCgpnZ3Bsb3QoaHBfYnlfY3lsLCBhZXMoeSA9IGN5bCwgeCA9IGF2Z19ocCkpICsKICBnZW9tX2JhcihzdGF0ID0gJ2lkZW50aXR5JykgKyAjIENyZWF0ZSBiYXJzIGJhc2VkIG9uIHRoZSBjYWxjdWxhdGVkIGF2ZXJhZ2VzCiAgbGFicyh0aXRsZSA9ICJBdmVyYWdlIEhQIGJ5IEN5bGluZGVyIENvdW50IiwgeSA9ICJDeWxpbmRlciBDb3VudCIsIHggPSAiQXZlcmFnZSBIb3JzZXBvd2VyIikgIyBBZGQgcGxvdCBsYWJlbHMKYGBgCgoKYGBge3J9CiNDcmVhdGUgYSBzdGFja2VkIGJhciBjaGFydCBvZiBhdmVyYWdlIG1wZywgZGlzcCwgaHAsIGFuZCB3dCwgZ3JvdXBlZCBieSBjeWwuCmJhcl9kYXRhX210Y2FycyA8LSBkYXRhX210Y2FycyAlPiUgZ3JvdXBfYnkoY3lsKSAlPiUgc3VtbWFyaXplKG1wZyA9IG1lYW4obXBnKSwgZGlzcCA9IG1lYW4oZGlzcCksIGhwID0gbWVhbihocCksIHd0ID0gbWVhbih3dCkpICU+JSBwaXZvdF9sb25nZXIoY29scyA9IGMoIm1wZyIsICJkaXNwIiwgImhwIiwgInd0IiksIG5hbWVzX3RvID0gIk1lYXN1cmVtZW50IiwgdmFsdWVzX3RvID0gIkF2ZXJhZ2UiKSAjQ2FsY3VsYXRlIGF2ZXJhZ2UgdmFsdWVzIGZvciBlYWNoIG1lYXN1cmVtZW50LCBhbmQgcGl2b3QgdGhlIGRhdGEgaW50byBhIGxvbmcgZm9ybWF0LgoKZ2dwbG90KGJhcl9kYXRhX210Y2FycywgYWVzKHggPSBjeWwsIGZpbGwgPSBNZWFzdXJlbWVudCwgeSA9IEF2ZXJhZ2UpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsgI0NyZWF0ZSBiYXJzIGJhc2VkIG9uIHRoZSBjYWxjdWxhdGVkIGF2ZXJhZ2VzCiAgbGFicyh0aXRsZSA9ICJBdmVyYWdlIE1lYXN1cmVtZW50cyBieSBDeWxpbmRlciBDb3VudCIsIHggPSAiQ3lsaW5kZXIgQ291bnQiLCB5ID0gIkF2ZXJhZ2UgTWVhc3VyZW1lbnQiKSAjYWRkIHBsb3QgbGFiZWxzCmBgYAoK