เริ่มทำ Sentiment Analysis ใช้งบศูนย์บาท ด้วย Google Sheets สำหรับมือใหม่
การวิเคราะห์ความพึงพอใจ หรือ Sentiment Analysis คืออะไร?
Sentiment Analysis คือ การวิเคราะห์ความพึงพอใจหรือความรู้สึกจาก Data ที่เป็น Text, String เช่น ความคิดเห็น, ข้อเสนอแนะจากแบบสำรวจรวมถึง Post และ Comment ใน Social Media ช่องทางต่างๆ
โดยมักแบ่งความพึงพอใจหรือ Sentiment ออกเป็น 3 หมวดหมู่ คือ
- Positive = เป็นข้อความเชิงบวก มีผลดีต่อแบบสำรวจและแบรนด์
- Neutral = เป็นข้อความกลางๆ ไม่มีผลดีหรือผลเสียต่อแบบสำรวจและต่อแบรนด์
- Negative = เป็นข้อความเชิงลบ มีผลเสียต่อแบบสำรวจและแบรนด์
ทำไมต้องทำ Sentiment Analysis?
- ปรับปรุงประสิทธิภาพในการบริการให้ดียิ่งขึ้น
- ช่วยเพิ่มยอดขายและปรับปรุงแคมเปญการตลาด
- ดับไฟ แก้ปัญหาทั้งเล็กและใหญ่ได้อย่างทันท่วงที
ทำ Sentiment Analysis ด้วยงบศูนย์บาท
บทความนี้เราจะพาทุกคนมาทำ Sentiment Analysis ด้วย Google Sheets ที่เป็นเครื่องมือฟรีจาก Google เพียงแค่เรามี Gmail ก็สามารถเข้าได้งานได้ทันที
หลายคนคงเคยใช้ Google Form ในการเป็นทั้งผู้สร้างและผู้ตอบแบบสำรวจความพึงพอใจจากลูกค้าหรือภายในองค์กรกันมาบ้างไม่มากก็น้อย
โดยปกติมักมีอยู่อย่างน้อย 1 คำถาม ที่ให้ตอบเป็นข้อเสนอแนะอื่นๆ ลักษณะเป็น Text Box ใหญ่ๆ เพื่อให้พิมพ์ข้อความ Free text ได้ตามใจ เมื่อเกิด Data ลักษณะนี้ขึ้นตึงต้องมีการจัดหมวดหมู่เพื่อให้ง่ายต่อการวิเคราะห์ เราเรียกสิ่งนี้ว่า Sentiment Analysis
1. สร้าง Sentiment Data เพื่อใช้ในการวิเคราะห์
กดเปิด Browser และพิมพ์คำสั่งนี้ลงไปในช่อง Address
sheets.new
จากนั้นกด Enter เพื่อสร้าง Google Sheets ไฟล์ใหม่
ตั้งชื่อไฟล์และเพิ่มข้อมูล
โดยเราจะสมมุติว่าเป็นแบบสำรวจเรื่อง "คุณรู้สึกอย่างไรกับบริษัทของเรา?" เป็นแบบสำรวจที่เราทำทุกเดือนหรือทุกไตรมาส
ตั้งชื่อไฟล์เป็น "Sentiment Analysis:คุณรู้สึกอย่างไรกับการทำงานในช่วงนี้" เปลี่ยนชื่อ Sheet1 เป็น "data" และเพิ่มข้อมูล 2 คอลัมน์ คือ ID และ Comment
2. เริ่มสร้าง List ของ Sentiment Words
การทำ Sentiment ครั้งแรก ต้องใช้วิธีอ่านทุกข้อความที่มี เป็นการสร้าง Positive list และ Negative list เพื่อสะสม Sentiment words ให้ความแม่นยำในการวิเคราะห์มีมากขึ้นเรื่อยๆ
สร้าง Column Positive List และ Negative List
3. ทำความรู้จัก Regular Expression
REGEX ย่อมากจาก "Regular Expression" คือ การเขียน Sequence of characters ด้วยอักขระพิเศษเพื่อ Match pattern ที่อยู่ใน Data ที่เราสนใจ ลองดูลักษณะการเขียนในรูปด้านล่าง
4. ใช้ REGEXMATCH เพื่อทดสอบ Pattern
ทำความรู้จัก Function "REGEXMATCH" ใน Google Sheets
Syntax
REGEXMATCH เป็น Function ที่ใช้ทดสอบ Pattern ของ Text ว่าตรงตามที่เราต้องการหรือไม่ ค่าที่ออกมาจะเป็น Boolean คือ
- Pattern ของ Text กับ Function ตรงกันค่าที่ได้ออกมาจะเป็น TRUE
- Pattern ของ Text กับ Function ไม่ตรงกันค่าที่ได้ออกมาจะเป็น FALSE
สร้าง Column ใหม่ชื่อ Positive Check และทดสอบ Positive Comment
เขียน Function REGEXMATCH ที่ Cell C2
Syntax
Data ใน Cell B2 คือ "ชอบมากเลย บรรยากาศการทำงานที่นี่สนุก ทีมงานก็เป็นกันเอง" มีคำว่า "ชอบ" ดังนั้น Function REGEXMATCH จึง Return ค่า TRUE ออกมาใน Cell C2
ใช้ REGEXMATCH, "|" , "( )" เพื่อเพิ่มคำในการทดสอบ Pattern
Syntax
หลังจากพิมพ์ Function นี้ลงไปใน Cell C2 ลากสูตรลงไปจนถึง Cell C7 เพื่อทดสอบว่า Pattern ใหม่ใช้งานปกติหรือไม่
Pattern ใหม่ที่เราทำลองสร้างขึ้นมาใช้งานได้ค่อนข้างถูกต้อง เพราะ Row ID ที่ 2, 4 และ 5 ไม่มีคำว่า ชอบ,สนุก,เป็นกันเอง,สบายดี,ไม่น่าเบื่อ,สวัสดิการดี จึง Return เป็น FALSE ออกมา
Good job!
ถึงขั้นตอนนี้แล้ว แสดงว่าถ้าใช้ Function นี้กับ Negative list ก็ได้ผลที่ถูกต้องเช่นกัน
ยังมีปัญหาอยู่
หากมี Sentiment words เพิ่มขึ้น เราต้องใส่ใน Function แบบ Manual อยู่เสมอ ซึ่งเป็นสิ่งที่ควรหลีกเลี่ยงเพราะมีโอกาสทำให้ Function ทำงานผิดพลาดได้ง่าย เรามาลองลดงาน Manual ใน Function กันเถอะ
5. สร้างชีทเพื่อรวม Sentiment Words
สร้างชีทและย้ายข้อมูล
สร้างชีทใหม่ชื่อ "wordlist" จากนั้น ย้าย Positive List และ Negative List จากชีท "data" มาในชีท "wordlist" ที่ทำหน้าที่เป็น Database รวบรวมทุกคำอยู่ในที่เดียว
6. รวม Sentiment Words ด้วย CONCATENATE
ขั้นตอนนี้ต้องสร้าง Column เพิ่ม คือ Concat Positive และ Concat Negative จากนั้นทำการรวม Sentiment words ต่างๆ ด้วย Function CONCATENATE
Syntax
CONCATENATE เป็น Function ที่ใช้ในการต่อ Text เข้าหากัน เพื่อรวม Text จาก Cell ต่างๆ ให้อยู่ใน Cell เดียว
เริ่มต้นการรวม Sentiment words
ใน Cell B3 ให้ใส่เป็น =A3 เพื่อดึงคำว่า "ชอบ" เป็นจุดเริ่มต้นของการรวม Positive list เช่นเดียวกับ Cell D3 ให้ใส่เป็น =C3 เพื่อดึงคำว่า "เครียด" เป็นจุดเริ่มต้นของการรวม Negative list
ใช้ Function CONCATENATE
ใส่ Function ใน Cell B3 เพื่อรวม Text ของ Positive list
=CONCATENATE(B2, "|", A3)
##รวมข้อความใน B2 ต่อด้วย "|" ต่อด้วยข้อความใน A3
Result ที่ได้จะเป็น ชอบ|สนุก
ใส่ Function ใน Cell D3 เพื่อรวม Text ของ Negative list
=CONCATENATE(D2, "|", C3)
##รวมข้อความใน D2 ต่อด้วย "|" ต่อด้วยข้อความใน C3
Result ที่ได้จะเป็น เครียด|กังวล
ลากสูตรลงไปด้านล่างเพื่อให้ Function Apply ทุก Row ดูแล้วทุกอย่างก็ควรจะราบรื่นดี จนกระทั่งเจอ "|" โผล่ขึ้นมาแบบไม่หยุดหย่อน ส่งผลให้การรวม Data ของเรามีหน้าตาแปลกๆ
แก้ปัญหาพายุ "|" ด้วย Function IF
ข้อสังเกต: เหตุการณ์นี้มักเกิดขึ้นจากการที่ Cell ด้านซ้ายเป็นค่าว่าง " "
ใช้ Function IF เพื่อใส่เงื่อนไขว่า ถ้า Cell ด้านซ้ายไม่มีข้อมูลให้แสดงผลเป็นค่าว่าง " "
Syntax
ถ้าอ่านแล้วงงไม่เป็นไร ลองเขียนเลยดีกว่า โดยเริ่มจาก Function ที่มีอยู่เดิมใน Cell B3
เติม IF เข้าไปใน Function เดิม
เสร็จแล้วให้เราลาก Function ลงไปเรื่อยๆ จะเห็นว่าเราแก้ปัญหานี้ได้แล้ว Good Job!
อย่าลืมเพิ่ม IF ใน Function ของ Concat Negative ใน Cell D3 ด้วย
=IF(C3="","",CONCATENATE(D2,"|",C3))
##ถ้า C3 เป็นค่าว่าง ให้แสดงผลเป็นค่าว่าง แต่ถ้ารวมข้อความใน D2 ต่อด้วย "|" ต่อด้วยข้อความใน C3
7. ดึงค่า Sentiment Words จากชีท "wordlist"
ปรับ Format ชีท "data" ให้เหลือแค่ 4 Columns
- ID
- Comment
- Positive Check
- Negative Check
ปรับแก้ Function REGEXMATCH
Function เดิม
เริ่มจากไหน?
ระบุ Cell ในชีท "wordlist" ที่ต้องการใช้ใน Function REGEXMATCH ในชีท "data"
8. ระบุ Cell เพื่อดึง Sentiment Words มาใช้แบบ Automate
ข้อสังเกต: Row สุดท้ายมักรวม Sentiment words มากที่สุด ทำให้ครอบคลุมที่สุดเช่นกัน
แล้วเราจะระบุ Row สุดท้ายยังไงดี?
Row สุดท้ายของ Column Concat Positive และ Concat Negative มีจำนวน Characters (ตัวอักษร) มากที่สุดใน Columns นั้นๆ จึงควรใช้ Function LEN เพื่อนับ Characters
ใช้ Function LEN
Syntax
- สร้าง Column "LEN Pos" ด้านขวาของ Column "Concat Positive"
- สร้าง Column "LEN Neg" ด้านขวาของ Column "Concat Negative"
เพื่อใช้นับ Characters ของแต่ละ Column
ใน Cell C2 ให้ใช้ Function ArrayFormula + LEN ของ Concat Positive
ใน Cell F2 ให้ใช้ Function ArrayFormula + LEN ของ Concat Negative
การใช้ ArrayFormula มาครอบ Function LEN จะช่วยให้ใช้ Function แค่ Row เดียวแล้ว Apply ไปทุก Row ใน Column นั้นๆ ทำให้ง่ายต่อการ Maintain Function ในอนาคต
เมื่อเรานับ Characters ได้ครบทุก Cell ก็ถึงขั้นตอนการหา Cell ที่มีจำนวน Characters มากที่สุด ทั้งใน Column "LEN Pos" และ "LEN Neg"
ให้กด Shift ค้าง แล้วคลิกไปที่ Row ที่ 1 และ 2 ให้แถบสีน้ำเงินคลุมครบทั้งหมด
คลิกขวาแล้วเลือก Insert 2 rows above เพื่อแทรก 2 Rows ใหม่ด้านบน
- เพิ่ม Max และ Regex Pos ลงไปใน Cell B1 และ B2
- เพิ่ม Max และ Regex Neg ลงไปใน Cell E1 และ E2
ใช้ Function MAX
Syntax
ใน Cell C1 ให้ใช้ Function MAX เพื่อหาจำนวน Characters ที่มากที่สุดของ LEN Pos
=MAX(C4:C))
##หาค่าที่มากที่สุดตั้งแต่ C4 ไปจนตลอด Column C
ใน Cell F1 ให้ใช้ Function MAX เพื่อหาจำนวน Characters ที่มากที่สุดของ LEN Neg
=MAX(F4:F))
##หาค่าที่มากที่สุดตั้งแต่ F4 ไปจนตลอด Column F
ทวนสิ่งที่เราจะทำอีกครั้ง
สิ่งที่เรามี
คือ จำนวน MAX Characters ดังนั้นเราต้องดึง Data ที่อยู่ในแถวเดียวกับค่า MAX ของทั้ง Positive และ Negative ด้วยการใช้ Function FILTER กรองข้อมูลให้เหลือตามเงื่อนไขที่เราต้องการ
ใช้ Function FILTER
Syntax
- ใน Cell C2 ให้ใช้ Function FILTER เพื่อดึง Data จาก Column B ที่มีค่า Max Characters = Cell C1 คือ 84
=FILTER(B4:B, C4:C=C1)
##กรองข้อมูลตั้งแต่ B4 ไปจนตลอดทั้ง Column โดยมีค่า Characters ตั้งแต่ C4 ไปจนตลอดทั้ง Column เท่ากับค่าที่อยู่ใน C1
จะเห็นได้ว่าเราได้ Result ที่ต้องการแล้ว
ให้เพิ่ม "( )" ใน Result เพื่อให้ Regular Expression สมบูรณ์ด้วย Function CONCATENATE ที่เคยใช้กันไปแล้ว
=CONCATENATE( "(", FILTER(B4:B, C4:C=C1), ")")
- ใน Cell F2 ให้ใช้ Function FILTER เพื่อดึง Data จาก Column E ที่มีค่า Max Characters = Cell F1 คือ 12
=CONCATENATE( "(", FILTER(E4:E, F4:F=F1), ")")
9. ดึงข้อมูลเพื่อทดสอบ Sentiment Data
กลับมาที่ชีท "data" กันอีกครั้ง
ปรับ Function ของ Positive Check
คลิก Cell C2 เพื่อแก้ Function ให้ Refer Regular Expression ไปที่ Cell C2 ในชีท "wordlist"
แก้ไขจาก
ให้เป็น
ข้อสังเกต: หากเราลากคลุมเฉพาะ wordlist!$C$2 เจ้า Google Sheets จะแสดงว่ามีค่าเป็นอะไรเพื่อแสดงว่า Refer ไปถูก Cell หรือไม่ ซึ่งเราทำถูกต้องแล้ว
ดึงข้อมูลมาใช้ใน Positive Check
เพิ่ม IF + ArrayFormula เพื่อให้ Function REGEXMATCH ไม่แสดงผลเมื่อ Data ใน Column B เป็นค่าว่าง และให้ Function Apply ทั้ง Column C
=ArrayFormula(IF(B2:B="","",REGEXMATCH(B2:B,wordlist!$C$2)))
ดึงข้อมูลมาใช้ใน Negative Check
ดึงข้อมูลจาก wordlist!$F$2 มาใช้ใน Regular Expression และเพิ่ม IF + ArrayFormula เพื่อให้ Function REGEXMATCH ไม่แสดงผลเมื่อไม่มี Data ใน Column B และให้ Function Apply ทั้ง Column D
=ArrayFormula(IF(B2:B="","",REGEXMATCH(B2:B,wordlist!$F$2)))
Good Job!
เราได้ Column ที่ใช้ทดสอบ Sentiment ทั้ง Positive และ Negative แบบ Automate เป็นที่เรียบร้อย
10. สร้างเงื่อนไขให้ Positive, Neutral, Negative
สร้าง Column: Sentiment
สร้างเงื่อนไขแบ่ง Sentiment
- ถ้า Column Comment (B) เป็นค่าว่างให้แสดงผลเป็น " "
- ถ้า Column Positive Check (C) = TRUE ให้แสดงผลเป็น "Positive"
- ถ้า Column Negative Check (D)= TRUE ให้แสดงผลเป็น "Negative"
- ถ้าเงื่อนไขไม่ตรงกับ Positive และ Negative ให้แสดงผลเป็น "Neutral"
เท่ากับว่ามี 4 เงื่อนไขที่แสดงผลใน Column Sentiment ที่เราสร้างขึ้น
ใช้ Function IFS
Syntax
ใน Cell E2 ใส่ IFS เพื่อกำหนดเงื่อนไขตั้งแต่ข้อ 1 ถึง ข้อ 3
- ถ้า Column Comment (B) เป็นค่าว่างให้แสดงผลเป็น " "
- ถ้า Column Positive Check (C) = TRUE ให้แสดงผลเป็น "Positive"
- ถ้า Column Negative Check (D)= TRUE ให้แสดงผลเป็น "Negative"
=IFS(B2="","",C2=TRUE,"Positive",D2=TRUE,"Negative")
จะเห็นว่า Result ที่ได้คือ "Positive" เนื่องจากตรงเงื่อนไขที่ 2 คือ C2=TRUE
อย่าลืมใช้ ArrayFormula เพื่อให้ Function นี้ Apply ได้เลยทั้ง Column
=ArrayFormula(IFS(B2:B="","",C2:C=TRUE,"Positive",D2:D=TRUE,"Negative"))
ในที่สุดก็สำเร็จ เอ้ยยยย ยัง!!! มี Cell ที่ยัง Error อยู่ เพราะยังไม่ได้กำหนดเงื่อนไขที่ 4
ใช้ Function IFERROR
Syntax
เพิ่ม IFERROR เพื่อกำหนดเงื่อนไขที่ 4 ให้แสดงผลออกมาเป็นค่า "Neutral"
=IFERROR(ArrayFormula(IFS(B2:B="","",C2:C=TRUE,"Positive",D2:D=TRUE,"Negative")),"Neutral")
ใช้ Conditional Formatting
ใส่สีให้แต่ละเงื่อนไขเพื่อเพิ่มความสะดวกในการใช้งาน
Format > Conditional Formatting
กำหนด Condition ให้ "Positive"
Apply to range = E2:E
Format rules = Text is exactly "Positive"
Formatting style = สีน้ำเงิน
จากนั้นกด Add another rule เพื่อเพิ่มอีก 2 เงื่อนไขที่เหลือ
กำหนด Condition ให้ "Negative"
Apply to range = E2:E
Format rules = Text is exactly "Negative"
Formatting style = สีแดง
กำหนด Condition ให้ "Neutral"
Apply to range = E2:E
Format rules = Text is exactly "Negative"
Formatting style = สีเหลืองหรือเทา
จากนั้นกด Done ก็เสร็จเรียบร้อย
สร้างชีทสำเร็จแล้ว
ตอนนี้เราทำชีทที่ใช้ในการทำ Sentiment Analysis เรียบร้อยแล้ว!!
วิธีการใช้งาน
1. เพิ่ม Data ใหม่เข้าไปในชีท "data"
เมื่อเพิ่ม Data เข้าไปแล้ว Column Sentiment จะแสดงผลว่า Data ในแต่ละ Row ถูกจัดอยู่กลุ่มไหน
Positive
Data ที่อยู่ในแถวนั้น มีคำที่เป็น Positive อยู่ในชีท "wordlist"
Negative
Data ที่อยู่ในแถวนั้น มีคำที่เป็น Positive อยู่ในชีท "wordlist"
Neutral
Data ที่อยู่ในแถวนั้น ไม่มีคำที่เป็น Positive หรือ Negative ที่อยู่ในชีท "wordlist" เลย
2. สังเกตแถวที่เป็น Neutral เพื่อเพิ่ม Word ใหม่เข้าไปในชีท "wordlist"
ID 11 น่าเบื่อมากเลย ต้องทำงานนอกเวลาบ่อยมาก
- ควรเพิ่มคำว่า "น่าเบื่อ" และ "ทำงานนอกเวลาบ่อย" เข้าไปที่ Negative List
ID 13 วางแผนงานยากมาก มีงานแทรกตลอด
- ควรเพิ่มคำว่า "งานยากมาก" และ "งานแทรกตลอด" เข้าไปที่ Negative List
ID 14 หัวหน้าเปลี่ยน direction บ่อยเกินไป งานไม่เป็นไปตามแผนที่วางไว้ในต้นปี
- ควรเพิ่มคำว่า "เปลี่ยน direction บ่อย" และ "งานไม่เป็นไปตามแผน" เข้าไปที่ Negative List
ID 15 เพื่อนร่วมงานตลก ทำให้อยากทำงานด้วย
- ควรเพิ่มคำว่า "เพื่อนร่วมงานตลก" และ "อยากทำงาน" เข้าไปที่ Positive List
3. ตรวจสอบ Function ที่อัพเดท Sentiment Words แล้วในชีท "data"
จะเห็นได้ว่า ID ที่ 11, 13, 14, 15 มีค่าใน Column "Sentiment" เปลี่ยนไปจากเดิมแล้ว
สรุป!
- ผล Sentiment Analysis ไม่จำเป็นต้องเป็น "Positive" หรือ "Negative" เสมอไป ถ้าไม่มีเชิงบวกหรือเชิงลบ ก็ให้เป็นค่า "Neutral" ได้
- การทำ Sentiment Analysis จะแม่นยำได้ต่อเมื่อเรามี Word List ที่มากพอ ดังนั้นยิ่งเรามี Data มากก็จะช่วยให้มี Word List ที่มากขึ้นเช่นกัน จำนวน Data จึงสำคัญมาก
- หวังว่าบทความนี้จะเป็นประโยชน์ไม่มากก็น้อยสำหรับคนที่ต้องทำแบบสำรวจความคิดเห็นอยู่เป็นประจำ ลองเอาไปปรับใช้งานกันดูนะ!
แจก Template ตรงนี้
หากใครลองทำตามแล้วติดขัดตรงไหน ก็มาลองเอา Template ไปใช้ฟรีได้เลย
Special E-Book and Online Course
สำหรับใครที่สนใจ E-Book และคอร์ส Google Sheets ลงชื่อไว้ได้เลย ถ้าทำเสร็จแล้วจะรีบแจ้งข่าวให้รู้ก่อนใคร!!
Member discussion