R에서 ggplot2를 사용하여 산점도 그리기 예제

⚡ 스마트 요약

R에서 ggplot2를 사용하여 산점도를 그리려면 geom_point() 함수를 이용해 두 개의 연속 변수를 x축과 y축에 매핑해야 합니다. 이 가이드에서는 그룹화에 대해 다룹니다.ping 색상, 로그 변환, 적합 회귀선, 레이블, 패싯, 겹침 수정, 배율, 테마 및 저장 기능을 통해 다양한 설정을 조정할 수 있습니다.

  • 📍 기본 구문: ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point()는 데이터와 지도를 기반으로 플롯을 생성합니다.ping그리고 기하학.
  • 🎨 그룹 색칠하기: geom_point() 내부에서 aes(color = factor(gear))는 각 요인 수준별로 포인트를 하나의 색상으로 분할합니다.
  • 📈 추세선: stat_smooth(method = “lm”)는 적합된 회귀선을 겹쳐 표시하고, se = FALSE는 신뢰 구간을 제거합니다.
  • 🗂️ 패싯팅: facet_wrap() 함수는 공통된 스케일을 사용하여 그룹당 하나의 패널을 그리므로 모든 계열을 하나의 차트에 빽빽하게 넣는 것보다 효율적입니다.
  • 🔁 과잉 플롯: 알파 값을 낮추거나, 점들을 약간씩 움직이거나, 마커들이 서로 겹쳐 쌓일 때는 geom_hex() 함수로 전환해 보세요.
  • 💾 내 보내다: ggsave(“plot.png”, width = 8, height = 5, dpi = 300)는 마지막 플롯을 작업 디렉터리에 저장합니다.

ggplot2를 사용하여 R에서 산점도 그리기

데이터 분석에서 그래프가 중요한 이유

그래프는 데이터 분석 프로세스의 세 번째 부분입니다. 첫 번째 부분은 대략 데이터 예시trac기, 두 번째 부분에서는 다음을 다룹니다. 데이터 정리 및 조작. 마침내 데이터 과학자는 다음을 수행해야 할 수도 있습니다. 결과를 그래픽으로 전달.

데이터 과학자의 업무 흐름은 아래 그림에 요약되어 있습니다.

  • 데이터 과학자의 첫 번째 임무는 연구 질문을 정의하는 것입니다. 이 연구 질문은 프로젝트의 목표와 목표에 따라 다릅니다.
  • 그 후 가장 눈에 띄는 작업 중 하나가 Feature Engineering입니다. 데이터 과학자는 데이터를 수집, 조작, 정리해야 합니다.
  • 이 단계가 완료되면 데이터 세트 탐색을 시작할 수 있습니다. 때로는 새로운 발견으로 인해 원래의 가설을 다듬고 변경해야 하는 경우도 있습니다.

R의 산점도

  • 설명 분석이 달성되면 데이터 과학자는 독자의 능력을 고려해야 합니다. 기본 개념과 모델을 이해하다.
  • 그의 결과는 모든 이해관계자가 이해할 수 있는 형식으로 제시되어야 합니다. 가장 좋은 방법 중 하나는 소통 결과는 그래프.
  • 그래프는 복잡한 분석을 단순화하는 놀라운 도구입니다.

이 튜토리얼의 나머지 부분에서는 ggplot2 패키지를 사용하여 이러한 그래프를 작성하는 방법을 설명합니다.

ggplot2 패키지

이 튜토리얼에서는 ggplot2를 사용하여 R에서 차트를 만드는 방법을 중점적으로 다룹니다.

이 튜토리얼에서는 ggplot2 패키지를 사용합니다. 이 패키지는 2005년 Leland Wilkinson이 설명한 그래픽 문법(Grammar of Graphics)을 구현합니다. ggplot2는 유연하고 다양한 테마를 제공하며, 그래프를 매우 세밀하게 지정할 수 있도록 해줍니다.trac참고로, 이 프로그램은 3차원 또는 대화형 그래픽을 생성하지 않습니다. 그러한 기능을 사용하려면 plotly 또는 rgl과 같은 패키지가 필요합니다.

ggplot2에서 그래프는 다음 인수로 구성됩니다.

  • 데이터
  • 미적 지도ping
  • 기하학적 객체
  • 통계적 변환
  • 저울
  • 좌표계
  • 위치 조정
  • 면처리

튜토리얼에서 이러한 인수를 제어하는 ​​방법을 배우게 됩니다.

ggplot2의 기본 구문은 다음과 같습니다.

ggplot(data, mapping=aes()) +
geometric object 

arguments: 
data: Dataset used to plot the graph
mapping: Control the x and y-axis 
geometric object: The type of plot you want to show. The most common object are:
 
- Point: `geom_point()` 
- Bar: `geom_bar()`
- Line: `geom_line()` 
- Histogram: `geom_histogram()`

R에서 산점도 그래프를 만드는 방법

ggplot이 mtcars 데이터세트와 어떻게 작동하는지 살펴보겠습니다. mpg 변수와 drat 변수의 산점도를 그리는 것으로 시작합니다.

기본 산점도

library(ggplot2)
ggplot(mtcars, aes(x = drat, y = mpg)) +
    geom_point()

Code 설명

  • 먼저 mtcars 데이터세트를 ggplot에 전달합니다.
  • aes() 인수 내에 x축과 y축을 추가합니다.
  • + 기호는 R이 코드를 계속 읽기를 원한다는 것을 의미합니다. 코드를 쪼개서 더 읽기 쉽게 만듭니다.
  • 기하학적 객체에는 geom_point()를 사용합니다.

출력:

기본 산점도

그룹이 있는 산점도

때로는 데이터 그룹(예: 요인 수준 데이터)별로 값을 구별하는 것이 흥미로울 수 있습니다.

ggplot(mtcars, aes(x = mpg, y = drat)) +
    geom_point(aes(color = factor(gear)))

Code 설명

  • geom_point() 함수 내부의 aes() 함수는 각 그룹의 색상을 제어합니다.ping 변수는 팩터여야 하므로, gear는 factor()로 감싸져 있습니다.
  • 전체적으로 점의 색상을 변경하는 코드 aes(color = Factor(gear))가 있습니다.

출력:

그룹이 포함된 산점도

로그 변환을 사용하여 축 스케일을 변경하세요

데이터 재조정은 분석가의 주요 업무 중 하나인데, 원시 변수들이 깔끔한 종 모양 분포를 보이는 경우는 드물기 때문입니다. 로그 변환은 극단적인 값을 압축하고 그래프가 이상치에 덜 민감하게 반응하도록 하는 한 가지 방법입니다.

ggplot(mtcars, aes(x = log(mpg), y = log(drat))) +
    geom_point(aes(color = factor(gear)))

Code 설명

  • aes() 맵 내부에서 log()를 사용하여 x와 y 변수를 직접 변환합니다.ping.

표준화 또는 정규화와 같은 다른 변환을 적용할 수 있습니다.

출력:

축 변경

적합치가 있는 산점도

그래프에 추가적인 정보를 더할 수 있습니다. 적합된 값을 겹쳐서 표시할 수 있습니다. 선형 회귀.

my_graph <- ggplot(mtcars, aes(x = log(mpg), y = log(drat))) +
    geom_point(aes(color = factor(gear))) +
    stat_smooth(method = "lm",
        col = "#C42126",
        se = FALSE,
        size = 1)
my_graph

Code 설명

  • my_graph: 그래프는 my_graph 객체에 저장되므로, 이후 단계에서 전체 호출을 반복하지 않고도 레이어를 추가할 수 있습니다.
  • stat_smooth() 인수는 스무딩 방법을 제어합니다.
  • 방법 = “lm”: 선형 회귀
  • col = “#C42126”: Code 선의 붉은색을 위해
  • se = FALSE: 표준 오류를 표시하지 않습니다.
  • size = 1: 선의 두께. ggplot2 3.4.0 이상 버전에서는 이 인수가 선 형상에 대해 linewidth로 이름이 변경되었습니다.

출력:

적합값을 사용한 산점도

다른 평활화 방법을 사용할 수 있습니다.

  • glm
  • gam
  • loess: 관측치가 1,000개 미만일 경우 기본값으로 사용됩니다.
  • rlm: MASS 패키지에 포함된 강건 선형 모델

차트 스타일을 지정하기 전에 산점도가 적절한 선택인 경우를 알아두는 것이 좋습니다.

산점도 vs 선 그래프 vs BubblR의 e 차트

세 그래프 모두 두 개의 연속 변수를 서로 비교하여 보여주므로, 결국 독자가 무엇을 얻어가야 하는지에 따라 선택이 달라집니다.

기준 산포도 라인 차트 Bubbl전자 차트
두 변수 간의 상관관계 정렬된 축을 따라 한 변수의 변화 상관관계에 제3의 크기가 더해짐
X축 모든 연속 변수 일반적으로 시간 또는 다른 순서화된 척도 모든 연속 변수
포인트 순서 부적절한 중요 지점들이 연결되어 있습니다. 부적절한
세 번째 변수 색상이나 모양을 통해 별도의 회선을 통해 점 크기를 통해
ggplot2 호출 geom_point() geom_line() geom_point(aes(size = z))

x축에 자연스러운 순서가 없을 때 산점도를 선으로 연결하는 것은 흔한 실수입니다. 이는 존재하지 않는 순서를 암시하기 때문입니다. geom_line() 함수는 날짜와 같이 순서가 있는 축에만 사용하십시오. 단일 변수의 분포를 나타낼 때는 다른 방법을 사용하십시오. 상자 그림 대신.

그래프에 정보 추가

현재 그래프에는 설명 텍스트가 없습니다. 독자는 추가 설명 없이 차트 데이터만으로 내용을 파악할 수 있어야 하므로, 차트에 적절한 레이블이 필요합니다. labs() 함수를 사용하여 레이블을 추가할 수 있습니다.

labs() 함수의 기본 구문은 다음과 같습니다.

labs(title = "Hello Guru99")
arguments:
- title: Main title displayed above the plot
- subtitle: Secondary line below the title
- caption: Note below the plot, usually the data source
- x: Rename the x-axis
- y: Rename the y-axis
- color / fill: Rename the legend

Example: labs(title = "Hello Guru99", subtitle = "My first plot")

제목 추가

추가해야 할 필수 정보 중 하나는 당연히 제목입니다.

my_graph +
    labs(
        title = "Plot Mile per hours and drat, in log"
         )

Code 설명

  • my_graph: 저장한 그래프를 사용합니다. 그래프에 새로운 정보를 추가할 때마다 모든 코드를 다시 작성하는 것을 방지합니다.
  • 제목을 labs() 함수로 감싸세요.

출력:

제목 추가

동적 이름으로 제목 추가

동적 제목은 제목에 보다 정확한 정보를 추가하는 데 도움이 됩니다.

Paste() 함수를 사용하여 정적 텍스트와 동적 텍스트를 인쇄할 수 있습니다. Paste()의 기본 구문은 다음과 같습니다.

paste("This is a text", A)
arguments
- " ": Text inside the quotation marks are the static text
- A: Display the variable stored in A
- Note you can add as much static text and variable as you want. You need to separate them with a comma	

예:

A <- 2010
paste("The first year is", A)

출력:

## [1] "The first year is 2010"
B <- 2018
paste("The first year is", A, "and the last year is", B)

출력:

## [1] "The first year is 2010 and the last year is 2018"

그래프에 mpg 평균이라는 동적 이름을 추가할 수 있습니다.

mean_mpg <- mean(mtcars$mpg)
my_graph + labs(
    title = paste("Plot Mile per hours and drat, in log. Average mpg is", mean_mpg)
)

Code 설명

  • 평균 mpg 변수에 저장된 평균(mtcars$mpg)을 사용하여 mpg의 평균을 생성합니다.
  • mpg의 평균값을 반환하는 동적 제목을 생성하려면 평균_mpg와 함께 붙여넣기()를 사용합니다.

출력:

동적 이름으로 제목 추가

자막 추가

그래프를 더욱 명확하게 만드는 두 가지 추가 정보가 있습니다. 바로 부제목과 캡션입니다. 부제목은 제목 바로 아래에 위치하며, 캡션에는 계산을 수행한 사람과 데이터 출처에 대한 정보를 제공할 수 있습니다.

my_graph +
    labs(
        title =
        "Relation between Mile per hours and drat",
        subtitle =
        "Relationship break down by gear class",
        caption = "Authors own computation"
    )

Code 설명

  • labs() 내부에 다음을 추가했습니다.
    • title = “마일당 시간과 drat 간의 관계”: 제목 추가
    • subtitle = "장비 클래스별 관계 분석": 부제 추가
    • caption = “저자 자신의 계산: 캡션 추가
    • 각각의 새 정보를 쉼표, ,로 구분합니다.
  • 코드 줄이 끊어진다는 점에 유의하세요. 필수는 아니며 코드를 더 쉽게 읽는 데 도움이 됩니다.

출력:

자막 추가

x축 및 y축 이름 바꾸기

열 이름은 프레젠테이션에 적합한 경우가 드뭅니다. GDP_CAP처럼 약어를 사용하거나 단어 사이에 밑줄을 사용하는 경우가 많습니다. 그래프에서 열 이름을 적절하게 변경하고 필요한 경우 단위를 추가하세요.

my_graph +
    labs(
        x = "Drat definition",
        y = "Mile per hours",
        color = "Gear",
        title = "Relation between Mile per hours and drat",
        subtitle = "Relationship break down by gear class",
        caption = "Authors own computation"
    )

Code 설명

  • labs() 내부에 다음을 추가했습니다.
    • x = “Drat 정의”: x축 이름 변경
    • y = “시간당 마일”: y축 이름 변경

출력:

x축 및 y축 이름 바꾸기

저울 제어

축의 크기를 제어할 수 있습니다.

seq() 함수는 일련의 숫자를 생성해야 할 때 편리합니다. 기본 구문은 다음과 같습니다.

seq(begin, last, by = x)
arguments:
- begin: First number of the sequence
- last: Last number of the sequence
- by= x: The step. For instance, if x is 2, the code adds 2 to `begin-1` until it reaches `last`	

예를 들어, 0부터 12까지 4씩 증가하는 범위는 0, 4, 8, 12의 네 가지 숫자를 반환합니다.

seq(0, 12,4)

출력:

## [1]  0  4  8 12

아래와 같이 x축과 y축의 스케일을 제어할 수 있습니다.

my_graph +
    scale_x_continuous(breaks = seq(1, 3.6, by = 0.2)) +
    scale_y_continuous(breaks = seq(1, 1.6, by = 0.1)) +
    labs(
        x = "Drat definition",
        y = "Mile per hours",
        color = "Gear",
        title = "Relation between Mile per hours and drat",
        subtitle = "Relationship break down by gear class",
        caption = "Authors own computation"
    )

Code 설명

  • scale_y_continuous() 함수는 y 축
  • scale_x_continuous() 함수는 x 축.
  • break 매개변수는 축 분할을 제어합니다. 숫자 시퀀스를 수동으로 추가하거나 seq() 함수를 사용할 수 있습니다.
    • seq(1, 3.6, by = 0.2): 1부터 3.6까지 0.2씩 증가하는, 즉 14개의 분기점을 가진 수열을 생성합니다.
    • seq(1, 1.6, by = 0.1): 1부터 1.6까지 0.1씩 증가하는 숫자 7개를 생성합니다.

출력:

저울 제어

테마

마지막으로, ggplot2는 단 하나의 테마 함수로 전체 그래프의 스타일을 변경할 수 있도록 해줍니다. 패키지에는 총 8가지 테마가 포함되어 있습니다.

  • theme_bw()
  • theme_light()
  • theme_classic()
  • theme_linedraw()
  • theme_dark()
  • theme_minimal()
  • 테마_회색()
  • theme_void()
my_graph +
    theme_dark() +
    labs(
        x = "Drat definition, in log",
        y = "Mile per hours, in log",
        color = "Gear",
        title = "Relation between Mile per hours and drat",
        subtitle = "Relationship break down by gear class",
        caption = "Authors own computation"
    )

출력:

테마

플롯 저장

이 모든 단계를 완료했으면 이제 그래프를 저장하고 공유할 차례입니다. 그래프를 그린 직후에 ggsave(“파일 이름.png”)를 호출하면 이미지가 디스크에 저장됩니다.

그래프는 작업 디렉터리에 저장됩니다. 작업 디렉터리를 확인하려면 다음 코드를 실행하면 됩니다.

directory <- getwd()
directory

완성된 그래프를 그리고 저장한 다음, 그래프가 어디에 위치했는지 확인하세요.

my_graph +
    theme_dark() +
    labs(
        x = "Drat definition, in log",
        y = "Mile per hours, in log",
        color = "Gear",
        title = "Relation between Mile per hours and drat",
        subtitle = "Relationship break down by gear class",
        caption = "Authors own computation"
    )

출력:

플롯 저장

ggsave("my_fantastic_plot.png")

출력:

## Saving 5 x 4 in image

주의 사항: 교육적 목적으로만 디렉토리 폴더를 열어주는 open_folder()라는 함수를 만들었습니다. 아래 코드를 실행하고 사진이 어디에 저장되어 있는지 확인하기만 하면 됩니다. my_fantastic_plot.png 파일 이름이 표시되어야 합니다.

# Run this code to create the function
open_folder <- function(dir) {
    if (.Platform['OS.type'] == "windows") {
        shell.exec(dir)
    } else {
        system(paste(Sys.getenv("R_BROWSER"), dir))
    }
}

# Call the function to open the folder
open_folder(directory)

R에서 facet_wrap() 함수를 사용하여 다면 산점도(Faceted Scatter plot)를 만드는 방법

패싯(Faceting)은 앞서 언급한 ggplot2의 8가지 구성 요소 중 하나이며, 복잡한 차트를 깔끔하게 정리하는 가장 좋은 방법입니다. 모든 그룹을 하나의 패널에 넣는 대신, ggplot2는 변수의 각 수준에 대해 동일한 스케일로 작은 패널들을 여러 개 그려 패널 간의 비교 가능성을 높입니다.

# One panel per gear count
ggplot(mtcars, aes(x = drat, y = mpg)) +
    geom_point() +
    facet_wrap(~ gear) +
    theme_classic()

세 가지 논거가 대부분의 역할을 합니다.

  • 엔콜 or 지금: 패널을 지정된 레이아웃으로 강제 배치합니다. 예를 들어 facet_wrap(~ gear, ncol = 2)와 같습니다.
  • 저울: 기본값은 "fixed"이므로 모든 패널이 하나의 축 범위를 공유합니다. 그룹 간 크기 차이가 큰 경우에는 "free_y" 또는 "free"를 사용하세요. 단, 자유 축척은 패널 간 시각적 비교를 왜곡할 수 있다는 점에 유의하세요.
  • 실험자각 스트립의 원시 요인 수준을 대체합니다. 예를 들어 labeller = label_both를 사용하면 "4" 대신 "gear: 4"가 출력됩니다.

두 그룹ping 변수. facet_grid() 함수를 사용하여 패널 행렬을 구성합니다. 이때 첫 번째 변수는 행에, 두 번째 변수는 열에 걸쳐 배치됩니다.

ggplot(mtcars, aes(x = drat, y = mpg)) +
    geom_point(aes(color = factor(cyl))) +
    facet_grid(am ~ gear) +
    theme_classic()

면모인가, 아니면 색깔인가? 차트에서 그룹이 최대 4개 정도이고 겹치는 부분이 제한적일 때까지는 색상으로 구분하는 것이 효과적입니다. 그 이상이 되거나 그룹이 많이 겹치는 경우에는 각 패널에 해당 그룹의 데이터만 표시되므로 패싯(facet)을 사용하는 것이 가독성이 더 좋습니다. 위의 facet_grid() 예제처럼 한 변수로는 패싯을, 다른 변수로는 색상을 적용하여 두 가지 방식을 모두 사용할 수도 있습니다.

R 산점도에서 겹침 현상을 처리하는 방법

수십 개의 관측만으로는 모든 지점을 확인할 수 있습니다. 하지만 수천 개의 관측이 이루어지면 마커들이 서로 겹쳐 쌓이고, 가장 밀집된 영역은 그저 하나의 덩어리로 보일 뿐입니다. 즉, 오버플로팅ggplot2는 네 가지 표준 해결책을 제공합니다.

1. 불투명도를 낮추세요. 가장 저렴한 해결책. 겹침ping 점들이 자연스럽게 어두워지면서 밀도가 눈에 띄게 나타납니다.

ggplot(diamonds, aes(x = carat, y = price)) +
    geom_point(alpha = 0.05) +
    theme_classic()

2. 지터 이산값. 변수가 몇 가지 값만 가질 경우, 점들은 같은 좌표에 위치하게 됩니다. 약간의 무작위 변위가 점들을 분리시킬 뿐입니다.

ggplot(mtcars, aes(x = factor(cyl), y = mpg)) +
    geom_jitter(width = 0.15, height = 0) +
    theme_classic()

높이를 0으로 설정하면 실제 정보를 담고 있는 y 값이 절대 변경되지 않습니다.

3. 비행기를 버리세요. 대규모 데이터 세트의 경우, 각 셀별 관측치 수를 세고 그 수를 색상에 매핑합니다. 육각형 칸을 사용하면 정사각형 칸에서 발생하는 시각적 오류를 방지할 수 있습니다.

ggplot(diamonds, aes(x = carat, y = price)) +
    geom_hex(bins = 40) +
    theme_classic()

4. 밀도 등고선을 그립니다. 등고선은 관측값이 집중된 영역을 나타내며, 흐릿한 점들 위에 깔끔하게 겹쳐집니다.

ggplot(diamonds, aes(x = carat, y = price)) +
    geom_point(alpha = 0.05) +
    geom_density_2d(color = "#C42126") +
    theme_classic()

일반적으로 알파는 수천 개의 점을 처리할 수 있고, 육각형 비닝은 수만 개의 점을 처리할 수 있으며, 그 이상일 경우에는 dplyr::slice_sample()을 사용하여 데이터를 샘플링하는 것이 실용적인 옵션입니다.

R에서 산점도 그리기: Code 참조

아래 표는 위에서 설명한 각 옵션에 대한 ggplot2 호출을 나열합니다.

목표 Code
기본 산점도
ggplot(df, aes(x = x1, y = y)) + geom_point()
색상 그룹이 포함된 산점도
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x2)))
적합치 추가
ggplot(df, aes(x = x1, y = y)) + geom_point() + stat_smooth(method = "lm")
제목 추가
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(title = paste("Hello Guru99"))
자막 추가
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(subtitle = paste("Hello Guru99"))
x 이름 바꾸기
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(x = "X1")
y 이름 바꾸기
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = "y1")
규모를 제어
ggplot(df, aes(x = x1, y = y)) + geom_point() + scale_y_continuous(breaks = seq(10, 35, by = 10)) + scale_x_continuous(breaks = seq(2, 5, by = 1))
로그 생성
ggplot(df, aes(x = log(x1), y = log(y))) + geom_point()
테마
ggplot(df, aes(x = x1, y = y)) + geom_point() + theme_classic()
그룹에 의한 측면
ggplot(df, aes(x = x1, y = y)) + geom_point() + facet_wrap(~ x2)
겹침 현상 처리
ggplot(df, aes(x = x1, y = y)) + geom_point(alpha = 0.3)
찜하기
ggsave("my_fantastic_plot.png")

자주 묻는 질문

geom_point() 함수는 모든 관측값을 정확한 좌표에 그립니다. geom_jitter() 함수는 작은 무작위 변위를 추가하여 동일한 값을 공유하는 점들을 구별할 수 있도록 합니다. 이는 한 축에 이산적인 값이 있을 때 중요합니다.

aes() 함수 내부에서는 색상이 변수로 매핑되므로 ggplot2는 레벨별로 하나의 색조를 할당하고 범례를 생성합니다. aes() 함수 외부에서는 색상이 모든 점에 적용되는 고정 상수이며 범례가 나타나지 않습니다.

geom_point() 다음에 stat_smooth(method = “lm”) 또는 geom_smooth(method = “lm”)를 추가하세요. 신뢰 구간을 숨기려면 se = FALSE로 설정하고, 비선형 평활화를 사용하려면 method = “loess”를 사용하세요.

산점도는 학습 전에 특징 간의 상관관계와 이상치를 보여주며, 예측값과 실제값을 비교하거나 PCA 또는 t-SNE를 사용한 차원 축소 후 클러스터를 시각화하는 표준적인 방법입니다.

네. AI 어시스턴트는 레이어를 생성하고, 겹침 현상을 수정하는 방법을 제안하며, aes() 래퍼 누락과 같은 오류를 설명해 줄 수 있습니다. 생성된 코드는 열 이름이나 요인 유형을 잘못 입력하기 쉬우므로, 반드시 자신의 데이터로 실행해 보시기 바랍니다.

이 게시물을 요약하면 다음과 같습니다.