← Back to list

เล่นกับข้อมูลง่าย ๆ ด้วย 5 functions จาก dplyr: วิธีใช้งาน dplyr เบื้องต้น…

💻 ภาษา R

Shinin Varongchayakul · 2024-12-11 12:01 · 0 claps · 4.7 min read
#dplyr #r #data-transformation #hranalytics
Open on Medium ↗
Wiki topics: GRW · Growth & Analytics

เล่นกับข้อมูลง่าย ๆ ด้วย 5 functions จาก dplyr: วิธีใช้งาน dplyr เบื้องต้น พร้อมตัวอย่างการทำงานกับข้อมูล HR

💻 ภาษา R

R เป็นภาษาคอมพิวเตอร์ที่ออกแบบมาเพื่อทำงานกับ data เหมาะกับสายงานที่ต้องทำงานกับ data เช่น

  • Researcher ที่ต้องการวิเคราะห์ลักษณะกลุ่มตัวอย่าง เช่น จำนวนตัวอย่างแบ่งตามเพศ หรือช่วงอายุ
  • Data analyst ที่ต้องการหา insight จากข้อมูลขององค์กร เช่น วิเคราะห์แนวโน้มทางธุรกิจ
  • Sale ที่ต้องการวิเคราะห์ข้อมูลการขาย เช่น จำนวนลูกค้า ยอดขาย และกำไร
  • หรือแม้แต่ HR ที่ต้องการทำข้อมูลพนักงาน เช่น วิเคราะห์ performance, engagement, และ job satisfaction

🔢 dplyr: Library สำหรับหมุนข้อมูล

R มี built-in functions และ libraries หลากหลายที่รองรับการทำงานกับ data ในรูปแบบต่าง ๆ ซึ่งหนึ่งใน libraries ที่นิยมใช้กัน ได้แก่ dplyr

dplyr เป็น library ที่ออกแบบมาเพื่อ data transformation หรือการแปลงข้อมูล ช่วยให้การทำงานกับ data ง่ายขึ้น เมื่อเทียบกับ built-in functions

Use case ของ dplyr เช่น …

  • สำรวจข้อมูล (data exploration)
  • ทำความสะอาดข้อมูล (data cleaning)
  • วิเคราะห์ข้อมูล (data analysis)

.

ในบทความนี้ เราจะไปทำความรู้จักกับ 5 functions พื้นฐานของ dplyr ที่ใช้ทำงานกับข้อมูลกัน ซึ่งได้แก่

  1. select()
  2. filter()
  3. arrange()
  4. summarise() หรือ summarize() (เขียนได้ทั้งสองแบบ)
  5. mutate()

🧑‍💼 ตัวอย่างข้อมูล HR

ในบทความนี้ เราจะใช้ชุดข้อมูลจำลอง hr_data เพื่อช่วยอธิบายการใช้งาน 5 functions ของ dplyr

hr_data ช่วยจำลองสถานการณ์ของ HR ที่ต้องวิเคราะห์ข้อมูลพนักงาน เพื่อหาวิธีแก้ปัญหาพนักงานลาออก (attrition)

โดย hr_data ประกอบด้วย 8 ตัวแปร:

  1. ID: รหัสพนักงาน
  2. Name: ชื่อพนักงาน
  3. Department: แผนก
  4. Age: อายุ
  5. Engagement: คะแนนการมีส่วนร่วม (1 ถึง 100)
  6. YearsAtCompany: อายุงาน
  7. AttritionRisk: ความเสี่ยงที่จะลาออก (Low, Medium, High)
  8. Salary: เงินเดือน

.

Code ในการสร้างและเรียกดู hr_data:

# Create the dataset
hr_data <- data.frame(
  ID = 1:15,
  Name = c("Alice", "Bob", "Carol", "David", "Eve", "Frank", "Grace", 
           "Henry", "Ivy", "Jack", "Karen", "Liam", "Mona", "Nate", "Olivia"),
  Department = c("HR", "IT", "Finance", "HR", "Sales", "IT", "Finance", 
                 "Sales", "IT", "HR", "Finance", "Sales", "IT", "HR", "Sales"),
  Age = c(34, 29, 45, 50, 27, 30, 42, 35, 31, 40, 38, 28, 33, 55, 26),
  Engagement = c(85, 70, 65, 55, 90, 75, 60, 88, 80, 50, 68, 72, 78, 40, 95),
  YearsAtCompany = c(5, 2, 15, 25, 1, 3, 10, 7, 4, 20, 12, 1, 6, 30, 0),
  AttritionRisk = c("Low", "Medium", "High", "High", "Low", "Medium", "High", 
                    "Low", "Medium", "High", "High", "Low", "Medium", "High", "Low"),
  Salary = c(55000, 60000, 70000, 75000, 50000, 62000, 68000, 58000, 
             61000, 77000, 72000, 51000, 64000, 80000, 49000)
)

# View the dataset
hr_data

✍️ Pattern การเขียน Function

แม้ว่าทั้ง 5 functions จะมีหน้าที่แตกต่างกัน แต่มีการเรียกใช้งานที่เหมือนกัน:

func(dataset, condition)
  • func = ชื่อ function เช่น select, filter, arrange
  • dataset = ชุดข้อมูลที่เป็น input
  • condition = เงื่อนไขในการใช้งานทำงานของ function

1️⃣ Function #1: select()

select() ใช้เลือก column ข้อมูลที่ต้องการ

ตัวอย่าง:

ผู้บริหารต้องการข้อมูลที่มีแค่รายชื่อพนักงาน แผนก และคะแนนการมีส่วนร่วม

เราสามารถใช้ select() เลือกเฉพาะ column ที่ต้องการได้:

select(hr_data, Name, Department, Engagement)

.

Note:

  • เวลาเลือก column ด้วย select() เราสามารถกำหนดลำดับของ column ที่จะมาแสดงได้ เช่น ต้องการแสดง Department ก่อน Name ก็ให้เขียน Department, Name
  • dplyr มี helper function ที่ช่วยในการเลือก column ให้ง่ายขึ้น เช่น
  • starts_with(): เลือก column ที่เริ่มด้วย x
  • ends_with(): เลือก column ที่ลงท้ายด้วย x
  • contains(): เลือก column ที่มีคำว่า x
  • matches(): เลือก column ที่ตรงกับ regular expression
  • last_col(): เลือก column สุดท้ายในชุดข้อมูล
  • ~: เลือกทุก column ยกเว้น column ที่ระบุ
  • เราสามารถตั้งชื่อ column ใหม่ได้ ด้วยใช้ = เช่น FullName = Name เพื่อให้หัว column แสดงคำว่า Fullname แทน Name

2️⃣ Function #2: filter()

filter() ใช้เลือก row ที่ตรงกับเงื่อนไขที่กำหนดมาแสดง

ตัวอย่าง:

ผู้บริหารต้องการข้อมูลพนักงานที่ความเสี่ยงที่จะลาออกสูง

เราสามารถใช้ filter() เพื่อกำหนดเงื่อนไขเพื่อกรองข้อมูลออกมาได้:

filter(hr_data, AttritionRisk == "High")

.

Note:

  • เราสามารถใช้ boolean operator และ comparison operator ร่วมได้
  • ==: เท่ากับ
  • !=: ไม่เท่ากับ
  • >: มากกว่า
  • <: น้อยกว่า
  • &: and
  • |: or
  • !: not

เช่น

ผู้บริหารต้องการข้อมูลพนักงานที่ความเสี่ยงที่จะลาออกสูง ในแผนกการเงิน (Finance)

filter(hr_data, AttritionRisk == "High" & Department == "Finance")

3️⃣ Function #3: arrange()

arrange() ใช้เรียงข้อมูลตามเงื่อนไข

ตัวอย่าง:

ผู้บริหารอยากได้ข้อมูลพนักงานเรียงจากคะแนนการมีส่วนร่วม

เราสามารถใช้ arrange() จัดลำดับตาม column ที่ต้องการได้:

arrange(hr_data, Engagement)

.

Note:

  • Default ของ arrange() เป็นเรียงจากน้อยไปมาก (A-Z)
  • ถ้าต้องการเรียงจากน้อยไปมาก (Z-A) ให้ใช้ desc() เช่น
arrange(hr_data, desc(Engagement))

4️⃣ Function #4: summarise()

summarise() ใช้ย่อยข้อมูลให้น้อยลง ช่วยให้เข้าใจข้อมูลได้ง่ายขึ้น

ตัวอย่าง:

ผู้บริการต้องการรู้ค่าเฉลี่ยคะแนนการมีส่วนร่วม

เราสามารถใช้ summarise() เพื่อหาค่าเฉลี่ยได้:

summarise(hr_data, mean(Engagement))

.

Note:

Functions ที่ใช้กับ summarise() ได้ เช่น

  • mean(): หาค่าเฉลี่ย
  • min(): หาค่าต่ำสุด
  • max(): หาค่าสูงสุด
  • sd(): หาค่าเบี่ยงเบนมาตรฐาน (standard deviation)
  • n(): นับจำนวนข้อมูล

summarise() มักใช้กับ group_by() เพื่อหาค่าสถิติตามกลุ่มข้อมูล เช่น หาค่าเฉลี่ยคะแนนการทำงานตามระดับความเสี่ยงในการลาออก:

summarise(group_by(hr_data, AttritionRisk), mean(Engagement))

นอกจากนี้ เราสามารถตั้งชื่อ column ของค่าสถิติได้โดยใช้ = เช่น:

summarise(group_by(hr_data, AttritionRisk), AvgEng = mean(Engagement))

5️⃣ Function #5: mutate()

mutate() ใช้สำหรับสร้างข้อมูลใหม่จากข้อมูลที่มีอยู่แล้ว

ตัวอย่าง:

ผู้บริหารอยากรู้ว่า พนักงานแต่ละคนเหลือเวลาก่อนเกษียณอายุเท่าไร

เราสามารถใช้ mutate() เพื่อสร้าง column ใหม่ที่แสดงจำนวนปีก่อนเกษียณได้:

mutate(hr_data, YearsUntilRetirement = 60 - Age)

จากผลลัพธ์ จะเห็นได้ว่า column ใหม่จะต่อท้ายสุด (ด้านขวาสุด)

.

Note:

  • ถ้าต้องการเห็นแค่ข้อมูลใหม่ เราสามารถเปลี่ยน mutate() เป็น transmute() ได้ โดยหลังจากได้ข้อมูลใหม่แล้ว transmute() จะทิ้งข้อมูลตั้งต้น และแสดงเฉพาะข้อมูลใหม่ให้เห็น

🫂 Put Everything Together: Pipe Operator

เราจะเห็นความสามารถที่แท้จริงของ dplyr ได้เมื่อใช้งานทั้ง 5 functions ร่วมกัน โดยใช้ pipe operator: %>% หรือ |>

Pipe operator เป็นสิ่งที่ช่วยส่ง output จาก function หนึ่งไปเป็น input ของ function ต่อไป

เช่น จาก code หาค่าเฉลี่ยคะแนนการทำงานตามระดับความเสี่ยงในการลาออก ก่อนหน้านี้:

summarise(group_by(hr_data, AttribtionRisk), AvgEng = mean(Engagement))

ถ้าใช้ pipe operator แล้ว จะเขียนได้แบบนี้:

hr_data |>
  group_by(AttritionRisk) |>
  summarise(AvgEng = mean(Engagement))

ซึ่ง code ทั้งสองชุดให้ผลลัพธ์ที่เหมือนกัน:

แต่จะเห็นได้ว่า code ที่ใช้ pipe operator มีความชัดเจนและอ่านง่ายกว่า เพราะไม่จำเป็นต้องเขียน code ที่ซ้อนกันเป็นชั้น ๆ

.

ทีนี้ ถ้าเราใช้ pipe operator เพื่อรวมทั้ง 5 functions เข้าด้วยกันแล้ว จะทำให้เราใช้ข้อมูลเพื่อตอบคำถามที่ซับซ้อนขึ้นได้

ตัวอย่าง:

ผู้บริหารอยากได้รายชื่อพนักงานในกลุ่มเสี่ยงลาออกสูง โดยเรียงตามอายุงานและเงินเดือน จากมากไปน้อย

เราสามารถใช้ pipe operator ร่วมกัน group_by() + summarise() + arrange() เพื่อตอบโจทย์ได้:

hr_data |>
  filter(AttritionRisk == "High") |>
  arrange(desc(YearsAtCompany), desc(Salary))

.

หรือ

ผู้บริหารต้องการรู้ว่า จำนวนพนักงานและค่าเฉลี่ยคะแนนการมีส่วนร่วมของแต่ละแผนก โดยเรียงแผนกจากค่าเฉลี่ยมากไปน้อย

hr_data |> 
  group_by(Department) |>
  summarise(AvgEng = mean(Engagement),
            EmpCount = n()) |>
  arrange(desc(AvgEng))

.

หรือ

ผู้บริหารต้องการรู้สัดส่วนพนักงานในกลุ่มความเสี่ยงสูงในแต่ละแผนก โดยเรียงจากมากไปน้อย และขอให้เรียงข้อมูลดังนี้: แผนก สัดส่วนเสี่ยงสุง จำนวนพนักงานทั้งหมด จำนวนพนักงานในกลุ่มเสี่ยงสูง

hr_data |>
  group_by(Department) |>
  summarise(HighRiskCount = sum(AttritionRisk == "High"),
            TotalEmp = n(),
            HighRiskRatio = (HighRiskCount / TotalEmp) * 100) |>
  select(Department, HighRiskRatio, TotalEmp, HighRiskCount) |>
  arrange(desc(HighRiskRatio))

🔥 สรุป 5 Functions จาก dplyr

5 functions พื้นฐาน ของ dplyr เป็น functions ที่สามารถใช้ร่วมกันเพื่อทำงานกับข้อมูลต่าง ๆ เช่น ข้อมูลพนักงาน ได้อย่างมีประสิทธิภาพ

Note: ใช้ %>% หรือ |> เพื่อเชื่อม functions เข้าด้วยกัน

💪 Try It Yourself

สำหรับใครที่อยากลองเล่นใช้ R เล่นกับข้อมูล HR สามารถดาวน์โหลด code ตัวอย่างในบทความได้ที่ GitHub

📚 อ่านเพิ่มเติมเกี่ยวกับ dplyr

อ่านบทความต้นฉบับได้ที่ https://shinoshigoto.com/2024/12/11/data-transform-with-dplyr/


메타데이터
post_id
c9d541424e2e
slug
เล่นกับข้อมูล-hr-ง่าย-ๆ-ด้วย-5-functions-ของ-dplyr-ในภาษา-r-c9d541424e2e
url
https://medium.com/@shivarong/%E0%B9%80%E0%B8%A5%E0%B9%88%E0%B8%99%E0%B8%81%E0%B8%B1%E0%B8%9A%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B8%B9%E0%B8%A5-hr-%E0%B8%87%E0%B9%88%E0%B8%B2%E0%B8%A2-%E0%B9%86-%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-5-functions-%E0%B8%82%E0%B8%AD%E0%B8%87-dplyr-%E0%B9%83%E0%B8%99%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2-r-c9d541424e2e
canonical_url
https://medium.com/@shivarong/%E0%B9%80%E0%B8%A5%E0%B9%88%E0%B8%99%E0%B8%81%E0%B8%B1%E0%B8%9A%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B8%B9%E0%B8%A5-hr-%E0%B8%87%E0%B9%88%E0%B8%B2%E0%B8%A2-%E0%B9%86-%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-5-functions-%E0%B8%82%E0%B8%AD%E0%B8%87-dplyr-%E0%B9%83%E0%B8%99%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2-r-c9d541424e2e
author_url
https://medium.com/@shivarong
status
ok
fetched_at
2026-07-21 17:01:12