Khi Python ngày càng nhận được nhiều sự quan tâm của cộng đồng Data Science trong những năm gần đây, tôi đã muốn tổng hợp cho các data scientists và engineers những thư viện được sử dụng nhiều nhất, dựa trên kinh nghiệm làm việc của bản thân.
Và vì tất cả các thư viên đều là nguồn mở, nên chúng tôi đã thêm các commits, số lượng các contributors và các chỉ số khác từ Github với vai trò là các chỉ số proxy thể hiện mức độ nổi tiếng của thư viện đó
Khi bắt đầu giải quyết task về khoa học bằng Python, tập hợp phần mềm được thiết kế riêng cho scientific computing trong Python sẽ không thể không hỗ trợ SciPy Stack của Python (đừng nhầm lẫn với thư viện SciPy – là 1 phần của stack này, và cộng đồng của stack này). Tuy nhiên, stack này khá rộng, có hơn cả tá thư viện trong nó và chúng ta thì lại muốn tập trung vào các core packages (đặc biệt là những packages quan trọng nhất).
Package cơ bản nhất, khi computation stack về khoa học được xây dựng là NumPy (viết tắt của Numerical Python), cung cấp rất nhiều tính năng hữu ích cho các phần operations trong n-arrays & matrics trong Python. Thư viện này cung cấp khả năng vector hóa các vận hành về toán trong type array NumPy, giúp cải thiện hiệu suất và theo đó là tốc độ execution.
SciPy là 1 thư viện phần mềm cho engineering và khoa học. Một lần nữa bạn cần phải hiểu sự khác biệt giữa SciPy Stack và thư viện SciPy. SciPy gồm các modules cho đại số tuyến tính, optimization, tích hợp và thống kế. Chức năng chính của thư viện SciPy được xây dựng trên NumPy, và arrays của nó sẽ tận dụng tối đa NumPy. Nó mang đến rất nhiều hoạt động hữu ích liên quan đến số như tích hợp số, optimization… qua các submodules chuyên biệt. Các hàm trong tất cả các submodules của SciPy đều được document tốt.
Pandas là 1 package Python được thiết kế để làm việc với dữ liệu đơn giản, trực quan, được “gắn nhãn” và có liên hệ với nhau. Pandas là công cụ hoàn hảo để tinh chỉnh và làm sạch dữ liệu. Pandas được thiết kế hỗ trợ cho các thao tác, tập hợp và visualize dữ liệu.
Có 2 data structure chính trong thư viện này:
“Series” — 1 chiều
“Data Frames”, 2 chiều
Ví dụ, khi muốn nhận Dataframe mới 2 loại structure này, bạn sẽ nhận DF bằng cách nối 1 hàng đơn với 1 DataFrame bằng cách đem tới 1 Series:
Danh sách những thứ bạn có thể làm với Pandas:
Lịch sử pull requests của GitHub
Một core package của SciPy Stack và 1 thư viện Python khác được xây dựng riêng cho việc generation các visualizations mạnh mẽ, đơn giản là Matplotlib. Matplotlib là 1 phần của phần mềm giúp cho Python (cùng với sự hỗ trợ của NumPy, SciPy và Pandas) trở thành đối thủ nổi bật với các công cụ khoa học như MatLab hoặc Mathematica.
Tuy nhiên, thư viện này ở cấp độ thấp, đồng nghĩa là bạn sẽ cần phải viết nhiều code hơn để tiếp cận các cấp độ visualization cao cấp và bạn sẽ phải nỗ lực hơn so với khi sử dụng các công cụ cấp cao, tuy nhiên nỗ lực này là hoàn toàn xứng đáng.
Chỉ cần nỗ lực 1 chút, bạn có thể tạo được các visualization bất kì:
Có rất nhiều công cụ để tạo nhãn, lưới, các biểu tượng/ kí hiệu/ chú giải và rất nhiều yếu tố format khác với Matplotlib. Về cơ bản, mọi thứ đều có thể custom được.
Thư viện này còn được rất nhiều platform hỗ trợ và tận dụng các GUI kít khác nhau để mô tả các visualizations kết quả. Thay đổi các IDEs (như IPython) sẽ hỗ trợ chức năng của Matplotlib.
Có vài thư viện bổ sung giúp việc visualization trở nên dễ dàng hơn.
Seaborn hầu như tập trung vào việc visualization của các models thống kê; các visualizations như thế gồm heat maps tổng hợp dữ liệu nhưng vẫn mô tả được toàn bộ mức độ phân tán. Seaborn được phát triển dựa trên Matplotlib.
Một thư viện visualization cực hay khác là Bokeh, hướng đến các visualization tương tác. Trái ngược với thư viện trước, Bokeh hoàn toàn độc lập so với Matplotlib. Bokeh tập trung chính vào tính tương tác và nó tạo các presentations qua các hệ điều hành hiện đại theo style của Data-Driven Documents (d3.js).
Plotly là toolbox cho web để xây dựng các visualizations, APIs được xây dựng bằng vài ngôn ngữ lập trình (như Python chẳng hạn). Có rất nhiều graphics mạnh mẽ, sáng tạo trên trang plot.ly. Để sử dụng Plotly, bạn sẽ cần set up API key riêng. Các graphics sẽ được xử lý phía server và được post lên internet, tuy nhiên vẫn có cách để ngăn việc này.
Scikits là các packages bổ sung của SciPy Stack được thiết kế cho các chức năng chuyên biêt như xử lý ảnh và hỗ trợ Machine Learning. Riêng với mảng Machine Learning, một trong những ưu điểm nổi bật của các packages này là scikit-learn. Package được xây dựng trên nền tảng của SciPy và tận dụng các operations về toán.
Scikit-learn có giao diện đơn giản, nhất quán, exposes a concise and consistent interface to the common machine learning algorithms, hỗ trợ việc mang Machine Learning vào các hệ thống production trở nên đơn giản hơn. Thư viện này bao gồm các code chất lượng và documentation hay, dễ sử dụng, hiệu suất cao, là chuẩn mực thực tế cho xây dựng Machine Learning bằng Python.
Liên quan đến Deep Learning, 1 trong những thư viện nổi bật và tiện ích dành cho Python là Keras, có thể hoạt động trên nền tảng của TensorFlow hoặc Theano.
Xem chi tiết bên dưới.
Theano là package Python định dạng các arrays đa chiều tương tự như NumPy, đi kèm với các operation về toán và expressions. Thư viện này được compiled, chạy hiệu quả trên tất cả các architectures. Do đội ngũ Machine Learning của Université de Montréal, Theano được sử dụng chính cho các hoạt động liên quan đến Machine Learning.
Lưu ý là Theano tích hợp với NumPy ở mức độ operation cấp thấp. Thư viện này cũng tối ưu hóa khả năng sử dụng GPU & CPU, giúp cho hiệu năng của computation thiên về data nhanh chóng hơn.
Hiệu quả và sự ổn định cũng mang đến những kết quả chính xác hơn, dù đó là những giá trị rất nhỏ như computation của log(1+x) sẽ cho ra kết quả chính xác đối với các giá trị nhỏ nhất của x.
Do các developer của Google phát triển, TensorFlow là thư viện nguồn mở của graphs computations thuộc luồng dữ liệu, thích hợp với Machine Learning. TensorFlow đáp ứng các requirement cao cấp trong môi trường Google để train Neural Networks và thư viện kế nhiệm của DistBelief – 1 hệ thống Machine Learning dựa trên Neural Networks. Tuy nhiên, TensorFlow không chỉ sử dụng cho mục đích khoa học trong Google mà có thể áp dụng trong các dự án thực tế.
Tính năng quan trọng của TensorFlow is hệ thống nút đa layer, cho phép huấn luyện các neural networks trên datasets lớn 1 cách nhanh chóng, hỗ trợ khả năng nhận diện giọng nói và định vị vật thể trong ảnh của Google.
Keras là thư viện nguồn mở được viết bằng Python dùng để build các Neural Networks ở cấp độ cao cấp của interface. Thư viện này đơn giản và có khả năng mở rộng cao. Keras sử dụng backend là Theano hoặc TensorFlow nhưng gần đây, Microsoft đã cố gắng tích hợp CNTK (Cognitive Toolkit của Microsoft) thành back-end mới.
Cách tiếp cận đơn giản về thiết kế nhắm đến quy trình experimentation dễ dàng, nhanh chóng từ việc build các compact systems.
Bắt đầu dùng Keras rất đơn giản, tiếp theo là prototyping nhanh. Keras được viết bằng Python, theo mô-đun và mở rộng được. Không chỉ đơn giản và có tính định hướng cao, Keras vẫn hỗ trợ modeling rất mạnh mẽ.
Ý tưởng chung về Keras là dựa trên các layers và mọi thứ khác cũng đều được xây dựng xung quanh các layer này. Data được chuẩn bị trong các tensors, layer đầu tiên chịu trách nhiệm về input của các tensors, layer cuối cùng chịu trách nhiệm output và model được build ở giữa.
Lịch sử GitHub pull requests
Tên của bộ thư viện này là viết tắt của Natural Language Toolkit & thư viện này được sử dụng cho các tasks đơn giản liên quan đến Natural Language Processing. NLTK từng dùng để hỗ trợ NLP & các lĩnh vực liên quan dạy và research (các lĩnh vực như Linguistics, Cognitive Science Artificial Intelligence…)
Chức năng của NLTK là giúp thực hiện các operations như text tagging, classification và tokenizing, định dạng các thực thể name, xây dựng cây corpus tiết lộ các dependencies inter & intra-sentence, stemming, semantic reasoning. Tất cả các building blocks hỗ trợ việc xây dựng các hệ thống research phức tạp cho các tasks khác nhau, ví dụ như các phân tích tâm lý hay tổng hợp tự nhiên.
Là 1 thư viện Python nguồn mở, Gensim implement các công cụ làm việc với vector space modeling và topic modeling. Thư viện này được thiết kế phù hợp với các text lớn, chỉ có trong xử lý in-memory. Sử dụng NumPy data structures và SciPy operations sẽ mang đến hiệu quả cực tốt. Cả hai đều hiệu quả và dễ sử dụng.
Gensim được thiết kế để dùng với các digital text thô và chưa được structure. Gensim implement các thuật toán như Dirichlet processes theo thứ bậ (HDP), phân tích ngữ nghĩa tiềm ẩn – latent semantic analysis (LSA) và phân bổ Dirichlet tiềm ẩn (LDA), cũng như tf-idf, projections ngẫu nhiên, word2vec và document2vec hỗ trợ việc kiểm tra các text để tái hiện lại các patterns words trong set documents (thường được đề cấp đến như 1 corpus). Tất cả các thuật toán đều là unsupervised —input duy nhất là corpus.
Lịch sử pull requests của GitHub
Scrapy là thư viện để tạo các chương trình crawling, được biết đến với cái tên thông dụng spider bots, để thu hồi dữ liệu đã structure như thông tin liên hệ hoặc các URLs từ web.
Scrapy được viết bằng Python, nguồn mở, mục đích chính là để scraping nhưng cũng đóng vai trò như 1 framework đầy đủ tính năng, có thể tập hợp data từ APIs và hoạt động như crawlers đa năng.
Thư viện này còn hỗ trợ nguyên tắc Don’t Repeat Yourself nổi tiếng trong thiết kế interface design — nó khuyến khích người dùng viết code chung, universal, tái sử dụng được, để từ đó xây dựng và scaling các crawler lớn.
Kiến trúc của Scrapy được xây dựng xung quanh class Spider, đóng gói set instruction theo sau bởi Crawler.
statsmodels thư viện Python cho phép người dùng thực hiện data exploration bằng rất nhiều methods ước lượng các mô hình thống kê và thực hiện các xác nhận và phân tích thống kê.
Thư viện này cũng có nhiều tính năng hữu ích như các thống kê mô tả & kết quả khi sử dụng các models hồi quy tuyến tính, các mô hình tuyến tính tổng quán, mô hình lựa chọn rời rạc, mô hình tuyến tính, mô hình phân tích chuỗi thời gian, các estimators đa dạng khác.
Thư viện này còn cung cấp các chức năng phát họa được thiết kế chuyên biệt trong phân tích thống kê và được tinh chỉnh để tối ưu hiệu suất với các sets big data của data thống kê.
Trên đây là những thư viện được rất nhiều data scientist và engineers đánh giá cao. Bên dưới là biểu đồ chi tiết về hoạt động trên Github của mỗi thư viện:
Dĩ nhiên, danh sách này vẫn chưa hoàn thiện và còn rất nhiều thư viện, framewoks đáng lưu ý khác. Chẳng hạn như các packages khác nhau của SciKit tập trung vào các domains riêng biệt như SciKit-Image làm việc với hình ảnh.
Xem thêm bài viết ngắn gọn hơn tại: https://activewizards.com/blog/top-15-libraries-for-data-science-in-python/
Devmaster Academy via TopDev and medium.com