Think Stats II: Phân tích dữ liệu theo hình thức khám phá bằng Python

Phiên bản 2014, tác giả Allen B. Downey.

Nguyên bản HTML tiếng Anh: http://greenteapress.com/thinkstats2/html/index.html

(Xem bản dịch của ấn bản Think Stats lần thứ nhất)

Cấp phép để sao chép, phân phối và/hoặc sửa đổi văn bản này theo các điều khoản của Giấy Phép Creative Commons Ghi công-Phi thương mại-Chia sẻ tương tự 4.0 Quốc tế, được đăng ở http://creativecommons.org/licenses/by-nc-sa/4.0/

 Nội dung các chương

Chương 1: Phân tích dữ liệu khám phá

Chương 2: Phân bố xác suất

Chương 3: Hàm khối xác suất

Chương 4: Hàm phân bố lũy tích

Chương 5: Mô hình hóa phân bố

Chương 6: Hàm mật độ xác suất

Chương 7: Mối quan hệ giữa các biến

Chương 8: Ước lượng

Chương 9: Kiểm định giả thiết

Chương 10: Bình phương nhỏ nhất tuyến tính

Chương 11: Hồi quy

Chương 12: Phân tích chuỗi thời gian

Chương 13: Phân tích trường tồn

Chương 14: Các  phương pháp giải tích.

Lời nói đầu

Cuốn sách này là tài liệu giới thiệu về những công cụ thực dụng nhằm phân tích dữ liệu theo hướng khám phá. Cấu trúc cuốn sách này dựa theo quá trình mà tôi áp dụng khi làm việc với mỗi tập dữ liệu:

  • Thu nhập và làm sạch: Bất kể dữ liệu có ở định dạng nào, bao giờ ta cũng mất thời gian và nỗ lực nhất định để đọc dữ liệu, làm sạch và chuyển đổi nó, rồi kiểm tra chắc rằng mọi yếu tố cấu thành dữ liệu vẫn còn vẹn nguyên sau khi chuyển đổi.
  • Khảo sát đơn biến: Tôi thường bắt đầu kiểm tra từng biến một, xem mỗi biến có ý nghĩa gì, xem xét dạng phân bố của các giá trị này, và chọn những đặc trưng thống kê phù hợp.
  • Khảo sát từng cặp: Để nhận diện những mối liên hệ có thể xuất hiện giữa các biến, tôi nhìn vào các bảng và biểu đồ điểm chấm, rồi tính toán tương quan và khớp bằng hàm tuyến tính.
  • Phân tích đa biến: Nếu có những mối quan hệ biểu kiến giữa các biến, tôi dùng hồi quy đa biến để thêm vào các biến kiểm soát rồi xem xét những mối quan hệ phức tạp hơn.
  • Ước lượng và kiểm định giả thiết: Khi báo cáo những kết quả thống kê, quan trọng là phải trả lời được ba câu hỏi sau: Hiệu ứng lớn đến đâu? Ta dự liệu mức độ biến động là bao nhiêu nếu tiến hành lại phép đo? Liệu hiệu ứng ta thấy là do ngẫu nhiên?
  • Hiển thị: Trong quá trình khám phá, cách hiển thị là một công cụ để tìm ra những mối quan hệ và hiệu ứng khả dĩ. Sau đó, nếu một hiệu ứng biểu kiến được khẳng định qua kiểm nghiệm kĩ càng, thì hiển thị là cách hiệu quả để truyền đạt kết quả.

Cuốn sách này tiếp cận theo cách tính toán (bằng máy tính), vốn có một số ưu điểm so với phương pháp toán học:

  • Tôi trình bày đa phần kiến thức bằng mã lệnh Python thay vì kí hiệu toán học. Nhìn chung, mã lệnh Python đều dễ đọc hơn; ngoài ra nó còn thực hiện được, nên độc giả có thể tải về máy, chạy và sửa đổi mã lệnh.
  • Mỗi chương đều có các bài tập để độc giả làm, nhằm phát triển và củng cố kiến thức. Khi bạn viết chương trình, bạn đã diễn đạt hiểu biết của mình qua mã lệnh; khi bạn gỡ lỗi chương trình, bạn cũng chỉnh sửa lại kiến thức đã thu nhận.
  • Một số bài tập có những thử nghiệm để kiểm tra biểu hiện thống kê. Chẳng hạn, có thể khám phá Định lý giới hạn trung tâm (Central Limit Theorem, CLT) bằng cách phát sinh các mẫu rồi tính tổng của chúng. Việc hiển thị kết quả sẽ cho thấy vì sao CLT áp dụng được, và khi nào không được.
  • Một số ý tưởng rất khó nắm bắt về mặt toán học lại rất dễ hiểu qua mô phỏng. Chẳng hạn, ta xấp xỉ các giá trị p bằng cách chạy mô phỏng ngẫu nhiên; cách này sẽ củng cố ý nghĩa của giá trị p.
  • Vì cuốn sách này được dựa theo một ngôn ngữ lập trình da dụng (Python), bạn sẽ có thể nhập dữ liệu từ hầu như bất kì nguồn nào. Không có sự bó hẹp trong những dữ liệu được làm sạch và định dạng riêng cho một công cụ phần mềm thống kê cụ thể nào.

Cuốn sách này thích hợp cho cách dùng với bài tập lớn. Trong lớp tôi, sinh viên phải hoàn thành một bài tập lớn trong một học kì, trong đó yêu cầu họ đặt ra một câu hỏi thống kê, tìm một tập số liệu phục vụ cho nhận định đó, rồi áp dụng từng kĩ thuật mới học được vào cho chính dữ liệu họ đã chọn.

Để giới thiệu về kiểu phân tích mà tôi muốn sinh viên làm theo, cuốn sách này giới thiệu một nghiên cứu cụ thể xuyên suốt các chương. Nó dùng số liệu từ hai nguồn:

  • The National Survey of Family Growth (NSFG) [Chương trình điều tra của Hoa Kỳ về tăng trưởng gia đình], do U.S. Centers for Disease Control and Prevention (CDC) [các Trung tâm phòng chống kiểm soát dịch bệnh] tiến hành để thu thập “thông tin về cuộc sống gia đình, kết hôn và li dị, thai nghén, vô sinh, sử dụng biện pháp tránh thai, và sức khỏe nam nữ.” (Xem http://cdc.gov/nchs/nsfg.htm.)
  • The Behavioral Risk Factor Surveillance System (BRFSS) [Hệ thống theo dõi nhân tố rủi ro về biểu hiện], do National Center for Chronic Disease Prevention and Health Promotion [Trung tâm của Hoa Kỳ về Phòng bệnh mãn tính và phát triển sức khỏe] để “theo dõi tình trạng sức khỏe và các biểu hiện rủi ro trên lãnh thổ Hoa Kỳ.” (Xem http://cdc.gov/BRFSS/.)

Các ví dụ khác đã dùng số liệu từ IRS, U.S. Census, và Boston Marathon.

Phiên bản thứ hai này của cuốn Think Stats bao gồm các chương có trong ấn bản thứ nhất; trong đó nhiều chỗ được chỉnh biên đáng kể, và những chương mới về hồi quy, chuỗi thời gian, phân tích trường tồn, và các phương pháp giải tích. Phiên bản trước cũng không áp dụng pandas, SciPy, hay StatsModels, vì vậy tất cả những phần này đều là mới.

0.1  Tôi đã viết cuốn sách này như thế nào

Khi một tác giả viết cuốn sách mới, họ thường bắt đầu bằng việc đọc một chồng sách cũ. Vì vậy, phần lớn những cuốn sách mới đều có chứa cùng nội dung theo thứ tự gần như giống các cuốn sách trước đó.

Tôi thì không làm như vậy. Thật ra, khi viết sách này tôi gần như không dùng tài liệu in ấn nào, với một số lí do:

  • Mục đích của tôi là khám phá một hướng tiếp cận mới trong tập sách này, vì vậy tôi không muốn đề cập nhiều đến những cách tiếp cận đã có.
  • Vì tôi phát hành cuốn sách này theo một giấy phép tự do nên cũng muốn đảm bảo rằng khô có chỗ nào trong sách bị ảnh hưởng bởi những ràng buộc về bản quyền.
  • Nhiều độc giả của tôi không có điều kiện tham khảo sách in trong thư viện, vì vậy tôi cố gắng đưa các tài liệu bổ trợ trong sách lên Internet để bạn truy cập miễn phí.
  • Những người ủng hộ cho kiểu sách truyền thống thì cho rằng chỉ dùng những tài liệu điện tử là sự lười biếng và thiếu tin cậy. Họ có thể nói đúng vế đầu, như vế sau thì tôi nghĩ họ đã sai, vì vậy tôi muốn kiểm nghiệm giả thuyết của mình.

Tài liệu tôi tham khảo nhiều nhất là Wikipedia. Nói chung, các bài báo tôi đọc về những chủ đề thống kê đều rất tốt (dù tôi đã đồng thời sửa chữa một số chỗ). Tôi ghi chú suốt quyển sách những tham khảo đến các trang Wikipedia, và khuyên bạn nên theo các đường link đó để tìm hiểu thêm; nhiều khi trang Wikipedia nói tiếp vào đúng những chỗ tôi tạm ngừng lại. Những thuật ngữ và kí hiệu dùng trong sách này nói chung đều thống nhất với Wikipedia, trừ khi tôi có một lý do thỏa đáng để viết khác. Những nguồn tham khảo khác mà tôi thấy có ích gồm Wolfram MathWorld và diễn đàn thống kê Reddit, http://www.reddit.com/r/statistics.

0.2  Sử dụng mã lệnh

Mã lệnh và dữ liệu trong sách này có thể lấy được từ https://github.com/AllenDowney/ThinkStats2. Git là một hệ thống kiểm soát phiên bản, cho phép bạn theo dõi các file cấu thành một dự án. Một tập hợp các file được Git kiểm soát được gọi là một repository. GitHub là một dịch vụ chủ, cung cấp dung lượng lưu trữ các repository của Git và một giao diện web tiện dụng.

Trang chủ GitHub chứa repository của tôi cung cấp một vài cách để làm việc với mã lệnh này:

  • Bạn có thể tạo một bản sao repository của tôi trên GitHub bằng cách ấn nút Fork. Nếu bạn chưa có một tài khoản GitHub thì phải tạo một tài khoản. Sau khi sao chép, bạn sẽ có repository của riêng mình trên GitHub mà bạn có thể dùng nó để theo dõi mã lệnh viết ra khi đọc cuốn sách này. Khi đó bạn có thể nhân bản (clone) repository này, nghĩa là bạn sao chép các file vào máy tính của mình.
  • Hoặc bạn cũng có thể nhân bản repository của tôi. Để làm điều này bạn không cần có tài khoản GitHub, nhưng bạn không thể ghi những gì bạn sửa đổi trở lại GitHub được.
  • Nếu bạn không hề muốn dùng Git, bạn có thể tải các file về dưới dạng một Zip file lớn bằng cách ấn nút ở góc dưới bên phải trang GitHub.

Toàn bộ mã lệnh này được viết để chạy được cả trên Python 2 lẫn Python 3 mà không cần chuyển đổi gì.

Tôi đã lập nên cuốn sách này bằng Anaconda của Continuum Analytics, vốn là một bản phân phối Python miễn phí trong đó bao gồm tất cả các gói (package) mà bạn cần để chạy mã lệnh (cùng nhiều thứ khác nữa). Tôi thấy Anaconda rất dễ cài đặt. Theo mặc định, nó thực hiện cài đặt theo cấp độ người dùng chứ không phải ở cấp độ hệ thống, bởi vậy bạn không cần quyền quản trị (admin). Và nó cũng hỗ trợ cả Python 2 lẫn Python 3. Bạn có thể tải Anaconda về từ http://continuum.io/downloads.

Nếu không muốn dùng Anaconda, bạn sẽ phải cần những gói sau:

Mặc dù đây là những gói thông dụng, song chúng không bao gồm trong tất cả các bản cài Python; và có thể sẽ khó cài trong một số môi trường. Nếu bạn gặp trục trặc khi cài đặt chúng, tôi khuyên bạn dùng Anaconda hay những bản phân phối khác có chứa các gói kể trên.

Sau khi bạn nhân bản repository hay giải nén file zip, bạn sẽ có một file tên là ThinkStats2/code/nsfg.py. Nếu chạy file này, nó sẽ đọc một file dữ liệu, chạy một vài phép kiểm tra, rồi in ra dòng thông báo kiểu như “All tests passed.” (Đã hoàn thành khâu kiểm tra.) Nếu bạn nhận được lỗi ở lệnh nhập (import), thì có lẽ bạn cần phải cài đặt thêm các gói khác.

Đa số các bài tập dùng đến văn lệnh Python, song có một số dùng notebook của IPython. Nếu bạn chưa từng dùng notebook của IPython, tôi gợi ý bạn nên xem tài liệu ở http://ipython.org/ipython-doc/stable/notebook/notebook.html.

Tôi viết cuốn sách này với giả thiết rằng độc giả đã quen thuộc với cốt lõi Python, bao gồm cả những đặc điểm hướng đối tượng, song chưa quen với pandas, NumPy, và SciPy. Nếu bạn đã quen với các module kể trên, thì bạn có thể bỏ qua một số mục.

Tôi giả thiết rằng độc giả nắm được kiến thức toán cơ bản, gồm cả logarit, chẳng hạn, và phép tính tổng. Một số chỗ tôi cũng đề cập đến giải tích, song bạn không cần phải thực hiện phép tính giải tích nào.

Nếu bạn chưa từng học thống kê, thì tôi nghĩ cuốn sách này chính là điểm thích hợp để bạn bắt đầu. Và nếu bạn đã học lớp thống kê một cách truyền thống, thì tôi hi vọng cuốn sách này sẽ giúp hàn gắn lại những chỗ hổng.

Allen B. Downey là giáo sư ngành Khoa học máy tính tại Trường Kĩ thuật Franklin W. Olin (College of Engineering) tại Needham, bang Massachusetts, Hoa Kỳ.

Danh sách độc giả góp ý sửa chữa

Nếu bạn có góp ý sửa chữa cuốn sách, hãy gửi thư điện tử đến {downey@allendowney.com}. Nếu tôi thực hiện thay đổi theo trong thư của bạn, tôi sẽ điền tên bạn vào danh sách dưới đây (trừ khi bạn từ chối).

Nếu bạn ghi cả một phần đoạn câu chứa lỗi thì sẽ tiện hơn nhiều để tôi tìm ra câu lỗi đó. Nếu ghi trang sách và số đề mục thì cũng được nhưng không tiện bằng. Cám ơn bạn!

  • Lisa Downey và June Downey đọc bản nháp và có nhiều góp ý, sửa chữa.
  • Steven Zhang tìm thấy một vài lỗi.
  • Andy Pethan và Molly Farison giúp việc gỡ lỗi cho một số lời giải, và Molly phát hiện ra một số lỗi đánh máy.
  • Andrew Heine phát hiện một lỗi trong hàm sai số của tôi.
  • Dr. Nikolas Akerblom biết rằng loài Hyracotherium to cỡ nào.
  • Alex Morrow làm rõ một đoạn ví dụ mã lệnh.
  • Jonathan Street tìm thấy một lỗi vào ngay phút cuối cùng.
  • Gábor Lipták tìm thấy một lỗi đánh máy trong cuốn sách và lời giải cho bài toán chạy tiếp sức.
  • Cám ơn Kevin Smith và Tim Arnold rất nhiều vì đã phát triển plasTeX; tôi dùng công cụ này để chuyển cuốn sách sang dạng DocBook.
  • George Caplan gửi một số gợi ý về cách viết để rõ ý hơn.
  • Julian Ceipek đã phát hiện được một lỗi.
  • Stijn Debrouwere, Leo Marihart III, Jonathan Hammler, và Kent Johnson phát hiện ra các lỗi trong bản in đầu tiên.
  • Dan Kearney tìm thấy một lỗi nhỏ.
  • Jeff Pickhardt tìm thấy một link chết và một lỗi nhỏ.
  • Jörg Beyer tìm thấy các lỗi nhỏ trong sách và chữa nhiều các chuỗi giải thích cho đoạn lệnh kèm theo.
  • Tommie Gannert gửi một file vá lỗi cùng một số sửa chữa.
  • Alexander Gryzlov gợi ý một chỗ cần làm rõ trong bài tập.
  • Martin Veillette thông báo một lỗi ở một trong các công thức tương quan Pearson.
  • Christoph Lendenmann nộp một vài đính chính.
  • Haitao Ma phát hiện một lỗi nhỏ và gửi cho tôi điểm lưu ý.
  • Michael Kearney gửi tôi nhiều điểm gợi ý hay.
  • Alex Birch ghi ra một số gợi ý hữu ích.
  • Lindsey Vanderlyn, Griffin Tschurwald, và Ben Small đọc phiên bản nháp cuốn sách  này và tìm thấy nhiều lỗi.
  • John Roth, Carol Willing, và Carol Novitsky đã phản biện về mặt chuyên môn. Họ phát hiện ra nhiều lỗi và gợi ý hữu ích.
  • Rohit Deshpande phát hiện một lỗi sắp chữ.
  • David Palmer đã gửi nhiều gợi ý hữu ích cùng với sửa chữa.

19 bình luận

Filed under Think Stats, Tin học

19 responses to “Think Stats II: Phân tích dữ liệu theo hình thức khám phá bằng Python

  1. Quyển sách này hay quá.Tác giả mới dich tới đây thôi ak?

  2. Pingback: Chương 1. Phân tích dữ liệu theo cách khám phá | Blog của Chiến

  3. lâu lắm rồi tác giả không xuất hiện nữa nhỉ :(, đây là một quyển sách hay cho những người mới bắt đầu data như mình 😦

    • Một blog tuyệt vời, cảm ơn anh Chiến.
      Đã lâu rồi không thấy anh ra bài mới, xin phép được hỏi anh: nếu bạn đọc (kể cả em) muốn giúp đỡ anh viết/dịch tiếp (anh sẽ hiệu chỉnh cho phù hợp) các chương mà anh bận chưa thể tiếp tục được, thì có ok không?
      Thân.

  4. Pingback: Học lập trình Java qua 9 tài liệu Java chọn lọc này - ITviec blog

  5. Pingback: Chương 2: Các phân bố | Blog của Chiến

  6. Vũ Anh Tuấn

    Chân thành cám ơn tác giả

  7. Pingback: Think Stats II – chương 4 | Blog của Chiến

  8. Pingback: Think Stats II – Chương 5 | Blog của Chiến

  9. Pingback: Think Stats II – chương 7 | Blog của Chiến

  10. Pingback: Think Stats II – chương 8 | Blog của Chiến

  11. Pingback: Think Stats II – chương 9 | Blog của Chiến

  12. Pingback: Think Stats II – chương 10 | Blog của Chiến

Bình luận về bài viết này