Cách tổng hợp một cột csv trong Python mà không cần gấu trúc

Trong hầu hết các kịch bản dữ liệu lớn, tác vụ làm sạch dữ liệu là một phần không thể thiếu của đường dẫn dữ liệu trong đó tệp thô được lấy và hầu hết các hoạt động làm sạch bên dưới được thực hiện trên dữ liệu theo trường hợp sử dụng. Nếu không làm sạch dữ liệu, rất khó để chuẩn hóa cấu trúc của dữ liệu và lưu trữ nó vào các hồ dữ liệu, điều này sẽ có tác động mạnh mẽ đến các quyết định kinh doanh trên dữ liệu

Nắm vững nghệ thuật làm sạch dữ liệu trong học máy

Yêu cầu hệ thống

  • Cài đặt mô-đun python như sau nếu không tìm thấy các mô-đun bên dưới
  • import psutil
    memory = psutil.virtual_memory[]
    print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
    # Output
    *** Memory used percentage - 63.0
    **** Free Memory available - 6 GB
    8
  • Các mã dưới đây có thể được chạy trong sổ ghi chép Jupyter hoặc bất kỳ bảng điều khiển python nào

Bước 1. Nhập mô-đun

Nhập khẩu

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
9

Bước 2. Đọc tệp csv

Đọc tệp csv từ cục bộ và tạo khung dữ liệu bằng gấu trúc và in 5 dòng để kiểm tra dữ liệu

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
0

Đầu ra của mã trên

Bước 3. Thay đổi định dạng ngày

Trong đoạn mã dưới đây, thay đổi định dạng cột ngày "28-Tháng 2-2015" thành 28-02-2015

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
1

Đầu ra của mã trên

Bước 4. Chuyển đổi tên cột thành chữ thường

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
2

Đầu ra của mã trên

Bước 5. Thay thế khoảng trống bằng dấu gạch dưới

Trong đoạn mã dưới đây, chúng tôi sẽ thay thế các khoảng trống trong tên cột bằng dấu gạch dưới

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
3

Đầu ra của mã trên

Bước 6. Đổi tên tên cột

Ở bên dưới, chúng tôi đang đọc các tên cột từ khung dữ liệu và đổi tên các tên cột để tạo một khung dữ liệu mới. In các cột để kiểm tra

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
4

Đầu ra của mã trên

Đầu ra của mã trên

Tạo một tên cột đổi tên khung dữ liệu mới bằng cách sử dụng phương thức đổi tên ở định dạng giá trị khóa và in 5 dòng

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
5

Đầu ra của mã trên

Bước 7. Kiểm tra giá trị còn thiếu

Để phát hiện các giá trị bị thiếu, thư viện Pandas cung cấp các hàm isnull[] và notnull[], đây cũng là các phương thức trên các đối tượng Series và DataFrame. Đúng nếu giá trị ban đầu là null, Sai nếu giá trị ban đầu không phải là null

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
6

Đầu ra của mã trên

Một cách khác có thể dễ dàng thực hiện là sử dụng hàm isnull được ghép nối với hàm 'sum'. nó sẽ đưa ra số lượng giá trị null từ mỗi cột

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
7

Đầu ra của mã trên

Bước 8. Điền dữ liệu còn thiếu

Thư viện Pandas cung cấp các loại phương pháp khác nhau để làm sạch các giá trị bị thiếu. Hàm fillna có thể "điền vào" các giá trị NA với dữ liệu khác null theo một số cách

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
90

Đầu ra của mã trên. Trong đoạn mã trên, điền các giá trị null bằng 0

Bước 9. Bỏ dữ liệu bị thiếu

Điều cuối cùng bạn có thể làm là xóa các hàng dữ liệu bị thiếu. Chúng tôi có thể xóa tất cả các hàng có bất kỳ dữ liệu bị thiếu nào như hình bên dưới

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
91

Cách khác. Sử dụng trình đơn thả để Xóa hàng hoặc cột bằng cách chỉ định tên nhãn và dữ liệu trục tương ứng như minh họa bên dưới

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
92

Bước 10. Tạo tệp csv

Sau khi đổi tên các tên cột, hãy ghi dữ liệu được định dạng vào tệp csv trong tệp cục bộ hoặc hdfs của bạn.

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
93

Nếu bạn có một tệp CSV lớn mà bạn muốn xử lý bằng gấu trúc một cách hiệu quả, bạn có một số tùy chọn sẽ được giải thích trong bài đăng này

Vấn đề tốc độ khi xử lý dữ liệu

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
3

Bạn cần có khả năng điều chỉnh dữ liệu của mình trong bộ nhớ để sử dụng gấu trúc với nó. Nếu bạn có thể xử lý các phần của nó cùng một lúc, bạn có thể đọc nó thành nhiều phần và xử lý từng phần. Ngoài ra, nếu bạn biết rằng mình phải có đủ bộ nhớ để tải tệp, thì có một vài gợi ý giúp giảm kích thước tệp

Lưu ý rằng nói chung, bạn nên có dung lượng bộ nhớ gấp ba đến mười lần kích thước của Khung dữ liệu mà bạn muốn thao tác. Bộ nhớ bổ sung sẽ cung cấp cho bạn đủ dung lượng để thực hiện nhiều thao tác phổ biến

1. Kiểm tra bộ nhớ hệ thống của bạn bằng Python

Hãy bắt đầu bằng cách kiểm tra bộ nhớ hệ thống của chúng tôi.

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
4 sẽ hoạt động trên Windows, MAC và Linux. Có thể tải xuống
import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
5 từ trình quản lý gói của Python với cài đặt pip

Trong trường hợp bạn gặp lỗi biên dịch với

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
4 khi cài đặt, hãy thử các bước bên dưới

sudo yum install python3-devel
sudo pip install psutil
# now check the version using
pip freeze | grep psutil

Bây giờ hãy xem bộ nhớ hiện tại của hệ thống của chúng tôi

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB

2. Xác định mức sử dụng bộ nhớ của tệp CSV của chúng tôi

Bây giờ chúng tôi sẽ ước tính toàn bộ tệp sẽ chiếm bao nhiêu bộ nhớ. Tôi đã sử dụng bộ dữ liệu

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
7 từ
import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
8

________số 8

Phương pháp

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
9 hiển thị mức sử dụng bộ nhớ của khung dữ liệu của chúng tôi trong khi
import pandas as pddata = pd.read_csv["tmdb_5000_movies.csv"]# Lets check the memory usage of the file 
print[f" ** Memory usage of the file - {sum[data.memory_usage[]] * 0.000001} MB for {len[data.index]} Rows"]
>> # Output
** Memory usage of the file - 8.453408 MB for 52833 Rows
0 hiển thị tổng số hàng của khung dữ liệu

Chúng ta có thể thấy rằng 52833 hàng sử dụng khoảng hơn 8 MB bộ nhớ. Nếu chúng tôi có một tỷ hàng, thì sẽ chiếm khoảng hơn 151 GB bộ nhớ. Bây giờ, đó là một ý tưởng tồi để phù hợp với mọi thứ vào bộ nhớ và khiến nó bị treo, đừng làm điều đó

3. Hiểu các loại dữ liệu trong tệp csv của chúng tôi

Các tệp CSV không chứa thông tin về các loại dữ liệu, không giống như cơ sở dữ liệu, gấu trúc cố gắng suy ra các loại cột và suy ra chúng từ NumPy

Làm thế nào nó làm?

Bây giờ, hãy xem giới hạn của các loại dữ liệu này

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
1

4. Chuyển đổi kiểu dữ liệu số

Hãy chạy phương thức

import pandas as pddata = pd.read_csv["tmdb_5000_movies.csv"]# Lets check the memory usage of the file 
print[f" ** Memory usage of the file - {sum[data.memory_usage[]] * 0.000001} MB for {len[data.index]} Rows"]
>> # Output
** Memory usage of the file - 8.453408 MB for 52833 Rows
1 để xác thực chuyên sâu các loại dữ liệu của chúng ta

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
3

Bây giờ, hãy tóm tắt các loại dữ liệu và số lượng cột và xem cách gấu trúc phân loại dữ liệu của chúng tôi

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
4

Chúng tôi sẽ tập trung vào các loại dữ liệu

import pandas as pddata = pd.read_csv["tmdb_5000_movies.csv"]# Lets check the memory usage of the file 
print[f" ** Memory usage of the file - {sum[data.memory_usage[]] * 0.000001} MB for {len[data.index]} Rows"]
>> # Output
** Memory usage of the file - 8.453408 MB for 52833 Rows
2 và
import pandas as pddata = pd.read_csv["tmdb_5000_movies.csv"]# Lets check the memory usage of the file 
print[f" ** Memory usage of the file - {sum[data.memory_usage[]] * 0.000001} MB for {len[data.index]} Rows"]
>> # Output
** Memory usage of the file - 8.453408 MB for 52833 Rows
3, nghiên cứu dữ liệu/độ chính xác và chuyển đổi chúng

Tôi sẽ sử dụng tham số `dtype` để yêu cầu gấu trúc sử dụng các loại số nhỏ hơn thay vì 64 bit mặc định, bây giờ bạn đã hiểu tại sao bước trên để hiểu các loại dữ liệu trước tiên lại quan trọng

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
7

Như bạn có thể thấy bằng cách thay đổi loại dữ liệu để sử dụng các loại số nhỏ hơn đã tiết kiệm cho chúng tôi 23% Tiết kiệm, bạn cũng có thể sử dụng

import pandas as pddata = pd.read_csv["tmdb_5000_movies.csv"]# Lets check the memory usage of the file 
print[f" ** Memory usage of the file - {sum[data.memory_usage[]] * 0.000001} MB for {len[data.index]} Rows"]
>> # Output
** Memory usage of the file - 8.453408 MB for 52833 Rows
4 nếu bạn đang giữ một dữ liệu nhỏ, điều này có thể giúp tiết kiệm thêm

Chúng tôi hiện ở mức 67% so với kích thước ban đầu. Đó là khoảng 23% bộ nhớ được lưu

5. Chuyển đổi kiểu dữ liệu đối tượng

Các kiểu dữ liệu đối tượng coi các giá trị là chuỗi. Giá trị chuỗi trong gấu trúc chiếm nhiều bộ nhớ vì mỗi giá trị được lưu trữ dưới dạng chuỗi Python, Nếu cột không phải là số, gấu trúc sẽ chuyển đổi nó thành cột đối tượng

Chuyển đổi các loại dữ liệu Đối tượng thành phân loại sẽ sử dụng ít bộ nhớ hơn vì Pandas chỉ lưu trữ chuỗi một lần, thay vì tạo chuỗi mới cho mỗi hàng

Điều đầu tiên, hãy kiểm tra phương pháp

import pandas as pddata = pd.read_csv["tmdb_5000_movies.csv"]# Lets check the memory usage of the file 
print[f" ** Memory usage of the file - {sum[data.memory_usage[]] * 0.000001} MB for {len[data.index]} Rows"]
>> # Output
** Memory usage of the file - 8.453408 MB for 52833 Rows
5 của các cột đối tượng. Bạn có thể chuyển đổi chúng thành các cột phân loại để tiết kiệm nhiều bộ nhớ hơn Nếu chúng có số lượng thẻ thấp

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
0

Bản số không cao, tôi sẽ bắt đầu chuyển đổi các loại dữ liệu Đối tượng thành Danh mục

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
1

Chúng tôi hiện ở mức 46% so với kích thước ban đầu. Đó là khoảng 54% bộ nhớ được lưu

6. Xác định và loại bỏ các bản sao trong Pandas

Có nhiều khả năng xảy ra các bản sao trong tệp nguồn mà bạn đang xử lý, việc loại bỏ chúng nếu không cần thiết sẽ giúp bạn tiết kiệm thêm một số bộ nhớ.
Trong trường hợp của tôi, để tăng kích thước tệp, tôi phải lặp lại các bản ghi. ]

Hãy xác thực số lượng mục nhập trùng lặp trong tệp nguồn của chúng tôi trước khi loại bỏ chúng

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
2

import pandas as pddata = pd.read_csv["tmdb_5000_movies.csv"]# Lets check the memory usage of the file 
print[f" ** Memory usage of the file - {sum[data.memory_usage[]] * 0.000001} MB for {len[data.index]} Rows"]
>> # Output
** Memory usage of the file - 8.453408 MB for 52833 Rows
6 xuất ra tổng số hàng trong khung dữ liệu trong khi len[dataframe. drop_duplicates[]] sẽ xuất các giá trị duy nhất trong DataFrame

Nên file của mình như đã nói ở trên có khá nhiều file trùng lặp, bỏ đi sẽ đỡ tốn bộ nhớ

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
0

Chà, đó là một số tiết kiệm sau khi xóa các bản sao. Nếu bạn có các bản sao và muốn loại bỏ chúng thì hãy sử dụng bước này

7. Xóa các cột không mong muốn

Nếu có các cột mà bạn biết có thể bỏ qua, hãy chỉ định tham số

import pandas as pddata = pd.read_csv["tmdb_5000_movies.csv"]# Lets check the memory usage of the file 
print[f" ** Memory usage of the file - {sum[data.memory_usage[]] * 0.000001} MB for {len[data.index]} Rows"]
>> # Output
** Memory usage of the file - 8.453408 MB for 52833 Rows
7 để bao gồm các cột bạn muốn tải

Ở đây, chúng ta sẽ bỏ qua các cột "trang chủ", "từ khóa",
"origin_title" và "khẩu hiệu".

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
1

Chúng tôi hiện ở mức 32% so với kích thước ban đầu. Đó là khoảng 68% bộ nhớ được lưu

8. Xử lý khối dữ liệu với Pandas

Nếu bạn có thể xử lý các khối dữ liệu tại một thời điểm và không cần tất cả dữ liệu đó trong bộ nhớ, bạn có thể sử dụng tham số kích thước khối. Cá nhân tôi khuyên đây là lựa chọn cuối cùng của bạn

import psutil
memory = psutil.virtual_memory[]
print[f" {'*' * 3} Memory used percentage - {memory.percent} \n {'*' * 4} Free Memory available - { round[memory.free / [1024.0 ** 3]]} GB"]
# Output
*** Memory used percentage - 63.0
**** Free Memory available - 6 GB
2

Chúng tôi hiện ở mức 14% so với kích thước ban đầu. Đó là khoảng 86% bộ nhớ được lưu

Cảm ơn bạn đã đọc qua bài viết. Đó là nó cho tôi ngày hôm nay. Nếu bạn thích bài viết này và nếu nó giúp bạn theo bất kỳ cách nào, vui lòng theo dõi tôi

Chủ Đề