Tải bản đầy đủ (.pdf) (101 trang)

DỰ ÁN KẾT THÚC HỌC PHẦN MÔN TRỰC QUAN HOÁ VÀ HỆ THỐNG THÔNG TIN ĐỊA LÝ Đề tài Biên dịch sách tài liệu Python for Data Analysis

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.15 MB, 101 trang )

BỘ GIÁO DỤC & ĐÀO TẠO
TRƯỜNG ĐẠI HỌC KINH TẾ TP.HCM

----

DỰ ÁN KẾT THÚC HỌC PHẦN
MƠN: TRỰC QUAN HỐ VÀ HỆ THỐNG THƠNG TIN ĐỊA LÝ

Đề tài: Biên dịch sách tài liệu “Python for Data Analysis”
Tên thành viên:
Trần Ngọc Tuyền – 31221023605
Huỳnh Bảo Ngọc Vy – 31221021378
Lớp: IV001
Giảng viên hướng dẫn: Nguyễn Khánh Duy

Thành phố Hồ Chí Minh, ngày 28, tháng 12 năm 2023

PHÂN CHIA CÔNG VIỆC

HỌ VÀ TÊN MSSV CÔNG VIỆC MỨC ĐỘ HOÀN THÀNH
Trần Ngọc Tuyền 31221023605 Trang bìa 100%
Lời mở đầu
Huỳnh Bảo Ngọc Vy 31221021378 Chương 1 & 11 100%
Mục lục
Chương 6 & 7
Kết luận
Tài liệu tham
khảo

MỤC LỤC
LỜI MỞ ĐẦU .........................................................................................................................1


CHƯƠNG 1: MỞ ĐẦU SƠ BỘ.............................................................................................2

CUỐN SÁCH NÀY NĨI VỀ ĐIỀU GÌ? ...................................................................................... 2
TẠI SAO PYTHON CHO PHÂN TÍCH DỮ LIỆU?..................................................................2

Python như chất kết dính .......................................................................................................... 3
Giải quyết vấn đề "Hai ngôn ngữ" ........................................................................................... 3
Tại sao không phải là Python?..................................................................................................3
NHỮNG THƯ VIỆN PYTHON THIẾT YẾU ............................................................................ 4
NumPy ......................................................................................................................................... 4
pandas ......................................................................................................................................... 4
matplotlib .................................................................................................................................... 5
IPython ........................................................................................................................................ 5
SciPy ............................................................................................................................................ 6
CÀI ĐẶT VÀ THIẾT LẬP ........................................................................................................... 6
Windows...................................................................................................................................... 7
Apple OS X ................................................................................................................................. 8
GNU/Linux ............................................................................................................................... 10
Python 2 and Python 3.............................................................................................................11
Integrated Development Environments (IDEs).....................................................................11
CỘNG ĐỒNG VÀ HỘI NGHỊ ................................................................................................... 11
ĐIỀU HƯỚNG CỦA CUỐN SÁCH...........................................................................................12
Ví dụ về mã ............................................................................................................................... 12
Dữ liệu dùng cho các ví dụ ...................................................................................................... 12
Bộ quy ước chung.....................................................................................................................13
Thuật ngữ..................................................................................................................................13
SỰ CÔNG NHẬN ........................................................................................................................ 13
CHƯƠNG 6: TẢI DỮ LIỆU, LƯU TRỮ VÀ ĐỊNH DẠNG TẬP TIN ..........................15
ĐỌC VÀ GHI DỮ LIỆU Ở ĐỊNH DẠNG VĂN BẢN .............................................................. 15
Đọc tập tin văn bản theo từng phần ....................................................................................... 19

Ghi dữ liệu ra định dạng văn bảng.........................................................................................20
Làm việc thủ công với định dạng được phân tách ................................................................ 22
Dữ liệu JSON ............................................................................................................................ 23
XML và HTML: Quét web ..................................................................................................... 24
Phân tích cú pháp XML bằng lxml.objectify ........................................................................ 27
ĐỊNH DẠNG DỮ LIỆU NHỊ PHÂN..........................................................................................29
Sử dụng định dạng HDF5........................................................................................................29
Đọc tệp Microsoft Excel...........................................................................................................30

TƯƠNG TÁC VỚI HTLM VÀ API WEB ................................................................................ 30
TƯƠNG TÁC VỚI CƠ SỞ DỮ LIỆU ....................................................................................... 32

Lưu trữ và tải dữ liệu trong cơ sở dữ liệu MongoDB ........................................................... 33
CHƯƠNG 7: SẮP XẾP DỮ LIỆU: LÀM SẠCH, CHUYỂN ĐỔI, HỢP NHẤT, ĐỊNH
HÌNH LẠI .............................................................................................................................34

KẾT HỢP VÀ HỢP NHẤT CÁC TẬP DỮ LIỆU .................................................................... 34
Hợp nhất DataFrame kiểu cơ sở dữ liệu ................................................................................ 34
Hợp nhất chỉ mục ..................................................................................................................... 38
Ghép nối dọc theo một trục ..................................................................................................... 40
Kết hợp dữ liệu với sự chồng chéo..........................................................................................44

ĐỊNH DẠNG LẠI VÀ XOAY VÒNG........................................................................................45
Định hình lại bằng lập chỉ mục phân cấp .............................................................................. 45
Xoay định dạng “dài” sang “rộng” ........................................................................................ 47

CHUYỂN ĐỔI DỮ LIỆU ............................................................................................................ 49
Loại bỏ trùng lặp......................................................................................................................49
Chuyển đổi dữ liệu bằng hàm hoặc ánh xạ............................................................................50
Thay thế giá trị ......................................................................................................................... 51

Đổi tên chỉ mục trục.................................................................................................................52
Sự rời rạc hóa và Binning........................................................................................................53
Phát hiện và lọc các ngoại lệ....................................................................................................55
Hoán vị và lấy mẫu ngẫu nhiên .............................................................................................. 56
Chỉ báo tính tốn/Biến giả.......................................................................................................57

THAO TÁC CHUỖI .................................................................................................................... 59
Phương thức đối tượng chuỗi..................................................................................................59
Biểu thức chính quy ................................................................................................................. 60
Các hàm chuỗi được vector hóa trong pandas ...................................................................... 63

VÍ DỤ: CƠ SỞ DỮ LIỆU THỰC PHẨM CỦA USDA ............................................................ 65
CHƯƠNG 11: CÁC ỨNG DỤNG DỮ LIỆU TÀI CHÍNH VÀ KINH TẾ ............................. 70
CHỦ ĐỀ TRỘN DỮ LIỆU..........................................................................................................70

Sắp xếp chuỗi thời gian và mặt cắt ngang ............................................................................. 70
Hoạt động với chuỗi thời gian có tần số khác nhau .............................................................. 72
Sử dụng chu kỳ thay vì dấu thời gian.....................................................................................74
Thời gian trong ngày và lựa chọn dữ liệu “as of” ................................................................. 76
Ghép nối các nguồn dữ liệu với nhau ..................................................................................... 78
Chỉ số trả về và lợi nhuận tích lũy .......................................................................................... 80
BIẾN ĐỔI NHĨM VÀ PHÂN TÍCH ......................................................................................... 82
Nhóm yếu tố rủi ro ................................................................................................................... 84
Phân tích thập phân và tứ phân vị ......................................................................................... 85
CÁC ỨNG DỤNG VÍ DỤ KHÁC...............................................................................................87

Phân tích biên giới tín hiệu...................................................................................................... 88
Hợp đồng tương lai luân chuyển ............................................................................................ 90
Tương quan luân chuyển và hồi quy tuyến tính ................................................................... 93
KẾT LUẬN ...........................................................................................................................95


LỜI MỞ ĐẦU
Dịch thuật đóng vai trị quan trọng trong đời sống xã hội và giao lưu văn hoá của con
người, là chiếc cầu nối giúp con người vượt qua những khác biệt về ngơn ngữ, văn hố và các
kiến thức chuyên sâu từ nhiều nguồn tài liệu khác nhau. Và hơm nay, nhóm chúng em xin
phép được biên dịch quyển sách “Python for Data Analysis: Data Wrangling with Pandas,
Numpy, and IPython” được viết bởi tác giả Wes McKinney. Cuốn sách này cung cấp đầy đủ
kiến thức cũng như rất nhiều ví dụ dễ hiểu để đọc và thực hành phân tích dữ liệu với các thư
viện pandas và numpy. Đặc biệt, tác giả Wes McKinney chính là người tạo ra thư viện pandas,
nên cuốn sách được trình bày rất dễ hiểu ngay cả với những người chỉ mới bắt đầu làm quen
với Python. Bởi vì cuốn sách có phần giới thiệu về các công cụ khoa học dữ liệu sử dụng
Python. Hơn nữa trong quyển sách Python này, bạn cũng sẽ khám phá được phiên bản mới
nhất của NumPy, IPython, Pandas và Jupyter.
Ở đây nhóm chúng em xin được phép biên dịch bốn chương. Chương 1 về các lý thuyết
cơ bản mở đầu sơ bộ giới thiệu về sách và các hàm cơ bản sẽ được hướng dẫn trong sách.
Chương 6 về các cách tải dữ liệu, lưu trữ và cách định dạng tập tin. Ở chương 7 về cách sắp
xếp dữ liệu làm sạch, chuyển đổi, hợp nhất và định hình lại dữ liệu. Và trong chương cuối là
chương 11 là các ứng dụng dữ liệu tài chính và kinh tế sẽ được mơ tả chính trong chương này.
Bài dự án này chúng em đã cố gắng biên dịch sát nhất có thể, tuy nhiên trong q trình làm
dự án, vì biên dịch sách là một bài khá mới với chúng em nên có thể sẽ cịn nhiều sai sót khi
chúng em phiên dịch các từ chuyên ngành của môn học, mong thầy sẽ thông cảm cho chúng
em. Chúng em xin cảm ơn q trình dạy về mơn học Trực quan và cụ thể là python của thầy
rất nhiều, đó cũng chính là nguồn cảm hứng cho chúng em lựa chọn quyển sách này.

1

CHƯƠNG 1: MỞ ĐẦU SƠ BỘ
CUỐN SÁCH NÀY NĨI VỀ ĐIỀU GÌ?
Cuốn sách này đề cập đến những chi tiết cơ bản về thao tác, xử lý, làm sạch và xử lý dữ liệu
trong Python. Đây cũng là phần giới thiệu thực tế, hiện đại về tính tốn khoa học bằng Python,

được thiết kế riêng cho các ứng dụng sử dụng nhiều dữ liệu chuyên sâu. Đây là một cuốn sách
về các phần của ngôn ngữ và thư viện Python mà bạn sẽ cần để giải quyết một cách hiệu quả
nhiều vấn đề phân tích dữ liệu. Cuốn sách này khơng phải là một trình bày về các phương
pháp phân tích sử dụng Python làm ngơn ngữ lập trình.

Khi tơi nói "dữ liệu", chính xác thì tơi đang ám chỉ đến điều gì? Trọng tâm chính là dữ liệu
có cấu trúc, một thuật ngữ cố ý mơ hồ bao gồm nhiều loại dữ liệu phổ biến khác nhau, chẳng
hạn như

• Mảng đa chiều (ma trận)
• Dữ liệu dạng bảng hoặc bảng tính trong đó mỗi cột có thể là một loại khác nhau

(chuỗi, số, ngày tháng hoặc loại khác). Điều này bao gồm hầu hết các loại dữ liệu
thường được lưu trữ trong cơ sở dữ liệu quan hệ hoặc các tệp văn bản được phân
cách bằng tab hoặc dấu phẩy
• Nhiều bảng dữ liệu có liên quan với nhau bằng các cột chính (cái gì là chính hoặc
chính các khố nước ngồi cho người dùng SQL)
• Chuỗi thời gian cách đều hoặc không đều

Đây không phải là một bản danh sách hồn thiện. Mặc dù nó có thể không phải lúc nào cũng
rõ ràng, nhưng một tỷ lệ lớn các tập dữ liệu có thể được chuyển đổi thành dạng có cấu trúc
phù hợp hơn cho việc phân tích và lập mơ hình. Nếu khơng, có thể tách các đặc điểm từ một
tập dữ liệu thành một dạng có cấu trúc. Ví dụ, một tập hợp các bài báo có thể được xử lý thành
bảng tần số từ sau đó có thể được sử dụng để thực hiện phân tích cảm tính.

Hầu hết người dùng các chương trình bảng tính như Microsoft Excel, có lẽ là cơng cụ phân
tích dữ liệu được sử dụng rộng rãi nhất trên thế giới, sẽ khơng cịn xa lạ với những loại dữ
liệu này.

TẠI SAO PYTHON CHO PHÂN TÍCH DỮ LIỆU?

Đối với nhiều người (bao gồm cả tôi), ngôn ngữ Python rất dễ yêu thích. Kể từ lần xuất hiện
đầu tiên vào năm 1991, Python trở thành một trong những ngôn ngữ lập trình, năng động nhất,
cùng với Perl, Ruby, và nhiều ngôn ngữ khác. Python và Ruby trở nên đặc biệt phổ biến trong
những năm gần đây để xây dựng các trang web sử dụng nhiều khung web của họ, như Rails
(Ruby) và Django (Python). Những ngôn ngữ như thế thường gọi là ngơn ngữ kịch bản như
chúng có thể được sử dụng để viết các chương trình nhỏ nhanh và đơn giản, hoặc kịch bản.
Tơi khơng thích thuật ngữ "ngơn ngữ kịch bản" vì nó mang ý nghĩa rằng chúng không thể
được sử dụng để xây dựng phần mềm mang nhiệm vụ quan trọng. Trong số các ngôn ngữ
được giải thích Python nổi bật bởi cộng đồng máy tính khoa học rộng lớn và năng động của
nó. Việc áp dụng Python cho tính tốn khoa học trong cả các ứng dụng công nghiệp và nghiên
cứu học thuật đã tăng lên đáng kể từ đầu những năm 2000.

Để phân tích dữ liệu và tương tác, khám phá và trực quan hoá dữ liệu, Python chắc chắn sẽ
đưa ra so sánh với nhiều ngơn ngữ và cơng cụ lập trình thương mại chuyên biệt miền khác

2

được sử dụng rộng rãi, chẳng hạn như R, MATLAB, SAS, Stata, và những thứ khác. Trong
những năm gần đây, Python đã cải thiện việc hỗ trợ thư viện (chủ yếu là Pandas) để thực hiện
các tác vụ xử lý dữ liệu. Kết hợp với điểm mạnh của Python trong lập trình đa mục đích, đây
là một lựa chọn tuyệt vời như một ngôn ngữ duy nhất để xây dựng các ứng dụng lấy dữ liệu
làm trung tâm.

Python như chất kết dính
Một phần thành cơng của Python trong nền tảng điện tốn khoa học là việc dễ dàng tích hợp
mã C, C++, và FORTRAN. Hầu hết các mơi trường điện tốn hiện đại đều có chung một bộ
thư viện FORTRAN và C để thực hiện đại số tuyến tính, tối ưu hóa, tích hợp, biến đổi phạm
vi nhanh và các thuật tốn khác. Câu chuyện này cũng đúng đối với nhiều công ty và các
phịng thí nghiệm quốc gia đã sử dụng Python để gắn kết phần mềm kế thừa có giá trị 30 năm
lại với nhau.


Hầu hết các chương trình bao gồm các phần nhỏ mã chiếm phần lớn thời gian, với một lượng
lớn "mã keo" không chạy thường xuyên. Trong nhiều trường hợp, thời gian thực thi mã keo
không đáng kể; nỗ lực được đầu tư hiệu quả nhất trong việc tối ưu hóa các tắc nghẽn tính
tốn, đơi khi bằng cách chuyển mã sang một ngôn ngữ cấp thấp hơn như C.

Trong vài năm gần đây, dự án Cython () đã trở thành một trong những cách
được ưa thích để vừa tạo ra phần mở rộng được biên dịch nhanh cho Python và vừa tương tác
với mã C và C++.

Giải quyết vấn đề "Hai ngơn ngữ"
Trong nhiều tổ chức, nó phổ biến để nghiên cứu, tạo nguyên mẫu, và thử nghiệm các ý tưởng
mới bằng cách sử dụng một ngôn ngữ máy tính dành riêng cho miền chuyên biệt hơn như
MATLAB hoặc R sau đó chuyển những ý tưởng đó để trở thành một phần của một hệ thống
sản xuất lớn hơn được viết bằng Java, C#, hoặc C++. Mọi người đang ngày càng thấy rằng
Python là một ngơn ngữ thích hợp không chỉ để nghiên cứu và tạo mẫu mà cịn xây dựng các
hệ thống sản xuất nữa. Tơi tin rằng ngày càng nhiều công ty sẽ đi theo con đường này vì
thường có lợi ích về mặt tổ chức quan trọng cho việc có cả nhà khoa học và kỹ thuật viên sử
dụng cùng một bộ công cụ lập trình.

Tại sao không phải là Python?
Mặc dù Python là một môi trường tuyệt vời để xây dựng các ứng dụng khoa học chun sâu
vào tính tốn và xây dựng hầu hết các loại hệ thống chung, nhưng có một số ứng dụng mà
Python có thể ít phù hợp hơn.

Python là một ngơn ngữ lập trình được giải thích, nói chung hầu hết mã Python chạy chậm
hơn so với mã viết bằng ngôn ngữ biên dịch như Java hoặc C++. Giống như thời gian lập
trình viên thường có giá trị hơn thời gian CPU, nhiều người vui mừng khi thực hiện sự đánh
đổi này. Tuy nhiên, trong một ứng dụng với các yêu cầu về độ trễ rất thấp (ví dụ, một hệ thống
giao dịch tần số cao), thời gian dành cho việc lập trình bằng ngơn ngữ cấp thấp hơn, năng suất

thấp hơn như C++ để đạt được hiệu suất tối đa có thể là thời gian xứng đáng.

Python khơng phải là một ngôn ngữ lý tưởng cho các ứng dụng đa luồng, tính đồng bộ cao,
đặc biệt là các ứng dụng có nhiều luồng liên kết với CPU. Lý do cho điều này là nó có cái

3

được gọi là khố phiên dịch tồn cầu (GIL), một cơ chế ngăn chặn trình thơng dịch thực hiện
nhiều hơn một lệnh mã byte Python cùng một lúc. Các lý do kỹ thuật giải thích tại sao GIL
tồn tại là vượt quá phạm vi của cuốn sách này, nhưng nhưng tính đến thời điểm viết bài này
dường như khơng có khả năng GIL sẽ biến mất sớm. Mặc dù đúng là trong nhiều ứng dụng
xử lý dữ liệu lớn, một cụm máy tính có thể được u cầu để xử lý một tập dữ liệu trong khoảng
thời gian hợp lý, nhưng vẫn có những tình huống cần một hệ thống đơn, xử lý đa luồng.

Điều này khơng có nghĩa là Python không thể thực thi mã song song, đa luồng thực sự; mã
đó khơng thể được thực thi chỉ trong một tiến trình Python. Ví dụ, dự án Cython có tính năng
tích hợp dễ dàng với OpenMP, khung C cho tính tốn song song, nhằm song song hóa các
vịng lặp và do đó tăng tốc đáng kể các thuật tốn số.

NHỮNG THƯ VIỆN PYTHON THIẾT YẾU
Đối với những người không quen thuộc với hệ sinh thái khoa học Python và các thư viện được
dùng xun suốt cuốn sách, tơi trình bày sơ lược sau đây về từng thư viện.

NumPy
NumPy, viết tắt của Numerical Python, là gói nền tảng cho tính tốn khoa học bằng Python.
Phần lớn cuốn sách này sẽ dựa trên NumPy và các thư viện được xây dựng dựa trên NumPy.
Ngồi những điều khác, nó cịn cho thấy:

• Một đối tượng mảng đa chiều nhanh chóng và hiệu quả ndarray
• Các hàm để thực hiện các tính tốn theo từng phần tử với mảng hoặc các phép toán


giữa các mảng
• Các cơng cụ để đọc và ghi bộ dữ liệu theo mảng vào đĩa
• Phép tốn đại số tuyến tính, biến đổi Fourier và tạo số ngẫu nhiên
• Cơng cụ để tích hợp kết nối mã C, C++, và Fortran với Python

Ngoài khả năng xử lý mảng nhanh mà NumPy bổ sung vào Python, một trong những mục
đích chính của nó liên quan đến phân tích dữ liệu là làm nơi chứa chính cho dữ liệu được
truyền giữa các thuật toán. Đối với dữ liệu số, mảng NumPy là một cách lưu trữ và thao tác
dữ liệu hiệu quả hơn nhiều so với các cấu trúc dữ liệu Python tích hợp khác. Ngồi ra, các thư
viện được viết bằng ngôn ngữ cấp thấp hơn, như C hoặc Fortran, có thể hoạt động trên dữ liệu
được lưu trong mảng NumPy mà không cần sao chép bất kỳ dữ liệu nào.

pandas
Pandas cung cấp các cấu trúc dữ liệu phong phú và các chức năng được thiết kế để làm việc
với dữ liệu cấu trúc nhanh, dễ dàng và mang tính biểu cảm. Như các bạn sẽ thấy, nó là một
trong những yếu tố quan trọng giúp Python trở thành một mơi trường phân tích dữ liệu mạnh
và hiệu quả. Đối tượng chính trong Pandas sẽ được sử dụng trong cuốn sách này là DataFrame,
một cấu trúc dữ liệu hướng hai chiều với nhãn hàng và cột:

>>> frame sex smoker day time size
total_bill tip Female No Sun Dinner 2
Male No Sun Dinner 3
1 16.99 1.01 Male No Sun Dinner 3
2 10.34 1.66
3 21.01 3.5

4

4 23.68 3.31 Male No Sun Dinner 2

5 24.59 3.61 Female No Sun Dinner 4
6 25.29 4.71 Male No Sun Dinner 4
7 8.77 2 Male No Sun Dinner 2
8 26.88 3.12 Male No Sun Dinner 4
9 15.04 1.96 Male No Sun Dinner 2
10 14.78 3.23 Male No Sun Dinner 2

Pandas kết hợp các tính năng tính tốn mảng hiệu suất cao của NumPy với khả năng thao tác
dữ liệu linh hoạt của bảng tính và cơ sở dữ liệu quan hệ (chẳng hạn như SQL). Nó cung cấp
chức năng lập chỉ mục tinh vi để làm cho nó dễ dàng định hình lại, cắt lát, thực hiện tổng hợp,
và chọn các tập hợp con của dữ liệu. Pandas là cơng cụ chính mà chúng ta sẽ dùng trong cuốn
sách này.

Đối với người dùng tài chính, pandas có tính năng phong phú, tính năng chuỗi thời gian hiệu
suất cao và các công cụ rất phù hợp để làm việc với dữ liệu tài chính. Thực ra, ban đầu tôi đã
thiết kế pandas như một công cụ lý tưởng cho các ứng dụng phân tích dữ liệu tài chính.

Đối với người dùng ngơn ngữ R để tính tốn thống kê, tên DataFrame sẽ rất quen thuộc, vì
đối tượng được đặt tên theo đối tượng R data.frame tương tự. Tuy nhiên, chúng không giống
nhau; Các chức năng được cung cấp bởi data.frame trong R về cơ bản là một tập hợp con
nghiêm ngặt trong đó được cung cấp bởi DataFrame pandas. Mặc dù đây là một cuốn sách về
Python, nhưng thỉnh thoảng tôi sẽ đưa ra so sánh với R vì nó là một trong những mơi trường
phân tích dữ liệu nguồn mở được sử dụng rộng rãi nhất và sẽ quen thuộc với nhiều độc giả.

Tên Pandas chính nó có nguồn gốc từ panel data, một thuật ngữ kinh tế lượng cho các bộ dữ
liệu cấu trúc đa chiều và phân tích dữ liệu python chính nó

matplotlib
matplotlib là thư viện Python phổ biến nhất để tạo biểu đồ và trực quan hóa dữ liệu. Nó được
tạo ra bởi John D. Hunter (JDH) và hiện được duy trì bởi một nhóm lớn các nhà phát triển.

Nó rất phù hợp để tạo ra biểu đồ phù hợp để công bố. Nó tích hợp tốt với IPython (xem bên
dưới), do đó cung cấp một môi trường tương tác thoải mái để vẽ đồ thị và khám phá dữ liệu.
Biểu đồ cũng có tính tương tác Bạn có thể phóng to một phần của biểu đồ và xoay xung quanh
biểu đồ bằng cách sử dụng thanh công cụ trong cửa sổ biểu đồ.

IPython
IPython là thành phần trong bộ công cụ Python chuẩn gắn kết mọi thứ lại với nhau. Nó cung
cấp một mơi trường mạnh mẽ và hiệu quả cho tính tốn tương tác và khám phá. Nó là Python
shell nâng cao được thiết kế để tăng tốc việc viết, kiểm tra và gỡ lỗi mã Python. Nó đặc biệt
hữu ích cho việc tương tác làm việc với dữ liệu và trực quan hóa dữ liệu với Matplotlib.
IPython thường tham gia vào phần lớn các công việc Python của tôi, bao gồm chạy, gỡ lỗi và
kiểm tra mã.
Bên cạnh tiêu chuẩn IPython Shell dựa trên thiết bị đầu cuối tiêu chuẩn, dự án cũng cung cấp

• Một sổ ghi chép HTML giống Mathematica để kết nối IPython thơng qua trình
duyệt web (sẽ nói thêm về điều này sau).

5

• Bảng điều khiển GUI dựa trên khung công tác Qt với tính năng vẽ biểu đồ nội
tuyến, chỉnh sửa đa tuyến, và nhấn mạnh cú pháp

• Cơ sở hạ tầng cho tính tốn tương tác song song và phân tán

Tơi sẽ dành một chương cho IPython và cách tận dụng tối đa các tính năng của nó. Tơi thật
sự khun bạn nên sử dụng nó khi đọc cuốn sách này.

SciPy
SciPy là một tập hợp các gói giải quyết một số miền vấn đề tiêu chuẩn khác nhau trong tính
tốn khoa học. Dưới đây là mẫu của các gói bao gồm:


• scipy.integrate: Các phương pháp tích phân số và các bộ giải phương trình vi phân
• scipy.linalg: các thủ tục đại số tuyến tính và phân rã ma trận mở rộng hơn những

gì được cung cấp trong numpy.linalg.
• scipy.optimize: bộ tối ưu hóa chức năng (bộ giảm thiểu) và thuật tốn tìm gốc
• scipy.signal Cơng cụ xử lý tín hiệu
• scipy.sparse: ma trận thưa thớt và bộ giải hệ thống tuyến tính thưa thớt

scipy.special: trình bao bọc xung quanh SPECFUN, thư viện Fortran triển khai
nhiều hàm toán học phổ biến, chẳng hạn như hàm gamma
• scipy.stats: Phân phối xác suất liên tục và rời rạc tiêu chuẩn (hàm mật độ, bộ lấy
mẫu, hàm phân phối liên tục), các kiểm tra thống kê khác nhau và thống kê mô tả
khác
• scipy.weave: Công cụ dùng mã nội tuyến C++ để tăng tốc độ tính tốn mảng

NumPy và SciPy cùng nhau tạo thành một sự thay thế tính tốn hồn chỉnh hợp lý cho nhiều
MATLAB cùng với một số hộp công cụ bổ sung của nó.

CÀI ĐẶT VÀ THIẾT LẬP
Vì mọi người đều sử dụng Python cho các ứng dụng khác nhau, khơng có giải pháp duy nhất
để thiết lập Python và các gói tiện ích bổ sung cần thiết. Nhiều độc giả sẽ khơng có mơi trường
Python khoa học hồn chỉnh phù hợp để theo dõi cuốn sách này, vì vậy ở đây tôi sẽ đưa ra
các hướng dẫn chi tiết để thiết lập trên mỗi hệ điều hành. Tôi khuyên bạn nên sử dụng một
trong những bản phân phối Python cơ bản:

• Enthought Python Distribution: một bản phân phối Python theo định hướng khoa
học từ Enthought (). Điều này bao gồm EPDFree, một
phân phối khoa học cơ sở miễn phí (với NumPy, SciPy, matplotlib, Chaco, và
IPython) và EPD Full, một bộ toàn diện gồm hơn 100 gói khoa học trên nhiều lĩnh

vực. EPD Full miễn phí cho mục đích học tập nhưng có đăng ký hàng năm cho
người dùng phi học thuật.

• Python (x, y) () : Bản phân phối Python theo định
hướng khoa học miễn phí dành cho Windows.

Tôi sẽ sử dụng EPDFree cho hướng dẫn cài đặt, tuy nhiên bạn có thể sử dụng cách tiếp
cận khác phụ thuộc vào nhu cầu của bạn. Tại thời điểm viết này, EPD bao gồm Python
2.7, mặc dù điều này có thể thay đổi tại một thời điểm nào đó trong tương lai. Sau khi cài
đặt, bạn sẽ có các gói sau và nhập mật khẩu:

6

• Cơ sở Python khoa học: NumPy, SciPy, matplotlib, và IPython. Tất cả đều nằm
trong EPDFree.

• IPython Notebook Dependencies: Tornado và Pyzmq. Chúng được bao gồm trong
EPDFree.

• Pandas (phiên bản 0.8.2 hoặc cao hơn).

Tại một thời điểm nào đó trong khi đọc bạn có thể muốn cài đặt một hoặc nhiều gói sau:
statsmodels, PyTables, PyQt (hoặc tương đương, PySide), xlrd, lxml, basemap, pymongo, và
các yêu cầu. Chúng được sử dụng trong nhiều ví dụ khác nhau. Việc cài đặt các thư viện tùy
chọn này là không cần thiết, và tôi sẽ đề nghị là chờ cho đến khi bạn cần chúng. Ví dụ, việc
cài đặt PyQt hoặc PyTables từ nguồn trên OS X hoặc Linux có thể khá khó khăn. Hiện tại,
điều quan trọng nhất là bắt đầu và chạy với một mức tối thiểu: EPDFree và Pandas.

Để biết thông tin trên mỗi gói Python và các liên kết đến trình cài đặt nhị phân hoặc trợ giúp
khác, xem Python Package Index (PyPI, ). Đây cũng là một nguồn tài

nguyên tuyệt vời để tìm các gói Python mới.

Để tránh nhầm lẫn và giữ cho mọi việc đơn giản, tôi tránh thảo luận các công cụ
quản lý môi trường phức tạp hơn như pip và virtualenv. Có rất nhiều hướng dẫn
tuyệt vời cho các công cụ này trên Internet.

Một số người dùng có thể quan tâm đến việc triển khai Python thay thế, chẳng
hạn như IronPython, Jython, hoặc PyPy. để tận dụng những cơng cụ được trình
bày Cuốn sách này (hiện tại) cần phải sử dụng Python dựa trên C tiêu chuẩn
thông dịch viên, được gọi là CPython.

Windows
Để bắt đầu trên Windows, tải xuống trình cài đặt EPDFree từ , đây
phải là trình cài đặt MSI có tên epd_free-7.3-1-winx86.msi. Chạy trình cài đặt và chấp nhận
vị trí cài đặt mặc định C:\Python27. Nếu trước đó bạn đã cài đặt Python ở vị trí này, bạn có
thể muốn xố nó theo cách thủ cơng (hoặc dùng các chương trình Add/Remove).

Tiếp theo, bạn cần kiểm chứng Python đã được thêm vào đường dẫn của hệ thống một cách
thành công và khơng có xung đột với bất kì phiên bản Python nào được cài đặt trước đó.
Trước tiên, mở một dấu nhắc lệnh bằng cáchvào Menu Start và khởi động ứng dụng the
Command Prompt application, còn được gọi là cmd.exe. Thử bắt đầu trình thơng dịch Python
bằng gõ python. Bạn sẽ thấy thông báo khớp với phiên bản EPDFree mà bạn đã cài đặt:

C:\Users\Wes>python
Python 2.7.3 |EPD_free 7.3-1 (32-bit)| (default, Apr 12 2012, 14:30:37) on win32
Type "credits", "demo" or "enthought" for more information.
>>>
Nếu bạn thấy một thông điệp cho một phiên bản khác của EPD hoặc nó khơng hoạt động gì
cả, bạn sẽ cần phải làm sạch các biến môi trường Windows của bạn. Trên Windows 7 bạn có
thể bắt đầu gõ " environment variables " trong trường tìm kiếm chương trình và chọn Edit

environment variables for your account. Trên Windows XP, bạn sẽ phải lên Control Panel >
System > Advanced > Environment Variables. Trên cửa sổ hiện ra, bạn đang tìm kiếm biến
đường đi. Cần chứa hai đường dẫn thư mục sau, tách ra bằng các dấu chấm phẩy:

7

C:\Python27;C:\Python27\Scripts

Nếu bạn cài đặt các phiên bản khác của Python, hãy nhớ xóa mọi thư mục liên quan đến
Python khác khỏi cả biến đường dẫn hệ thống và người dùng Path. Sau khi thực hiện thay đổi
đường dẫn, bạn phải khởi động lại lệnh nhắc nhở cho các thay đổi có hiệu lực.

Một khi bạn có thể khởi chạy Python thành cơng từ dấu nhắc lệnh, bạn cần phải cài pandas.
Cách dễ nhất là tải xuống trình cài đặt nhị phân thích hợp từ
Đối với EPDFree, nó nên là pandas-0.9.0.win32-
py2.7.exe. Sau khi chạy chương trình này, chúng ta hãy khởi động IPython và kiểm tra xem
mọi thứ đã được cài đặt đúng cách bằng cách nhập pandas và tạo ra một biểu đồ matplotlib
đơn giản:

C:\Users\Wes>ipython --pylab
Python 2.7.3 |EPD_free 7.3-1 (32-bit)|
Type "copyright", "credits" or "license" for more information.

IPython 0.12.1 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.

Welcome to pylab, a matplotlib-based Python environment [backend:WXAgg].

For more information, type 'help(pylab)'.
n [1]: import pandas
n [2]: plot(arange(10))

Nếu thành công, sẽ khơng có thơng báo lỗi và cửa sổ vẽ đồ thị sẽ xuất hiện. Bạn cũng có thể
kiểm tra xem sổ ghi chép HTML IPython có thể chạy thành công hay không bằng cách nhập:

$ ipython notebook --pylab=inline

Nếu bạn sử dụng ứng dụng sổ ghi chép IPython trên Windows và thường
sử dụng Internet Explorer, bạn có thể sẽ cần cài đặt và chạy Mozilla
Thay vào đó là Firefox hoặc Google Chrome.

EPDFree trên Windows chỉ chứa các tệp thực thi 32 bit. Nếu bạn muốn hoặc cần thiết lập 64-
bit trên Windows, sử dụng EPD Full là cách dễ dàng nhất để thực hiện điều đó. Nếu bạn muốn
cài đặt từ đầu và không trả tiền đăng ký EPD, Christoph Gohlke tại Đại học California, Irvine,
xuất bản các trình cài đặt nhị phân khơng chính thức cho tất cả các gói cần thiết của cuốn sách
( cho Windows 32 và 64 bit.

Apple OS X
Để bắt đầu sử dụng OS X, trước tiên bạn phải cài đặt Xcode, bao gồm bộ công cụ phát triển
phần mềm của Apple. Thành phần cần thiết cho mục đích của chúng tơi là bộ biên dịch gcc

8

C và C++. Bạn có thể tìm thấy trình cài đặt Xcode trên DVD cài đặt OS X đi kèm với máy
tính của bạn hoặc được tải xuống trực tiếp từ Apple.

Sau khi bạn đã cài đặt Xcode, hãy khởi chạy thiết bị đầu cuối (Terminal.app) bằng cách điều
hướng đến Applications > Utilities Kiểu gcc và nhấn enter. Bạn có thể sẽ thấy một số điều

như:

$ gcc
i686-apple-darwin10-gcc-4.2.1: no input files

Bây giờ bạn cần cài đặt EPDFree. Tải xuống trình cài đặt phải là hình ảnh đĩa có tên như
epd_free-7.3-1-macosx-i386.dmg. Bấm đúp vào tập tin .dmg để gắn nó, sau đó bấm đúp vào
tập tin .mpkg bên trong để chạy trình cài đặt.

Khi trình cài đặt chạy, nó sẽ tự động thêm đường dẫn thực thi EPDFree vào tài liệu
.bash_profile. Cái này nằm ở /Users/your_uname/.bash_profile:

# Setting PATH for EPD_free-7.3-1
PATH="/Library/Frameworks/Python.framework/Versions/Current/bin:${PATH}"
export PATH

Nếu bạn gặp phải bất kỳ vấn đề nào trong các bước sau, bạn sẽ muốn kiểm tra .bash_profile
và có khả năng thêm thư mục trên vào đường dẫn của bạn.
Bây giờ là lúc cài đặt pandas. Thực hiện lệnh này trong terminal:

$ sudo easy_install pandas
Searching for pandas
Reading /> Reading
Reading
Best match: pandas 0.9.0
Downloading /> Processing pandas-0.9.0.zip
Writing /tmp/easy_install-H5mIX6/pandas-0.9.0/setup.cfg
Running pandas-0.9.0/setup.py -q bdist_egg --dist-dir /tmp/easy_install-H5mIX6/
pandas-0.9.0/egg-dist-tmp-RhLG0z
Adding pandas 0.9.0 to easy-install.pth file

Installed /Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/
site-packages/pandas-0.9.0-py2.7-macosx-10.5-i386.egg
Processing dependencies for pandas
Finished processing dependencies for pandas

Để xác minh mọi thứ đang hoạt động, hãy khởi chạy IPython ở chế độ Pylab và kiểm tra việc
nhập pandas sau đó tạo một biểu đồ tương tác:

$ ipython --pylab
22:29 ~/VirtualBox VMs/WindowsXP $ ipython
Python 2.7.3 |EPD_free 7.3-1 (32-bit)| (default, Apr 12 2012, 11:28:34)

9

Type "copyright", "credits" or "license" for more information.
IPython 0.12.1 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
Welcome to pylab, a matplotlib-based Python environment [backend: WXAgg].
For more information, type 'help(pylab)'.
In [1]: import pandas
In [2]: plot(arange(10))

Nếu thành công, một cửa sổ đồ thị có đường thẳng sẽ bật lên

GNU/Linux

Một số, nhưng không phải tất cả, các bản phân phối Linux bao gồm các bản

cập nhật đầy đủ phiên bản của tất cả các gói Python cần thiết và có thể được
cài đặt bằng cách sử dụng cơng cụ quản lý gói tích hợp như apt. Tơi thiết lập
chi tiết bằng EPDFree vì nó có thể dễ dàng tái tạo trên các bản phân phối.

Thông tin chi tiết về Linux sẽ thay đổi một chút tùy theo phiên bản Linux của bạn, nhưng ở
đây tôi cung cấp thông tin chi tiết về các hệ thống GNU/Linux dựa trên Debian như Ubuntu
và Mint. Thiết lập tương tự như OS X ngoại trừ cách cài đặt EPDFree. Trình cài đặt là tập
lệnh shell phải được thực thi trong thiết bị đầu cuối. Tùy thuộc vào việc bạn có hệ thống 32
bit hay 64 bit, bạn sẽ cần phải cài đặt trình cài đặt x86 (32-bit) hoặc x86-64 (64-bit). Sau đó
bạn sẽ có một tập tin có tên tương tự như epd_free-7.3-1-rh5-x86_64.sh. Để cài đặt nó, hãy
thực thi tập lệnh này bằng bash:

$ bash epd_free-7.3-1-rh5-x86_64.sh

Sau khi chấp nhận giấy phép, bạn sẽ được lựa chọn nơi đặt các tệp EPDFree. Tôi khuyên bạn
nên cài đặt các tập tin trong thư mục chính của bạn, chẳng hạn như /home/wesm/ epd (thay
thế tên người dùng của riêng bạn cho wesm).

Sau khi trình cài đặt hồn tất, bạn cần them thư mục EPDFree's bin của bạn vào giá trị $PATH.
Nếu bạn đang sử dụng bash shell (ví dụ: mặc định trong Ubuntu), điều này có nghĩa là thêm
phần bổ sung đường dẫn sau vào .bashrc:

export PATH=/home/wesm/epd/bin:$PATH

Tất nhiên, hãy thay thế thư mục cài đặt mà bạn đã sử dụng /home/wesm/epd/. Sau khi thực
hiện việc này, bạn có thể bắt đầu một quy trình đầu cuối mới hoặc thực thi .bashrc một lần
nữa với source ~/.bashrc.

Bạn cần một trình biên dịch C như gcc để chuyển tiếp; nhiều bản phân phối Linux bao gồm
gcc, nhưng một số khác thì khơng. Trên hệ thống Debian, bạn có thể cài đặt gcc bằng cách

thực thi:

10

sudo apt-get install gcc
Nếu bạn gõ gcc trên dịng lệnh nó sẽ viết điều gì đó như:

$ gcc
gcc: no input files
Bây giờ là lúc cài đặt pandas:
$ easy_install pandas
Nếu bạn đã cài đặt EPDFree với quyền root, bạn có thể cần thêm sudo vào lệnh và nhập mật
khẩu sudo hoặc root. Để xác minh mọi thứ đang hoạt động, hãy thực hiện các bước kiểm tra
tương tự như trong phần OS X.

Python 2 and Python 3
Cộng đồng Python hiện đang trải qua quá trình chuyển đổi kéo dài từ loạt trình thơng dịch
Python 2 sang loạt Python 3. Cho đến khi Python 3.0 xuất hiện, tất cả mã Python đều tương
thích ngược. Cộng đồng quyết định rằng để đưa ngơn ngữ chuyển tiếp, một số thay đổi khơng
tương thích ngược là cần thiết.

Tôi đang viết cuốn sách này với Python 2.7 làm nền tảng, vì phần lớn cộng đồng Python khoa
học vẫn chưa chuyển sang Python 3. Tin vui là, với một vài ngoại lệ, bạn sẽ khơng gặp khó
khăn gì khi theo dõi cuốn sách nếu bạn tình cờ đang sử dụng Python 3.2.

Integrated Development Environments (IDEs)
Khi được hỏi về môi trường phát triển tiêu chuẩn của tôi, tôi hầu như ln nói “IPython cộng
hưởng việc trình soạn thảo văn bản”. Tơi thường viết một chương trình và lặp đi lặp lại việc
kiểm tra và gỡ lỗi từng phần của chương trình đó trong IPython. Cũng rất hữu ích khi có thể
xử lý dữ liệu một cách tương tác và xác minh trực quan rằng một tập hợp thao tác dữ liệu cụ

thể đang thực hiện đúng. Các thư viện như pandas và NumPy được thiết kế để dễ sử dụng
trong shell.

Tuy nhiên, một số vẫn thích làm việc trong IDE thay vì trình soạn thảo văn bản. Chúng cung
cấp nhiều tính năng “mã thơng minh” tốt như hồn thành hoặc nhanh chóng lấy tài liệu liên
quan đến các chức năng và lớp. Dưới đây là một số thứ mà bạn có thể khám phá:

• Eclipse with PyDev Plugin
• Python Tools for Visual Studio (for Windows users)
• PyCharm
• Spyder
• Komodo IDE

CỘNG ĐỒNG VÀ HỘI NGHỊ
Ngồi việc tìm kiếm trên Internet, danh sách gửi thư khoa học Python nhìn chung rất hữu ích
và đáp ứng các câu hỏi. Một số cái cần xem xét là:

• pydata: danh sách Google Group dành cho các câu hỏi liên quan đến Python để phân tích
dữ liệu và pandas
• pystatsmodels: dành cho các mơ hình thống kê hoặc các câu hỏi liên quan đến pandas
• numpy-discussion: dành cho các câu hỏi liên quan đến NumPy
• scipy-user: dành cho các câu hỏi chung về SciPy hoặc khoa học Python

11

Tơi đã cố tình khơng đăng URL của những trang này phịng trường hợp chúng thay đổi. Chúng
có thể được định vị dễ dàng thơng qua tìm kiếm trên Internet.

Mỗi năm có nhiều hội nghị được tổ chức trên tồn thế giới dành cho các lập trình viên Python.
PyCon và EuroPython lần lượt là hai hội nghị Python chung chính ở Hoa Kỳ và Châu Âu.

SciPy và EuroSciPy là các hội nghị Python theo định hướng khoa học, nơi bạn có thể sẽ tìm
thấy nhiều “những con chim lơng vũ” nếu bạn quan tâm nhiều hơn đến việc sử dụng Python
để phân tích dữ liệu sau khi đọc cuốn sách này.

ĐIỀU HƯỚNG CỦA CUỐN SÁCH
Nếu bạn chưa từng lập trình Python trước đây, bạn có thể thực sự muốn bắt đầu từ end của
cuốn sách, nơi tôi đã đưa ra một hướng dẫn cô đọng về cú pháp Python, các tính năng ngơn
ngữ và các cấu trúc dữ liệu tích hợp như bộ dữ liệu, danh sách và lệnh. Những điều này được
coi là kiến thức tiên quyết cho phần còn lại của cuốn sách.

Cuốn sách bắt đầu bằng việc giới thiệu cho bạn môi trường IPython. Tiếp theo, tôi giới thiệu
ngắn gọn về các tính năng chính của NumPy, để lại cách sử dụng NumPy nâng cao hơn cho
một chương khác ở cuối cuốn sách. Sau đó, tơi giới thiệu về pandas và dành phần còn lại của
cuốn sách cho các chủ đề phân tích dữ liệu áp dụng pandas, NumPy và matplotlib (để trực
quan hóa). Tơi đã cấu trúc tài liệu theo cách tăng dần nhất có thể, mặc dù đơi khi có một số
điểm đan xen nhỏ giữa các chương.

Các tệp dữ liệu và tài liệu liên quan cho mỗi chương được lưu trữ dưới dạng
/>
Tơi khuyến khích bạn tải xuống dữ liệu và sử dụng nó để sao chép các ví dụ về mã của cuốn
sách và thử nghiệm các cơng cụ được trình bày trong mỗi chương. Tơi sẽ vui vẻ chấp nhận
những đóng góp, tập lệnh, sổ ghi chép IPython hoặc bất kỳ tài liệu nào khác mà bạn muốn
đóng góp vào kho sách để mọi người cùng thưởng thức.

Ví dụ về mã

Hầu hết các ví dụ về mã trong sách đều được hiển thị với đầu vào và đầu ra giống như được

thực thi trong shell IPython.


In [5]: code

Out[5]: output

Đôi khi, để rõ ràng, nhiều ví dụ về mã sẽ được hiển thị cạnh nhau. Chúng nên được đọc từ

trái sang phải và thực hiện riêng biệt.

In [5]: code In [6]: code2

Out[5]: output Out[6]: output2

Dữ liệu dùng cho các ví dụ
Bộ dữ liệu cho các ví dụ trong mỗi chương được lưu trữ trong kho lưu trữ trên GitHub:
Bạn có thể tải xuống dữ liệu này bằng cách sử dụng
chương trình dịng lệnh kiểm sốt sửa đổi git hoặc bằng cách tải xuống tệp zip của kho lưu
trữ từ trang web.

12

Tôi đã cố gắng hết sức để đảm bảo rằng nó chứa mọi thứ cần thiết để mơ tả lại các ví dụ,
nhưng tơi có thể đã mắc một số lỗi hoặc thiếu sót. Nếu được xin vui lịng gửi email cho tôi:


Bộ quy ước chung
Cộng đồng Python đã áp dụng một số quy ước đặt tên cho các mô-đun thường được sử dụng:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

Điều này có nghĩa là khi bạn nhìn thấy np.arange, đây là một tài liệu tham khảo cho chức
năng arrange trong NumPy. Điều này được thực hiện vì việc nhập mọi thứ (from numpy
import *) từ một gói lớn như NumPy.

Thuật ngữ
Tôi sẽ sử dụng một số thuật ngữ phổ biến cho cả lập trình và khoa học dữ liệu mà bạn có thể
khơng quen. Vì vậy, đây là một số định nghĩa ngắn gọn:

Munge/Munging/Wrangling
Mơ tả tồn bộ q trình xử lý dữ liệu phi cấu trúc/hoặc dữ liệu lộn xộn thành
dạng có cấu trúc hoặc rõ ràng. Từ này đã lẻn vào thuật ngữ của nhiều hacker
dữ liệu hiện đại. Munge có vần với “lunge”.

Pseudocode
Mơ tả về một thuật tốn hoặc quy trình có dạng giống mã trong khi có thể
không phải là mã nguồn hợp lệ thực tế.

Syntactic sugar
Cú pháp lập trình khơng thêm các tính năng mới nhưng làm cho nội dung nào
đó thuận tiện hơn hoặc dễ gõ hơn.

SỰ CƠNG NHẬN
Sẽ rất khó cho tơi khi viết cuốn sách này nếu khơng có sự ủng hộ của đông đảo mọi người.

Về đội ngũ nhân viên của O'Reilly, tôi rất biết ơn các biên tập viên Meghan Blanchette và
Julie Steele, những người đã hướng dẫn tôi trong suốt q trình này. Mike Loukides cũng làm
việc với tơi trong giai đoạn đề xuất và giúp biến cuốn sách thành hiện thực.
Tôi đã nhận được rất nhiều đánh giá kỹ thuật từ nhiều nhân vật. Đặc biệt, Martin Blais và
Hugh White đã cực kỳ hữu ích trong việc cải thiện các ví dụ, sự rõ ràng và cách tổ chức của
cuốn sách từ đầu đến cuối. James Long, Drew Conway, Fer nando Pérez, Brian Granger,

Thomas Kluyver, Adam Klein, Josh Klein, Chang She và Stéfan van der Walt, mỗi người đã
xem xét một hoặc nhiều chương, đưa ra phản hồi rõ ràng từ nhiều góc độ khác nhau.

Tơi nhận được nhiều ý tưởng tuyệt vời về ví dụ và tập dữ liệu từ bạn bè và đồng nghiệp trong
cộng đồng dữ liệu, trong số đó: Mike Dewar, Jeff Hammerbacher, James Johndrow, Kristian
Lum, Adam Klein, Hilary Mason, Chang She và Ashley Williams.

Tất nhiên, tôi mang ơn nhiều nhà lãnh đạo trong cộng đồng Python khoa học nguồn mở,
những người đã xây dựng nền tảng cho công việc phát triển của tôi và đã khuyến khích tơi
khi tơi viết cuốn sách này: nhóm nịng cốt IPython (Fernando Pérez, Brian Granger, Min

13

Ragan -Kelly, Thomas Kluyver và những người khác), John Hunter, Skipper Seabold, Travis
Oliphant, Peter Wang, Eric Jones, Robert Kern, Josef Perktold, Francesc Alted, Chris
Fonnesbeck và rất nhiều người khác không thể kể hết. Một số người khác đã hỗ trợ, đưa ra ý
tưởng và động viên rất nhiều trong suốt chặng đường: Drew Conway, Sean Taylor, Giuseppe
Paleologo, Jared Lander, David Epstein, John Krowas, Joshua Bloom, Den Pilsworth, John
Myles-White và nhiều người khác tôi quên mất rồi.
Tôi cũng muốn cảm ơn một số người trong những năm tôi mới bắt đầu. Đầu tiên, các đồng
nghiệp AQR cũ của tôi, những người đã cổ vũ tôi trong công việc gấu trúc của tôi trong nhiều
năm qua: Alex Reyf man, Michael Wong, Tim Sargen, Oktay Kurbanov, Matthew Tschantz,
Roni Israelov, Michael Katz, Chris Uga, Prasad Ramanan, Ted Square và Hoon Kim. Cuối
cùng là cố vấn học tập của tôi Haynes Miller (MIT) và Mike West (Duke).
Về mặt cá nhân, Casey Dinkin đã cung cấp sự hỗ trợ vơ giá hàng ngày trong q trình viết,
chấp nhận những thăng trầm của tôi khi tôi cùng nhau hồn thành bản thảo cuối cùng trên
một lịch trình đã quá thoả thuận. Cuối cùng, bố mẹ tôi, Bill và Kim, đã dạy tôi phải luôn theo
đuổi ước mơ của mình và khơng bao giờ chấp nhận những điều kém cỏi hơn.

14


CHƯƠNG 6: TẢI DỮ LIỆU, LƯU TRỮ VÀ ĐỊNH DẠNG TẬP TIN

Các cơng cụ trong quyển sách này sẽ ít sử dụng nếu bạn không thể dễ dàng nhập và xuất dữ

liệu trong Python. Tôi sẽ tập trung vào đầu vào và đầu ra với các đối tượng pandas, mặc dù

tất nhiên có rất nhiều cơng cụ trong các thư viện khác hỗ trợ quá trinh này. Ví dụ, NumPy có

tính năng tải và lưu trữ dữ liệu nhị phân ở mức độ thấp nhưng cực kỳ nhanh, bao gồm hỗ trợ

mảng ánh xạ bộ nhớ. Xem chương 12 để biết thêm về những điều đó.

Đầu vào và ra thường rơi vào một số danh mục chính: đọc tệp văn bản và những cái khác hiệu

quả hơn như các định dạng trên đĩa, tải dữ liệu từ cơ sở dữ liệu và tương tác với các nguồn

mạng như API web.

ĐỌC VÀ GHI DỮ LIỆU Ở ĐỊNH DẠNG VĂN BẢN

Python đã trở thành ngơn ngữ được u thích cho việc trộn văn bản và tệp, do cú pháp của nó

đơn giản để kết nối với các tệp, cấu trúc dữ liệu trực quan và các tính năng tiện lợi như đóng

gói và giải nén bộ dữ liệu.

pandas có một số hàm để đọc dữ liệu dạng bảng dưới dạng đối tượng DataFrame. Bảng 6-1

có tóm tắt tất cả về chúng, tuy nhiên read_csv và read_table có thể là những thứ bạn sẽ sử


dụng nhiều nhất.

Bảng 6-1: Phân tích các cú pháp trong pandas

Hàm Mô tả

read_csv Tải dữ liệu được phân tách từ một một tệp hoặc đối tượng giống như tệp.

Sử dụng dấu phẩy làm dấu phân cách mặc định.

read_table Tải dữ liệu được phân tách từ một một tệp hoặc đối tượng giống như tệp.

Sử dụng tab (‘\t’) làm dấu phân cách mặc định.

read_fwf Đọc dữ liệu ở định dạng cột có chiều rộng cố định (nghĩa là khơng có dấu

phân cách)

read_clipboard Phiên bản của read_table đọc dữ liệu từ clipboard. Hữu ích cho việc

chuyển đổi bảng từ các trang web.

Tôi sẽ cung cấp cái nhìn tổng quan về cơ chế của các hàm này, các hàm này nhằm mục đích
chuyển đổi dữ liệu văn bản thành một DataFrame. Các tùy chọn của những hàm này thuộc
một số loại sau:

• Lập chỉ mục: có thể xử lý một hoặc nhiều cột như DataFrame được trả về và có nên
lấy tên cột từ tệp, người dùng hay không.


• Suy luận kiểu và chuyển đổi dữ liệu: điều này bao gồm các chuyển đổi giá trị do người
dùng xác định và danh sách tùy chỉnh các điểm đánh dấu giá trị bị thiếu.

• Phân tích ngày giờ: bao gồm khả năng kết hợp, bao gồm kết hợp thông tin ngày và giờ
trải rộng trên nhiều cột thành một cột duy nhất trong kết quả.

• Lặp lại: hỗ trợ lặp lại các đoạn tệp rất lớn.
• Các vấn đề dữ liệu không sạch: bỏ qua các hàng hoặc chân trang, nhận xét hoặc những

thứ nhỏ nhặt khác như dữ liệu số có hàng nghìn được phân tách bằng dấu phẩy.

Suy luận kiểu là một trong những tính năng quan trọng hơn các hàm này; điều đó có nghĩa là
bạn khơng cần phải chỉ định cột nào là số, số nguyên, boolean (kiểu dữ liệu có 2 giá trị True,
False) hoặc chuỗi. Tuy nhiên, việc xử lý ngày tháng và các loại tùy chỉnh khác đòi hỏi nhiều
nỗ lực hơn một chút. Hãy bắt đầu với một tệp băn bản (CSV) nhỏ được phân tách bằng dấu
phẩy:

15


×