Tag: People analytics

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

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

    1. 💻 ภาษา R
    2. 🔢 dplyr: Library สำหรับหมุนข้อมูล
    3. 🧑‍💼 ตัวอย่างข้อมูล HR
    4. ✍️ Pattern การเขียน Function
    5. 1️⃣ Function #1: select()
    6. 2️⃣ Function #2: filter()
    7. 3️⃣ Function #3: arrange()
    8. 4️⃣ Function #4: summarise()
    9. 5️⃣ Function #5: mutate()
    10. 🫂 Put Everything Together: Pipe Operator
    11. 🔥 สรุป 5 Functions จาก dplyr
    12. 💪 Try It Yourself
    13. 📚 อ่านเพิ่มเติมเกี่ยวกับ dplyr
    14. ✅ R Book for Psychologists: หนังสือภาษา R สำหรับนักจิตวิทยา

    💻 ภาษา 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 ตัวแปร:

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

    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 only desired columns
    select(hr_data,
           Name,
           Department,
           Engagement)
    

    ผลลัพธ์:

    .

    Note:

    เวลาเลือก column ด้วย select() เราสามารถกำหนดลำดับของ column ที่จะมาแสดงได้ เช่น ต้องการแสดง Department ก่อน Name ก็ให้เขียน Department, Name

    .

    dplyr มี helper function ที่ช่วยในการเลือก column ให้ง่ายขึ้น เช่น:

    FunctionMeaning
    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 for high attrition risk
    filter(hr_data,
           AttritionRisk == "High")
    

    ผลลัพธ์:

    .

    Note:

    เราสามารถใช้ boolean operator และ comparison operator ร่วมได้:

    OperatorMeaning
    ==เท่ากับ
    !=ไม่เท่ากับ
    >มากกว่า
    <น้อยกว่า
    &and
    |or
    !not

    เช่น:

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

    # Filter for high attrition risk in Finance
    filter(hr_data,
           AttritionRisk == "High" & Department == "Finance")
    

    ผลลัพธ์:


    3️⃣ Function #3: arrange()

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

    ตัวอย่าง:

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

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

    # Sort employees by engagement
    arrange(hr_data,
            Engagement)
    

    ผลลัพธ์:

    .

    Note:

    Default ของ arrange() เป็นเรียงจากน้อยไปมาก (A-Z)

    ถ้าต้องการเรียงจากน้อยไปมาก (Z-A) ให้ใช้ desc() เช่น:

    # Sort employees by engagement, from high to low
    arrange(hr_data,
            desc(Engagement))
    

    ผลลัพธ์:


    4️⃣ Function #4: summarise()

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

    ตัวอย่าง:

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

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

    # Calculate mean engagement
    summarise(hr_data,
              mean(Engagement))
    

    ผลลัพธ์:

    .

    Note:

    Functions ที่มักใช้กับ summarise() ได้แก่:

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

    .

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

    # Calculate mean engagement by attrition risk
    summarise(group_by(hr_data, AttritionRisk),
              mean(Engagement))
    

    ผลลัพธ์:

    .

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

    # Naming the output
    summarise(group_by(hr_data, AttritionRisk),
              AvgEng = mean(Engagement))
    

    ผลลัพธ์:


    5️⃣ Function #5: mutate()

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

    ตัวอย่าง:

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

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

    # Add a new 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 หาค่าเฉลี่ยคะแนนการทำงานตามระดับความเสี่ยงในการลาออก ก่อนหน้านี้:

    # Calculate mean engagement by attrition risk
    summarise(group_by(hr_data, AttritionRisk),
              AvgEng = mean(Engagement))
    

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

    # Calculate mean engagement by attrition risk
    hr_data |>
      
      # Group by AttritionRisk
      group_by(AttritionRisk) |>
      
      # Calculate mean
      summarise(AvgEng = mean(Engagement))
    

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

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

    .

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

    ตัวอย่าง:

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

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

    # Find employees with high attrition risk
    # and sort by tenure and salary
    hr_data |>
      
      # Filter for high attrition risk
      filter(AttritionRisk == "High") |>
      
      # Sort descending by tenure and salary
      arrange(desc(YearsAtCompany),
              desc(Salary))
    

    ผลลัพธ์:

    .

    หรือ

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

    hr_data |> 
      
      # Group by department
      group_by(Department) |>
      
      # Calculate mean and count the number of employees
      summarise(AvgEng = mean(Engagement),
                EmpCount = n()) |>
      
      # Sort descending by average engagement
      arrange(desc(AvgEng))
    

    ผลลัพธ์:

    .

    หรือ

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

    hr_data |>
      
      # Group by department
      group_by(Department) |>
      
      # Count high attrition risk and find attrition risk ratio
      summarise(HighRiskCount = sum(AttritionRisk == "High"),
                TotalEmp = n(),
                HighRiskRatio = (HighRiskCount / TotalEmp) * 100) |>
      
      # Select desired columns
      select(Department, HighRiskRatio, TotalEmp, HighRiskCount) |>
      
      # Sort descending by high rish ratio
      arrange(desc(HighRiskRatio))
    

    ผลลัพธ์:


    🔥 สรุป 5 Functions จาก dplyr

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

    No.FunctionExplain
    1select()เลือก column ที่ต้องการ
    2filter()เลือก row ที่ต้องการ
    3arrange()จัดลำดับข้อมูล
    4sumamrise()สรุปข้อมูล
    5mutate()แปลงข้อมูล

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


    💪 Try It Yourself

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


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


    ✅ R Book for Psychologists: หนังสือภาษา R สำหรับนักจิตวิทยา

    📕 ขอฝากหนังสือเล่มแรกในชีวิตด้วยนะครับ 😆

    🙋 ใครที่กำลังเรียนจิตวิทยาหรือทำงานสายจิตวิทยา และเบื่อที่ต้องใช้ software ราคาแพงอย่าง SPSS และ Excel เพื่อทำข้อมูล

    💪 ผมขอแนะนำ R Book for Psychologists หนังสือสอนใช้ภาษา R เพื่อการวิเคราะห์ข้อมูลทางจิตวิทยา ที่เขียนมาเพื่อนักจิตวิทยาที่ไม่เคยมีประสบการณ์เขียน code มาก่อน

    ในหนังสือ เราจะปูพื้นฐานภาษา R และพาไปดูวิธีวิเคราะห์สถิติที่ใช้บ่อยกัน เช่น:

    • Correlation
    • t-tests
    • ANOVA
    • Reliability
    • Factor analysis

    🚀 เมื่ออ่านและทำตามตัวอย่างใน R Book for Psychologists ทุกคนจะไม่ต้องพึง SPSS และ Excel ในการทำงานอีกต่อไป และสามารถวิเคราะห์ข้อมูลด้วยตัวเองได้ด้วยความมั่นใจ

    แล้วทุกคนจะแปลกใจว่า ทำไมภาษา R ง่ายขนาดนี้ 🙂‍↕️

    👉 สนใจดูรายละเอียดหนังสือได้ที่ meb: