一、cut函數介紹
cut函數是R語言中常用的一種數據離散化方法,可以將一列數值型數據按照給定的區間進行分組,生成一個factor類型的對象。具體語法格式如下:
cut(x, breaks, labels = NULL, include.lowest = FALSE,
right = TRUE, dig.lab = 3, ordered_result = FALSE,
...)
其中,參數x表示需要離散化的數據;Breaks表示數據的分組區間,可以設置為一個向量來指定每個區間的上限;Labels表示每個區間對應的標籤,include.lowest表示是否將最小值包含在第一個區間內;right表示每個區間是否包含右端點;dig.lab表示標籤保留的小數位數;ordered_result表示是否將結果有序化。
二、cut函數的使用方法
在使用cut函數時,一般需要先確定分組區間,常用的有兩種方法:
1、指定區間數目
直接指定需要將數據分成的區間數目,可以使用函數「cut_num」獲取相應的區間範圍,示例代碼如下:
# 安裝cut_num函數所在包
install.packages("cutnum")
# 使用cut_num函數獲取分組區間
library(cutnum)
x <- runif(100, 0, 100)
breaks <- cut_num(x, g = 5)
這段代碼會生成一個包含5個區間的向量breaks,表示數據被等分成5份。
2、指定分組區間
手動指定需要將數據分組的區間,可以使用向量的形式來指定每個區間的上限值,示例代碼如下:
# 手動指定分組區間
x <- runif(100, 0, 100)
breaks <- c(0, 20, 50, 80, 100)
labels <- c("A", "B", "C", "D")
factor_x <- cut(x, breaks, labels = labels, include.lowest = TRUE)
這段代碼會將數據分成4個組:”0~20″、”20~50″、”50~80″、”80~100″,並且將每個組指定一個標籤。
三、cut函數的應用
cut函數可以廣泛應用於各種領域,下面我們針對不同的應用場景進行詳細介紹。
1、數據可視化
將數據分組後可以更直觀地反映數據的分布情況,方便進行數據可視化。下面以iris數據集為例,將花瓣長度分為3組,通過直方圖進行可視化展示。
# 導入iris數據集
data(iris)
x <- iris$Petal.Length
# 分組
breaks <- c(0, 3, 4, 7)
labels <- c("short", "medium", "long")
factor_x <- cut(x, breaks, labels = labels, include.lowest = TRUE)
# 繪製直方圖
library(ggplot2)
ggplot(data = data.frame(x = factor_x)) +
geom_bar(aes(x = x, fill = x))+
scale_fill_manual(values = c("#FF6666", "#FFCC66", "#99CC66")) +
labs(title = "Iris Petal Length", x = "Petal Length", y = "Count")
運行以上代碼,我們可以得到下面的直方圖:
2、風險評估
在金融、風險評估等領域,我們常常需要根據數據的風險程度進行分類。例如根據申請人的信用評級將其分為高、中、低三類,進行不同的風險定價。這時候我們就可以使用cut函數來對數據進行離散化,示例代碼如下:
# 載入數據
url <- "https://people.sc.fsu.edu/~jburkardt/datasets/default_of_credit_card_clients/default_of_credit_card_clients.xls"
credit_data <- readxl::read_excel(url, skip = 1)
# 分組
delay_payment <- credit_data$PAY_0
breaks <- c(-Inf, 0, 1, Inf)
labels <- c("good", "medium", "bad")
factor_delay_payment <- cut(delay_payment, breaks, labels = labels,
include.lowest = TRUE, right = FALSE)
# 按數據組別統計比例
table(factor_delay_payment)/length(factor_delay_payment)
運行以上代碼,我們可以看到輸出結果如下:
factor_delay_payment
good medium bad
0.80413333 0.11830000 0.07756667
結果顯示大部分人的還款情況良好,只有少數人有延遲還款、違約的情況,風險比較低。
3、機器學習建模
在進行分類任務時,我們常常需要將連續型特徵轉換為離散型特徵,然後對數據進行機器學習建模。這時候就可以使用cut函數來進行數據離散化,例如對年齡進行分組,示例代碼如下:
# 載入數據
library(dplyr)
heart_data %
select(c(age, sex, chest_pain_type, trestbps, chol, thalach, oldpeak, num))
# 將年齡分為5組
breaks <- c(20, 40, 50, 60, 70, 80)
labels <- c("20~39", "40~49", "50~59", "60~69", "70~80")
factor_age <- cut(heart_data$age, breaks, labels = labels, include.lowest = TRUE)
# 添加分組後的年齡列並選取需要的特徵列
heart_data_new %
select(c(age, factor_age, sex, chest_pain_type, trestbps, chol, thalach, oldpeak, num))
這段代碼會將數據集中的年齡分為5組,並將分組後的年齡列添加到原數據集中,可以方便地進行後續的機器學習建模。
四、小結
在本篇文章中我們詳細介紹了R語言的cut函數,包括其使用方法和應用場景,希望對讀者能夠有所幫助。通過cut函數,我們可以更加靈活地對數據進行離散化處理,在數據可視化、風險評估、機器學習建模等方面都具有廣泛的應用。
原創文章,作者:SWLE,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/147085.html