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
8
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- 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 psutil9
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
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 psutil0
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
Đầ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 psutil1
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
Đầu ra của mã trên
Bước 4. Chuyển đổi tên cột thành chữ thường
import psutil2
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
Đầ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 psutil3
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
Đầ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 psutil4
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
Đầ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 psutil5
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
Đầ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 psutil6
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
Đầ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 psutil7
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
Đầ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 psutil90
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
Đầ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 psutil91
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
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 psutil92
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
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 psutil93
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
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 psutil3
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
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 PythonHãy bắt đầu bằng cách kiểm tra bộ nhớ hệ thống của chúng tôi.
import psutil4 sẽ hoạt động trên Windows, MAC và Linux. Có thể tải xuống
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
import psutil5 từ trình quản lý gói của Python với cài đặt pip
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
Trong trường hợp bạn gặp lỗi biên dịch với
import psutil4 khi cài đặt, hãy thử các bước bên dưới
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
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 psutil7 từ
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
import psutil8________số 8
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
Phương pháp
import psutil9 hiển thị mức sử dụng bộ nhớ của khung dữ liệu của chúng tôi trong khi
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
import pandas as pddata = pd.read_csv["tmdb_5000_movies.csv"]# Lets check the memory usage of the file0 hiển thị tổng số hàng của khung dữ liệu
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
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 psutil1
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. 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 file1 để xác thực chuyên sâu các loại dữ liệu của chúng ta
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
import psutil3
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
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 psutil4
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
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 file2 và
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
import pandas as pddata = pd.read_csv["tmdb_5000_movies.csv"]# Lets check the memory usage of the file3, nghiên cứu dữ liệu/độ chính xác và chuyển đổi chúng
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
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 psutil7
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
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 file4 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
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
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 file5 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
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
import psutil0
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
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 psutil1
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
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 psutil2
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
import pandas as pddata = pd.read_csv["tmdb_5000_movies.csv"]# Lets check the memory usage of the file6 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
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
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 psutil0
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
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 file7 để bao gồm các cột bạn muốn tải
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
Ở đây, chúng ta sẽ bỏ qua các cột "trang chủ", "từ khóa",
"origin_title" và "khẩu hiệu".
import psutil1
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
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 psutil2
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
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