Libro

Python for Data Analysis ฉบับที่ 3: พื้นฐาน pandas ก่อนเริ่มงานข้อมูลการเงิน

หนังสือของ Wes McKinney ผู้สร้าง pandas ฉบับที่ 3 ว่าด้วยการจัดการ ทำความสะอาด และสรุปข้อมูลด้วย Python บทความนี้สรุปจากคำนำ บทที่ 1 และบทที่ 11 Time Series ในฉบับเปิดอ่านออนไลน์ที่ผู้เขียนเผยแพร่เอง

ภาพประกอบบทความ: ปกหนังสือ Python for Data Analysis โดย Wes McKinney

ขอบเขตของบทความ: อ่านบางบทจากฉบับเปิดอ่านออนไลน์ (Open Access) ที่ผู้เขียนเผยแพร่เอง ได้แก่ คำนำ บทที่ 1 Preliminaries และบทที่ 11 Time Series รวมกับสารบัญและ README ของ repository ประกอบหนังสือ ยังไม่ได้อ่านบทอื่น และไม่ได้รันโค้ดตัวอย่าง

คนที่อยากเริ่มทำ backtest หรือวิเคราะห์ข้อมูลตลาดด้วย Python มักรีบไปที่กลยุทธ์หรือ model แล้วพบว่าเวลาส่วนใหญ่หมดไปกับการโหลดไฟล์ จัดการวันที่ เติมค่าที่หาย แปลงข้อมูลรายนาทีเป็นรายวัน และรวมตารางหลายชุดเข้าด้วยกัน งานเหล่านี้ไม่ใช่เรื่องรอง ถ้าทำพลาด ผลลัพธ์ทั้งหมดที่ตามมาก็ผิด

Python for Data Analysis เขียนเพื่องานส่วนนี้โดยตรง บทความนี้ดูว่าฉบับที่ 3 ครอบคลุมอะไร บทที่เกี่ยวกับข้อมูล time series สอนอะไร และเหมาะกับใคร

หนังสือเล่มนี้ว่าด้วยอะไร

Python for Data Analysis ฉบับที่ 3 เขียนโดย Wes McKinney ปกในโฟลเดอร์เป็นฉบับของ O'Reilly ที่มีชื่อรอง Data Wrangling with pandas, NumPy & Jupyter ระเบียนของ Open Library ระบุ ISBN 9781098104009 ว่าเป็นของ O'Reilly Media ปี 2022 ความยาว 582 หน้า

ผู้เขียนเผยแพร่ฉบับที่ 3 เป็นเว็บไซต์ให้อ่านฟรี (Python for Data Analysis, 3E) และระบุว่าปรับเนื้อหาให้ตรงกับ pandas 2.0.0 และ Python 3.10 แล้ว เนื้อหาข้อความห้ามคัดลอกหรือทำซ้ำ ส่วนโค้ดตัวอย่างใช้สัญญาอนุญาต MIT

คำนำบอกว่าฉบับนี้ปรับให้ตรงกับ Python, NumPy และ pandas รุ่นปัจจุบัน และตั้งใจหลีกเลี่ยงโปรเจกต์ใหม่ที่อาจล้าสมัยภายในหนึ่งถึงสองปี ฉบับที่ 2 ปี 2017 ใช้ Python 3.6 และฉบับแรกปี 2012 ใช้ Python 2.7 (คำนำ)

เนื้อหาครอบคลุมหัวข้ออะไร

บทที่ 1 บอกชัดว่าหนังสือว่าด้วยกลไกการจัดการ ทำความสะอาด ประมวลผล และสรุปข้อมูลด้วย Python ไม่ได้สอนระเบียบวิธีวิเคราะห์ข้อมูลหรือ statistics และเน้นข้อมูลแบบมีโครงสร้าง เช่น ตาราง อาร์เรย์หลายมิติ ตารางหลายชุดที่เชื่อมด้วยคีย์ และ time series (บทที่ 1, หัวข้อ 1.1)

สารบัญบนเว็บไซต์มี 13 บทและภาคผนวกสองภาค:

บท

หัวข้อตามสารบัญ

1–3

Preliminaries, Python Language Basics, IPython, and Jupyter Notebooks, Built-In Data Structures, Functions, and Files

4

NumPy Basics: Arrays and Vectorized Computation

5–8

Getting Started with pandas, Data Loading, Storage, and File Formats, Data Cleaning and Preparation, Data Wrangling: Join, Combine, and Reshape

9–10

Plotting and Visualization, Data Aggregation and Group Operations

11

Time Series

12–13

Introduction to Modeling Libraries in Python, Data Analysis Examples

ภาคผนวก

A Advanced NumPy, B More on the IPython System

แนวคิดที่น่าสนใจจากบทที่อ่าน

บทที่ 1: ทำไม Python และเมื่อไรไม่ควรใช้

  • ผู้เขียนอธิบายว่า pandas เริ่มต้นในปี 2008 ที่ AQR Capital Management และชื่อมาจากคำว่า panel data

  • บทนี้แนะนำไลบรารีหลัก ได้แก่ NumPy, pandas, matplotlib, IPython และ Jupyter, SciPy, scikit-learn และ statsmodels พร้อมชี้ความต่างว่า statsmodels เน้น statistical inference ส่วน scikit-learn เน้นการพยากรณ์

  • ในหัวข้อ "Why Not Python?" ผู้เขียนยอมรับข้อจำกัดว่า Python ช้ากว่าภาษาคอมไพล์ และ global interpreter lock (GIL) ทำให้งาน multithreading ที่ใช้ CPU หนักทำได้ยาก ซึ่งมีผลกับระบบที่ไวต่อความหน่วงอย่าง high-frequency trading

  • การติดตั้งที่แนะนำคือ Miniconda กับ conda-forge และสร้าง environment python=3.10 ผู้ที่ใช้ Python เป็นแล้วอ่านบทที่ 2 และ 3 ผ่าน ๆ ได้

บทที่ 11: Time Series

บทนี้ตรงกับงานข้อมูลตลาดมากที่สุด (บทที่ 11) หัวข้อเรียงจากชนิดข้อมูลวันที่ การเลือกข้อมูลตามช่วงเวลา ความถี่และ date offsets การเลื่อนข้อมูล time zone, periods, resampling ไปจนถึง moving window functions

  • การเลื่อนข้อมูล ใช้ shift และคำนวณผลตอบแทนรายช่วงด้วยรูป ts / ts.shift(1) - 1

  • resampling ใช้ resample คล้าย groupby แต่จัดกลุ่มตามช่วงเวลา มีทั้ง downsampling, upsampling ด้วย ffill และการสรุปเป็น open-high-low-close ด้วย ohlc

  • moving windows ใช้ rolling, expanding และ ewm พร้อม rolling correlation ระหว่างสองอนุกรม

  • ข้อมูลตัวอย่าง ใช้ไฟล์ examples/stock_px.csv ที่มีราคา AAPL, MSFT, XOM และ SPX สำหรับ moving average, volatility และ correlation กับ S&P 500

พื้นฐานที่ควรมีก่อนอ่าน

ผู้เขียนแนะนำให้ผู้เริ่มต้นอ่านบทที่ 2 และ 3 ซึ่งปูพื้นภาษา Python ก่อน จึงไม่จำเป็นต้องเขียน Python เป็นมาก่อน แต่ควรคุ้นกับแนวคิดการเขียนโปรแกรมบ้าง หนังสือไม่ได้สอน statistics ผู้ที่ต้องการวิเคราะห์เชิงสถิติจึงต้องหาตำรา statistics เพิ่ม

เหมาะกับใคร และใครควรเริ่มจากเล่มอื่นก่อน

  • เหมาะ กับคนที่จะทำงานข้อมูลการเงินด้วย Python และต้องการพื้นฐาน pandas ที่แน่น ก่อนไปเรื่อง backtest หรือ machine learning

  • เหมาะ กับคนที่ใช้ pandas อยู่แล้วแบบค้นทีละคำสั่ง และอยากเห็นภาพรวมที่เป็นระบบจากผู้สร้างไลบรารีเอง

  • ควรเลือกเล่มอื่น ถ้าต้องการเรียน statistical methods การสร้างกลยุทธ์ หรือ machine learning เชิงลึก เพราะบทที่ 1 ระบุว่าหนังสือไม่ได้มุ่งสอนเรื่องเหล่านี้

ข้อจำกัดของข้อมูลที่ใช้ในบทความนี้

  • อ่านเฉพาะคำนำ บทที่ 1 และบทที่ 11 จากฉบับออนไลน์ บทอื่นสรุปจากชื่อบทเท่านั้น

  • ฉบับออนไลน์อัปเดตหลังพิมพ์ เช่น ปรับเป็น pandas 2.0.0 ในเดือนเมษายน 2023 รายละเอียดบางจุดจึงอาจต่างจากฉบับพิมพ์ปี 2022

  • ไม่ได้รันโค้ดหรือ notebook ใน repository ประกอบหนังสือ ซึ่งมี notebook บทที่ 2–13 ชุดข้อมูล และ branch แยกของฉบับก่อนหน้า

  • หน้าหนังสือของ O'Reilly ปฏิเสธการเข้าถึง จึงใช้ข้อมูลฉบับจาก Open Library แทน

แหล่งอ้างอิง

  • Python for Data Analysis, 3E · Wes McKinney · หน้าแรก สารบัญ และเงื่อนไขการใช้ของฉบับออนไลน์

  • Preface · Wes McKinney · คำนำฉบับที่ 3

  • 1 Preliminaries · Wes McKinney · บทที่ 1 ทั้งบท

  • 11 Time Series · Wes McKinney · บทที่ 11

  • wesm/pydata-book · GitHub · README ของ repository ประกอบหนังสือ

  • Open Library: 9781098104009 · Internet Archive · ข้อมูลฉบับ ปี และจำนวนหน้า

  • ปกหนังสือ Python for Data Analysis

    Python for Data Analysis

    Wes McKinney

    บทที่ 11 Time Series ใช้ข้อมูลราคาหุ้นสอน resample, rolling, ewm และ rolling correlation ซึ่งเป็นงานพื้นฐานของการวิเคราะห์ข้อมูลตลาด

    ดูรายละเอียด

บทความนี้อ่านจบได้ในตัวเอง หนังสือด้านบนคือจุดต่อยอดสำหรับผู้ที่ต้องการศึกษาลึกขึ้น