Hướng dẫn how to process millions of records in python - cách xử lý hàng triệu bản ghi trong python

Tuy nhiên, một thư viện Python khác để phân tích dữ liệu mà bạn nên biết - và không, tôi không nói về Spark hoặc Dask

Ảnh của Christian Englmeier trên unplash

Phân tích dữ liệu lớn trong Python đang có thời Phục hưng. Tất cả bắt đầu với Numpy, cũng là một trong những khối xây dựng phía sau công cụ tôi đang trình bày trong bài viết này.ig Data Analysis in Python is having its renaissance. It all started with NumPy, which is also one of the building blocks behind the tool I am presenting in this article.

Vào năm 2006, dữ liệu lớn là một chủ đề đang dần đạt được lực kéo, đặc biệt là với việc phát hành Hadoop. Pandas theo sau ngay sau đó với các khung dữ liệu của nó. Năm 2014 là năm mà dữ liệu lớn trở thành chủ đạo, Apache Spark được phát hành năm đó. Trong năm 2018 đã đến Dask và các thư viện khác để phân tích dữ liệu trong Python.

Mỗi tháng tôi tìm thấy một công cụ phân tích dữ liệu mới, mà tôi mong muốn tìm hiểu. Đó là một khoản đầu tư xứng đáng là dành một hoặc hai giờ cho các hướng dẫn vì nó có thể giúp bạn tiết kiệm rất nhiều thời gian trong thời gian dài. Nó cũng rất quan trọng để giữ liên lạc với công nghệ mới nhất.

Mặc dù bạn có thể mong đợi rằng bài viết này sẽ là về DASK, bạn đã sai. Tôi tìm thấy một thư viện Python khác để phân tích dữ liệu mà bạn nên biết.

Giống như Python, điều quan trọng không kém là bạn trở nên thành thạo SQL. Trong trường hợp bạn không quen thuộc với nó và bạn có một số tiền để dự phòng, hãy xem khóa học này: Master SQL, ngôn ngữ cốt lõi để phân tích dữ liệu lớn.

Phân tích dữ liệu lớn trong Python đang có thời Phục hưng

Dưới đây là một vài liên kết có thể khiến bạn quan tâm:

- Complete your Python analyses 10x faster with Mito [Product]- Free skill tests for Data Scientists & ML Engineers [Test]- All New Self-Driving Car Engineer Nanodegree [Course]

Bạn có muốn đọc thêm các bài viết như vậy không? Nếu vậy, bạn có thể hỗ trợ tôi bằng cách nhấp vào bất kỳ liên kết nào ở trên. Một số trong số chúng là các liên kết liên kết, nhưng bạn không cần phải mua bất cứ thứ gì.

Gặp Vaex

Ảnh của Mathew Schwartz trên unplash

VAEX là một thư viện Python hiệu suất cao cho các khung dữ liệu ngoài lõi lười biếng (tương tự như gấu trúc), để trực quan hóa và khám phá các bộ dữ liệu bảng lớn.

Nó có thể tính toán số liệu thống kê cơ bản cho hơn một tỷ hàng mỗi giây. Nó hỗ trợ nhiều trực quan cho phép thăm dò tương tác dữ liệu lớn.

Điều gì khác biệt giữa Vaex và Dask?

Ảnh của Stillness Inmotion trên Unplash

VAEX không tương tự như DASK nhưng tương tự như Dask DataFrames, được xây dựng trên các khung dữ liệu gấu trúc hàng đầu. Điều này có nghĩa là DASK kế thừa các vấn đề về gấu trúc, như sử dụng bộ nhớ cao. Đây không phải là trường hợp Vaex.

Vaex không tạo ra các bản sao DataFrame để nó có thể xử lý khung dữ liệu lớn hơn trên các máy có bộ nhớ chính ít hơn.

Cả Vaex và Dask đều sử dụng xử lý lười biếng. Sự khác biệt duy nhất là Vaex tính toán trường khi cần thiết, trong đó chúng ta cần sử dụng rõ ràng chức năng tính toán.

Dữ liệu cần phải ở định dạng mũi tên HDF5 hoặc Apache để tận dụng tối đa VAEX.

Làm thế nào để cài đặt Vaex?

Để cài đặt Vaex đơn giản như cài đặt bất kỳ gói Python nào khác:

pip install vaex

Hãy cùng đưa Vaex vào lái thử

Ảnh của Eugene Chystiakov trên unplash

Hãy cùng tạo ra một khung dữ liệu gấu trúc với 1 triệu hàng và 1000 cột để tạo một tệp dữ liệu lớn.

import vaex
import pandas as pd
import numpy as np
n_rows = 1000000
n_cols = 1000
df = pd.DataFrame(np.random.randint(0, 100, size=(n_rows, n_cols)), columns=['col%d' % i for i in range(n_cols)])
df.head()
first vài dòng trong gấu trúc DataFrame (hình ảnh được tạo bởi tác giả)

DataFrame này sử dụng bao nhiêu bộ nhớ chính?

df.info(memory_usage='deep')

Hãy để Lôi lưu nó vào đĩa để chúng ta có thể đọc nó sau với Vaex.

file_path = 'big_file.csv'
df.to_csv(file_path, index=False)

Chúng tôi sẽ đạt được nhiều bằng cách đọc toàn bộ CSV trực tiếp với Vaex vì tốc độ sẽ tương tự như gấu trúc. Cả hai cần khoảng 85 giây trên máy tính xách tay của tôi.

Chúng ta cần chuyển đổi CSV thành HDF5 (định dạng dữ liệu phân cấp phiên bản 5) để xem lợi ích với VAEX. VAEX có chức năng chuyển đổi, thậm chí hỗ trợ các tệp lớn hơn bộ nhớ chính bằng cách chuyển đổi các khối nhỏ hơn.

Nếu bạn không thể mở một tệp lớn với gấu trúc, vì các ràng buộc bộ nhớ, bạn có thể che nó thành HDF5 và xử lý nó với Vaex.

dv = vaex.from_csv(file_path, convert=True, chunk_size=5_000_000)

Hàm này tạo ra một tệp HDF5 và tồn tại với đĩa.

Những gì các kiểu dữ liệu của DV?

type(dv)# output
vaex.hdf5.dataset.Hdf5MemoryMapped

Bây giờ, hãy để đọc bộ dữ liệu 7,5 GB với VAEX - chúng tôi sẽ không cần đọc lại vì chúng tôi đã có nó trong biến DV. Đây chỉ là để kiểm tra tốc độ.

dv = vaex.open('big_file.csv.hdf5')

Vaex cần ít hơn 1 giây để thực thi lệnh ở trên. Nhưng Vaex didn thực sự đọc tập tin, vì tải lười biếng, phải không?

Hãy để lực lượng để đọc nó bằng cách tính một tổng của col1.

suma = dv.col1.sum()
suma
# Output
# array(49486599)

Tôi thực sự ngạc nhiên về điều này. Vaex cần ít hơn 1 giây để tính tổng. Làm thế nào là có thể?

Mở dữ liệu như vậy là tức thời bất kể kích thước tệp trên đĩa. Vaex sẽ chỉ bản đồ bộ nhớ dữ liệu thay vì đọc nó trong bộ nhớ. Đây là cách làm việc tối ưu với các bộ dữ liệu lớn lớn hơn RAM có sẵn.

Âm mưu

Vaex cũng nhanh khi vẽ dữ liệu. Nó có các chức năng âm mưu đặc biệt Plot1D, Plot2D và Plot2D_Contour.

dv.plot1d(dv.col2, figsize=(14, 7))
plotting với Vaex (hình ảnh được thực hiện bởi tác giả)

Cột ảo

Vaex tạo ra một cột ảo khi thêm một cột mới, - một cột không có bộ nhớ chính khi nó được tính toán khi đang bay.

pip install vaex
0 Cột ảo trong Vaex (hình ảnh được tạo bởi tác giả)

Lọc hiệu quả

Vaex đã giành được bản sao DataFrame khi lọc dữ liệu, hiệu quả hơn về bộ nhớ.

pip install vaex
1

Tổng hợp

Các tập hợp hoạt động hơi khác so với trong gấu trúc, nhưng quan trọng hơn, chúng rất nhanh.

Hãy để thêm một cột ảo nhị phân trong đó col1 ≥ 50.

pip install vaex
2

VAEX kết hợp nhóm theo và tổng hợp trong một lệnh duy nhất. Lệnh dưới đây dữ liệu nhóm theo cột COL1_50 và tính toán tổng của cột COL3.

pip install vaex
3Aggregations in Vaex (hình ảnh được tạo bởi tác giả)

Tham gia

VAEX tham gia dữ liệu mà không tạo bản sao bộ nhớ, lưu bộ nhớ chính. Người dùng Pandas sẽ quen thuộc với chức năng tham gia:

pip install vaex
4

Sự kết luận

Cuối cùng, bạn có thể hỏi: Chúng ta có nên chuyển từ gấu trúc sang Vaex không? Câu trả lời là một không lớn.

Pandas vẫn là công cụ tốt nhất để phân tích dữ liệu trong Python. Nó có các chức năng được hỗ trợ tốt cho các nhiệm vụ phân tích dữ liệu phổ biến nhất.

Khi nói đến các tệp lớn hơn, gấu trúc có thể không phải là công cụ nhanh nhất. Đây là một nơi tuyệt vời để Vaex nhảy vào.

VAEX là một công cụ bạn nên thêm vào hộp công cụ phân tích dữ liệu của mình.

Khi làm việc trong một nhiệm vụ phân tích trong đó gấu trúc quá chậm hoặc đơn giản là bị rơi, hãy kéo Vaex ra khỏi hộp công cụ của bạn, hãy lọc ra các mục quan trọng nhất và tiếp tục phân tích với gấu trúc.

Trước khi bạn đi

Theo dõi tôi trên Twitter, nơi tôi thường xuyên tweet về khoa học dữ liệu và học máy.

Pandas có thể xử lý 2 triệu hồ sơ không?

Thông thường, gấu trúc tìm thấy 'điểm ngọt ngào trong việc sử dụng trong các bộ dữ liệu có kích thước thấp đến trung bình lên tới vài triệu hàng.Ngoài ra, các khung phân tán hơn như Spark hoặc Dask thường được ưa thích.Tuy nhiên, có thể mở rộng quy mô gấu trúc vượt quá điểm này.It is, however, possible to scale pandas much beyond this point.

Python có thể xử lý 1 tỷ hàng không?

Giới thiệu về Vaex.VAEX là một thư viện Python là một khung dữ liệu ngoài core, có thể xử lý tới 1 tỷ hàng mỗi giây.1 tỷ hàng.Vaex is a python library that is an out-of-core dataframe, which can handle up to 1 billion rows per second. 1 billion rows.

Làm thế nào để Python xử lý các tệp dữ liệu lớn?

3 cách để đối phó với các bộ dữ liệu lớn trong Python.Là một nhà khoa học dữ liệu, tôi thấy mình ngày càng phải đối phó với dữ liệu lớn.....
Giảm sử dụng bộ nhớ bằng cách tối ưu hóa các loại dữ liệu.....
Chia dữ liệu thành các khối.....
Tận dụng đánh giá lười biếng ..

Có bao nhiêu hàng có thể xử lý Python?

Nó có thể tính toán số liệu thống kê cơ bản cho hơn một tỷ hàng mỗi giây.