Author: Yannawut Kimnaruk

  • เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python

    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python

    ลองนึกภาพว่าคุณเป็นเจ้าของร้านค้า แล้วอยากเพิ่มยอดขาย นี่คือคำถามที่อาจจะช่วยคุณได้

    “ตอนจัดเรียงชั้นวางของในร้าน ควรวางสินค้าอะไรใกล้กับอะไร?”
    “สินค้า 2 ชิ้นไหนควรแนะนำคู่กันตอนจัดโปรโมชั่น?”
    “หน้าร้านค้าออนไลน์ จะเสนอสินค้าอะไรเพิ่มเติมให้ลูกค้าที่ซื้อสินค้าชิ้นแรกไปแล้ว?”

    การหาคำตอบของคำถามเหล่านี้ทำได้โดยเทคนิคหนึ่งของ data mining ที่เรียกว่าการวิเคราะห์ตะกร้าสินค้า (Market basket analysis) ซึ่งทำยังไงมาดูกันครับ

    บทความนี้เป็นบทความจาก Content Creator
    เขียนโดย ญาณวุฒิ คิมนารักษ์
    บรรณาธิการ ตรวจสอบโดย ศิระ เอกบุตร (เทพเอ็กเซล)
    กลั่นมาจากความคิดทั้งสองคน จึงมั่นใจได้ในความถูกต้องมากขึ้นไปอีกครับ

    Market basket analysis คืออะไร?

    การหาคำตอบของคำถามเหล่านี้ทำได้โดยเทคนิคหนึ่งของ data mining ที่เรียกว่าการวิเคราะห์ตะกร้าสินค้า (Market basket analysis) โดยการใช้กฎของความสัมพันธ์ (Association rule) ช่วยให้เราได้ข้อมูลเชิงลึกจากข้อมูลการซื้อขายจำนวนมากได้

    Association rule เป็นการหาความสัมพันธ์ระหว่างรายการสินค้าในตะกร้า ตัวอย่างเช่น “ถ้าลูกค้าซื้อขนมปังก็มีโอกาส 80% ที่เขาจะซื้อเนยเช่นกัน” โดยการหากฎเหล่านี้จะพิจารณาจากความถี่ของการเกิดรายการสินค้าเหล่านี้ในข้อมูลการซื้อขาย อีกตัวอย่างยอดฮิตของเบียร์และผ้าอ้อม (Beer and Diapers) ในปี 1992 คือการค้นพบว่าพ่อบ้านวัย 30-40 ปีมักจะซื้อเบียร์และผ้าอ้อมพร้อม ๆ กัน การเข้าใจพฤติกรรมนี้แล้วนำมาปรับชั้นวางสินค้าให้เบียร์กับผ้าอ้อมอยู่ใกล้กัน ช่วยเพิ่มยอดขายได้ถึง 35% เลยทีเดียว

    ในบทความนี้ ผมจะอธิบายเกี่ยวกับตัววัดประสิทธิภาพ (Metrics) ที่สำคัญในการใช้ Association rule คู่กับตัวอย่างที่เข้าใจง่ายและอัลกอริทึม Apriori ที่จะช่วยลดภาระในการคำนวณสำหรับ Association rule  แล้วปิดท้ายด้วยตัวอย่าง code Python ที่สามารถนำไปใช้งานได้กับข้อมูลจริง

    กรณีตัวอย่าง ร้านขายของชำ

    สมมติว่าคุณมีร้านขายของชำและมีสินค้าทั้งหมด 5 ชนิดในร้าน ได้แก่ ขนมปัง เนย แยม นม และไข่ โดยร้านคุณเก็บข้อมูลการซื้อขายทั้งหมดไว้ในฐานข้อมูลอย่างดี

    ในตัวอย่างนี้จะดูการซื้อของลูกค้า 5 ครั้ง ตามรูปด้านล่าง

    • ลูกค้าคนที่ 1 ซื้อครบทุกอย่าง
    • คนที่ 2 ซื้อขนมปัง เนย นม
    • คนที่ 3 ซื้อขนมปัง เนย ไข่
    • คนที่ 4 ซื้อขนมปัง เนย
    • คนที่ 5 ซื้อนม ไข่
    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 1

    จากตัวอย่างนี้ คอมพิวเตอร์จะแปลงข้อมูลการซื้อแต่ละครั้งเป็นตารางที่มีคอลัมน์คือสินค้าแต่ละชนิดและแถวแต่ละแถวคือการซื้อแต่ละครั้ง ถ้าลูกค้าซื้อสินค้าชนิดไหน สินค้านั้นจะมีค่าเป็น 1

    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 2

    ตารางนี้จะช่วยให้เราคำนวณตัววัดประสิทธิภาพได้ง่ายขึ้น 

    ผมขอแนะนำให้รู้จักกับตัววัดประสิทธิภาพ 5 ตัวที่เป็นพระเอกของเรา ได้แก่ support, confidence, lift, leverage และ conviction

    ตัววัดประสิทธิภาพ (Metrics) ใน Market basket analysis

    สรุปแบบรวบรัด

    1. Support: ความน่าจะเป็นที่จะซื้อสินค้านั้นในบรรดาการซื้อทั้งหมด
    2. Confidence: ความน่าจะเป็นที่จะซื้อสินค้า A ในการซื้อครั้งเดียวกับสินค้า B
    3. Lift: อัตราส่วนของความน่าจะเป็นที่จะซื้อสินค้า B เมื่อรู้ว่าลูกค้าซื้อสินค้า A เทียบกับความน่าจะเป็นที่จะซื้อ B โดยไม่รู้ว่าลูกค้าซื้อ A รึเปล่า
    4. Leverage: ความแตกต่างระหว่างความน่าจะเป็นที่จะซื้อสินค้า A และ B หร้อมกัน เทียบกับความน่าจะเป็นที่จะซื้อ A และ B แบบเป็นอิสระต่อกัน
    5. Conviction: ตรวจสอบว่าความสัมพันธ์นั้นเกิดขึ้นโดยบังเอิญหรือไม่

    1. Support 

    การซื้อขายทั้งหมดมีกี่รายการที่มีชุดสินค้านี้?

    Support บอกว่าสินค้านี้มีการซื้อมากน้อยแค่ไหนจากการซื้อขายทั้งหมด

    ค่าของ Support ช่วยให้เรารู้ว่าสินค้านี้ควรค่ากับการเอาไปวิเคราะห์ต่อไปรึเปล่า เช่น ที่แยมมีคนซื้อแค่ครั้งเดียวจากการซื้อขาย 5 ครั้งก็ไม่น่าสนใจเท่าไรเทียบกับสินค้าอื่น เป็นต้น

    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 3

    เช่น

    • Support ของขนมปัง = 4/5 = 0.8
    • Support ของขนมปัง คู่กับ นม = 2/5 = 0.4

    ตารางด้านล่างแสดงค่า Support ของชุดสินค้า 1-2 ชิ้นทั้งหมด ลองคำนวณดูได้นะครับ ว่าได้เลขตรงกันมั้ย

    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 4

    Support สูงหมายถึงลูกค้าหลายคนซื้อสินค้านี้ ดังนั้นสินค้านี้จึงสำคัญสำหรับร้านของเรา

    เราสามารถกรองชุดสินค้าที่มี Support ต่ำออกไปได้ เพราะจำนวนครั้งที่ซื้อน้อยเกินไปที่จะหาข้อมูลเชิงลึกได้

    2. Confidence 

    พิจารณาเฉพาะการซื้อขายที่มีสินค้า A มีการซื้อขายกี่ครั้งที่มีสินค้า B ด้วย

    Confidence คือความน่าจะเป็นแบบมีเงื่อนไข (Conditional Probability) ซึ่งเป็นส่วนหนึ่งของสถิติแบบเบย์ (Baysian statistics) เป็นการหาความน่าจะเป็นของการเกิดสินค้าถัดไปในการซื้อขายเดียวกันเมื่อมีสินค้าก่อนหน้า (antecedents) อยู่แล้วในการซื้อขายนั้น

    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 5

    ตัวอย่างเช่น 

    Confidence(ขนมปัง → นม) =
    จำนวนครั้งที่ซื้อขนมปังและนมพร้อมกัน/จำนวนครั้งที่ซื้อขนมปัง = 2/4 = 0.5 

    Confidence(นม → แยม) = 1/3 = 0.33

    ถ้าพอเข้าใจแล้วลองคำนวณ  Confidence ของสินค้าแต่ละคู่แล้วมาเทียบกับตารางด้านล่างได้เลยครับ

    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 6

    Confidence ของสินค้าบางคู่สูงแปลว่า ตะกร้าที่มี A มักจะมี B ด้วย

    อย่างไรก็ตาม การพิจารณาแค่ค่า Confidence ยังไม่เพียงพอที่จะตัดสินใจธุรกิจ เพราะว่า
    ถ้า B (สินค้าที่ซื้อทีหลัง) เป็นชุดสินค้าที่มีความถี่สูงอยู่แล้ว Confidence ที่เกี่ยวข้องกับ B ก็จะสูงตามเสมอ ประมาณว่าทุกคนซื้อสินค้านี้อยู่แล้ว ไม่เกี่ยวว่าก่อนหน้าเขาซื้ออะไรมาก่อน

    Lift จึงเป็นตัววัดประสิทธิภาพอีกตัวที่ควรดูคู่กับ Confidence

    3. Lift 

    เมื่อมีและไม่มีสินค้า A ในการซื้อขาย จะมีผลต่อสินค้า B มากน้อยแค่ไหน

    Lift เป็นอัตราส่วนของความน่าจะเป็นของการเกิด B เมื่อมี A เทียบกับความน่าจะเป็นของการเกิด B ทั้งหมดโดยไม่คำนึงถึง A เลย

    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 7

    แนวคิดของ Lift: Lift วัดว่าการเกิด A และ B พร้อมกันแตกต่างจากการที่ A และ B เป็นอิสระต่อกันอย่างไร โดยเอา P(B|A)/P(B)

    • P(B|A) คือ ความน่าจะเป็นที่จะเกิด B เมื่อเกิด A แล้ว
    • P(B) คือ ความน่าจะเป็นที่จะเกิด B โดยไม่คำนึงถึง A
    • เมื่อเราหาร P(B|A) ด้วย P(B) ก็คือการเปรียบเทียบว่า “โอกาสที่ B จะเกิดเมื่อ A เกิดแล้ว” แตกต่างจาก “โอกาสที่ B จะเกิดโดยทั่วไป” กี่เท่า?

    การตีความ Lift:

    • ถ้า Lift = 1: A และ B เป็นอิสระต่อกัน (ถ้าหารได้ 1 เท่า โอกาสเท่าเดิม ไม่เกี่ยวกัน)
    • ถ้า Lift > 1: A และ B มีความสัมพันธ์เชิงบวก (เกิดร่วมกันมากกว่าปกติ)
    • ถ้า Lift < 1: A และ B มีความสัมพันธ์เชิงลบ (เกิดร่วมกันน้อยกว่าปกติ)

    ที่มาของสูตร

    • ความน่าจะเป็นแบบมีเงื่อนไข: ตามทฤษฎีความน่าจะเป็น เรามี P(B|A) = P(A ∩ B) / P(A) ซึ่งก็คือ Confidence(A->B) นั่นเอง
    • ความเป็นอิสระ: ถ้า A และ B เป็นอิสระต่อกัน จะได้ว่า P(A ∩ B) = P(A) * P(B) เพราะ หากเป็นอิสระจริง P(B|A) ก็จะเท่ากับ P(B) นั่นเอง

    การสร้างสูตร:

    • เริ่มจาก P(B|A) = P(A ∩ B) / P(A)
    • หาร P(B) ทั้งสองข้าง: P(B|A) / P(B) = (P(A ∩ B) / P(A)) / P(B)
    • จัดรูปใหม่: Lift = P(B|A) / P(B) = P(A ∩ B) / (P(A) * P(B))

    ดังนั้นการคิด Lift สามารถนำ support (หรือก็คือจำนวนครั้งการซื้อ) ของ A พร้อมกับ B มาหารด้วย support ของ A คูณกับ support ของ B

    หรือจะเอา Confidence (A->B) / Support (B) ไปเลยก็ได้ เพราะจริงๆ ก็คือสิ่งเดียวกัน

    ตัวอย่างเช่น

    • Lift(ขนมปัง → นม) = 0.5/0.4 = 1.25 
    • Lift(นม → แยม) = 0.33/0.2 = 1.65

    ตารางด้านล่างนี้ ผมเอา Lift ของสินค้าบางคู่มาให้ดูกัน

    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 8

    ดังนั้นโดยสรุป ถ้า Lift มากกว่า 1 แปลว่าการซื้อสินค้า A ทำให้ความน่าจะเป็นที่จะซื้อสินค้า B พร้อมกันสูงขึ้นนั่นเอง

    มีตัววัดประสิทธิภาพอีก 2 ตัวที่อาจไม่ดังเท่าตัววัดประสิทธิภาพก่อนหน้า แต่รู้ไว้ก็ดีเพราะช่วยให้เห็นมุมมองอื่น ๆ ได้

    4. Leverage 

    การซื้อหรือไม่ซื้อสินค้า A จะมีผลต่อการซื้อสินค้า B มากน้อยแค่ไหน

    Leverage คำนวณความต่างของความน่าจะเป็นที่จะซื้อสินค้า A และ B พร้อมกัน กับความน่าจะเป็นโดยมองสินค้า A และ B เป็นอิสระจากกัน

    Lift ใช้การหาร แต่ Leverage ใช้การลบ

    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 9

    Leverage(ขนมปัง → นม) = 0.4 – (0.8 x 0.6) = 0.08 

    Leverage(นม → แยม) = 0.2 – (0.6 x 0.2) = 0.08

    Leverage คล้ายกับ Lift แต่เข้าใจง่ายกว่าเพราะค่าของ Leverage อยู่ในช่วง -1 ถึง 1 ส่วน Lift จะมีค่าอยู่ในช่วง 0 ถึง Infinity

    • ค่า Leverage ถ้าเท่ากับ 0 บ่งบอกถึงความเป็นอิสระต่อกัน (ความน่าจะเป็นเท่ากัน ไม่ต่างกัน)
    • ถ้าเป็นบวกแสดงว่ามีแนวโน้มซื้อสินค้า 2 สิ่งนี้ด้วยกันมากขึ้น
    • ถ้าเป็นลบจะมีความสัมพันธ์แบบขัดแย้งกัน (ความน่าจะเป็นลดลง)
    • ยิ่งค่าเข้าใกล้ 1 หรือ -1 มาก ความสัมพันธ์ยิ่งแรงขึ้น

    5. Conviction 

    Conviction ช่วยให้ตัดสินว่าความสัมพันธ์นั้นเกิดขึ้นโดยบังเอิญหรือไม่

    Conviction วัดว่ากฎความสัมพันธ์ A → B แข็งแกร่งกว่าสมมติฐานที่ว่า A และ B เป็นอิสระต่อกันมากน้อยเพียงใด

    Conviction ใช้ในการวัดความน่าจะเป็นที่กฎความสัมพันธ์จะไม่ผิดพลาด

    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 10

    Conviction(ขนมปัง → นม) = (1 – 0.4) / (1 – 0.5) = 1.2 

    Conviction(นม → แยม) = (1 – 0.2)/(1 – 0.33) = 1.19

    การตีความ

    • Conviction = 1: A และ B เป็นอิสระต่อกัน
    • Conviction > 1: A และ B มีความสัมพันธ์เชิงบวก
    • Conviction < 1: A และ B มีความสัมพันธ์เชิงลบ
    • Conviction = ∞: กฎความสัมพันธ์สมบูรณ์ (ถ้าเกิด A แล้ว B จะเกิดเสมอ)
    • Conviction(A → B) ไม่จำเป็นต้องเท่ากับ Conviction(B → A)

    โดยที่ Conviction สามารถแยกแยะระหว่างกฎที่มี Confidence สูงมากๆ ได้ดีกว่า Lift โดยที่ให้ผลลัพธ์ที่น่าเชื่อถือแม้ในกรณีที่ B มีความถี่สูง

    อัลกอริทึม Apriori ตัวช่วยลดเวลาในการหา Association rule

    เมื่อจำนวนชุดสินค้ามากขึ้น จะทำให้การคำนวณ Association rule เพิ่มขึ้นแบบทวีคูณ การคำนวณกฎความสัมพันธ์ทั้งหมดจึงไม่คุ้มค่า เช่น ถ้าเรามี 10 สินค้า จำนวนความสัมพันธ์ที่เป็นไปได้คือ 57,000 กรณี!!! แล้วถ้ามีสินค้ามากกว่า 100 ชิ้นล่ะ แม้แต่คอมพิวเตอร์ก็คงจะบ่นเหมือนกันว่าให้คำนวณอะไรมากมาย 

    การคำนวณความสัมพันธ์ทั้งหมดอาจใช้เวลาและทรัพยากรมากเกินไป อัลกอริทึม Apriori จึงถูกออกแบบมาเพื่อหา Association rule ที่สำคัญเท่านั้นโดยใช้การคำนวณน้อยที่สุด

    มี 2 ขั้นตอนในการหา Association rule คือ  การสร้างชุดสินค้า (Itemset Generation) และการสร้างกฎ (Rule Generation) เราจะดูว่าอัลกอริทึม Apriori ช่วยเราใน 2 ขั้นตอนนี้ได้อย่างไร

    1. การสร้างชุดสินค้า 

    เราต้องการเฉพาะชุดสินค้าที่มี Support สูง

    เราต้องการเฉพาะชุดสินค้าที่ Support สูงกว่าค่าที่กำหนดไว้ หรือก็คือชุดสินค้าที่มีคนซื้อเยอะ ๆ นั่นเอง

    วิธีที่ง่ายที่สุดคือการคำนวณ Support ของชุดสินค้าทั้งหมด แต่ว่ามันก็ยังเยอะไปอยู่ดีเพราะจำนวนชุดสินค้าจะเพิ่มขึ้นแบบทวีคูณตามจำนวนสินค้า

    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 11

    N = จำนวนสินค้า

    ตัวอย่างเช่น ถ้าเรามี 4 สินค้า จำนวนชุดสินค้าคือ 2⁴ -1 = 15 ชุด ถ้าเรามี 10 สินค้า จะเพิ่มเป็น 2¹⁰ -1 = 1023 ชุด

    ดังนั้นการคำนวณ Support ของชุดสินค้าทั้งหมดจึงใช้เวลาและทรัพยากรมาก เราสามารถลดจำนวนชุดสินค้าที่ต้องคำนวณ Support ได้โดยปฏิบัติตามหลักการ Apriori ดังนี้

    “ชุดสินค้าที่มีสินค้าเพิ่มขึ้นจะมี Support ที่น้อยกว่าหรือเท่ากับ ชุดสินค้าที่มีจำนวนสินค้าน้อยกว่า”

    พูดง่าย ๆ คือ ลูกค้าที่ซื้อสินค้า A, B และ C พร้อมกัน ย่อมน้อยกว่าหรือเท่ากับ จำนวนคนที่ซื้อสินค้า A และ B พร้อมกัน (ไม่สนใจว่าจะซื้อสินค้า C หรือไม่)

    ตัวอย่าง

    ร้านค้ามีสินค้า 4 ประเภท ได้แก่ ขนมปัง เนย แยม และนม

    เราสามารถสร้างชุดสินค้า 15 ชุดตามภาพด้านล่าง (C1 คือสินค้า 1 ชิ้น, C2 คือสินค้า 2 ชิ้น …)

    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 12
    • สมมติว่าเรากำหนดค่า Support ต่ำสุดที่ยอมรับได้คือ 0.3 
    • ถ้า Support ของขนมปังน้อยกว่า 0.3 ชุดสินค้าทั้งหมดที่มีขนมปังก็จะมี Support น้อยกว่า 0.3 ด้วย นั่นเอง!! 
    • เราสามารถตัดชุดสินค้าทั้งหมดที่มีขนมปังออกจากการคำนวณ Support ได้ เราเรียกสิ่งนี้ว่า “การคัดกรองจาก Support (Support-Based Pruning)”
    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 13

    วิธีนี้ทำให้การคำนวณสามารถลดลงได้มากถึงครึ่งหนึ่งเลยทีเดียว

    หลังจากที่เรามีเฉพาะชุดสินค้าที่มีความถี่สูงแล้ว เราสามารถสร้าง Association rule ได้ต่อไป

    2. การสร้างกฎ 

    เราต้องการเฉพาะความสัมพันธ์ที่มี Confidence สูง

    วิธีเลือกเฉพาะความสัมพันธ์ที่สำคัญคือการกรองเฉพาะความสัมพันธ์ที่มี Confidence สูงเพราะว่ามันหมายถึงความสัมพันธ์ระหว่างสินค้า A และ B สูง

    แต่จะคำนวณ Confidence ของความสัมพันธ์ทั้งหมดก็ไม่ไหว (จำนวนความสัมพันธ์เยอะกว่าจำนวนชุดสินค้าอีก)

    เราสามารถลดจำนวนความสัมพันธ์ที่ต้องคำนวณ Confidence ได้โดยใช้หลักการ Apriori นี้

    “Confidence ของความสัมพันธ์จากชุดสินค้าจะต่ำลงเมื่อจำนวนสินค้าที่ตามมาเพิ่มขึ้น”

    ตัวอย่างเช่น ถ้าเรามี 4 สินค้าในชุดสินค้า: A, B, C และ D
    Confidence ของ (A,B,C→ D) ≥ (A,B → C,D) ≥ (A → B,C,D)

    เพื่อพิสูจน์สิ่งนี้ ขอย้อนกลับไปที่สูตรของ Confidence ใครลืมให้กลับไปดูที่ตัววัดประสิทธิภาพตัวที่ 2

    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 14

    ความแตกต่างระหว่างกฎ 2 ข้อนี้มีเพียงแค่ตัวส่วน ตามที่เราพูดถึง Support ในขั้นตอนที่ 1 เมื่อสินค้ามีจำนวนมากขึ้นจะมี Support ต่ำลง (ความถี่ต่ำลง) ดังนั้น Confidence ของความสัมพันธ์แรกจึงมีตัวส่วนที่ต่ำกว่าทำให้มี Confidence ที่สูงกว่า

    เราสามารถทำ “การคัดกรองจาก Confidence (Confidence-Based Pruning)” เหมือนกับที่ทำในขั้นตอนที่ 1 เราจะเริ่มด้วยความสัมพันธ์ที่มีสินค้าที่ตามมาเพียง 1 ประเภทก่อน

    เคล็ดลับของผมคือให้เน้นที่สินค้าที่ตามมา  (สินค้าที่อยู่หลังลูกศร) และทำเหมือนที่เราทำกับ Support

    ตัวอย่าง

    ร้านค้ามีสินค้า 4 ประเภท ได้แก่ ขนมปัง เนย แยม และนม

    เราสามารถสร้างความสัมพันธ์ได้ 14 แบบตามภาพด้านล่าง

    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 15
    • สมมติว่าเรากำหนดค่า Confidence ต่ำสุดที่ยอมรับได้ คือ 0.3 
    • ถ้า Confidence ของ {เนย, แยม, นม} → {ขนมปัง} น้อยกว่า 0.3 ความสัมพันธ์ทั้งหมดที่สินค้าที่ตามมามีขนมปังก็จะมี Confidence น้อยกว่า 0.3 ด้วย 
    • เราสามารถตัดความสัมพันธ์ทั้งหมดที่สินค้าที่ตามมามีขนมปังออกจากการคำนวณ Confidence ได้
    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 16

    สุดท้าย เราจะคำนวณ Lift จากกฎที่เหลือและทำการตัดสินใจทางธุรกิจด้วยความสัมพันธ์เหล่านั้น

    สรุปกันสักหน่อยก่อนไปเขียน code

    ผมได้อธิบายตัววัดประสิทธิภาพในการทำ Market basket analysis ได้แก่ support, confidence, lift, leverage และ conviction จากนั้นผมได้แนะนำอัลกอริทึม Apriori ที่สามารถลดการคำนวณ Association rule โดยการตัดความสัมพันธ์ที่ไม่ผ่านเกณฑ์ออก

    บอกเลยว่าจริงๆ แล้วขั้นตอนการเขียน code นั้นง่ายกว่าทฤษฎีของ Market basket analysis มากๆๆๆ เพราะเวลาเขียน code เขียนแค่ไม่กี่บรรทัดที่เหลือคอมพิวเตอร์จะคำนวณให้อัตโนมัติเลย แต่ที่ผมอธิบายทฤษฎียาวขนาดนี้เพราะถ้าเราไม่เข้าใจผลลัพธ์ว่าหมายความว่าอย่างไร สุดท้ายก็ไม่สามารถใช้งานจริงได้อยู่ดี

    เริ่มเขียน code

    คนที่ยังไม่รู้วิธีการใช้ library Pandas ใน Python แนะนำให้ไปอ่านบทความก่อนของผม เรื่อง “การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib” ก่อนนะครับ ไม่งั้นจะไม่เข้าใจ code หลังจากนี้

    ข้อมูลตัวอย่างสามารถดาวน์โหลดได้จาก kaggle เลื่อนลงมาจะเจอไฟล์ชื่อ GroceryStoreDataSet.csv ให้กดที่สัญลักษณ์ download เพื่อ download มาลงเครื่อง ไฟล์ .csv มองว่าเป็น Excel ที่มี Sheet เดียวก็ได้

    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 17

    dataset นี้ประกอบด้วยสินค้า 11 ชนิด ได้แก่ JAM, MAGGI, SUGAR, COFFEE, CHEESE, TEA, BOURNVITA, CORNFLAKES, BREAD, BISCUIT, และ MILK 

    1 แถวแทน 1 การซื้อขายและมีการซื้อขาย 19 ครั้ง ตามภาพด้านล่าง

    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 18

    สรุปขั้นตอน

    1. เรียกใช้ library และโหลดข้อมูล
    2. การเข้ารหัสแบบ one-hot (one-hot encoding)
    3. หาชุดสินค้าที่เกิดบ่อยโดยใช้อัลกอริทึม Apriori
    4. สร้าง Association rule 

    1. เรียกใช้ library และโหลดข้อมูล

    import pandas as pd
    
    from mlxtend.preprocessing import TransactionEncoder
    
    from mlxtend.frequent_patterns import apriori, association_rules
    
    df = pd.read_csv("GroceryStoreDataSet.csv", names=['transaction'], sep=',')

    Code นี้มีการเรียกใช้ library 3 ครั้ง

    • pandas ใช้สำหรับการจัดการ dataframe
    • mlxtend (machine learning extensions) เป็นไลบรารี่ Python ที่มีเครื่องมือด้าน data science มากมาย
    • mlxtend.preprocessing ใช้สำหรับการเตรียมข้อมูลให้พร้อมก่อนทำ Market basket analysis
    • mlxtend.frequent_patterns ใช้หา Association rule โดย import apriori, association_rules เข้ามา

    หลังจากนั้น โหลดข้อมูล GroceryStoreDataSet.csv มาเก็บไว้ที่ตัวแปรชื่อ df แล้วให้ชื่อคอลัมน์ว่า transaction ดังภาพ

    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 19

    2. การเข้ารหัสแบบ one-hot (one-hot encoding)

    เราต้องเปลี่ยนข้อมูลให้เป็นรูปแบบที่เหมาะสมก่อนที่จะนำเข้าไปในอัลกอริทึม Apriori เป้าหมายคือการได้ DataFrame แบบ one-hot (ตารางที่มี 0, 1 ตามประเภทสินค้า ใครจำไม่ได้เลื่อนไปดูตัวอย่างที่ด้านบนได้เลยครับ)

    • เปลี่ยน DataFrame เป็น list ของ list โดย list ก็เหมือนชุดของสินค้าที่ถูกครอบด้วยเครื่องหมาย [] นั่นเอง
    df = list(df["transaction"].apply(lambda x:x.split(",")))
    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 20
    • ใช้ TransactionEncoder จากไลบรารี่ mlxtend เพื่อเปลี่ยนรายการการซื้อขายเป็น one-hot array
    one_hot_transformer = TransactionEncoder()
    
    df_transform = one_hot_transformer.fit_transform(df)
    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 21

    ยังคงอ่านยากอยู่ ดังนั้นเราจะเปลี่ยนเป็น DataFrame พร้อมชื่อคอลัมน์

    • เปลี่ยน one-hot array เป็น DataFrame
    df = pd.DataFrame(df_transform, columns=one_hot_transformer.columns_)
    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 22

    นี่คือรูปแบบที่เราต้องการ แต่ละคอลัมน์คือชื่อสินค้าในร้านและแต่ละแถวแทนการซื้อขาย 1 ครั้ง ถ้าค่าเป็น True แสดงว่าสินค้านั้นถูกขายในการซื้อขายนั้น 

    ตอนนี้ข้อมูลพร้อมที่จะถูกประมวลผลแล้ว

    3. หาชุดสินค้าที่เกิดบ่อยโดยใช้อัลกอริทึม Apriori 

    เราจะใช้ Apriori เพื่อหาชุดสินค้าที่เกิดบ่อยจาก DataFrame ที่เตรียมมาในขั้นตอนที่ 2 เป้าหมายของขั้นตอนนี้คือการลดภาระงานคำนวณใน Association rule 

    ชุดสินค้าที่เกิดบ่อยจะต้องมี Support สูงกว่าค่า Support ที่กำหนด โดยเราสามารถปรับค่า min_support ให้เหมาะสมกับข้อมูลที่มีได้ ฟังกันที่ใช้คือ apriori ตรงตัวเลย

    df = apriori(df, min_support=0.2, use_colnames=True)
    
    df.sort_values(['support'], ascending=False, inplace=True)

    ชุดสินค้าที่มี Support สูงกว่า 0.2 มี 15 รายการดังนี้

    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 23

    ในตัวอย่างนี้ ผมตั้งค่า min_support ที่ 0.2 ดังนั้นมันจะกรองเฉพาะชุดสินค้าที่มี Support มากกว่า 0.2 (หรือมากกว่า 20% จาก 19 การซื้อขาย)

    เฉพาะชุดสินค้าที่สำคัญเหล่านี้ที่จะถูกนำไปใช้หา Association rule ต่อไป

    4. สร้าง Association rule  

    ถึงเวลาของขั้นตอนหลักแล้ว!!

    ฟังก์ชัน association_rules จะคำนวณตัววัดประสิทธิภาพจากข้อมูลการซื้อขายของเรา ซึ่งรวมถึง support, confidence, lift, leverage และ conviction โดยอัตโนมัติ

    df_ar = association_rules(df, metric="lift", min_threshold=1)

    ผลลัพธ์แสดงด้านล่าง

    เพิ่มยอดขายด้วย Market Basket Analysis : วิเคราะห์คู่สินค้าขายดีด้วย Python 24

    หลังจากนี้หน้าที่ของเราคือต้องแปลความหมายเพื่อนำไปใช้ในธุรกิจต่อไป

    ตัวอย่างการแปลความหมาย

    • แถวแรกที่มี Confidence สูงสุดคือ 0.8 ซึ่งหมายความว่าลูกค้าที่ซื้อนมจะซื้อขนมปังด้วย 80% อย่างไรก็ตาม อย่าลืมว่า Confidence ไม่ใช่ทุกอย่าง เพราะ Confidence ที่สูงในแถวนี้เกิดจากการที่ขนมปังมี support สูง (support ของขนมปังคือ 0.65) ซึ่งหมายความว่าขนมปังถูกซื้อหลายครั้งอยู่แล้ว ดังนั้นการขายขนมปังเมื่อซื้อนมอาจไม่ได้ช่วยอะไรมากนัก
    • ตัววัดประสิทธิภาพที่ดีกว่าคือ lift แถวหมายเลข 8 มี lift สูงสุดที่ 2.28 ซึ่งหมายความว่าลูกค้าที่ซื้อชามีแนวโน้มที่จะซื้อ Maggi มากกว่าลูกค้าปกติ 2.28 เท่าเลยที่เดียว

    ดังนั้นการแปลความหมายที่เหมาะสม ในคู่ที่สำคัญๆ คือ

    MAGGI และ TEA:

    • มี lift สูงสุด (2.285714) แสดงถึงความสัมพันธ์ที่แข็งแกร่งมาก
    • conviction สูงสุด (3.25) ยืนยันความสัมพันธ์ที่แข็งแกร่งมาก
    • 80% ของคนที่ซื้อ MAGGI จะซื้อ TEA ด้วย (confidence = 0.8)

    MILK และ BREAD:

    • มี confidence สูง (0.8) แสดงว่า 80% ของคนที่ซื้อ MILK จะซื้อ BREAD ด้วย
    • lift (1.230769) > 1 แสดงว่ามีความสัมพันธ์เชิงบวก

    COFFEE และ CORNFLAKES:

    • มี lift ค่อนข้างสูง (1.666667) แสดงถึงความสัมพันธ์ที่ดี
    • 50% ของคนที่ซื้อ COFFEE จะซื้อ CORNFLAKES ด้วย และในทางกลับกัน 66.67% ของคนที่ซื้อ CORNFLAKES จะซื้อ COFFEE

    SUGAR และ COFFEE:

    • มีความสัมพันธ์ที่ดี โดยมี lift เท่ากับ 1.666667
    • 50% ของคนที่ซื้อ COFFEE จะซื้อ SUGAR ด้วย

    เราสามารถทำอะไรได้บ้างหลังจากรู้เรื่องนี้

    • การจัดวางสินค้า: วางสินค้าที่มีความสัมพันธ์กันใกล้กัน เช่น MAGGI กับ TEA, MILK กับ BREAD
    • โปรโมชัน: สร้างโปรโมชันแบบคู่ เช่น ซื้อ COFFEE ได้ส่วนลด CORNFLAKES
    • การแนะนำสินค้า: เมื่อลูกค้าซื้อ MILK แนะนำให้ซื้อ BREAD เพิ่ม
    • การวางแผนสต็อกสินค้า: เตรียมสต็อก BREAD ให้เพียงพอเมื่อมีการสั่งซื้อ MILK จำนวนมาก
    • การพัฒนาผลิตภัณฑ์: อาจพิจารณาพัฒนาผลิตภัณฑ์ที่รวมสินค้าบางอย่างที่เหมาะสมเข้าด้วยกัน

    สรุป 

    ในบทความนี้ คุณได้รู้จักกับตัววัดประสิทธิภาพในการทำ Market basket analysis ทั้ง 5 ตัว คือ support, confidence, lift, leverage และ conviction  จากนั้นได้เข้าใจอัลกอริทึม Apriori ที่สามารถลดเวลาในการคำนวณ Association rule ได้ด้วยการคัดกรองจาก Support และ Confidene

    ปิดท้ายด้วยการทำ Market basket analysis จากข้อมูลตัวอย่างโดยใช้ไลบรารี่ pandas คู่กับ mlxtend ใน Python แล้วแปลผลลัพธ์ของ Association rule จากตัววัดประสิทธิภาพ เช่น confidence และ lift ก่อนที่จะเสนอแผนธุรกิจต่อไป

  • การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib

    การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib

    ในยุคที่ข้อมูลเป็นพลังงานที่ขับเคลื่อนโลก การวิเคราะห์และการตีความข้อมูลเป็นทักษะสำคัญอย่างยิ่ง ไม่ว่าคุณจะเป็นนักเรียน นักธุรกิจ หรือผู้ที่สนใจด้านข้อมูล การศึกษาเกี่ยวกับการใช้ Python ในการทำงานกับข้อมูลสามารถเปิดโอกาสใหม่ ๆ ได้อย่างมาก บทความนี้ผมจะสอนพื้นฐานการวิเคราะห์ข้อมูลด้วย Pandas และการสร้างกราฟด้วย Matplotlib ซึ่งเป็น library หรือเครื่องมืออย่างหนึ่งที่มาคู่กับ Python โดยคุณไม่จำเป็นต้องมีพื้นฐานการเขียนโปรแกรมมาก่อนก็สามารถเรียนรู้จากบทความนี้ได้ หวังว่าบทความนี้จะเป็นจุดเริ่มต้นให้คุณได้รู้จักและหลงรัก Python มากขึ้นนะครับ

    ในบทความนี้ผมจะอธิบายตั้งแต่การใช้โปรแกรมเขียน Python แล้วใช้ library pandas ในการอ่านข้อมูลจากไฟล์ Excel จากนั้นผมจะใช้ library matplotlib มาสร้างกราฟจากข้อมูล เรียกได้ว่ารวมขั้นตอนการวิเคราะห์ข้อมูลตั้งแต่ต้นจนจบเลยทีเดียว

    บทความนี้เป็นบทความจาก Content Creator
    เขียนโดย ญาณวุฒิ คิมนารักษ์
    บรรณาธิการ ตรวจสอบโดย ศิระ เอกบุตร (เทพเอ็กเซล)
    กลั่นมาจากความคิดทั้งสองคน จึงมั่นใจได้ในความถูกต้องมากขึ้นไปอีกครับ

    ทำไมต้องใช้ Python

    Python เป็นภาษาโปรแกรมที่มีความยืดหยุ่นแลใช้งานได้หลากหลาย เนื่องจากมีเครื่องมือ (library) มากมายที่ช่วยในการวิเคราะห์ข้อมูล เมื่อเปรียบเทียบกับการใช้ spreadsheet เช่น Excel หรือ Google Sheet จุดแข็งของการวิเคราะห์ข้อมูลด้วย Python มีดังนี้

    • ปรับแต่งได้ตามต้องการ: Python สร้างกราฟได้หลากลายรูปแบบ ไม่ว่าจะเป็น violin chart, box plot, heat map และยังสามารถปรับแต่งได้แทบทุกอย่างอีกด้วย
    • การทำงานกับข้อมูลขนาดใหญ่ (Big data): Python สามารถจัดการกับข้อมูลที่มีขนาดใหญ่และซับซ้อนได้ดีกว่า Spreadsheet ที่มีข้อจำกัดเรื่องจำนวนแถว
    • การทำงานแบบอัตโนมัติ: เราสามารถเขียนสคริปต์ให้ Python จัดการข้อมูลแบบอัตโนมัติ ซึ่งจะช่วยลดเวลาและลดความผิดพลาดที่เกิดขึ้นในการประมวลผลข้อมูลด้วยมนุษย์
    • การทำ Machine Learning: Python มี library ที่มีประสิทธิภาพสำหรับการทำ Machine Learning โดยเฉพาะ เช่น TensorFlow และ PyTorch

    ดังนั้น แม้ว่า Python จะดูน่ากลัวเพราะไม่ได้มีหน้าตาสวยงาม คลิกปุ่มต่าง ๆ ได้เหมือนโปรแกรม spreadsheet และเรายังต้องพิมพ์ตัวอักษรเพื่อสื่อสารกับคอมทำให้ดูใช้งานยาก แต่เมื่อได้รู้จักกันไปเรื่อย ๆ Python ก็เป็นผู้ช่วยที่ดีและตรงไปตรงมาคนหนึ่งเลย

    เริ่มต้นเขียนภาษา Python

    Python เป็นภาษาคอมพิวเตอร์ที่มีโครงสร้างอ่านง่าย ภาษาคอมมีหลักการเหมือนภาษาในโลกที่เราใช้สื่อสารกัน ถ้าเราพูดภาษาไทยเราก็ต้องพูดกับคนที่เข้าใจภาษาไทยถึงจะสื่อสารกันรู้เรื่องและถ้าเราพูดผิดไวยกรณ์หรือใช้คำผิดก็ทำให้เข้าใจกันคลาดเคลื่อนได้ 

    Python ก็เช่นเดียวกัน เราต้องพิมพ์คำสั่งให้ถูกต้อง ไม่เช่นนั้นผลลัพธ์อาจจะผิด หรือ error ตั้งแต่แรกเลยก็ได้ และเราต้องมีโปรแกรมที่เข้าใจภาษา Python เพื่อให้สื่อสารกับคอมพิวเตอร์ได้

    ในบทความนี้ ผมจะใช้ Google colab ในการเขียนภาษา Python โดย Google colab สามารถใช้ฟรีผ่านเวปไซต์เพียงแค่มี gmail และไม่ต้องเสียเวลาติดตั้งโปรแกรมในเครื่องเลยด้วย เจ๋งสุด ๆ

    วิธีเข้า Google colab คือไปที่ Google drive login ให้เรียบร้อยแล้วกดเครื่องหมายบวกมุมซ้ายบน จะเห็นตัวเลือกประมาณนี้ให้กดที่ Google Colaboratory

    การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib 25

    หน้าตา Google colab จะเป็นแบบรูปด้านล่าง เราจะพิมพ์ code ที่กล่องสีเทาแล้วกด run code เพื่อให้ code นั้นทำงานโดยการกดลูกศรซ้ายมือของกล่องที่เราเขียน code ผลลัพธ์จากการ run code จะแสดงด้านล่างกล่องนั้น ถ้าเราต้องการสร้างกล่องเขียน code ใหม่เพื่อเขียน code ชุดต่อไปให้กดที่ปุ่ม +code

    การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib 26
    การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib 27

    Google colb ตอน run ครั้งแรกจะใช้เวลาหน่อย นึกภาพเหมือนเรากำลังไปเชื่อมต่อคอมที่อยู่ที่อื่นครับ หลังจากเชื่อมต่อได้แล้วก็กด run ได้สบาย ๆ เลย

    เอาล่ะ! มาเริ่มเขียน code กันเถอะ!

    ในบทความนี้ผู้อ่านสามารถลองพิมพ์ code ตามที่บอกแล้วกดปุ่มลูกศรเพื่อ run แล้วดูผลลัพธ์ได้เลย

    ก่อนที่จะเริ่มต้นการวิเคราะห์ข้อมูล ต้องทำการติดตั้ง library ที่จำเป็นก่อน  library ก็เหมือนเครื่องมือของ Python ที่แต่ละ library ก็เหมาะจะใช้ในงานต่าง ๆ กัน โดยการติดตั้ง library เหมือนการซื้อเครื่องมือมาใส่กระเป๋าให้พร้อมหยิบมาใช้งาน 

    ในบทความนี้ผมจะใช้ library ชื่อ Pandas และ Matplotlib โชคดีที่ Google colab ติดตั้ง library เหล่านี้ให้แล้ว เราเลยไม่ต้องทำอะไรเพิ่มเติม แต่ถ้ายังไม่ได้ติดตั้ง เราก็สามารถติดตั้งเองได้โดยการ run code นี้

    !pip install pandas matplotlib

    รู้จักกับ Pandas นักจัดการตารางชั้นเยี่ยม

    Pandas เป็น library สำหรับการจัดการข้อมูลที่ทรงพลังและใช้งานง่ายใน Python โดย pandas จะเก็บข้อมูลเป็น DataFrame ซึ่งหน้าตาเหมือนตารางใน Excel นั่นแหละ หลังจากนั้นเราก็ใช้ฟังก์ชันต่าง ๆ มาจัดการกับตารางนี้

    การเรียกใช้ library (เหมือนหยิบเครื่องมือออกจากกระเป๋ามาเตรียมใช้) จะเริ่มที่การ import ทำได้โดยการ run code นี้ หลังจากนี้เราจะสามารถใช้ library pandas ได้ โดยการพิมพ์ว่า pd (ย่อให้สั้นลงจะได้ไม่ต้องพิมพ์ว่า pandas เต็ม ๆ)

    import pandas as pd

    อ่านข้อมูลจากไฟล์ Excel

    เริ่มจากการอัพโหลดข้อมูล Excel ขึ้นไปบน Google colab ก่อน โดยตัวอย่างเป็นข้อมูลการขายของออนไลน์ สามารถดาวน์โหลดชุดข้อมูลได้จาก UCI Machine Learning Repository 

    วิธีการอัพโหลดไฟล์ทำได้โดยกดที่ปุ่ม Files ด้านซ้ายมือแล้วกดปุ่ม Upload จากนั้นเลือกไฟล์ Excel ที่ดาวน์โหลดลงเครื่องไว้ แล้วกดปุ่ม Open

    การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib 28

    ถ้าไฟล์ถูก Upload แล้วจะเห็นไฟล์เพิ่มขึ้นมาตามภาพด้านล่าง

    การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib 29

    จากนั้นเราจะใช้ pandas ในการอ่านไฟล์ที่อัพโหลดมาแล้วเก็บไว้ในรูปแบบ DataFrame เพื่อใช้งานต่อไป ทำได้โดยการ run code

    df = pd.read_excel("Online Retail.xlsx")

    ในการ run code นี้ไฟล์ Online Retails.xlsx จะถูกเก็บไว้ในตัวแปรชื่อ df

    ❗ ข้อควรระวังคือ เราจะต้องอัพโหลดไฟล์นี้ใหม่ทุกครั้งที่เราเปิด Google colab อีกครั้ง หรือเมื่อเราปล่อย Google colab ทิ้งไว้นาน จนคอมที่เราไปเชื่อมต่อไว้ดับเอง

    อีกวิธีในการอัพโหลดไฟล์จากเวปไซต์ ทำได้โดยให้ Pandas ไปอ่านจากหน้าเวปมาเลย โดยใช้ code นี้

    url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/00352/Online%20Retail.xlsx'
    
    df = pd.read_excel(url)

    สำรวจข้อมูล

    เมื่อข้อมูลถูกโหลดเข้ามาเก็บเป็น DataFrame แล้ว เราสามารถทำการสำรวจข้อมูลเบื้องต้นเพื่อเข้าใจโครงสร้างและเนื้อหาของข้อมูลได้ 

    – แสดง 5 แถวแรกของข้อมูล (ถ้าอยากแสดงมากกว่า 5 แถวให้ใส่ตัวเลขจำนวนแถวในวงเล็บ เช่น df.head(10) จะแสดง 10 แถวแรก)

    df.head()

    การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib 30

    – แสดงสถิติข้อมูลเบื้องต้น เช่น จำนวนแถว, ค่าเฉลี่ย, ค่ามากสุด น้อยสุด, percentile

    df.describe()
    การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib 31

    – แสดงข้อมูลเกี่ยวกับ DataFrame ว่ามีคอลัมน์อะไรบ้าง แต่ละคอลัมน์มีประเภทข้อมูลเป็นอะไร และมีแถวที่เว้นว่าง (null) กี่แถว

    df.info()
    การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib 32

    เลือกข้อมูลบางส่วน

    บางทีเราอยากวิเคราะห์แค่บางส่วนของ DataFrame เราสามารถเลือกแค่บางคอลัมน์ หรือบางแถวที่ตรงตามเงื่อนไขที่กำหนดได้

    เลือกคอลัมน์

    เลือกหนึ่งหรือหลายคอลัมน์จาก DataFrame ทำได้โดยระบุชื่อคอลัมน์ที่อยากจะเรียก ถ้ามีหลายคอลัมน์ต้องซ้อนวงเล็บก้ามปู [] ไปอีกชั้นด้วย

    – เลือกคอลัมน์เดียว

    df['Country']
    การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib 33

    – เลือกหลายคอลัมน์

    df[['InvoiceDate', 'Country', 'Description']]
    การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib 34

    เลือกแถว

    เลือกแถวตามเงื่อนไขที่ต้องการ โดยการระบุคอลัมน์ที่จะใช้ในเงื่อนไขแล้วใส่เครื่องหมายมากกว่า (>) น้อยกว่า (<) เท่ากับ (==) หรือไม่เท่ากับ (!=)

    – เลือกแถวที่ปริมาณการขาย (Quantity) มากกว่า 10000

    df[df['Quantity'] > 10000]
    การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib 35

    – เลือกแถวที่ปริมาณการขาย (Quantity) มากกว่า 10000 และราคาต่อชิ้นมากกว่า 1 สังเกตุว่าจะใช้เครื่องหมาย & ในการเชื่อม (ถ้าอยากให้เป็นเงื่อนไข ‘หรือ’ ให้เปลี่ยนเป็นเครื่องหมาย | แทน)

    df[(df['Quantity'] > 10000)&(df['UnitPrice'] <= 10)]
    การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib 36

    นับจำนวน

    – จำนวนแถวทั้งหมด ให้เติม .shape[0] ต่อท้าย

    df[df['Quantity'] > 10000].shape[0]

    ได้ผลลัพธ์ว่ามีแถวทั้งหมด 3 แถว หรือก็คือมีการขาย 3 ครั้งที่ตรงเงื่อนไขนี้

    – จำนวนข้อมูลที่ไม่ซ้ำกัน ให้เติม .nunique() ต่อท้าย

    df['Country'].nunique()

    ได้ผลลัพธ์ว่าข้อมูลชุดนี้มี 38 ประเทศที่ต่างกัน

    – จำนวนแถวของข้อมูลแต่ละชนิด

    df['Country'].value_counts()
    การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib 37

    การจัดการข้อมูล

    Pandas ช่วยให้การจัดการข้อมูลทำได้ง่ายมาก เราสามารถนำคอลัมน์มาบวก ลบ คูณ หาร ตัวเลข หรือนำ 2 คอลัมน์มากระทำกันได้ด้วย

    เพิ่มคอลัมน์ใหม่

    เพิ่มคอลัมน์ใหม่สำหรับยอดขายรวมโดยตั้งชื่อคอลัมน์นี้ว่า Total Sales และคำนวณจากการนำคอลัมน์ Quantity (ปริมาณ) คูณกับ UnitPrice (ราคาต่อหน่วย)

    df['Total Sales'] = df['Quantity'] * df['UnitPrice']
    
    df.head()
    การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib 38

    แก้ไขคอลัมน์

    เราสามารถนำเลขมาบวก ลบ คูณ หาร หรือใช้ฟังก์ชันซับซ้อนกับคอลัมน์ได้

    เช่น เราต้องการคอลัมน์ที่แสดงราคาส่วนลด 10% จากราคาเดิม เราทำได้โดยสร้างคอลัมน์ใหม่ชื่อ Discounted Price โดยคำนวณมาจากการนำ 0.9 คูณกับคอลัมน์ UnitPrice

    df['Discounted Price'] = df['UnitPrice'] * 0.9
    
    print(df[['UnitPrice','Discounted Price']])
    การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib 39

    การจัดกลุ่มข้อมูล

    การจัดกลุ่มข้อมูลใช้เพื่อแบ่งข้อมูลเป็นกลุ่มก่อนที่จะคำนวณค่าทางสถิติของแต่ละกลุ่ม เช่น ค่าฉลี่ย, ค่าสูงสุด ตัวอย่างเช่น เมื่อเราอยากรู้ยอดขายรวมของแต่ละประเทศ เราทำได้โดยใช้ groupby

    sales_per_country = df.groupby('Country')['Total Sales'].sum()
    
    print(sales_per_country)
    การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib 40

    Groupby สำหรับผู้เริ่มต้นอาจดูเข้าใจยากสักหน่อย ให้ลองมองภาพคล้ายการทำ Pivot table ครับ เวลาอ่าน code อ่านเรียงจากซ้ายไปขวาได้เลย ถ้าเราอยากแบ่งกลุ่มด้วยคอลัมน์อื่นให้เปลี่ยนตรง Country ถ้าอยากคำนวณจากคอลัมน์อื่นก็เปลี่ยนตรง Total Sales หรือถ้าไม่อยากหาผลรวมแต่อยากหาค่าเฉลี่ยก็เปลี่ยนจาก sum เป็น mean ได้เช่นกัน

    การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib 41

    นอกเหนือจากการใช้ pandas ตามที่ผมเขียนมาในบทความนี้แล้ว pandas ยังมีความสามารถอื่น ๆ อีกมากมาย เรียกได้ว่าเป็นเครื่องมือสารพัดประโยชน์เลยทีเดียว ถ้าอยากรู้จัก pandas มากขึ้นสามารถไปศึกษาเพิ่มเติมที่เวปไซต์ทางการของ pandas กันได้

    รู้จักกับ Matplotlib นักสร้างสรรค์กราฟ

    Matplotlib เป็น library สำหรับการสร้างกราฟที่ครอบคลุมกราฟหลายแบบมาก ไปดูตัวอย่างได้ที่เวปไซต์ของ matplotlib

    เช่นเดียวกับ pandas ก่อนจะใช้ matplotlib เราต้องทำการ import ก่อน โดยเราจะย่อ matplotlib ว่า plt เวลาเรียกใช้

    import matplotlib.pyplot as plt

    การสร้างกราฟง่ายๆ

    กราฟเส้นแสดงปริมาณการขายแต่ละวัน

    การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib 42

    วิธีการคือ

    1. เลือกข้อมูลที่จะสร้างกราฟ โดยเลือกเฉพาะปริมาณที่มากกว่า 0 (ข้อมูลมี Quantity น้อยกว่า 0 ด้วยซึ่งน่าจะเป็นข้อมูลที่บันทึกผิด)
    df_pos = df[df['Quantity'] > 0]
    1. ใช้คำสั่ง plt.plot(แกน X, แกน Y) เพื่อสร้างกราฟ โดยเราจะเปลี่ยนแกน X เป็นข้อมูลที่เราอยากพล็อตในแนวนอน และเปลี่ยนแกน Y เป็นข้อมูลที่เราอยากพล็อตในแนวตั้ง ตัวอย่างนี้ผมให้แกน X เป็นคอลัมน์ InvoiceDate และแกน Y เป็นคอลัมน์ Quantity
    plt.plot(df_pos['InvoiceDate'], df_pos['Quantity'])
    1. เพิ่มรายละเอียดกราฟ เช่นข้อความที่เขียนที่แกน X, Y (xlabel, ylabel) กับชื่อกราฟ (title) แล้วใช้คำสั่ง plt.show() เพื่อให้กราฟแสดงออกมา
    plt.xlabel('Invoice Date')
    plt.ylabel('Quantity')
    plt.title('Line Plot of Quantity Over Time')
    plt.show()

    การปรับแต่งกราฟ

    นอกจากนี้เรายังปรับแต่งกราฟได้อีกมากมายเท่าที่เราจะจินตนาการได้

    การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib 43

    ปรับขนาดกราฟด้วย plt.figure(figsize = (ความยาวแกน X, ความยาวแกน Y))

    ใน plt.plot ใส่รายละเอียดเช่น ความเข้มของสี (alpha), ลักษณะเส้น (linestyle), สีเส้น (color), ความหนาของเส้น (linewidth)

    ปรับขนาดตัวอักษรโดยการกำหนด fontsize

    แสดงเส้นตารางโดยใช้คำสั่ง plt.grid(True)

    หมุนตัวเลขแกน X 45 องศาเพื่อให้อ่านง่ายขึ้นด้วย plt.xticks(rotation=45)

    เมื่อเขียนการปรับแต่งทั้งหมดรวมกันจะได้ code ตามด้านล่างนี้

    plt.figure(figsize=(10, 6))
    
    plt.plot(df_pos['InvoiceDate'], df_pos['Quantity'], alpha=0.7, linestyle='-', color='green', linewidth=1)
    
    plt.xlabel('Invoice Date', fontsize=14)
    
    plt.ylabel('Quantity', fontsize=14)
    
    plt.title('Line Plot of Positive Quantity Over Time', fontsize=16)
    
    plt.grid(True)
    
    plt.xticks(rotation=45)
    
    plt.tight_layout()

    การรวม Pandas และ Matplotlib

    การรวมความสามารถในการจัดการข้อมูลของ Pandas กับการสร้างกราฟของ Matplotlib ทำให้เราสามารถทำการวิเคราะห์ข้อมูลที่ซับซ้อนและสร้างกราฟที่ตอบโจทย์ธุรกิจได้

    ตัวอย่าง: การวิเคราะห์และสร้างกราฟยอดขายรวมแต่ละเดือน

    ในตัวอย่างนี้ ผมจะนำสิ่งที่อธิบายไว้ด้านบนมาประกอบกันเพื่อให้เห็นว่าในการใช้งานจริง เราทำอย่างไรบ้าง 

    # เรียกว่าการ comment โดยข้อความหลังเครื่องหมายจะไม่ถูกอ่านโดยโปรแกรม เราจะทำไว้เพื่อให้มนุษย์เราเข้าใจว่า code ที่เขียนแปลว่าอะไร

    โหลดข้อมูล:

    import pandas as pd
    
    url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/00352/Online%20Retail.xlsx'
    
    df = pd.read_excel(url)

    การจัดการข้อมูล:

    # คำนวณยอดขายรวมโดยเลือกเฉพาะปริมาณที่มากกว่า 0
    
    df_pos = df[df['Quantity'] > 0]
    
    df_pos['Total Sales'] = df_pos['Quantity'] * df_pos['UnitPrice']
    
    # คำนวณยอดขายรวมต่อเดือน
    
    monthly_sales = df_pos.groupby(df_pos['InvoiceDate'].dt.to_period('M'))['Total Sales'].sum()

    การพล็อตกราฟ:

    monthly_sales.plot(kind='line', alpha=0.7, linestyle='--', color='green', linewidth=1)
    
    plt.xlabel('Month', fontsize=14)
    
    plt.ylabel('Total Sales (Million)', fontsize=14)
    
    plt.title('Monthly Sales Over Time', fontsize=16)
    
    plt.grid(True)
    
    plt.show()
    การวิเคราะห์ข้อมูลเบื้องต้นด้วย Python: เริ่มต้นด้วย Pandas และ Matplotlib 44

    จากกราฟนี้เราจะเห็นว่ายอดขายรวมในเดือนพฤศจิกายนสูงที่สุด และยอดขายเดือนกุมภาพันธ์กับเมษายนต่ำกว่าเดือนอื่น ช่วยให้เราวางแผนสต๊อกของได้ ส่วนถ้าเราอยากเพิ่มยอดขาย เราอาจจะลองจัดโปรโมชันในเดือนกุมภาและเมษา โดยอาจวิเคราะห์ให้ลึกขึ้นถึงประเทศที่ยอดขายตกและสินค้าที่ขายดีหรือไม่ดีในแต่ละช่วง แน่นอนว่าใช้แต่ Pandas กับ Matplotlib ก็ทำได้สบาย ๆ

    สรุป

    ในบทความนี้ ผมได้ครอบคลุมพื้นฐานของการวิเคราะห์ข้อมูลด้วย Python, Pandas และ Matplotlib โดยอธิบายถึงวิธีการสร้างและจัดการข้อมูลด้วย Pandas รวมถึงวิธีการวาดกราฟด้วย Matplotlib แล้วปิดท้ายด้วยการรวมทุกอย่างในโจทย์ตัวอย่างของจริง ความสามารถของ Python ยังมีอีกมากมายที่ยังไม่ได้กล่าวถึงและบทความนี้เป็นเพียงปฐมบทของการวิเคราะห์ข้อมูลด้วย Python เท่านั้น

    การฝึกฝนและการเรียนรู้เป็นกุญแจสำคัญในการเชี่ยวชาญการวิเคราะห์ข้อมูล การทำงานกับชุดข้อมูลจริง ลองวิเคราะห์มุมมองต่าง ๆ และสร้างกราฟที่หลากหลาย ช่วยให้เข้าใจข้อมูลและการนำไปใช้ได้ลึกซึ้งยิ่งขึ้น มาสนุกกับ coding กันครับ!

  • วิธีสร้าง Sankey chart ด้วย Power BI

    วิธีสร้าง Sankey chart ด้วย Power BI

    Sankey chart คืออะไร

    Sankey chart หรือ Sankey diagram เป็นกราฟยอดนิยมที่หลายคนน่าจะเคยเห็นผ่านตามาบ้างเวลาแสดงการไหลของข้อมูลจากจุดเริ่มต้นหลายตำแหน่งไปยังปลายทางอีกหลายตำแหน่งเช่นเดียวกัน

    วิธีสร้าง Sankey chart ด้วย Power BI 45

    ตัวอย่างการใช้ Sankey chart เช่น การเข้าชมเว็บไซต์หรือแอปพลิเคชันในแต่ละหน้า (user’s journey), การวิเคราะห์การเดินทางของนักท่องเที่ยว, การติดตามการใช้จ่ายงบประมาณ

    วิธีสร้าง Sankey chart มีหลายวิธี เช่น เว็บไซต์ที่สร้าง Sankey, การเขียนโปรแกรมด้วย Python/R, และเครื่องมือเฉพาะทาง ในบรรดาวิธีเหล่านี้ ผมขอยกให้ Power BI เป็นวิธีที่ตอบโจทย์ที่สุด ทั้งฟรี ง่าย และเร็วอีกด้วย เราสามารถสร้าง Sankey chart ได้ในเวลาอันสั้นโดยไม่ต้องเขียนโค้ด นอกจากนี้กราฟที่สร้างโดย Power BI ยังปรับแต่งได้ง่ายและสามารถเชื่อมโยงกับข้อมูลในตารางอื่นได้อีกด้วย

    หลังอ่านบทความนี้จบ คุณจะสร้าง Sankey chart เท่ ๆ ขึ้นมาได้แน่นอน

    บทความนี้เป็นบทความจาก Content Creator
    เขียนโดย ญาณวุฒิ คิมนารักษ์
    บรรณาธิการ ตรวจสอบโดย ศิระ เอกบุตร (เทพเอ็กเซล)
    กลั่นมาจากความคิดทั้งสองคน จึงมั่นใจได้ในความถูกต้องมากขึ้นไปอีกครับ

    1. เตรียมข้อมูล

    ข้อมูลที่จะใช้สร้าง Sankey chart จะต้องมี 3 คอลั่มนี้

    1. nodes ต้นทาง หรือจุดเริ่มต้น (Source)

    2. nodes ปลายทาง หรือจุดหมาย (Destination)

    3. การเชื่อมต่อ (Link) สิ่งที่จะเป็นความหนาของเส้นที่เชื่อมระหว่าง node ต้นทางและปลายทาง เช่น จำนวนคนที่เข้าชมเวปหน้า 1 แล้วกดไปต่อหน้า 2, จำนวนนักท่องเที่ยวที่เดินทางจากประเทศ A ไป B ซึ่งคอลั่ม Link ไม่มีก็ได้ โดยความหนาของเส้นที่เชื่อม node จะหนาเท่ากันหมด

    วิธีสร้าง Sankey chart ด้วย Power BI 46

    ชุดข้อมูลตัวอย่างที่ผมใช้ในบทความนี้เป็นข้อมูบจำนวนผู้โดยสารที่เดินทางจากประเทศหนึ่ง (Source) ไปยังอีกประเทศหนึ่ง (Destination) โดย Link คือคอลั่ม Passenger ที่บอกจำนวนผู้โดยสาร โดยผมบันทึกข้อมูลนี้เป็นไฟล์ Excel ชื่อ passenger

    บางท่านอาจจะสงสัยว่า ถ้าข้อมูลที่มีไม่ได้อยู่ในรูปแบบที่พร้อมจะสร้าง Sankey chart ที่มี 3 คอลั่มแบบที่ผมบอก เราจะเปลี่ยนให้อยู่ในรูปแบบที่เหมาะสมได้ยังไง

    ผมขอยกตัวอย่างเป็นข้อมูลการเข้าชมหน้าเวปไซต์ของลูกค้าแต่ละคน ข้อมูลนี้บอกว่าลูกค้าเข้าไปดูแต่ละหน้าในวันที่เท่าไรบ้าง

    วิธีสร้าง Sankey chart ด้วย Power BI 47

    จากข้อมูลนี้ เราต้องแปลงให้เป็นการเปลี่ยนจาก 1 แถวเป็นลูกค้า 1 คนให้เป็นการเปลี่ยนหน้าเวปไซต์ก่อนซึ่งจะสรุปได้เป็น 5 รูปแบบตามตารางด้านล่าง

    วิธีสร้าง Sankey chart ด้วย Power BI 48

    จากนั้นให้เรานับกว่ามีลูกค้ากี่คนที่มีการเปลี่ยนแปลงหน้าเวปตามนี้เพื่อสร้างเป็นคอลั่ม Link คอลั่มสุดท้ายซึ่งผมตั้งชื่อคอลั่มนี้ว่า Count user ในขั้นตอนนี้ใช้สูตร Excel มาช่วยนับก็ได้เช่นกัน จากตัวอย่างนี้จะสร้างเป็นตารางได้ตามด้านล่าง

    วิธีสร้าง Sankey chart ด้วย Power BI 49

    เท่านี้ข้อมูลก็มีหน้าตาสำหรับนำไปสร้าง Sankey chart แล้ว

    ข้อมูลพร้อมแล้วได้เวลาเปิดโปรแกรม Power BI ใครยังไม่มีโปรแกรม Power BI ไป download จาก เวป official ได้เลย

    คลิกที่แท็บ Home ด้านบนเลือก Get data แล้วเลือก Excel workbook

    แท็บ Home  > Get data > Excel workbook

    จากนั้นเลือกไฟล์ passenger.xlsx ที่เตรียมไว้แล้วกด Open

    วิธีสร้าง Sankey chart ด้วย Power BI 50

    หน้า Navigator จะเด้งขึ้นมาให้ติ๊กถูกหน้า Sheet 1 ที่มีข้อมูลอยู่ แล้วกด Load

    วิธีสร้าง Sankey chart ด้วย Power BI 51

    หลังโหลดเสร็จถ้ามีชื่อ Sheet 1 ขึ้นที่แถบ Data ด้านขวาแสดงว่าตอนนี้ข้อมูลเราถูดโหลดมาเก็บไว้ที่ไฟล์ Power BI และพร้อมนำไปแสดงเป็นกราฟแล้ว

    วิธีสร้าง Sankey chart ด้วย Power BI 52

    2. ดาวน์โหลด Sankey chart จากตลาดกราฟ

    Sankey chart ไม่ใช่กราฟมาตรฐานใน Power BI แต่นั่นไม่ใช่ปัญหาเพราะ Power BI มีตลาดกลางที่รวบรวมกราฟหลากหลายประเภทเอาไว้ซึ่งเราสามารถเข้าไปดาวน์โหลดมาใช้งานได้

    ในแถบ Visualizations ด้านขวามือ คลิกที่จุดสามจุดและเลือก “Get more visuals”

    แถบ Visualizations > จุด 3 จุด > “Get more visuals”

    วิธีสร้าง Sankey chart ด้วย Power BI 53

    หน้าจอตลาดที่รวบรวมกราฟเอาไว้จะเด้งขึ้นมา ให้เราพิมพ์ค้นหา Sankey Chart โดยพิมพ์หลังแว่นขยายมุมขวาบน จากนั้นคลิกที่ผลิตภัณฑ์ Sankey Chart (เช็คให้ดีว่าเป็นแบบเดียวกับที่แสดงในภาพด้านล่าง) จากนั้นคลิก Add

    ค้นหา Sankey Chart > เลือก Sankey Chart > Add

    วิธีสร้าง Sankey chart ด้วย Power BI 54
    วิธีสร้าง Sankey chart ด้วย Power BI 55

    ถ้าทำตามขั้นตอนจะเห็นไอคอน Sankey เพิ่มขึ้นมาในแถบ Visualizations พร้อมให้เราใช้งาน

    วิธีสร้าง Sankey chart ด้วย Power BI 56

    3. สร้าง Sankey chart

    ถึงเวลาที่ทุกคนรอคอย มาสร้าง Sankey chart กันเถอะ

    คลิกที่ไอคอน Sankey ในแถบ Visualizations

    กราฟเปล่าจะโผล่ขึ้นมา

    วิธีสร้าง Sankey chart ด้วย Power BI 57

    ในแถบ Data ด้านขวามือ ลาก 3 คอลัมน์ที่จะใช้สร้าง Sankey chart ไปที่แถบ Visualization (ถ้าไม่เห็นชื่อคอลั่มให้คลิกที่ลูกศรหน้า S้heet 1) คอลัมน์เหล่านี้ต้องลากไปที่ Source, Destination, และ Weight ให้ถูกต้อง (Weight ต้องเป็นตัวเลขและ Weight สามารถเว้นว่างไว้ได้ซึ่งจะทำให้เส้นเชื่อมจาก Source ไป Destination ทุกเส้นหนาเท่ากัน)

    วิธีสร้าง Sankey chart ด้วย Power BI 58

    เท่านี้ Sankey chart ก็ถูกสร้างขึ้นอย่างสวยงามแทนที่กราฟเปล่าในตอนแรก

    วิธีสร้าง Sankey chart ด้วย Power BI 59

    กราฟนี้เราจะเห็นการจำนวนผู้โดยสารที่เดินทางระหว่างประเทศ ยิ่งมีผู้โดยสารมากเส้นทางนั้นยิ่งหนาขึ้น หลังจากนี้เราก็สามารถดูกราฟแล้ววิเคราะห์ได้แล้วว่าเราควรเสริมการเดินทางที่เส้นทางไหนหรือเราควรโปรโมทเส้นทางไหนเพิ่มถ้าอยากให้มีผู้โดยสารมากขึ้น

    คลิกไอคอน Sankey > ลากคอลั่ม

    4. ปรับแต่ง Sankey chart

    Sankey มีลูกเล่นให้เราปรับการแสดงผลได้

    – เปลี่ยนขนาดแผนภูมิ

    ลากมุมหรือด้านข้างตรงที่เป็นสีเทาเข้ม

    วิธีสร้าง Sankey chart ด้วย Power BI 60

    – แสดงชื่อ Link (Source-Destination) 

    แถบ Visualizations > Data link labels On

    วิธีสร้าง Sankey chart ด้วย Power BI 61
    วิธีสร้าง Sankey chart ด้วย Power BI 62

    เลือก Sankey chart จากนั้นในแถบ Visualizations คลิกที่ไอคอน Format your Visual แล้วคลิกให้ Data link labels เป็น On เท่านี้ก็จะเห็นข้อความบน Link ของ Node ที่เชื่อมต่อกัน ส่วนตัวผมไม่ค่อยแสดงชื่อ Link เพราะมันดูรก และกราฟนี้ก็อ่านง่ายอยู่แล้ว

    – เปลี่ยนสี Node และ Link

    แถบ Visualizations > Links/Nodes > เลือกสี

    วิธีสร้าง Sankey chart ด้วย Power BI 63

    ปรับแต่งสีของแต่ละ Node และ Link ได้โดยการไปที่แถบ Visualization คลิกที่ไอคอน Format your Visual แล้วคลิกลูกศรข้าง LInks หรือ Nodes อยากปรับสีที่ LInk หรือ Node ไหนก็กดที่ Node หรือ Link นั้นแล้วเลือกสีที่ต้องการได้เลย


    ก่อนจบบทความขอแนะนำเรื่องการใช้ Sankey chart บน Power BI ไว้สักหน่อย

    1. ไม่แนะนำให้ใช้ Sankey chart กับข้อมูลมากกว่า 10,000 แถว โปรแกรมอาจค้างได้
    2. Node ต้นทางกับ Node ปลายทางห้ามมีการสวนทางกัน เช่น ถ้ามี France ไป Morocco ห้ามมี Morocco ไป France ไม่งั้นจะเกิดการ loop และกราฟจะ Error

    เห็นมั้ยครับว่าการสร้าง Sankey chart บน Power BI นั้นไม่ยากเลย เพียง 10 นาทีกราฟของคุณก็พร้อมสำหรับการนำเสนอและเสริม data story telling แล้ว