Data visualization/데이터시각화(R)

데이터시각화(R)_Penguins

뉴욕킴 2023. 9. 16. 11:04

Penguins 자료 중 범주형 변수는 어떤 것들이 있는가?  

1. 라이브러리 설치 

palmerpenguins

2. 라이브러리 설치

install.packages("palmerpenguins")

3. 라이브러리 불러오기

library(palmerpenguins)

4. 저장 되어 있는 변수 확인 : ls() 함수 사용

ls(pos=2)
[1] "path_to_file" "penguins"     "penguins_raw"

5. 패키지에 포함된 펭귄 데이터셋 확인

penguins

6. 펭귄 데이터셋에서 종(species)별로 데이터의 빈도를 계산

table(penguins$species)
   Adelie Chinstrap    Gentoo 
      152        68       124

7. island 열에 어떤 값들이 포함되어 있는지, 각 값의 빈도 확인

table(penguins$island)
   Biscoe     Dream Torgersen 
      168       124        52 

8. sex 성별 값 확인

table(penguins$sex)
female   male 
   165    168 

9. ggplot 라이브러리 설치 및 불러오기 

install.packages("ggplot2")
library('ggplot2')

10. ggplot 패키지를 사용하여 x 축 = species 으로 사용하고, species의 빈도를 막대그래프로 그리기 

ggplot(penguins,aes(species))+geom_bar()
  • ggplot : 객체 생성
  • x 축 : species
  • geom_bar : 막대그래프 

11. TEMP 변수 만들기

TEMP = data.frame(species=names(table(penguins$species)),
+                   count=c(table(penguins$species)))
  • table(penguins$species) : species 열에서 각종 빈도 계산
  • names() : table 함수의 결과로부터 species의 이름 추출
  • count = : 함수의 결과로부터 추출한 빈도를 count열로 저장
  • data.frame() : 위에서 추출한 내용을 TEMP라는 새로운 데이터프레임으로 저장

12. TEMP 변수 확인

TEMP

13. penguins 데이터프레임의 species 열에서 고유한 종들의 이름 추출

names(table(penguins$species))
[1] "Adelie"    "Chinstrap" "Gentoo" 

14. c() : table() 함수의 결과를 벡터로 변환

c(table(penguins$species))
   Adelie Chinstrap    Gentoo 
      152        68       124 

15. species에 따른 빈도를 나타내는 막대 그래프 생성

ggplot(data = TEMP, aes(x = species, y = count)) + geom_bar(stat = 'identity')
  • data = TEMP
  • stat = 'identity' : 막대의 높이를 count값 그대로 사용하도록 지정하는 옵션 

16. species에 따른 빈도를 막대그래프로 그리기 

ggplot(TEMP,aes(x="", y=count, fill=species))+geom_bar(stat='identity')

17. dim() : 행과 열의 개수 확인

dim(penguins)
[1] 344   8

18. geom_bar() : 막대그래프 그리기 

ggplot(penguins,aes(species))+geom_bar()

 

  • 성별 추가 
ggplot(penguins,aes(species,fill=sex))+geom_bar()

  • species에 대한 빈도를 시각화 하는 막대그래프 생성
ggplot(TEMP,aes(x="",y=count,fill=species))+geom_bar(stat='identity')

  • coord_polar("y") : 원형 그래프로 변경 
ggplot(TEMP,aes(x="",y=count,fill=species))+geom_bar(stat='identity')+coord_polar("y")


bill_length_mm, bill_depth_mm, flipper_length_mm, body_mass_g의 분포가 species 별로 어 떻게 다른지 알아보려고 한다. 이에 알맞은 그림을 그리고 살펴보시오

 

19. 산점도 

 

  • geom_point() : 각 데이터 포인트를 점으로 표시하는 레이어 추가 
ggplot(penguins,aes(species,bill_length_mm))+geom_point()

  • geom_jitter() : 산점도에 점으로 표시하되, 겹치지 않도록 약간의 "흩뿌림" 추가
ggplot(penguins,aes(species,bill_length_mm))+geom_jitter()

  • geom_boxplot() : 상자 그림으로 데이터의 분포를 시작적으로 표현(데이터의 중앙값, 사분위수, 이상치 표시)
ggplot(penguins, aes(species, bill_length_mm))+geom_boxplot()

  • geom_violin() : 분포의 밀도를 더 자세히 표현
ggplot(penguins,aes(species,bill_length_mm))+geom_violin()

  • geom_violin()+geom_boxplot()
ggplot(penguins,aes(species,bill_length_mm))+geom_violin()+geom_boxplot()

  • width = 0.2 → 상자 그림의 너비 설정, 상자의 폭을 좁게 만든다.
ggplot(penguins,aes(species,bill_length_mm))+geom_violin()+geom_boxplot(width=0.2)

  • geom_freqpoly () : 빈도 다각형을 생성하여 연속 데이터의 분포를 시각화함 
ggplot(penguins,aes(bill_length_mm,color=species))+geom_freqpoly()

ggplot(penguins,aes(bill_length_mm,color=species))+geom_freqpoly(linewidth=3)

  • geom_density() : 밀도 곡선을 생성하여 연속 데이터의 분포를 부드러운 곡선 형태로 시각화
ggplot(penguins,aes(bill_length_mm,color=species))+geom_density()

ggplot(penguins,aes(bill_length_mm,color=species))+geom_density(linewidth=3)

  • geom_histogram() : 히스토그램을 생성하여 데이터의 분포를 막대 그래프 형태로 시각화 
ggplot(penguins,aes(bill_length_mm,color=species))+geom_histogram()

ggplot(penguins,aes(bill_length_mm,color=species))+geom_histogram()+facet_wrap(~species)


body_mass_g와 나머지 3개의 연속변수들 (bill_length_mm, bill_depth_mm, flipper_length_mm) 의 관계를 알아보려고 한다. 수업시간에 배운 내용을 바탕으로 살펴보시오

  • geom_point() : 산점도를 생성하여 두 연속 변수 간의 관계를 점으로 표시하여 시각화
ggplot(penguins, aes(bill_length_mm, body_mass_g))+geom_point()

bill_length_mm 과 body_mass_g간의 관계를 산점도로 나타냄

  • geom_smooth(method="lm") : 선형 회귀 분석 결과를 시각화 함, method="lm"은 선형 회귀 모델을 사용한다는 것을 의미 → 산점도 위에 선형 회귀 선 표시 
ggplot(penguins, aes(bill_length_mm, body_mass_g))+geom_point()+geom_smooth(method="lm")


species별 성별과 island 분포를 살펴보시오.

  • ggmosaic : 데이터를 분할하여 범주, 하위 범주, 그룹 간의 관계를 시각화 하는데 사용

→ 다양한 범주로 나뉜 데이터를 모자이크 그래픽으로 표현하면 데이터 패턴을 쉽게 식별 가능

 

install.packages("ggmosaic")
library(ggmosaic)
Ptable = table(penguins$species,penguins$island,penguins$sex)
  • Ptable : 3차원 테이블
  • 첫 번째 차원: penguins$species (펭귄 종류)
  • 두 번째 차원: penguins$island (서식지 섬)
  • 세 번째 차원: penguins$sex (성별)
Ptable
Pdata = as.data.frame(Ptable)
Pdata
colnames(Pdata)[1:3] = c("species","island","sex")
ggplot(Pdata)+
+     geom_mosaic(aes(x=product(species),weight=Freq,fill=sex))

4개의 연속변수를 산점도 행렬을 이용하여 살펴보시오

install.packages("GGally")
library(GGally)
ggpairs(penguins[,3:6])
  • ggpairs : 다변량 데이터셋의 변수들 간의 산점도와 히스토그램 동시에 그릴 수 있음
  • penguins의 3번째 열부터 6번째 열까지의 변수에 대한 산점도 행렬 그릴 때 사용