xan · CLI ตัวเดียวที่ส่อง กรอง และวาดกราฟไฟล์ CSV ได้จบในเทอร์มินัล
xan คือ CLI ที่เขียนด้วย Rust สำหรับส่อง กรอง สรุป และวาดกราฟไฟล์ CSV ได้จบในเทอร์มินัลเดียว จุดเด่นที่สุดคือพิมพ์คำสั่งเดียวแล้ว histogram หรือ heatmap โผล่ในจอดำทันที โดยไม่ต้องเปิด Excel หรือเครื่องมือสาย data เลย

เวลามีไฟล์ CSV แปลกๆ อยู่ตรงหน้า แล้วแค่อยากรู้ว่าข้อมูลข้างในหน้าตาเป็นยังไง คนส่วนใหญ่มักเปิด Excel แล้วรอให้โหลดเสร็จ หรือเปิดเครื่องมือสาย data อย่าง Jupyter (สมุดโน้ตสำหรับเขียนโค้ดวิเคราะห์ข้อมูล) มาเขียน Python เรียกใช้ไลบรารีจัดการตารางอย่าง pandas กับไลบรารีวาดกราฟอย่าง matplotlib ทั้งที่คำถามจริงๆ มีแค่ "คอลัมน์ไหนมีค่าผิดปกติ" หรือ "ข้อมูลกระจายตัวยังไง" ซึ่งควรตอบได้ใน 2 วินาที
xan คือ CLI tool ที่ทำงานทั้งหมดนั้นให้จบในเทอร์มินัลเดียว เขียนด้วย Rust เรียกตัวเองว่า "The CSV magician" และทำได้ตั้งแต่เปิดดูตาราง กรอง เรียง รวมไฟล์ ไปจนถึงจุดเด่นที่สุดอย่างการสั่งให้มัน วาดกราฟ ไฟล์ CSV ในจอดำได้เลย พิมพ์คำสั่งเดียว histogram, scatter plot หรือ heatmap ก็โผล่ขึ้นมาตรงนั้น โดยไม่ต้องออกจากเทอร์มินัลไปเปิดโปรแกรมอื่นเลยสักตัว
ปัญหาไม่ใช่ไม่รู้ pandas แต่คือเปิดของหนักทั้งที่แค่จะส่องข้อมูล

pandas กับ matplotlib เก่งจริง แต่มันหนักเกินไปสำหรับงานแค่ "ขอดูหน่อย" ก่อนจะได้กราฟแรก ต้องเปิด environment, import library, อ่านไฟล์เข้า DataFrame, แล้วค่อยเขียนโค้ดพล็อต กว่าจะเห็นภาพแรก เวลาก็ผ่านไปแล้ว
นี่คือจุดที่ xan เข้ามาช่วย เอกสารฝั่ง dataviz ของมันระบุไว้ชัดว่า xan จะ process และวาดกราฟข้อมูลเสร็จ "ก่อนที่คุณจะเปิด Jupyter แล้ว import pandas กับ matplotlib เสร็จด้วยซ้ำ" เพราะไม่ต้องเปิด environment อะไรเลย แค่รันจากบรรทัดคำสั่งตรงๆ ครั้งเดียว
มันเร็วเพราะเขียนด้วย Rust ใช้ SIMD CSV parser ที่พัฒนาขึ้นใหม่และทำงานแบบหลายเธรดได้ จึงรับไฟล์ขนาดระดับ Gigabytes ได้สบายโดยใช้แรมน้อย ตัว xan เองพัฒนาต่อยอด (fork) มาจาก xsv ของ BurntSushi แล้วเขียนใหม่เกือบทั้งหมด เพื่องานเก็บข้อมูลเว็บและงานสังคมศาสตร์ของ médialab ที่ SciencesPo
เริ่มจากดูตาราง แล้วต่อท่อทีละคำสั่ง
หลังติดตั้งเสร็จ คำสั่งแรกที่ควรลองคือเปิดดูข้อมูล สามคำสั่งนี้ใช้บ่อยที่สุดเวลาเจอไฟล์ใหม่
xan headers file.csv· ดูชื่อคอลัมน์ทั้งหมดในไฟล์xan count file.csv· นับว่ามีกี่แถวxan view file.csv· เปิดดูตารางสวยๆ ในเทอร์มินัล ลงสีตามชนิดข้อมูลให้อัตโนมัติ
xan view ช่วยได้ตรงที่มันไฮไลต์ค่าที่มักหลุดสายตา เช่น ช่องว่างหน้า-หลังข้อความ ข้อความที่ขึ้นต้นด้วย newline แปลกๆ หรือช่องที่ว่างเปล่า (แสดงเป็น <empty>) สิ่งพวกนี้ทำให้ข้อมูลพังได้ตอนเอาไปใช้ต่อ ถ้าตารางกว้างจนล้นจอ ใส่ flag -p เพื่อเปิด pager ดูแบบเลื่อนได้
จากนั้นค่อยต่อคำสั่งเล็กๆ เข้าด้วยกันด้วยท่อ (pipe) ทีละขั้น แต่ละคำสั่งทำหน้าที่เดียว แล้วส่งผลลัพธ์ต่อให้คำสั่งถัดไป
xan search -s <คอลัมน์> <คำค้น> file.csv· กรองแบบค้นหาข้อความxan select <คอลัมน์> file.csv· เลือกเฉพาะคอลัมน์ที่อยากได้xan sort -s <คอลัมน์> file.csv· เรียงลำดับxan frequency -s <คอลัมน์> file.csv· สรุปว่าค่าไหนปรากฏกี่ครั้งxan stats -s <คอลัมน์> file.csv· ดูสถิติพื้นฐาน ค่าเฉลี่ย ส่วนเบี่ยงเบน ต่ำสุด สูงสุด
ทั้งหมดนี้ต่อท่อกันได้ เช่นกรองก่อนแล้วค่อยส่งไปดูเป็นตารางด้วย xan search -s ... | xan view เมื่อจับจังหวะ "หนึ่งคำสั่งหนึ่งหน้าที่ แล้วต่อท่อ" ได้ งานสำรวจข้อมูลส่วนใหญ่ก็ทำได้โดยไม่ต้องเขียนสคริปต์เลย
พิมพ์คำสั่งเดียว กราฟก็โผล่ในจอดำ

นี่คือความสามารถที่ทำให้ xan โดดเด่นกว่าเครื่องมือ CSV ทั่วไป มันวาดกราฟสำรวจข้อมูลในเทอร์มินัลได้ตรงๆ โดยใช้อักขระ braille กับสี true color ของ ANSI ภาพที่ได้ละเอียดกว่ากราฟแบบ ASCII เดิมมาก กราฟพวกนี้ไม่ได้มีไว้ทำรายงานสวยงาม แต่มีไว้ "รู้จักข้อมูลเร็วๆ" ก่อนลงลึก
xan hist· กราฟแท่งแนวนอน ใช้คู่กับxan frequencyหรือxan binsตอนอยากเห็นว่าข้อมูลกระจายตัวยังไงxan plot <x> <y>· scatter plot, line plot หรือ time series ใส่ regression line หรือทำ small multiples แยกหลายกราฟได้xan heatmap· ตาราง heatmap ไล่เฉดสี เหมาะกับดู correlation matrix (xan matrix corr) ว่าคอลัมน์ไหนสัมพันธ์กับคอลัมน์ไหนxan spark· sparkline เส้นเล็กๆ ในบรรทัดเดียว ไว้ดูแนวโน้มหรือ time series แบบเร็วๆ
จะใช้ตัวไหนให้ดูจากคำถามในหัว อยากรู้การกระจายตัวของค่าเดียวใช้ hist · อยากรู้ความสัมพันธ์ของสองค่าใช้ plot · อยากเห็นภาพรวมความสัมพันธ์ของหลายคอลัมน์พร้อมกันใช้ heatmap · อยากได้แนวโน้มสั้นๆ แทรกในบรรทัดใช้ spark
ถ้าอยากเห็นสถิติทั้งชุดในทีเดียว xan stats -R จะออกรายงานสถิติอัตโนมัติพร้อมกราฟแท่งเล็กๆ ในตัว เห็นภาพรวมของทุกคอลัมน์ได้ในคำสั่งเดียว
ของแถมที่ทำให้มันทำได้มากกว่าแค่ส่องข้อมูล
พอผ่านขั้นสำรวจไปแล้ว xan ยังมีของให้ใช้ต่อ มันมีภาษานิพจน์ (expression language) ของตัวเองชื่อ Moonblade สำหรับงานกรอง-คำนวณที่ซับซ้อนขึ้น เขียนเงื่อนไขเองได้ และทำงานเร็วกว่าภาษาแบบ dynamic-typed อย่าง Python หรือ JavaScript เพราะออกแบบมาเพื่องาน CSV โดยเฉพาะ
นอกจากนี้มันไม่ได้ติดอยู่กับ CSV อย่างเดียว แปลงไป-กลับระหว่าง JSON, Excel หรือ numpy array ได้ผ่าน xan from กับ xan to รองรับไฟล์หลายนามสกุลตั้งแต่ .tsv, .ndjson ไปจนถึงไฟล์บีบอัดอย่าง .gz และ .zst เป็น open-source และติดตั้งฟรี
เลือกติดตั้งได้ตามเครื่องที่ใช้ บน macOS ใช้ Homebrew สั่ง brew install xan · บน Windows ใช้ Scoop สั่ง scoop bucket add extras แล้ว scoop install xan · ถ้ามี Rust อยู่แล้วก็ cargo install xan --locked ได้เลย หรือจะโหลด binary สำเร็จรูปจากหน้า releases ของโปรเจกต์ xan ก็ได้ ตัว binary มีขนาดราว 20MB เท่านั้น
เครื่องมือที่เร็วที่สุดไม่ใช่ตัวที่คำนวณไว แต่เป็นตัวที่ไม่ต้องให้เราเปิดอะไรก่อนเลย
ความคุ้มของ xan อยู่ตรงที่มันตัดขั้นตอน "เปิดของหนักก่อน" ทิ้งไป สำหรับงานสำรวจข้อมูลเร็วๆ การได้คำตอบบนจอที่เปิดอยู่แล้วมีค่ามากกว่าฟีเจอร์ที่ครบกว่าแต่ต้องรอ ส่วนงานที่ต้องทำกราฟละเอียดเพื่อส่งจริง หรืองานวิเคราะห์เชิงลึกที่ซับซ้อน pandas กับเครื่องมือสาย notebook ก็ยังทำได้ดีกว่าอยู่ดี
xan จึงไม่ได้มาแทน Python แต่มาแทนนิสัย "เปิด Excel เพื่อแค่ส่องไฟล์" ยิ่งไฟล์ CSV ที่ต้องเจอในแต่ละวันมีเยอะขึ้น การมีคำสั่งเดียวที่ตอบคำถามแรกได้ทันทีในจอดำ ก็ยิ่งคุ้มที่จะมีติดมือไว้
ที่มา:
- บทความ GitHub - medialab/xan: The CSV magician จาก medialab/xan (GitHub)
- บทความ xan/docs/cookbook/dataviz.md at master · medialab/xan จาก xan cookbook · dataviz (GitHub)



