ส่องเทรนด์รถยนต์ ด้วย data

ที่มาที่ไปของการทำข้อมูล

เนื่องจากช่วงนี้ยืมรถของคนอื่นมาขับ แล้วดันไปครูดเสาเข้า เลยเกิดความคิดว่าเราคงจะต้องซื้อรถไว้ใช้งานเองจริงๆ แล้วล่ะ แต่จะเป็นรถแบบไหนดี ดูรีวิวในยูทูบก็พอช่วยได้ เจอคนขับแกร็บขับ BYD แล้วบ่นเรื่องที่ชาร์จไม่พอ ก็ทำให้ใจอยากเลี่ยง แต่ลึกๆ แล้ว ก่อนจะฟันธงอะไร เราอยากเห็น data ในภาพรวม เพื่อเป็นตัวช่วยในการตัดสินใจต่อไป

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

หาฐานข้อมูล

เริ่มจากการสำรวจหาฐานข้อมูล เราเสิร์ชหา “ฐานข้อมูล ปริมาณรถ EV” ก็มาเจอกับเว็บของสถาบันยานยนต์ ซึ่งมีข้อมูลการจดทะเบียนใหม่ (ป้ายแดง) ของรถยนต์ประเภทต่างๆ รวมมอเตอร์ไซค์ด้วย

แต่ทีนี้เราจะดูเฉพาะข้อมูลรถยนต์ขนาดเล็ก ใช้งานแบบส่วนบุคคล ก็เลยมาที่หน้านี้

ถึง dropdown จะมีให้เลือกถึงปี 2015 แต่เปิดไฟล์มาแล้วพบว่าที่ใช้งานได้มีแค่ย้อนไปถึงปี 2019

จัดการไฟล์

และเมื่อดาวน์โหลดไฟล์แต่ละปีมาแล้วจะพบว่าชื่อไฟล์ไม่ได้มีปีกำกับ แต่เป็นชื่อเดียวกันที่ตัวโปรแกรมดาวน์โหลดมันตั้งชื่อตามท้ายด้วย (1), (2) อะไรแบบนี้ให้เอง

พอไฟล์ไม่ได้เยอะมาก ก็เลยมานั่งทำมือแล้วกัน 55 คือคนอื่นอาจจะเอาไปเข้าโปรแกรมรวบไฟล์ แต่เรายังถนัด Google Sheet อยู่ ก็นั่งก็อปวางๆ ลงไปใน sheet เดียวกัน แล้วลบคอลัมน์ที่ไม่จำเป็นออก (”ลำดับที่”, “เดือน” ซึ่งมีหัวคอลัมน์แต่ไม่มีข้อมูล)

ได้ออกมาเป็นชีทหน้าตาแบบนี้ รวมทุกปี

เตรียมไฟล์สำหรับ visualization

ทีนี้จะเห็นว่าถ้าเราเอา datasheet นี้ไปเทใน flourish หรือโปรแกรม visualization เลย มันอาจจะยังไม่ออกมาเป็น bar chart race ไล่ปี แบบที่ต้องการ เพราะหน้าตาของฐานข้อมูลที่เป็นเทมเพลตใน flourish มันเป็นแบบนี้

คือเราต้องเอาค่าที่เป็นจำนวนรถยนต์ไปไว้ใต้คอลัมน์แต่ละปี แต่ข้อมูลใน sheet ที่เราเตรียมไว้ ปีมันดันกลายไปเป็นค่าตัวเลขใต้หัวคอลัมน์ “Year” ก็เลยต้องมาจัดการข้อมูลนิดหน่อย ด้วยท่ามาตรฐานคือ Pivot 🥹 (ถ้าใช้ R อาจจะมีวิธีที่รวดเร็วทันใจกว่านี้ เพียงแต่นี่คิดว่าถ้าต้องมานั่งหาตัวอย่าง code อาจกินเวลากับงานนี้มากกว่าเดิม 😅)

เลยทำ Pivot ของรถแต่ละประเภทออกมาแบบนี้ ข้างล่างคือตัวอย่างแบบขนาดเครื่องยนต์ > 2000 CC ก็ไล่ทำไปสามแบบ แล้วก็อปไว้วางแยกในชีทของแต่ละแบบ (แบบ ctrl+shift+v เพื่อล้างความเป็นตาราง pivot ออกก่อน) ตามแท็บที่เห็นด้านล่าง

ทีนี้เราได้ชื่อแบรนด์รถแล้ว เป็น Label ของข้อมูล แต่ chart นี้มันใส่ข้อมูล Categories ได้ด้วย เลยเพิ่มอีกหัวคอลัมน์เป็น V Type (Vehicle Type) ว่าเป็นรถแบบ BEV หรือขนาดเครื่องยนต์เท่าไหร่ เพื่อเอามาใส่สีในชาร์ตของ Flourish

หาไฟล์ Logo อัตโนมัติ

จากนั้น ความสวยงามจะบังเกิดถ้าเรามี Logo ของทุกแบรนด์ด้วย แต่จะมานั่งไล่หา url ของทุกรูปคงใช้เวลาพักใหญ่ ต้องมาถามตัวเองว่า ทำไปทำไมนะ ได้เงินหรือ 555

เลยไปเจอสูตรจากคุณ Qui ใน Stack Overflow มา

อธิบายสั้นๆ คือ ถ้าคอลัมน์ C คือชื่อรถยนต์ที่เราต้องการหา เราก็เอาสูตรนี้ไปใส่ในคอลัมน์ D

= CONCATENATE("<https://www.google.com/search?q=>", substitute(C1," ", "+"), "&source=lnms&tbm=isch&sa=X&ved=2ahUKEwi_sfHlpeb8AhUvhP0HHVD6B6oQ_AUoAnoECAEQBA&biw=1920&bih=1009&dpr=1")<br>

** C1 ในสูตรคือช่องที่มีคำที่เราต้องการใช้ค้นหาใน Google Search

แค่นั้นยังไม่พอ เราต้องใส่สูตรในคอลัมน์ E ว่า

=Transpose(INDEX(IMAGE(QUERY(IMPORTXML(D1, "//a//@src"),"where Col1 contains 'image' limit 2"))))

เพื่อให้ได้รูปออกมาในตารางแบบตัวอย่างใน Stack Overflow

แต่ทีนี้เจอปัญหาอยู่ 2 อย่าง

1. ถ้าคำที่ใช้ค้นหาเป็นชื่อแบรนด์รถยนต์เฉยๆ เช่น Toyota รูปที่เสิร์ชเจออาจจะไม่ใช่โลโก้ แต่เป็นรูปรถยนต์ไปเลย

เราเลยต้องมาแก้สูตรแรกนิดหน่อย ด้วยการพ่วงคำว่า &“ Logo” (เว้นวรรคหน้า) เข้าไปหลังชื่อแบรนด์ด้วย ในสูตรนี้ใช้ cell A2 เพราะชื่อแบรนด์มันอยู่ในช่องนี้

= CONCATENATE("<https://www.google.com/search?q=>", substitute(A2&" Logo"," ", "+"), "&source=lnms&tbm=isch&sa=X&ved=2ahUKEwi_sfHlpeb8AhUvhP0HHVD6B6oQ_AUoAnoECAEQBA&biw=1920&bih=1009&dpr=1")

2. เราไม่ได้ต้องการให้รูปที่เสิร์ชเจอมาอยู่ในเซลล์แบบตัวอย่าง เพราะมันเอา paste ต่อใน Flourish ไม่ได้ เลยต้องมาแก้สูตรที่สองว่า ฉันไม่ได้ต้องการ Image นะ เอามาแค่ XML พอ ด้วยการลบวงเล็บ IMAGE() ออก จากเดิม =Transpose(INDEX(IMAGE(QUERY(IMPORTXML())))) เป็น =Transpose(INDEX(IMAGE(QUERY(IMPORTXML()))))

=Transpose(INDEX(QUERY(IMPORTXML(C2, "//a//@src"),"where Col1 contains 'image' limit 2")))

ทีนี้ก็แค่นำค่าที่ได้ในช่องที่มี https://… ไปเทใส่ใน Flourish มันก็จะดึงรูปมาให้เลย

(บาง row อาจจะยังอยู่ในสถานะ loading อยู่ ซึ่งก็ไม่เป็นไรถ้าสุดท้ายมันจะไม่ไปโผล่ใน viz)

จนสุดท้าย เมื่อเรานำข้อมูลที่จัดรูปแบบแล้วไปลงใน data ของ flourish และปรับประเภทหัวคอลัมน์ให้ตรง เช่น เปลี่ยนจาก text เป็น number แล้วกำหนดค่าให้มัน ก็จะได้ viz ที่มี interaction ได้ออกมา จะกดปิดข้อมูลประเภทใดประเภทหนึ่ง หรือเลื่อนไทม์ไลน์ไปที่จุดที่เราสนใจก็ได้

ใส่ความเห็น

เว็บนี้ใช้ Akismet เพื่อลดสแปม. เรียนรู้ว่าข้อมูลแสดงความเห็นของคุณถูกประมวลผลอย่างไร.