Praca domowa - Raport5 Analiza Danych

Wizualizacja danych

library(ISLR)
data("Wage")
library(ggplot2)
## Warning: pakiet 'ggplot2' został zbudowany w wersji R 4.1.3
library(tidyverse)
## Warning: pakiet 'tidyverse' został zbudowany w wersji R 4.1.3
## Warning: pakiet 'tibble' został zbudowany w wersji R 4.1.3
## Warning: pakiet 'tidyr' został zbudowany w wersji R 4.1.3
## Warning: pakiet 'readr' został zbudowany w wersji R 4.1.3
## Warning: pakiet 'purrr' został zbudowany w wersji R 4.1.3
## Warning: pakiet 'dplyr' został zbudowany w wersji R 4.1.3
## Warning: pakiet 'stringr' został zbudowany w wersji R 4.1.3
## Warning: pakiet 'forcats' został zbudowany w wersji R 4.1.3
## Warning: pakiet 'lubridate' został zbudowany w wersji R 4.1.3
## -- Attaching core tidyverse packages ------------------------ tidyverse 2.0.0 --
## v dplyr     1.1.2     v readr     2.1.4
## v forcats   1.0.0     v stringr   1.5.0
## v lubridate 1.9.2     v tibble    3.2.1
## v purrr     1.0.1     v tidyr     1.3.0
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
## i Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
theme_set(theme_bw())

Wykresy zmiennej ilościowej

Wage %>%
  filter(race=="1. White") %>%
ggplot(aes(x = age)) +
  geom_histogram(
    aes(fill= factor (wage), alpha=0.8) 
    ,bins = 20
  ) +
  labs(title = 'Wysokość płacy w zależności od wieku')+
  labs(x = "Wiek", y = "Płaca")+
  theme(legend.position = 'none')

Na wykresie przedstawione są dane dotyczące płacy w zależności od wieku dla osób rasy białej. Wykres ukazuje, że płaca ma tendencję do wzrostu wraz z wiekiem, co może być związane z postępującym doświadczeniem zawodowym i zdobywanymi kwalifikacjami w miarę upływu czasu. Płace osiągają maksimum po 40 roku życia i stosunkowo zaczynają maleć. Obserwuje się również pewną zmienność w płacy między różnymi grupami wiekowymi, co może wynikać z czynników takich jak poziom edukacji, doświadczenie zawodowe oraz specyfika pracy.

ggplot(Wage, aes(x=wage, fill= health_ins)) +
  geom_density(alpha=.25) +
  labs(title = 'Gęstość rozkładu płac')+
  labs(x = "Płaca", y = "Gęstość")

Na wykresie gęstości rozkładu płac według posiadania ubezpieczenia zdrowotnego można zobaczyć, jak posiadanie lub brak ubezpieczenia zdrowotnego wpływa na poziom wynagrodzenia w populacji. Większa liczba pracowników nieposiadających ubezpieczenia zdrowotnego ma podobne wynagrodzenia poniżej 100. Natomiast większa liczba pracowników posiadających ubezpieczenie zdrowotne ma podobne wynagrodzenia już powyżej 100. Zatem posiadanie ubezpieczenia znacznie wpływa na wysokość płac pracowników.

Wykresy zmiennej jakościowej

Wage %>%
  filter(maritl != '') %>%
  ggplot(aes(maritl)) +
  geom_bar(aes(fill = maritl), alpha=0.4, color="black")+
  theme(legend.position = 'none')+
  labs(title = 'Pracownicy z podziałem na stan cywilny')+
  labs(x = "Stan cywilny", y = "Liczba")

Wykres słupkowy przedstawia liczbę pracowników z podziałem na różne stany cywilne. Na osi poziomej wykresu znajdują się kategorie stanu cywilnego. Analizując wykres można zauważyć, że znaczna część pracowników posiada współmałżonka. Natomiast liczba pracowników, którzy stracili swojego małżonka, jest najmniejsza wśród wszystkich kategorii stanu cywilnego. Dość liczną grupą są również pracownicy nigdy niezaślubieni.

Wykresy dwóch zmiennych ilościowych

ggplot(Wage, aes(x = age, y = wage)) +
  geom_point(aes(color = health_ins)) +
  geom_smooth(
    method = 'loess'
    ,color="black"
    ,se = FALSE
  ) +
  labs(title = 'Płaca pracowników wg wieku z podziałem na posiadanie ubezpieczenia zdrowotnego')+
  labs(x = "wiek", y = "Płaca")

Analizując wykres, można zauważyć, że istnieje zróżnicowanie w płacach pracowników w zależności od wieku oraz posiadania ubezpieczenia zdrowotnego. W przypadku młodych pracowników, którzy posiadają ubezpieczenie zdrowotne, można zauważyć, że ich płace zaczynają się od niższych wartości na początku kariery zawodowej, a następnie wzrastają wraz z wiekiem. Natomiast młodzi pracownicy bez ubezpieczenia zdrowotnego mają podobne trendy wzrostowe, ale ich płace są nieco niższe niż w przypadku osób ubezpieczonych.

Wykresy dwóch zmiennych jakościowych

Wage %>%
  filter(race != '') %>%
  ggplot(aes(x = education, y = race)) +
  geom_jitter(aes(color = race))+
  labs(title = 'Wykształcenie pracowników względem rasy')+
  labs(x = "Edukacja", y= "Rasa")

Wykres przedstawia rozkład wykształcenia pracowników w zależności od rasy. Najliczniejsza rasa biała w większości posiada wykształcenie średnie, natomiast w mniejszości wykształcenie niższe niż średnie. Rasa czarna w wiekszości również posiada wykształcenie średnie, a w mniejszości wykształcenie doktorskie. Azjaci w większości posiada wykształcenie doktorskie, natomiast w mniejszości niżej niż średnie. Najmniej liczne inne rasy w większości posiadają wykształcenie średnie, natomiast w mniejszości doktorskie.

Wykresy zmiennej ilościowej vs zmiennej jakościowej

medians = Wage %>%
  group_by(health_ins) %>%
  summarize(m = median(wage, na.rm = TRUE))

ggplot(Wage, aes(x = health_ins, y = wage)) +
  geom_boxplot(
    aes(fill = health_ins)
    ,outlier.alpha = 0.25
  ) +
  geom_text(
    data = medians
    ,aes(x = health_ins, y = m, label = m)
    ,color = 'black'
    ,hjust = 7
  ) +
  stat_boxplot(geom ='errorbar', position = 'dodge') +
  stat_summary(
    aes(ymax = ..y.., ymin = ..y..)
    ,fun = mean
    ,geom = 'errorbar'
    ,width = .75
    ,linetype = 'solid'
    ,position = 'dodge'
    ,color = 'white'
    ,size = 1
  ) +
  theme(legend.position = 'none')+
  labs(title = 'Płaca pracowników według posiadanego ubezpieczenia')+
  labs(x = "Ubezpieczenie zdrowotne", y= "Płaca")

Wykres pozwala na porównanie rozkładu płacy między pracownikami posiadającymi ubezpieczenie zdrowotne a pracownikami nieposiadającymi tego ubezpieczenia.Mimo widocznie wyższej płacy pracowników z ubezpieczeniem, można również zauważyć, że średnia płaca pracowników posiadających ubezpieczenie zdrowotne jest o wiele wyższa od mediany niż w przypadku pracowników nieposiadających ubezpieczenia zdrowotnego.

Wykresy bąbelkowe

edukacja <- Wage %>% 
  select(education) %>% 
  unlist() %>% 
  unlist() %>% 
  trimws() %>% 
  table() %>% 
  as.data.frame()

edukacja <- data.frame(
  education = edukacja$.
  ,`logwage` = edukacja$Freq
  ,`wage Average` = NA
  ,`age Average` = NA
)

for (i in 1:nrow(edukacja)) {
  edukacja$wage.Average[i] <- Wage %>% 
    filter(str_detect(education, edukacja$education[i] %>%
                        as.character() %>% eval())) %>%
    select(wage) %>% unlist() %>% mean(na.rm = TRUE)
  
  edukacja$age.Average[i] <- Wage %>% 
    filter(str_detect(education, edukacja$education[i] %>%
                        as.character() %>% eval())) %>%
    select(age) %>% unlist() %>% mean(na.rm = TRUE)
}

ggplot(edukacja, aes(wage.Average, age.Average, label = education)) +
  geom_point(aes(color = education, size = logwage)) +
  geom_text_repel() +
  theme(legend.position = 'none')+
  labs(title = 'Średnia płaca pracowników według wieku z podziałem na wykształcenie')

Wykres pokazuje zależność między średnią płacą a średnim wiekiem pracowników w zależności od ich poziomu wykształcenia. Można zauważyć, że wysokość poziomu wykształcenia wpływa na wysokość średniego wieku pracownika oraz jego średnią płacę.

#kilka wykresów na jednym #płace w podziale na rasy

ggplot(Wage, aes(x = age, y = wage)) +
  geom_point() +
  facet_wrap(~ race) +
  labs(x = "Wiek", y = "Płaca", title = "Wykresy dla różnych ras")

Na wykresach widać, że najliczniejszą rasą są biali, następnie czarni, azjaci i inne rasy. Dzięki układowi czterech wykresów obok siebie można łatwo porównać wzorce i zależności między wiekiem a płacą w różnych grupach rasowych. Występują niewielkie różnice w rozkładzie płac w zależności od wieku w poszczególnych grupach rasowych.

Wage %>%
  ggplot(aes(x = wage)) +
  geom_histogram(
    aes(fill = health_ins)
    ,bins = 20
    ,color = 'black'
  ) +
  # facet_grid(.~ Series.or.Movie) +
  # facet_grid(Series.or.Movie ~ .) +
  # facet_grid(Runtime ~ Series.or.Movie, scales = 'free') +
  # facet_wrap(vars(Series.or.Movie), ncol = 2) +
   facet_wrap(vars(health_ins), nrow = 2) +
  # facet_wrap(vars(Series.or.Movie, Runtime), nrow = 2, scales = 'free') +
  theme(legend.position = 'none')+
  labs(title = 'Wykresy płac z podziałem na posiadanie ubezpieczenia')+
  labs(x = "Płaca")

Wykresy przedstawiają rozkład płac w zależności od posiadania ubezpieczenia zdrowotnego. Można zauważyć, że jest więcej pracowników posiadających ubezpieczenie zdrowotne. Natomiast ci, którzy go nie posiadają posiadają niższą płacę.