library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.4.0 ✔ purrr 1.0.0
## ✔ tibble 3.1.8 ✔ dplyr 1.0.10
## ✔ tidyr 1.2.1 ✔ stringr 1.5.0
## ✔ readr 2.1.3 ✔ forcats 0.5.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
getwd()
## [1] "C:/Users/cjlan/OneDrive/Desktop/Sandbox"
setwd("C:/Users/cjlan/OneDrive/Desktop/Sandbox")
SD <- read.csv("Salary_Data.csv")
nulls_in_data <- is.na(SD)
null_count <- colSums(nulls_in_data)
SD_cleaned <- SD[complete.cases(SD), ]
#print(null_count)
#Check
nulls_in_data_new <- is.na(SD_cleaned)
null_count_new <- colSums(nulls_in_data_new)
print(null_count_new)
## Age Gender Education.Level Job.Title
## 0 0 0 0
## Years.of.Experience Salary
## 0 0
#View(SD_cleaned)
Avg_salary then filter for list
avg_salary <- mean(SD_cleaned$Salary)
avg_salary
## [1] 115327
Avg_sal_clean <- SD_cleaned %>%
filter(Salary >= avg_salary)
count(Avg_sal_clean)
## n
## 1 3315
Salary by Age before descriptive breakdown
library(ggplot2)
library(ggthemes)
## Warning: package 'ggthemes' was built under R version 4.2.3
plot(SD$Age, SD$Salary, main = "Scatter Plot of Salary by Age", xlab = "Age", ylab = "Salary", col = "pink3", pch = 16)
#intuituve results
Create the dataframe so we can knit a table
df2 <- data.frame(Salary <- SD_cleaned$Salary , Age <- SD_cleaned$Age, Gender <- SD_cleaned$Gender)
mean_salary_by_age_gender <- aggregate(Salary ~ Age + Gender, data = df2, FUN = mean)
library(knitr)
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.2.3
## Warning in !is.null(rmarkdown::metadata$output) && rmarkdown::metadata$output
## %in% : 'length(x) = 3 > 1' in coercion to 'logical(1)'
##
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rows
mean_salary_by_age_gender$Age <- as.numeric(mean_salary_by_age_gender$Age)
mean_salary_by_age_gender$Salary <- as.numeric(mean_salary_by_age_gender$Salary)
mean_salary_by_age_gender %>%
kable(Salary, format = "html") %>%
kable_styling() %>%
column_spec(2, bold = TRUE) %>%
# column_spec(1, background = "lightblue") %>%
row_spec(1:12, color = "black") %>%
row_spec(0, bold = TRUE, font_size = 16, color = "black",
background = "plum") #%>%
| Age | Gender | Salary |
|---|---|---|
| 21 | Female | 25000.00 |
| 22 | Female | 30722.00 |
| 23 | Female | 46174.53 |
| 24 | Female | 37552.89 |
| 25 | Female | 64330.79 |
| 26 | Female | 55500.47 |
| 27 | Female | 70025.36 |
| 28 | Female | 88297.30 |
| 29 | Female | 91146.31 |
| 30 | Female | 100924.14 |
| 31 | Female | 109786.04 |
| 32 | Female | 109423.18 |
| 33 | Female | 132461.94 |
| 34 | Female | 124316.88 |
| 35 | Female | 118721.02 |
| 36 | Female | 133427.44 |
| 37 | Female | 127065.56 |
| 38 | Female | 131924.56 |
| 39 | Female | 152786.39 |
| 40 | Female | 149622.18 |
| 41 | Female | 161078.63 |
| 42 | Female | 136413.27 |
| 43 | Female | 160586.23 |
| 44 | Female | 158794.15 |
| 45 | Female | 163025.33 |
| 46 | Female | 163437.05 |
| 47 | Female | 173750.00 |
| 48 | Female | 176430.57 |
| 49 | Female | 183591.03 |
| 50 | Female | 181245.88 |
| 51 | Female | 182531.77 |
| 52 | Female | 188159.11 |
| 54 | Female | 191268.44 |
| 55 | Female | 187557.40 |
| 56 | Female | 203677.00 |
| 57 | Female | 167157.33 |
| 58 | Female | 195000.00 |
| 60 | Female | 183915.50 |
| 22 | Male | 41666.67 |
| 23 | Male | 47541.75 |
| 24 | Male | 68117.48 |
| 25 | Male | 62617.30 |
| 26 | Male | 71054.69 |
| 27 | Male | 81881.74 |
| 28 | Male | 78861.73 |
| 29 | Male | 79139.21 |
| 30 | Male | 100868.88 |
| 31 | Male | 117475.77 |
| 32 | Male | 126254.47 |
| 33 | Male | 119854.42 |
| 34 | Male | 134548.76 |
| 35 | Male | 120463.76 |
| 36 | Male | 134486.18 |
| 37 | Male | 150937.01 |
| 38 | Male | 141347.70 |
| 39 | Male | 113260.00 |
| 40 | Male | 150474.27 |
| 41 | Male | 149658.09 |
| 42 | Male | 164146.34 |
| 43 | Male | 168524.36 |
| 44 | Male | 162037.66 |
| 45 | Male | 172020.97 |
| 46 | Male | 173265.96 |
| 47 | Male | 179215.23 |
| 48 | Male | 199241.16 |
| 49 | Male | 192098.83 |
| 50 | Male | 198853.25 |
| 51 | Male | 213986.41 |
| 52 | Male | 187391.00 |
| 53 | Male | 186685.60 |
| 54 | Male | 191835.22 |
| 55 | Male | 203448.00 |
| 56 | Male | 195000.00 |
| 57 | Male | 196666.67 |
| 58 | Male | 195834.67 |
| 60 | Male | 195000.00 |
| 61 | Male | 200000.00 |
| 62 | Male | 200000.00 |
| 23 | Other | 62852.00 |
| 25 | Other | 69032.00 |
| 31 | Other | 104127.00 |
| 37 | Other | 161393.00 |
| 53 | Other | 166109.00 |
| 54 | Other | 158788.00 |
#row_spec(1:10, background = "lightpink1")
NOTE: THE DATASET CONTAINS 3674 MALES AND 3014 FEMALES
SD_cleaned %>%
select(Gender, Age, Salary) %>%
filter(Gender %in% c("Male", "Female")) %>%
ggplot(aes(Age, Salary, color=Gender))+
geom_jitter(size=2, alpha = 0.5)+
geom_smooth()+
facet_wrap(~Gender)+
labs(x='Age', y='Salary') +
theme_linedraw()+
labs(title="Salary & Age by Gender")
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
Next, lets evaluate gender and salary, this time against years of experience
SD_cleaned %>%
select(Gender, Years.of.Experience, Salary) %>%
filter(Gender %in% c("Male", "Female")) %>%
ggplot(aes(Years.of.Experience, Salary, color=Gender))+
geom_jitter(size=2, alpha = 0.5)+
geom_smooth()+
facet_wrap(~Gender)+
labs(x='YOE', y='Salary') +
theme_linedraw()+
labs(title="Salary & YOE by Gender")
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'