Điều này bao gồm hầu hết các loại đữ 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 phay © Nhiều bảng dữ liệu có liên quan với
Trang 1
BỘ GIÁO DỤC & ĐÀO TẠO
TRƯỜNG ĐẠI HỌC KINH TẺ TP.HCM
~-C4EL]Ïe›
UEH UNIVERSITY
DỰ ÁN KET THUC HOC PHAN MON: TRUC QUAN HOA VA HE THONG THONG TIN DIA LY
Dé tai: Bién dich sach tai ligu “Python for Data Analysis”
Tén thanh vién:
Tran Ngoc Tuyên — 31221023605
Huynh Bao Ngoc Vy — 31221021378 Lép: W001
Giang vién hwong dan: Nguyén Khanh Duy
Thành phố Hồ Chí Minh, ngày 28, tháng 12 năm 2023
Trang 2
PHÂN CHIA CÔNG VIỆC
Trang 3
SỐ MỤC LỤC
0121019)10519./(97)700 90.03dtitiiŸỶẳŸỶẳŸẳỐẢẢ 2 CUÓN SÁCH NAY NOT VE DIEU GÌ? 2 2222121 1221 1101211111212122 11 re 2
TẠI SAO PYTHON CHO PHÂN TÍCH DỮ LIỆU? - 5 2S 2 E12 ưyn 2
Python như chất kết dính - (1 2 21 E 2112 111 1 1 1 E1 1212111 rrye 3 Giải quyết vấn đề "Hai ngôn ngũt” - 2n n tì nnnE E121 11122212 2 ra 3 Tai sao khong phai la Python? 0.00.0 (đá 3
NHỮNG THƯ VIỆN PYTHON THIẾT YÊU 2c 2S E211 He 4
=0 ốc 4
GNU/LINUX oo 10 Python 2 and Python 3 ch nh HH nh Ty TH HH To Hà rà 11 Integrated Development Environments (IDES) chì nh nh nh nh Hee 11
Thuật ngữ HH DH HUI HUI III III UU OU UE OO OE nn TH Hà nh khu 13
SỰ CONG NHAN oooccccccccccccccccececesssessesssesesssessusesevssssessusasasssessseasavassssssssusecasavasesessstesenessvseeteseees 13
CHUONG 6: TAI DU LIEU, LUU TRU VA DINH DANG TẬP TIN 15
DOC VA GHI DU LIEU O BINH DANG VAN BAN .ccccccceccceccestececeseseetecsteseseseeeseees 15
Đọc tập tin văn bản theo từng phần S20 S219 21112121 10212121118 121kg 19 Ghi dữ liệu ra định dạng văn bảng -Q TQ Tnhh HH Hành nho ky 20 Làm việc thủ công với định dạng được phân tách QQQ eee 22
XML và HTML: Quét web nh nhà nh HH TH TH HH HH Ho ng 24 Phân tích cú pháp XML bằng lxml.objectify . St 2 2n 27 ĐỊNH DẠNG DỮ LIỆU NHỊ PHÂN 1S SE ng ng ng 1g nu 29
Sử dụng định dạng HDES nh nh nh nh Ho Hàn Ha Hà nh Hà nh kh khe ha 29 40(0918/009/1- 100800 6((.(./(:/4-‹£4 1ốẢố 30
Trang 4TƯƠNG TÁC VỚI HTLM VÀ APIWEB 00.00000000 nh nh nh nành HH HH He 30 TƯƠNG TÁC VỚI CƠ SỞ DỮ LIỆU .- 5 5221212121 112221212111 11122 Ea 32
Lưu trữ và tải dữ liệu trong cơ sở dữ liệu MongoDB ee 33 CHUONG 7: SAP XEP DU LIEU: LAM SACH, CHUYEN DOI, HOP NHAT, ĐỊNH
KET HOP VA HOP NHAT CAC TAP DỮ LIỆU 5 1 22 2212 nhan 34
Hợp nhất DataFrame kiểu cơ sở dữ liệu S22 21 1221 22121212112 212.81 tri 34 Hợp nhất chỉ mục - 0 22 2212322 1 1211121 2210181121121 11 H1 t re re 38 Ghép nối dọc theo một trục - n2: 22111212121 1121112181 102111211112 1211 a 40 Kết hợp dữ liệu với sự chồng chéo - 0 2n S222 21 122112112181 122 rke 44
ĐỊNH DẠNG LẠI VÀ XOAY VỊNG S2 nh HH1 ru 45
Định hình lại bằng lập chỉ mục phân cấp . - 0 2212221121 221 2 ke e 45 Xoay định dạng “dài” sang “rộng ”” nn LH khu 47
CHUYÊN ĐỎI DỮ LiIỆU - 0 5 1121 1211121112221 1211 12122221 HH HH Hy u 49
Loai bo tring lap 0 ằằ<a ĂỮẢ s.s.s 49 Chuyển đổi dữ liệu bằng hàm hoặc ánh xạ - 5: 2S 1 25921912121 10222121211 re 50
lì, TY-LE:taiđdđđiđaii 51
Sự rời rạc hĩa và Binning ĐT TS ko nh Ho Ho thà Hà nà 53 Phát hiện và lọc các ngoại ÌỆ nner eter 55 Hoan vi và lấy mẫu ngẫu nhiên .- 5-5: S2 222212119213 2121 1211111112121 E2 erke 56
Chỉ báo tính tốn/Biến giả - 0n ng HH 22121211121212 1g 57
THAO TÁC CHUỖI SH nh nh nong ng ải 59 Phương thức đối tượng chuỗi - - 22 2 SE 121212111 22111111 1232211121811 re 59 Biểu thức chính quy L5 cS n1 n1 HT 11211122121 1T go 60 Các hàm chuỗi được vector hĩa trong pandas - S12 2S E222 re 63
VÍ DỤ: CƠ SỞ DỮ LIỆU THỰC PHÁM CỦA USDA .- 2S nhe rưn 65 CHUONG 11: CAC UNG DUNG DU LIEU TÀI CHÍNH VÀ KINH TẺ - 70 CHU DE TRON DỮ LIIỆU 2 221 211211 151211121 2212211121112 11112121 70
Sắp xếp chuỗi thời gian và mặt cắt ngang 0 S2 1212 2E ng nhe 70 Hoạt động với chuỗi thời gian cĩ tần số khác nhau 5: S3: 2 22E2Erxrrrsreerrkes 72
Sử dụng chu kỳ thay vì dấu thời gian - - Sọ 22221 En ng HE H22 ke 74 Thời gian trong ngày và lựa chọn dữ liệu “as OŸ” Ặ Q0 TQ SS nh nh HH e 76 Ghép nối các nguồn dữ liệu với nhau - 5 5: 2 2223221212151 1211221111111 tre 78 Chỉ số trả về và lợi nhuận tích lũy S22 22121 v22 22211 2E 1 211212 ke 80 BIÉN ĐỎI NHĨM VÀ PHẦN TÍCH cà hà HH HH HH HH Ha 82
hJ T50 8 0N 84 Phân tích thập phân và tứ phân vị .-QL nh ng KĐT ko 85 CÁC ỨNG DỤNG VÍ DỤ KHÁC 5222252212121 121 11 1211 12181212221 u 87
Trang 5Phân tích biên giới tín hiệu QC nhe nh KH nh khe khá Hợp đồng tương lai luân chuyển
Tương quan luân chuyển và hồi quy tuyến tính 5:2: 2123 SE vreeerrerreo 93
900095007 5
Trang 6LỜ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 hoá 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 gia 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 MecKinney 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 voi Python Béi vi 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 I 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 đữ 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 II 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 Bai dy an nay ching em đã cố gắng biên dịch sát nhất có thể, tuy nhiên trong quá 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 quá 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
Trang 7CHƯƠNG 1: MO DAU SO BO
CUON SACH NAY NOI VE DIEU Gi?
Cuốn sách này đề cập đến những chỉ tiết cơ bản về thao tác, xử lý, làm sạch và xử lý đữ liệu trong Python Đây cũng là phần giới thiệu thực tế, hiện đại về tính toán khoa học bằng Python, được thiết kế riêng cho các ứng dụng sử dụng nhiều đữ liệu ch uyê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à đữ 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ư
e Mang da chiéu (ma tran)
e Dir ligu dang bang hoac bang tinh trong do 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 đữ 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 phay
© 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 khoá nước ngoài cho người dùng SQL)
e©_ 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 hoàn thiện Mặc đù 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 dé 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ư MierosofÑ 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 PHAN TICH D& LIEU?
Đố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à Diango (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 toá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 đữ 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
Trang 8đượ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 sân đây, Python đã cải thiện việc hỗ trợ thư viện (chủ yéu 1a Pandas) dé 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 dí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 toán khoa học là việc đễ dàng tích hợp
mã C, C++, và FORTRAN Hầu hết các môi trường điện toá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 toá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 thí 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 toá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 gan day, dy an Cython (http://cython.org) da tro 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 va vừa tương tác voi ma C va C++
Giai quyết van dé "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 hoac R sau do 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 thay rang Python là một ngôn ngữ thích hợp không chỉ dé 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 chuyên sâu vào tính toá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 trinh 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 ludng, 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
Trang 9được gọi là khoá phiên địch toà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 tai 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 yê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 thí 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 tinh toá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 toán sé
NHUNG THU VIEN PYTHON THIET YEU
Đô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 xuyên suôt cuôn sách, tôi trình bảy sơ lược sau đây về từng thư viện
Num Py
NumPy, viết tắt của Numerical Python, là gói nền tảng cho tính toá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
Ngoà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
* Cac ham đề thực hiện các tính toán theo từng phần tử với mảng hoặc các phép toán gitta cac mang
* Cac céng cụ dé đọc và ghí bộ dữ liệu theo mảng vào đĩa
« - Phép toá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 đữ 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 cau trúc dữ liệu Python tích hợp khác Ngoà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ỳ đữ 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 đữ liệu cầu trúc nhanh, dễ dang và mang tính biêu cảm Như các bạn sẽ thấy, nó là một trong những yeu 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
total_bill tip sex smoker day time size
1 16.99 1.01 Female No Sun Dinner 2
2 10.34 1.66 Male No Sun Dinner 3
3 21.01 3.5 Male No Sun Dinner 3
4
Trang 104 23.68 3.31 Male No Sun — Dinner
5 24.59 3.61 Female No Sun — Dinner
6 25.29 4.71 Male No Sun — Dinner
7 8.77 2 Male No Sun Dinner
8 26.88 3.12 Male No Sun — Dinner
9 15.04 1.96 Male No Sun — Dinner
10 14.78 3.23 Male No Sun — Dinner NNFAW
Pandas kết hợp các tính năng tính toá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ở đữ liệu quan hệ (chẳng hạn như SQL) No cung cap chức năng lập chi muc tinh vi dé lam cho no dé dang đị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 suat cao va các công cụ rât phù hợp đê làm việc với đữ liệu tải chính Thực ra, ban đâu tôi đã thiết kê pandas như một công cụ ly 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 toá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.fame 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 đữ 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 số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ó
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 toán tương tac va kham pha No la Python shell nang 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
Trang 11Bả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 toá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ự khuyên bạn nên sử dụng nó khi đọc cuôn sách này
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 toá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 SPECEFUN, 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ả
ác
scipy.weave: Công cụ dùng mã nội tuyến C++ để tăng tốc độ tính toán mảng
NumPy và SciPy cùng nhau tạo thành một sự thay thé tính toán hoàn chỉnh hợp lý cho nhiều
MATLAB cung voi m6t sô hộp công cụ bô sung của nó
CÀI ĐẶT VÀ THIẾT LẬP
Vi mọi người đều sử đụ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 hoàn chỉnh phù hợp dé theo dõi cuốn sách này, vì vậy ở đây tôi sẽ đưa ra các hướng dẫn chỉ 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 hoc ttr Enthought (http:/Avww.enthought.com) Diéu nay bao g6m EPDFree, mot phân phối khoa học cơ sở miễn phí (voi NumPy, SciPy, matplotlib, Chaco, va 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ó dang ky hang nam cho người dùng phi học thuật
Python (x, y) (http://pythonxy.googlecode.com) : Ban 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 EPDEree 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:
Trang 12* Co so Python khoa học: NumPy, SciPy, matplotlib, và IPython Tất cả đều nằm trong EPDFree
¢ [Python Notebook Dependencies: Tornado va 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, Py Tables, PyQt (hoặc tương đương, PySide), xlrd, Ixml, 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 cai dat 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ợ ĐIÚP khác, xem Python Package Index (PyPI, http://pypi.python.org) Day cting là một nguon tai 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ư pÏÌp 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
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
Trang 13C:\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 cai đặt nhị phân thích hợp từ http://pypi.python.org/pypi/pandas Đố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 đồ mafplotlib đơ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 Intera ctive Python
? -> Introduction and overview of |Python’'s features
Yoquickref -> 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 bít Nếu bạn muốn hoặc cần thiết lập 64- bít 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 (http:/www.lfd.uci.edu/~gohlke/pythonlibs/) cho Windows 32 và 64 bit
Apple OS X
Dé bat dau sử dụng ÓS X, trước tiên bạn phải cài đặt Xcode, bao gồm bộ công cụ phát triển phan mém cua Apple Thanh phan cân thiết cho mục đích của chúng tôi là bộ biên dịch gec
Trang 14C va C++ Ban có thé tim thấy trình cài dat Xcode trén DVD cài đặt OS X đi kèm với may 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 huéng dén Applications > Utilities Kiéu gcc va nhan enter Ban co thé sẽ thấy một số điều nhu:
$ 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 proñle
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
Writing /mp/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 ~/NirtualBox VMs/WindowsXP $ ipython
Python 2.7.3 |EPD_free 7.3-1 (32-bit)| (default, Apr 12 2012, 11:28:34)
9
Trang 15Type "copyright", "credits" or "license" for more information
IPython 0.12.1 An enhanced Intera ctive Python
? -> Introduction and overview of |Python’'s features
Yoquickref -> 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: WxXAgg] For more information, type ‘help(pylaby’
và Mint Thiết lập tương tự như OS X ngoại trừ cách cài đặt EPDFEree Trinh cai đặt là tập lệnh shell phải được thực thị 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 cai đặ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 hoàn tat, bạn cần them thư mục EPDFree's bin cua ban vao gia tri $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é bat đầu một quy trình đầu cuôi mới hoặc thực thi bashre 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 dé chuyén tiép; nhiéu ban phan 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
Trang 16sudo apt-get install gcc Nếu bạn gõ gcc trên dòng lệnh nó sẽ viết điều gi đó như:
$ gcc gcc: no input files Bây giờ là lúc cài đặt pandas:
$ easy_install pandas Néu ban da cai dat EPDFree voi quyén root, ban co thé can 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ư luôn 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ể dang mre hiện đúng Các thư viện như pandas va NumPy duoc thiét ké dé dé str dung trong she
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ư hoà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
CONG DONG VA HOI NGHI
Ngoai 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
Trang 17Tô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 toàn thể giới đà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
DIEU HUONG 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, dé lai cách su dung NumPy nang cao hon 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 đữ liệu áp dụng pandas, NumPy va matplotlib (dé trực quan hóa) Tôi đã cau 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
http://github.com/pydata/pydata-book
Tôi khuyến khích bạn tải xuống đữ liệu và sử dụng nó dé 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
Out[5]: output Out[6]: output2
Dir ligu dung cho cac vi du
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: http.//github.com/pydata/pydata-book Bạn có thê tải xuống đữ liệu này bằng cách sử dụng chương trình dòng lệnh kiểm soá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 wcb
Trang 18Tôi đã cô gắng hết sức để đảm bảo rằng nó chứa mọi thứ cần thiết dé 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: wesmckinn@gmail.com
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:
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 nao
đó 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 quá trinh nay Mike Loukides cting lam 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 ky 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 va Stéfan van der Walt, méi nguoi da 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 đữ 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 va 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
Trang 19Ragan -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 va rat 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 nam qua: Alex Reyfman, Michael Wong, Tim Sargen, Oktay Kurbanov, Matthew Tschantz, Roni Israelov, Michael Katz, Chris Uga, Prasad Ramanan, Ted Square va 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 quá trình viết, chấp nhận những thăng trầm của tôi khi tôi cùng nhau hoà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, đã đạ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
Trang 20CHƯƠNG 6: TAI DU LIEU, LUU TRU VA DINH DANG TAP 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ù tat nhiên có rất nhiều công cụ trong các thư viện khác hỗ trợ quá trinh nay Vi dụ, NumPy co tính năng tai va lưu trữ đữ 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 đữ liệu từ cơ sở dữ liệu và tương tác với các nguồn mang nhu API web
ĐỌC VÀ GHI DỮ LIỆU Ở ĐỊNH DẠNG VĂN BẢN
Python đã trở thành ngôn ngữ được yê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 đữ 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 dé đọc dữ liệu dạng bảng dưới dạng đối tượng DataFrame Bảng 6-†
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
Bang 6-1: Phân tích các cú pháp trong pandas
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 Tai đữ 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 (“\') làm dấu phân cách mặc định
read_fwf Đọc đữ 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_clipboarc 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 lay 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á tri 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:
Trang 21Vì đây được phân tách bởi dấu phẩy, nên chúng ta có thể dùng hàm read_ csv để đọc nó dưới dạng một DataFramc:
Chúng ta cũng có thể sử dụng read_ table và chỉ định dau phan cach:
Ở đây, tôi đã sử dụng lệnh Unix cat shell dé in néi dung thé cua tệp ra màn hình Nếu bạn đang dùng Windows, bạn có thể sử dụng type thay vì cat đê đạt được hiệu quả tương tự
Một tập tin không phải lúc nào cũng có hàng tiêu đề Hãy xem tệp nay:
Đề đọc nội dung này, bạn có một vài lựa chọn Bạn có thể cho phép pandas gán tên cột mặc định hoặc bạn có thê tự mình chỉ định tên:
Gia sử bạn muôn cột message là chỉ mục của DataFrame được trả về Bạn có thê cho biết bạn muôn cột ở chỉ mục sô 4 hodc duge dat tén la ‘message’ bang cách sử dụng đôi sô Index col:
Trang 22Trong trường hợp bạn muốn tạo chỉ mục phân cấp từ nhiều cột, chỉ cần chuyên một danh sách
số hoặc tên cột:
Trong một số trường hợp, một bảng có thê không có dấu phân cách cô định, sử dụng khoảng trắng hoặc một số kiêu khác để phân tách các trường Trong những trường hợp này, bạn có thể chuyên một biểu thức chính quy làm dấu phân cách cho read_ table Hãy xem một tệp văn bản trông như thế này:
Trong khi bạn có thê thực hiện một số thao tác thủ công, thi trong trường hợp này các trường được phân tách băng một khoảng trắng khác nhau Điều này có thê được biểu diễn băng biêu thức chính quy \s+, vi vay chung ta co:
Trang 23Boi vì có ít tên cột hơn số hàng đữ liệu nên read table suy luận rằng cột đầu tiên phải là chỉ mục của DataFrame trong trường hợp này
Các hàm phân tích cú pháp có nhiều đối số bô sung để giúp bạn xử lý nhiều định dạng tệp ngoại lệ khác nhau xảy ra (xem bảng 6-2) Ví dụ, ban co thé bé qua hang dau tiên, thứ ba và bốn của tệp băng skiprows:
Xử lý các giá trị rỗng là một phần quan trọng và thường xuyên có nhiều sắc thái trong quá trình phân tích cú pháp tệp Dữ liệu rỗng thường không có (chuỗi trống) hoặc được đánh dấu bằng một số giá trị sentinel Theo mặc định, pandas sử dụng một tập hợp các sentinel thường xuyên xuất hiện, như là NA, -1, #IND và NULL:
Tuy chon na_ values co thé lấy danh sách hoặc tập hợp các chuỗi để xem xét các giá bị rỗng:
Khác với NA có thê được chỉ định cho mỗi cột trong một dict:
Trang 24Bảng 6-2: Các đối số hàm read csv/read table
Số hàng để sử dụng làm tên cột Mặc định là 0 (hàng đầu tiên), nhưng phải là None nếu không có hàng tiêu đề
Số cột hoặc tên để sử dụng làm chỉ mục hàng trong kết quả Có thể là một tên/số hoặc một danh sách của chúng cho tên chỉ mục phân cấp Danh sách tên cột cho kết quả, kết hợp với header=None
Số hàng ở đầu tệp cần bỏ qua hoặc danh sách số hàng (bắt đầu từ 0) dén skip
Trinh tự các giá trị dé thay thé bang NA
Ký tự hoặc các ky tự dé phân tách các nhận xét ở cudi dong
Có găng phân tích dữ liệu theo datetime; Sai theo mặc định Nếu Đúng,
sẽ cô găng phân tích tất cả các cột Ngược lại có thể chỉ định danh sách
số cột hoặc tên đề phân tích Nếu phân tử của list là tuple hoặc list, sẽ kết hợp nhiều cột lại với nhau và phân tích theo ngày (ví dụ nếu nøảy/g1ờ được chia thành hai cột)
Nếu nối các cột để phân tích ngày, hãy bỏ các cột đã nỗi Mặc định Đúng
Dict chứa số cột ánh xạ tên tới các hàm Ví dụ {foo': f} sẽ áp dụng hàm f cho tất cả các giá trị trong cột 'foo'
Khi phân tích cú pháp các ngày có thê không rõ ràng, hãy xử lý theo định dạng quốc tế (ví dụ 6/7/2012 -> 7 tháng 6 năm 2012) Mặc định
Sai
Ham sử dụng để phân tích ngày
Số hàng cần đọc từ đầu tệp
Trả về một đối tượng TextParser đề đọc tệp từng phản
Dé lặp lại, kích thước của các khối tệp
Đọc tập tin văn bản theo từng phần
Khi xử lý các tập tín quá lớn hoặc tìm ra tập hợp các đôi sô phủ hợp dé xử lý chính xác một tệp lớn, bạn có thê chỉ muôn đọc một phân nhỏ của tệp hoặc lặp lại các phân nhỏ của tệp:
Trang 25Nếu bạn chỉ muốn đọc một số lượng nhỏ hàng (tránh đọc toàn bộ tệp), hãy chỉ định điều đó băng nrows:
Đề đọc từng phần trong tập tin, hãy chỉ định kích thước khối của một số hàng:
Đối tượng TextParser được trả về bởi read_csv cho phép bạn lặp lại các phần của tệp theo kích thước khối Ví dụ, chúng ta có thé lặp lại ex6.csv, tổng hợp số lượng giá trị trong cột key như sau:
Sau đó, chúng ta có:
TextParser cũng được trang bị với một phương pháp get chunk cho phép bạn đọc các phần
có kích thước tủy ý
Chi dữ liệu ra định dạng văn bảng
Dữ liệu cũng có thể được xuất sang định dạng được phân tách Hãy xem một trong các tệp CSV doc 6 trén:
20
Trang 26Sử dụng phương pháp to_csv của DataFrame, chúng ta có thê ghi đữ liệu ra tệp được phân tách băng dâu phay:
Tất nhiên, các dấu phân cách khác có thê được sử dụng ( ghi vào sys.stdout để nó chỉ in kết quả văn bản):
Cac giá trị bị thiêu sẽ xuất hiện dưới dạng chuỗi rỗng ở đầu ra Bạn có lẽ muôn biêu thị chúng băng một sô giá trị sentinel khác:
Không có tùy chọn nào khác được chỉ định, cả nhãn hàng và cột đều được ghi Ca hai đều có thê bị vô hiệu hóa:
Bạn cũng có thể chỉ ghi một tập hợp con của các cột và theo thứ tự bạn chọn:
SerIes cũng có phương thức to_csv:
Với một chút sắp xếp (không có tiêu đề, cột đầu tiên làm chỉ mục), bạn có thể đọc phiên bản csv của một Serles với read_ csv, nhưng cũng có một phương pháp tiện lợi như from_csv giúp việc nảy đơn giản hơn một chút:
21
Trang 27Xem các chuỗi tai liéu tir to_csv va from csv dé biét thêm thông tin
Làm việc thủ công với định dạng được phân tách
Hầu hết các dạng dữ liệu bảng có thể được tải từ đĩa bằng các hàm như pandas.read_ table Tuy nhiên, trong một số trường hợp, việc xử lý thủ công có thể rất cần thiết Không có gi moi
lạ khi nhận được một tệp với một hoặc hon nhiều đòng không đúng định dạng làm chéng lén read_table Đề minh họa các công cụ cơ bản, hãy xem xét một tệp CSV nhỏ:
Đối với bất kỳ tỆp nào có dâu phân cách một ký tự, bạn có thê sử dụng module csv tích hợp của Python Để sử dụng nó, hãy chuyên bất kỳ tệp đang mở hoặc đối tượng giống tệp nào tới csv.reader:
Việc lặp lại qua trình đọc giống như một tệp mang lại các bộ giá trị với bat ky ky tự trích dan nao bị loại bỏ:
Từ đó, bạn có thê thực hiện các thao tác cân thiệt đề đưa dữ liệu vào dạng mả bạn can Vi du:
Tép CSV có nhiéu loạt khác nhau Việc xác định một định dạng mới với một dấu phân cách, quy ước trích dân chuối hoặc dâu kết thúc dòng được thực hiện băng cách xác định một lớp con đơn giản của csv.Dialect:
Các tham số phương ngữ CSV riêng lẻ cũng có thê được cung cấp dưới dạng từ khóa cho csv.reader mà không cân phải xác định lớp con:
22
Trang 28Bạn có thê tìm thấy các tùy chọn có thể có (thuộc tính của csv.Dialet) và chức năng của chúng trong bảng 6-3
Chuỗi một ký tự để phân tách các trường Mặc định là ';
Dấu kết thúc dòng để viết, mặc định là "Wn' Trình đọc bỏ qua điều này và nhận ra các ký tự kết thúc dòng cross-platform
Ký tự trích dẫn cho các trường có ký tự đặc biệt (như dấu phân cách)
Bỏ qua khoảng trắng sau mỗi dấu phân cách Mặc định Sai
Cách xử lý ký tự trích dẫn bên trong một trường Nếu Đúng, nó được nhân đôi Xem tải liệu trực tuyến đề biết đầy đủ chỉ tiết và cách thức Chuỗi thoát khỏi dấu phân cách nếu trích dẫn được đặt thành csv.QUOTE_ NONE Bị tắt theo mặc định
Đối với các tệp có dấu phân cách nhiều ký tự có định hoặc phức tap hon, ban
sẽ không thể sử dụng module csv Trong những trường hợp đó, bạn sẽ phải thực hiện việc tách dòng và dọn dẹp khác bằng cách sử dụng phương pháp phân tách của chuỗi hoặc phương pháp biểu thức chính quy re.split
Đề ghi các tệp được phân tách theo cách thủ công, bạn có thể sử dụng csv.writer Nó chấp nhận một đôi tượng tệp mở, có thê ghi và các tùy chọn định dạng và phương ngữ giông như csv.reader:
Dir ligu JSON
JSON (việt tắt của JavaScript Object Notation) đã trở thành một trong những định dạng tiêu chuân để gửi dữ liệu theo yêu cầu HTTP giữa trình duyệt web và các ứng dụng khác Đây là định dạng dữ liệu linh hoạt hơn nhiều so với dạng văn bản dạng bảng như CSV Đây là một
ví dụ:
JSON gan như là mã Python hợp lệ, ngoai trv gia tri null cua no 1a null va mot số hình thái khác (chăng hạn như không cho phép dâu phây ở cuối danh sách) Các loại cơ bản là các đôi
23
Trang 29tượng (dicts), mảng (danh sách), chuỗi, số, boolean và null Tất cả các key trong một đối tượng phải là chuỗi Có một số thư viện Python để đọc và hi dữ liệu JSON Tôi sẽ sử dụng json ở đây vì nó được tích hợp vào thư viện chuân Python Đề chuyền đổi chuỗi JSON thành dang Python, hay sử dụng json.loads:
Mặt khác, json.dumps chuyên đôi một đối tượng Python tré lai JSON:
Cách bạn chuyên đối một đối tượng JSON hoặc danh sách các đối tượng thành DataFrame hoặc một số cầu trúc dữ liệu khác đề phân tích sẽ tùy thuộc vào bạn Một cách thuận tiện, bạn
có thể chuyền danh sách các đối tượng JSON tới hàm tạo DataFrame và chọn một tập hợp con của các trường dữ liệu:
Đề biết ví dụ mở rộng về cách đọc và thao tác đữ liệu JSON (bao gồm các bản ghi lồng nhau), hãy xem ví dụ về Cơ sở đữ liệu thực phâm USDA trong chương tiếp theo
Một nỗ lực đang được tiến hành để thêm tính năng suất JSON gốc nhanh (to_json) va giai ma (from_json) vao pandas Điều này chưa sẵn sảng tại thời điểm viết bài
XML và HTML: Quét web
Python có nhiều thư viện để đọc và ghi dữ liệu ở các định dạng HTML và XML pho biến Ixml (/⁄2p:⁄ 2zz/.de) là một công cụ có hiệu suất ôn định trong việc phân tích các tệp rất lớn, Ixml có nhiều giao diện lập trình; đầu tiên tôi sẽ hiền thị bằng IxmÏl.htmÏl cho HTML, sau đó phân tích cú pháp một số XML bằng Ixml.objectif
Nhiều trang web cung cấp đữ liệu đưới dạng bảng HTML để xem trong trình duyệt nhưng không thê tải xuống dưới dạng định dang dé đọc bằng máy nhu JSON, HTML hoae XML Tôi nhận thay rang day là trường hợp của Yahoo! Dữ liệu quyền chọn cô phiếu của Finance Néu ban không quen với dữ liệu nay; quyền chọn là các hợp đồng phái sinh cho bạn quyền mua (quyền chọn mua) hoặc bán (quyền chọn bán) cô phiếu của công ty ở một mức giá cụ thể nào đó (giá thực hiện) từ bây gid đến một thời điểm cô định nào đó trong tương lai (hết hạn) Mọi người giao dịch cả quyền chọn mua và quyền chọn bán trong nhiều thời điểm đình
24
Trang 30công và hết hạn; tất cả dữ liệu này có thể được tìm thấy cùng nhau trong các bảng trên Yahoo! Finance
Dé bat dau, hay tim URL bạn muốn trích xuất dữ liệu, mở nó băng urllib2 và phân tích luồng bằng Ixml như sau:
Sử dụng đối tượng này, bạn có thẻ trích xuất tất cả các thẻ HTML thuộc một loại cụ thé, chang hạn như thẻ bảng chứa dữ liệu quan tâm Như một ví dụ thúc đây đơn giản, giả sử bạn muôn
có danh sách mọi URL được liên kết đến trong tài liệu; liên kết là một thẻ trong HTML Sử dụng phương thức findall cua tai liệu gốc cùng với XPath (một phương tiện thê hiện “truy vấn” trên tài liệu):
Nhưng đây là những đối tượng đại diện cho các phần tử HTML; để lấy URL va van ban liên kết, bạn phải sử dụng phương thức của get (đôi với URL) và phương thức text_content (đôi với văn bản hiện thị) của từng phân tử:
Do đó, việc có được danh sách tất cả các URL trong tài liệu chỉ là vấn đề viết cách hiểu danh
Sách này:
25
Trang 31Bây giờ, việc tìm đúng bảng trong tài liệu có thể là một vấn đẻ cần thử và sai; một số trang web làm cho việc này trở nên dé dang hon bang cach cung cap thuộc tính 1d cho bảng quan tâm Tôi xác định răng đây là hai bảng chứa dữ liệu call và dữ liệu put tương ứng:
Mỗi bảng có một hàng tiêu đề theo sau là mỗi hàng dữ liệu:
Đối với tiêu đề cũng như các hàng đữ liệu, chúng tôi muốn trích xuất văn bản từ mỗi 6; trong trường hợp tiêu đề, đây là các ô th và ô td cho dữ liệu:
Vi vậy, chúng tôi có được:
Bây giờ, vấn đề là kết hợp tất cả các bước nảy lại với nhau dé chuyén đối dữ liệu này thành DataFrame Vi dữ liệu sô van 6 dinh dang chudi nén chúng tôi muôn chuyền đối một vài thứ, nhưng có lẽ không phải tất cả các cột sang định dạng dâu phây động Bạn có thể thực hiện việc này bằng thủ công, nhưng may mắn thay, pandas có một lớp TextParser được sử dụng nội bộ trong read_csv và các hàm phân tích cú pháp khác để thực hiện chuyên đổi kiểu tự động thích hợp:
26
Trang 32Cuối cùng, chúng tôi gọi hàm phân tích cú pháp này trên các đối tượng bảng Ixml và nhận kết qua DataFrame:
Phan tich cu phap XML bang Ixml.objectify
XML (ng6n ngữ đánh dấu mở rộng) là một định dạng dữ liệu có cầu trúc phô biến khác, hỗ trợ dữ liệu phân cấp, lồng nhau với siêu dữ liệu Các tệp tạo ra cuốn sách bạn đang đọc, thực
sự tạo thành một chuỗi các tài liệu XML lớn
Ở trên, tôi đã giới thiệu thư viện lxmÏl và giao diện lxml.html của nó Ở đây, tôi sẽ giới thiệu một giao diện thay thê thuận tiện cho dtr ligu XML, Ixml.objectify
Cơ quan Giao thông Đô thị New York (MTA) xuất bản một số chuỗi đữ liệu về các dịch vụ
xe buýt va xe lửa của mình (http:/www.mta.info/developers/download.html) Ở đây chúng ta
sẽ xem xét dữ liệu hiệu suất có trong một tập hợp các tệp XML Mỗi dịch vụ xe lửa hoặc xe buýt có một tệp khác nhau (như Performance MINR.xml dành cho Đường sắt MetroNorth) chứa dữ liệu hàng tháng dưới dạng một loạt bản ghi XML trông như thế này:
27
Trang 33Su dung Ixml.objectify, chúng tôi phân tích tệp và lấy tham chiếu đến nút gốc của tệp XML băng getroot:
root INDICATOR trả về một trình tạo mang lại từng phần tử <lNDICATOR> XML Đối với môi bản ghi, chúng ta có thê điện một lệnh tên thẻ (như YTD_ ACTUAL) vào các giá trị dữ liệu (không bao gôm một vài thẻ):
Cuối cùng, chuyên đối danh sách các ký tự này thành DataFrame:
Dữ liệu XML có thể phức tạp hơn nhiều so với ví dụ này Mỗi thẻ cũng có thể có siêu đữ liệu Hãy xem xét thẻ liên kết HTML cũng là XML hợp lệ:
28
Trang 34Bây giờ bạn có thê truy cập bất kỳ trường nào (như href) trong thẻ hoặc văn bản liên kết:
ĐỊNH DẠNG DỮ LIỆU NHỊ PHÂN
Một trong những cách dễ nhất để lưu trữ dữ liệu hiệu quả ở định dạng nhị phân là sử dụng tính năng tuần tự hóa pickle có sẵn của Python Một cách thuận tiện, tất cả các đối tượng pandas đều có một phương thức lưu trữ để ghi dữ liệu vào đĩa đưới đạng pickle:
Bạn đọc đữ liệu Python trước bằng pandas.load, một hàm tiện lợi pickle khác:
Pickle chỉ được khuyến nghị làm định dạng lưu trữ ngăn hạn Vấn dé là khó có thê đảm bảo định dạng sẽ én định theo thời gian; một đối tượng được chọn ngày hôm nay có thé không được giải nén bằng phiên bản mới hơn của thư viện Tôi
đã cô găng hết sức để đảm bảo rằng điều này không xảy ra với pandas, nhưng tại một thời điểm nào đó trong tương lai, nó có thê là cần thiết “phá vỡ” định dang pickle
Sử dụng định dạng HDFES
Có một số công cụ tạo điều kiện thuận lợi cho việc đọc và ghi một lượng lớn dữ liệu khoa học dưới định dạng nhị phân trên đĩa một cách hiệu quả Thư viện cấp ngành phố biến cho việc này là HDEFS, là thư viện C có giao diện bằng nhiều ngôn ngữ khác như Java, Python và MATLAB “HDF” trong HDF5 la viết tắt của định dạng đữ liệu phân cáp Mỗi tệp HDF5 chứa câu trúc nút giỗng như hệ thống tệp nội bộ cho phép bạn lưu trữ nhiều bộ dữ liệu và siêu
dữ liệu hỗ trợ So với các định dang don gian hon, HDF5 hỗ trợ nén nhanh chóng với nhiều loại máy nén khác nhau, cho phép lưu trữ dữ liệu có mẫu lặp lại hiệu quả hơn Đối với các
29
Trang 35tập dữ liệu rất lớn không vừa với bộ nhớ, HDFS là một lựa chọn tốt vì bạn có thê đọc và ghi các phần nhỏ của mảng lớn hơn nhiều một cách hiệu quả
Không có một mà là hai giao diện cho thư viện HDFŠ trong Python, PyTables và h5py, mỗi giao diện có một cách tiếp cận vấn để khác nhau hŠpy cung cập giao diện trực tiếp nhưng cap cao cho API HDFS, trong khi PyTables tóm tắt nhiều chỉ tiết về HDF5 dé cung cấp nhiều
bộ chứa dữ liệu linh hoạt, lập chỉ mục bảng, khả năng truy vấn và một số hỗ trợ cho các tính thuật toán out-Of-COre
pandas có lớp HDFStore giống như dict tối thiêu, sử dụng PyTables để lưu trữ các đối tượng pandas:
Các đối tượng chứa trong tệp HDF5 có thể được truy xuất theo kiểu giống như lệnh:
Nếu bạn làm việc với lượng dữ liệu không lồ, tôi khuyến khích bạn khám phá PyTables vả h5py để xem chúng có thê phù hợp với nhu cầu của bạn như thế nào Vì nhiều vấn đề phân tích dữ liệu liên quan đên IO (chứ không phải liên quan đên CPU), nên việc sử dụng một công
cụ như HDF5 có thê tăng tốc đáng kế các ứng dụng của bạn
HDESŠ không phải là cơ sở dữ liệu Nó phù hợp nhất cho các bộ dữ liệu ghi một lần, đọc nhiều lần Mặc dù dữ liệu có thể được thêm vào tệp bat kỳ lúc nào, nhưng nếu nhiều người ghi đồng thời làm như vậy thì tệp có thé bị hỏng
Đọc tệp Microsoft Excel
Pandas cũng hỗ trợ đọc dữ liệu dạng bảng được lưu trữ trong tệp Excel 2003 (và cao hơn) bằng cách sử dụng lớp ExcelFile Về mặt ExcelFile sử dụng các gói xÏrd và openpyxl, vi vay bạn có thể phải cài đặt chúng trước Đề sử dụng ExcelFile, hãy tạo một phiên bản bằng cách chuyên đường dẫn đến tệp xÌs hoặc xỈsx:
Dữ liệu được lưu trữ trong một trang tính có thể được đọc vào DataFrame bằng cách sử dụng
phân tích:
TƯƠNG TÁC VỚI HTLM VÀ API WEB
Nhiều trang web có API công khai cung cấp nguồn cấp đữ liệu qua JSON hoặc một số định dạng khác Có một số cách để truy cập các API này từ Python; một phương pháp dễ sử dụng
mà tôi khuyên dùng là gói yêu cau (http://docs.python-requests.org) Dé tim kiém tir “python pandas” trén Twitter, chung ta có thể thực hiện yêu cầu HTTP GET như sau:
30
Trang 36Thuộc tính văn bản của đối tượng Response chứa nội dung của truy vấn GET Nhiều API web
sẽ trả về một chudi JSON phải được tải vào đôi tượng Python:
Trường kết quả trong response chứa danh sách các tweet, mỗi tweet được biểu diễn đưới dạng một dict Python trông giông như:
Chúng ta có thể tạo danh sách các trường tweet quan tâm rồi chuyển danh sách kết quả tới DataFrame:
31
Trang 37Mỗi hàng trong DataFrame hiện có đữ liệu được trích xuat tir méi tweet:
Với một chút nỗ lực, bạn có thể tạo một số giao diện cấp cao hơn cho các API web phố biến
trả về các đôi tượng DataFrame đề dễ dàng phân tích
TƯƠNG TÁC VỚI CƠ SỞ DỮ LIỆU
Trong nhiều dữ liệu ứng dụng hiếm khi đến từ các tệp văn bản, đó là cách khá kém hiệu quả
để lưu trữ lượng lớn dữ liệu Cơ sở dữ liệu quan hệ dựa trên SQL, (chăng hạn như SQL Server, PostgreSQL và MySQL) đang được sử dụng rộng rãi và nhiều cơ sở dữ liệu thay thế không phải SQL (được gọi là NoSQL) đã trở nên khá phô biến Việc lựa chọn cơ sở đữ liệu thường phụ thuộc vào hiệu suất, tính toàn vẹn dữ liệu và nhu cầu mở rộng của ứng dụng
Việc tải dữ liệu từ SQL vào DataFrame khá đơn giản và pandas có một số chức năng dé don giản hóa quy trình Ví dụ, tôi sẽ sử dụng cơ sở dữ liệu SQLite trong bộ nhớ băng trình điêu khiên sqlite3 tích hợp cua Python:
Sau đó, chèn một vải hàng dữ liệu:
Hầu hết các trình diéu khién Python SQL (PyODBC, psycopg2, MySQLdb, pymssql, v.v.) đều trả về danh sách các bộ dữ liệu khi chọn dữ liệu từ một bảng:
Bạn có thể chuyền danh sách các bộ dữ liệu tới hàm tạo DataFrame, nhưng bạn cũng cần tên cột có trong thuộc tính mô tả của con trỏ:
32
Trang 38Đây là một chút thao tác phức tạp mà bạn không muốn lặp lại mỗi lần truy vấn cơ sở dữ liệu pandas có ham read_frame trong module pandas.io.sql giup đơn giản hóa quy trình Chỉ cân truyền câu lệnh chọn và đôi tượng kết nôi:
Lưu trữ và tải dữ liệu trong cơ sở dữ liệu MongoDB
Cơ sở dữ liệu NoSQL có nhiều dang khác nhau Một số là các kho lưu trữ key value dict-like nhu BerkeleyDB hoacTokyo Cabiner, trong khi mét số khác dựa trên tải liệu, với đối tượng dict-like là đơn vị lưu trữ cơ bản Tôi đã chọn MongoDB (hffp://mongodb.org) làm ví dụ của mình Tôi đã khởi động một phiên bản MongoDB cục bộ trên máy của mình và kết nỗi với
nó trên công mặc định băng pymongo, trình điều khiến chính thức cho MongoDB:
Các tài liệu được lưu trữ trong MongoDB được tìm thấy trong các bộ sưu tập bên trong cơ sở
dữ liệu Mỗi phiên bản đang chạy của máy chủ MongoDB có thê có nhiều cơ sở dữ liệu và mỗi cơ sở dữ liệu có thể có nhiều bộ sưu tap Gia sử tôi muốn lưu trữ đữ liệu API Twitter từ phần trước của chương Đầu tiên, tôi có thê truy cập bộ sưu tập tweet (hiện đang trồng):
Sau đó, tôi tải danh sách các tweet và viết từng tweet vào bộ sưu tập bằng cách sử dụng tweets.save (ghi l¢nh Python vao MongoDB):
Bay g16, néu t61 muon lay tat ca cdc tweet của mình (nêu có) từ bộ sưu tập, tôi có thê truy van
bộ sưu tập theo cú pháp sau:
Cursor được trả về là một trình vòng lặp mang lại mỗi tài liệu dưới dạng dict Như trên, tôi
có thê chuyên đôi dữ liệu này thành DataFrame, tùy ý trích xuât một tập hợp con các trường
đữ liệu trong mỗi tweet:
33
Trang 39CHƯƠNG 7: SAP XEP DU LIEU: LAM SACH, CHUYEN DOI, HOP NHAT, DINH
HINH LAI Phần lớn công việc lập trình trong phân tích và mô hình hóa đữ liệu được dành cho việc chuẩn
bị đữ liệu: tải, làm sạch, chuyền đối và sắp xếp lại Đôi khi cách mà đữ liệu được lưu trữ trong tệp hoặc cơ sở đữ liệu không phải là cách bạn cần cho ứng dụng xử lý dữ liệu Nhiều người chọn ad hoc thực hiện xử lý đữ liệu đặc biệt từ dạng này sang dạng khác bằng cách sử dụng chương trình có mục đích chung, như Python, Perl, R hoặc Java hoặc các công cụ xử lý văn bản UNIX như sed hoặc awk May mắn thay, pandas cùng với thư viện chuẩn Python cung cấp cho bạn một bệ thuật toán vả thao tác cốt lõi ở cấp độ cao, linh hoạt và hiệu suất cao để cho phép bạn sắp xếp đữ liệu vào đúng dạng mà không gặp nhiều khó khăn
Nếu bạn nhận ra một loại thao tác dữ liệu không có trong cuốn sách nảy hoặc ở nơi nào khác trong thư viện pandas, vui lòng đề xuất nó trên danh sách gửi thư hoặc trang GitHub Thật vậy, phần lớn việc thiết kế và triển khai pandas đều được thúc đây bởi nhu cầu ứng dụng trong thé giới thực
KET HOP VA HOP NHAT CAC TAP DU LIEU
Dữ liệu chứa trong các đối tượng pandas có thể được kết hợp với nhau theo một số cách có săn:
« _ pandas.merge kết nối các hàng trong DataFrames dựa trên một hoặc nhiều key Điều nay sẽ quen thuộc với người dùng SQL, hoặc các cơ sở dữ liệu quan hệ khác vì nó thực hiện các hoạt động nỗi cơ sở dữ liệu
« - pandas.concat dân hoặc xếp các đôi tượng lại với nhau dọc theo một trục
« combine ñrst cho phép ghép các dữ liệu chồng chéo lại với nhau để điền vào các giá trị còn thiếu trong một đối tượng với các giá trị từ một đối tượng khác
Tôi sẽ giải quyết từng vấn đề này và đưa ra một số ví dụ Chúng sẽ được sử dụng làm ví dụ xuyên suốt phần còn lại của cuốn sách
Hợp nhất DataFrame kiểu cơ sở dữ liệu
Các thao tác hợp nhất hoặc nỗi, kết hợp các tập đữ liệu bằng cách liên kết các hàng sử dụng một hoặc nhiều key Các hoạt động nảy là trung tâm của cơ sở dữ liệu quan hệ Hàm hợp nhất trong pandas là điểm bắt đầu chính để sử dụng các thuật toán này trên dữ liệu của bạn Hãy bắt đầu với một ví dụ đơn giản:
34
Trang 40Đây là ví dụ về tình huỗng hợp nhất nhiều-một; đữ liệu trong đfI có nhiều hàng được gắn nhãn a và b, trong khi df2 chỉ có một hàng cho mỗi giá trị trong cột key Gọi mergøe với các đôi tượng này, chúng ta được:
Lưu ý rằng tôi không chỉ định cột nào sẽ tham gia Nếu không được chỉ định merge sé sur dụng tên cột chồng chéo làm những key Tuy nhiên, đó là một cách thực hành tốt đề xác định
rõ ràng:
Nếu tên cột khác nhau trong mỗi đối tượng, bạn có thê chỉ định chúng một cách riêng biệt:
Bạn có thể nhận thấy rằng giá trị 'c' và đ' cũng như dữ liệu liên quan bị thiếu trong kết quả Theo mặc định, việc hợp nhất sẽ thực hiện phép nối 'bên trong’; cac key trong kết quả là giao điểm Các tùy chọn khả thi khác là 'trái', 'phải' và 'bên ngoài Phép nôi ngoài lay sự kết hợp của các key, kết hợp tác dụng của việc áp dụng cả phép nối trái và phép nỗi phải:
35