เริ่มทำ Visualization กับ Altair
อยากทำ visualization สวยๆ แต่เป็นมือใหม่ ทำไงดีอ่า ?
.. ถ้าไม่ถนัดใช้ BI Tools ในการ visualize ทำยังไงดีหล่ะ
.. หรือเป็นมือ code ขั้นเทพ python ที่เขียนทีไรแก้ error ได้ตล๊อดดด
>> เชิญทางนี้เลยค่า เราจะมาใช้ Altair กัน !!
ไม่ถนัด BI Tools เลย ใช้ Python แทนละกัน
“data visualization, python, altair”
Altair คือ อะไร ?
- Altair เป็น python library ที่ base on มาจาก vega และ vega lite ซึ่งภายใต้คือ D3.js และ javascript
- Vega-Lite คือ high-level grammar of interactive graphics อยู่ในรูป JSON format
- Vega คือ visualization grammar เป็นภาษาที่ใช้ในการออกแบบ visualization โดยอยู่ใน JSON format เช่นเดียวกัน
- มี Github ที่มีตัวอย่าง visualization ในหลายๆแบบ ให้เราเลือกดู แล้วเอาไปปรับใช้กับ data ของเราได้เลย
- ถ้าดูจากหน้าตาของ visualization เห็นว่าหน้าตาคล้ายกับ tableau เลยนะ นั่นเพราะมีการพัฒนาร่วมกันระหว่าง altair และ tableau นั่นเอง (https://en.wikipedia.org/wiki/Leland_Wilkinson)
… มาเริ่มกันเลยยยย
0. ก่อนเริ่ม ขอกล่าวถึงตัวข้อมูลก่อน
- ข้อมูลที่นำมานั้นเป็นข้อมูลผู้เสียชีวิต จากเหตุการณ์ภัยพิบัติทางธรรมชาติทั่วโลก ตั้งแต่ปี ค.ศ. 1900 จนถึง ปี ค.ศ. 2017 (https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/disasters.csv)
1. เปิด google colab ขึ้นมา
- ทำการ import library : altair และ pandas ตามรูปที่ 1
2. ทำการเรียก file ที่จะใช้ขึ้นมา
- จาก path ที่เราวางไว้ในเครื่อง หรือง่ายที่สุดคือ เอาไปวางไว้ตรงแถบ file ด้านซ้ายมือของหน้าต่าง google colab ในที่นี้เลือกใช้ไฟล์ชื่อ disasters.csv
- define ที่อยู่ของไฟล์เรา และสั่ง print เพื่อดูหน้าตาของข้อมูล ตามรูปที่ 2
- เมื่อ print(df) หน้าตาของข้อมูลจะเป็นแบบรูปที่ 3
- จะเห็นว่า ‘ปี’ กลายไปเป็นคอลัมภ์ เพราะฉะนั้นเราต้องมาจัดรูปแบบใหม่ โดยการทำ unpivot
- โดย altair จะมี default row limit อยู่ที่ 5000 แถว เราก็ทำการเขียน code ดักไว้นะว่า ให้ transform ที่ 5000 นะ ไม่งั้นหลังจากนี้ถ้า transform ไปแล้ว ค้างแน่นอน ตามรูปที่ 4
- เมื่อ transform data แล้วเรียบร้อย ทำการ print ออกมา หน้าตาก็จะอยู่ใน format ที่สามารถนำไปทำ visualize ต่อได้แล้ว ตามรูปที่ 5
3. ขั้นตอนสร้าง visualization
- ง่ายๆ โดยลองนึกภาพในหัว ว่าอยากให้ chart แสดงข้อมูลออกมาประมาณไหน จากนั้นเราก็จะไปสืบหา chart ที่เราต้องการ ได้ใน https://altair-viz.github.io/gallery/index.html ซึ่งจะมี chart หลากหลายแบบ
- โดยเราได้เลือกตัว Binned Scatterplot มาลองทำ ตาม code ดังรูปที่ 6
- โดยตัวแปรแต่ละตัว มีความหมายคือ
- บรรทัดที่ 5 : opacity เป็นเหมือน transparent ถ้าค่าน้อยเราก็จะแทบมองไม่เห็นวงกลม
- บรรทัดที่ 7: strokeWidth คือ ความหนาของเส้นรอบวงของวงกลม
- บรรทัดที่ 12 : range [0,6000] คือ ช่วงของจำนวนข้อมูลที่เราแสดงเป็น legend
- บรรทัดที่ 17,18 : เป็นความกว้าง และ ความสูงของ chart ปรับได้ตามความเหมาะสมของเรา
4. Visualization Chart ออกมาแล้ว
- มีหลายแบบเลย เพราะเราทำการปรับ width, height
- ก็จะเห็นว่า แล้วแต่ความพอใจในการนำเสนอข้อมูล ว่าอยากได้เป็นแบบไหน
5. มาสรุปข้อมูลกันหน่อย
- หลังจากทำ visualize แล้ว สิ่งที่เราต้องการจริงๆนั่นคือ การแปลความหมายจากข้อมูล ว่าข้อมูลต้องการสื่ออะไรกับเรา
- หรือหากเราเป็นคนทำข้อมูล ก็ต้องเป็นข้อมูลที่ ..เมื่อทำออกมาแล้วต้องกระแทกตาคนดูได้ในทันที
- จาก Binned Scatterplot ที่เราทำขึ้นมานั้น พบว่า ประการแรก คือ ผู้เสียชีวิตจากภัยพิบัติทางธรรมชาติมีจำนวนลดลงในทุกๆปี ประการที่ 2 คือ ช่วงหลังปี 200 ยังคงมีผู้เสียชีวิตจากเหตุการณ์แผ่นดินไหว แต่ในขณะที่ภัยพิบัติอื่นๆ แทบไม่พบผู้เสียชีวิต
เห็นไหมคะว่า .. ไม่เพียงมีข้อมูลที่ดี การทำ visualization ที่ดี ก็เป็นสิ่งที่ทำให้เรามองเห็นข้อความที่ข้อมูลจะสื่อมาถึงเราได้ โดยแค่มองกวาดตา เราก็มองเห็นใจความสำคัญนั้นแล้ว !!
ไว้เจอกันใหม่เรื่องถัดไปน้าาาา
ทั้งนี้ขอขอบคุณ …
- https://eitanlees.github.io/altair-stack/
- https://altair-viz.github.io/
- https://github.com/altair-viz/altair
- https://vega.github.io/vega/
- http://vega.github.io/vega-lite/
- https://en.wikipedia.org/wiki/Leland_Wilkinson
ความรู้ไม่มีวันสิ้นสุด เรียนไปด้วยกันนะคะ
Data P (Tubsamon Dusitsopittawong)