5 สคริปต์ AutoHotkey ช่วยนักวิทยาศาสตร์ข้อมูลจัดการงานซ้ำซาก

5 AutoHotkey Scripts for Data Scientists

สมุดโน้ตบุ๊กพร้อมแล้วแต่ยังไม่ได้เริ่มงานจริง เพราะคุณต้องเสียเวลาเปิดโฟลเดอร์โปรเจกต์ รันเอดิเตอร์ เปิดเทอร์มินัล และหาแท็บเอกสารประกอบ ไหนจะต้องแปลงรายการ ID ลูกค้าจากสเปรดชีตให้เป็นรูปแบบที่ Python หรือ SQL อ่านได้ ซึ่งมักจบลงด้วยการพึ่งพาเว็บฟอร์แมตเตอร์ที่ไม่รู้จัก

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

สคริปต์ทั้งห้าจะช่วยจัดการงานจุกจิกบนเดสก์ท็อป โดยใช้ฟีเจอร์เด่นของ AutoHotkey ภายใต้ข้อควรระวังที่เหมาะสม คำอธิบายรูปภาพ: ตารางอ้างอิงแสดงตัวเรียกใช้พื้นที่ทำงาน, ตัวแปลงคลิปบอร์ด, hotstring, ตัวจัดรูปแบบพาธ และคีย์ลัดจัดเลย์เอาต์หน้าต่าง เครดิต: อิงตามเอกสารประกอบ AutoHotkey v2

ก่อนเริ่มสคริปต์: ให้ AutoHotkey อยู่ในขอบเขตที่เหมาะสม

AutoHotkey เป็นเครื่องมือโอเพนซอร์สฟรีสำหรับ Windows ที่มีหลักการง่ายๆ คือ ปุ่มลัดคีย์บอร์ดสามารถสั่งรันโค้ดอะไรก็ได้ที่คุณต้องการ เครื่องมือนี้รองรับเฉพาะ Windows เท่านั้น หากเป็น Mac หรือ Linux ต้องใช้ทางเลือกอื่นอย่าง Hammerspoon หรือ AutoKey

เนื้อหาในที่นี้จะใช้ AutoHotkey v2 ทั้งหมด เนื่องจาก v1 ไม่ได้รับการดูแลแล้ว และโค้ดส่วนใหญ่จะไม่สามารถรันข้ามเวอร์ชันกันได้ การใส่บรรทัด #Requires AutoHotkey v2.0 ไว้บนสุดของไฟล์จะช่วยป้องกันความผิดพลาดได้ดีที่สุด

ขอบเขตการใช้งานที่เหมาะสมของ AutoHotkey คือการจัดการเหตุการณ์บนเดสก์ท็อป เช่น การเปิดโปรแกรม, การปรับเปลี่ยนสิ่งที่อยู่ในคลิปบอร์ด หรือการขยายข้อความสั้นๆ แต่ไม่ควรนำไปใช้กับงานที่ต้องการความแม่นยำและตรวจสอบย้อนหลังได้ (reproducible) เช่น การแปลงข้อมูลสำคัญ ซึ่งควรทำใน Python, R หรือ SQL ภายใต้ระบบ version control มากกว่า

1. การเปิดพื้นที่ทำงานวิเคราะห์ทั้งหมด

แทนที่จะต้องไล่เปิดโปรแกรมเดิมๆ ทุกครั้ง การใช้ hotkey เพียงชุดเดียวสามารถสั่งเปิดทุกอย่างพร้อมกันได้ทันที

#Requires AutoHotkey v2.0
#SingleInstance Force
 
project := "C:\work\churn-model"
 
^!w:: {                                   ; Ctrl+Alt+W
    Run 'explorer.exe "' project '"'
    Run 'code "' project '"'
    Run 'wt -d "' project '"'             ; Windows Terminal ในโฟลเดอร์โปรเจกต์
    Run "http://localhost:8888/lab"       ; เซิร์ฟเวอร์โน้ตบุ๊ก หากกำลังรันอยู่
}

คำสั่ง Run สามารถเปิดได้ทั้งไฟล์, โฟลเดอร์ และ URL ช่วยให้ชุดโปรแกรมเปิดขึ้นมาพร้อมกันในโฟลเดอร์โปรเจกต์ที่กำหนด ข้อควรระวังคือควรวางพาธไว้ด้านบนสุดเพื่อให้แก้ไขง่าย และห้ามใส่ API key หรือข้อมูลส่วนตัวลงในสคริปต์ เพราะไฟล์เหล่านี้เป็นข้อความธรรมดาที่อาจรั่วไหลได้ง่าย

2. การเปลี่ยน ID ที่คัดลอกมาให้เป็นรายการ Python หรือ SQL

บ่อยครั้งที่เราคัดลอก ID มาจากสเปรดชีต แต่ต้องการนำไปใช้ในรูปแบบ ['a', 'b', 'c'] สำหรับ Python หรือ IN ('a', 'b', 'c') สำหรับ SQL สคริปต์นี้จะช่วยแปลงรูปแบบให้ทันทีจากคลิปบอร์ด

^!l::PasteList("[", "]")                  ; รายการ Python
^!+l::PasteList("(", ")")                 ; SQL IN (...)
 
PasteList(open, close) {
    items := []
    for line in StrSplit(A_Clipboard, "`n", "`r ")
        if line != ""
            items.Push("'" line "'")
    out := open
    for i, item in items
        out .= (i > 1 ? ", " : "") item
    A_Clipboard := out close
    SendText A_Clipboard
}

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

3. การขยายข้อความพื้นฐานการวิเคราะห์ด้วย Hotstrings

Hotstrings ช่วยแทนที่คำย่อด้วยข้อความยาวๆ เหมาะสำหรับคำสั่งที่ต้องพิมพ์บ่อยอย่างการ import library หรือ EDA checklist

:*:;;imp::
{
    SendText "import pandas as pd`nimport numpy as np`nimport matplotlib.pyplot as plt`n"
}
 
:*:;;eda::
{
    SendText "## EDA checklist`n- shape and dtypes`n- missing values per column`n- target balance`n- duplicates`n"
}

การใช้คำนำหน้า ;; จะช่วยป้องกันไม่ให้สคริปต์ทำงานโดยไม่ตั้งใจขณะพิมพ์ข้อความปกติ และควรใช้ SendText เพื่อให้แน่ใจว่าเครื่องหมายอย่าง # หรือ { } จะถูกพิมพ์ออกมาอย่างถูกต้อง

4. การทำพาธของ Windows ให้เป็นมิตรกับโน้ตบุ๊ก

เมื่อใช้คำสั่ง "Copy as path" ใน Windows คุณจะได้เครื่องหมาย backslash ซึ่ง Python มักจะอ่านผิดเป็น escape character สคริปต์นี้จะช่วยแปลงพาธให้ใช้งานได้ทันที

^!p:: {                                   ; raw string:  r'C:\Users\nd\data\raw.csv'
    A_Clipboard := "r'" Trim(A_Clipboard, '"') "'"
    SendText A_Clipboard
}
 
^!+p:: {                                  ; forward slashes:  C:/Users/nd/data/raw.csv
    A_Clipboard := StrReplace(Trim(A_Clipboard, '"'), "\", "/")
    SendText A_Clipboard
}

คุณสามารถเลือกได้ว่าจะห่อหุ้มด้วย r'' หรือจะเปลี่ยนเป็น forward slash ทั้งหมด เพื่อให้สอดคล้องกับมาตรฐานของโปรเจกต์หรือการใช้ pathlib ใน Python

5. การจัดหน้าต่างโน้ตบุ๊ก เทอร์มินัล และเอกสารให้เข้าที่

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

^!1:: {
    Place("ahk_exe WindowsTerminal.exe", 0, 720, 1280, 720)
    Place("JupyterLab", 0, 0, 1280, 720)
    Place("ahk_exe Code.exe", 1280, 0, 1280, 1440)
}
 
Place(title, x, y, w, h) {
    if WinExist(title) {
        WinActivate
        WinMove x, y, w, h
    }
}

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

ให้ AutoHotkey เป็นตัวเชื่อม ไม่ใช่ไปป์ไลน์

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

สำหรับขั้นตอนที่ต้องทำซ้ำและรวดเร็ว การฝึกใช้ บรรทัดคำสั่ง (command line) อาจเป็นทางเลือกที่ยั่งยืนกว่าในระยะยาว จงใช้ AutoHotkey เพื่อลดภาระการกดแป้นพิมพ์ และปรับเปลี่ยนมันอยู่เสมอตามเวิร์กโฟลว์ที่เปลี่ยนไป

Nahla Davies เป็นนักพัฒนาซอฟต์แวร์และนักเขียนด้านเทคนิคที่มีประสบการณ์บริหารงานในองค์กรชั้นนำที่ดูแลลูกค้าอย่าง Samsung, Netflix และ Sony

Source: KDnuggets
ดูแลงานแปลและเรียบเรียงโดย SirilukP

ความคิดเห็น (0)

เข้าสู่ระบบเพื่อร่วมแสดงความเห็น

สมัครสมาชิก

มาเป็นคนแรกที่แสดงความเห็นกันเลยโบร