unix data scientist 2

ทำไม Data Scientist ต้องเรียน Unix ?

ก่อนหน้านี้แอดมินเข้าใจว่าทำ Data Science เรียน Python / R / SQL ก็พอล่ะ แต่เมื่อไม่กี่วันที่ผ่านมาเรียนแล็บเรื่อง Big Data ต้องมาใช้ Unix ด้วย 555 #ในเลขห้ามีน้ำตาซ่อนอยู่

บางคนอาจจะเรียก Command Line หรือใน Mac เรียก Terminal ก็ครือ ๆ กันนะฮะ มันคือไอ้หน้าต่างดำ ๆ ตัวหนังสือเขียว ๆ ที่เห็นในหนังแฮคเกอร์นั่นเอง

สาเหตุที่ต้องเรียนคำสั่งของ Unix ก็เพราะ บางทีไฟล์ Data ใหญ่มากหลาย GB จะเอามาโหลดเข้า Python หรือ R ก็น้านนาน เค้าเลยใช้ Unix เปิดดูไฟล์คร่าว ๆ ก่อนเอาไปใช้งาน มันเร็วมากขอบอก

ในบทความนี้เราจะมารู้จักคำสั่งพื้นฐานของ Unix กันครับ

คำสั่งที่น่าสนใจของ Unix

  • ls:
    ไว้ดูไฟล์ทั้งโฟลเดอร์
  • cd:
    ไว้เข้า – ออกโฟลเดอร์ เช่น cd /ชื่อโฟลเดอร์/
  • pwd:
    ไว้ดู Path โฟลเดอร์ปัจจุบัน อันนี้มีประโยชน์กว่าที่คิด เพราะบางทีเราลืมว่าอยู่ในโฟลเดอร์ไหนแล้ว
  • gunzip:
    แกะซิปได้ด้วย อันนี้ไม่เคยรู้มาก่อน
  • less xxxx.txt:
    เปิดอ่านไฟล์ xxxx.txt เป็นการเปิดแบบไม่ได้โหลดทั้งไฟล์ลง Memory ทำให้เร็วมาก จะแสดงแค่ทีละส่วนของไฟล์ อยากดูต่อก็กด Space Bar ไปเรื่อย ๆ สบายใจ ส่วนถ้าจะออกก็กด q
  • grep “Title” xxxx.txt:
    หาคำว่า Title ใน xxxx.txt มาแสดงพร้อมคำที่อยู่ใกล้ ๆ คำนั้น มีประโยชน์เวลาเรารู้ว่าทุกไฟล์จะมีบรรทัดแบบ “Title:” ตามด้วยชื่อเรื่องอยู่ แล้วเราอยากรู้ว่าชื่อเรื่องในไฟล์นี้มีชื่ออะไรบ้าง
  • wc xxxx.txt:
    Word Count นับจำนวนบรรทัด จำนวนคำ จำนวนตัวหนังสือในไฟล์
  • cat xxxx.txt:
    อ่านไฟล์แบบอ่านทั้งไฟล์ในทีเดียว แต่เราจะไม่ค่อยได้ใช้เดี่ยว ๆ (เพราะถ้าจะอ่านไฟล์เฉย ๆ ใช้คำสั่ง less ดีกว่า ไม่ต้องเปิดทีเดียวทั้งไฟล์) เรามักใช้ cat คู่กับ Operator | หรือที่เรียกว่า pipe โดยหน้าตา pipe จะคล้าย ๆ ตัว l แต่ยาวกว่า เดี๋ยวมารู้จักกับ Pipe ให้มากขึ้นกันครับ

ตัวอย่างการใช้ Pipe เชื่อมคำสั่ง Unix เข้าด้วยกัน

Pipe ใน Unix มีประโยชน์มากตรงที่ทำให้เราสามารถเชื่อมคำสั่งต่าง ๆ ต่อกันได้ในบรรทัดเดียว เอาไว้ส่งค่าในไฟล์ไปหาคำสั่งอื่นต่อ ตัวอย่างการใช้ pipe ก็เช่น

  • cat xxx.csv.gz | gunzip | less
    อันนี้คือเปิดไฟล์ xxx.csv.gz แล้ว unzip ต่อ แล้วเอาไปเปิดด้วยคำสั่ง less
  • cat xxx.csv.gz | gunzip | wc
    เปิดไฟล์ > unzip > แล้วนับคำ
  • ตัวอย่างแบบซับซ้อนหน่อย: cat xxx.csv.gz | gunzip | head -n1000 > first_1000_lines.txt
    เปิดไฟล์ xxx.csv.gz > unzip > ดึง 1000 บรรทัดแรก > เซฟลงไฟล์ first_1000_lines.txt

    เหมาะกับเวลาที่ไฟล์ที่เราต้องการใช้งานมีขนาดใหญ่มาก ๆ เราแค่ต้องการข้อมูลแถวแรก ๆ เอาไปโยนใส่ Python / R เพื่อประมวลผลต่อแบบเร็ว ๆ
  • อีกตัวอย่างที่มีประโยชน์มาก: cat xxx.csv.gz | gunzip | awk -F’,’ ‘{print $6,$7,$14}’ | less
    เปิดไฟล์ > unzip > ลูปแต่ละบรรทัด แบ่งคอลัมน์ด้วย , และเลือกคอลัมน์ที่ 6 7 14 > แสดงผล

    เหมาะมากเวลาที่เราอยากอ่านเฉพาะบางคอลัมน์ของไฟล์ CSV
  • หรือเอามา Filter ข้อมูลก็ยังได้: unzip -p xxx.zip | awk -F’,’ ‘$1=”Chillchill” {print $6,$7,$14}’ > chillchill.txt
    unzip แล้วส่งค่าใส่ pipe (ใช้ -p) > ลูปแต่ละบรรทัด แบ่งคอลัมน์ด้วย , ถ้าคอลัมน์แรกมีค่า “Chillchill” ให้แสดงผลคอลัมน์ที่ 6 7 14 > เก็บลงไฟล์ chillchill.txt

จะเห็นว่า Unix เทพมาก ทำอะไรได้หลายอย่าง ถ้ามี Data Frame บน Unix นี่คงมีคนทำ Package มาไว้ทำ Data Analysis บนนี้เลย (หรือมีก็ไม่รู้ แต่ขอไปเขียน Python / R ดีกว่า ดูง่ายกว่าเยอะเลยครับ)

ป.ล. ถ้าใครสนใจลองเล่น Unix แล้วใช้ Mac OS / Linux (หรือ Ubuntu) ก็เปิด Terminal มาพิมพ์คำสั่งด้านบนนี้เพื่อใช้ได้เลยครับ แต่ถ้าใช้ Windows ลองดาวน์โหลด Git Bash หรือ WSL (Windows Subsystem for Linux) มาครับผม

บทความแนะนำอื่น ๆ