Trong quá trình viết code xử lý dữ liệu, bạn có thể sẽ phải cần một khối lượng dữ liệu khổng lồ để kiểm tra xem chương trình có hoạt động theo ý muốn hay không trước khi Release vào môi trường Production. Hoặc trong một trường hợp khác, bạn cần một lượng dữ liệu mẫu gần giống với môi trường Production nhưng lại không thể truy cập dữ liệu Production trong môi trường Development. Faker là công cụ tạo dữ liệu dummy (dữ liệu ảo) trên Python cho phép tạo ra lượng lớn dữ liệu một cách ngẫu nhiên để dùng cho các mục đích khác nhau. Team mình thường hay dùng Faker để tạo hàng trăm MegaByte dữ liệu dùng cho Data Pipeline Testing. Hôm nay mình sẽ chia sẻ với các bạn cách sử dụng thư việc này.

Chuẩn bị

Trước tiên bạn cần cài đặt Faker bằng cách chạy lệnh sau trong Jupyter Notebook:

!pip install Faker

Nếu muốn tạo Data Frame từ dữ liệu của Faker thì bạn cũng có thể cài thêm pandas nếu chưa cài trước đó.

!pip install pandas

Tiếp theo, bạn có thể nhúng Faker và pandas vào notebook.

from faker import Faker
import pandas as pd

Faker

Để sử dụng Faker, bạn cần tạo Instance trước. Sau khi tạo Instance, bạn sẽ có thể truy cập các hàm tạo dữ liệu dummy được cung cấp bởi nhà phát triển. Ở đây chúng ta sẽ tạo Instance tên là fake.

fake = Faker()

Bây giờ bạn có thể thử tạo tên ảo của một người nào đó như sau.

fake.name()
>> 'Heather Wallace'

Hoặc tạo địa chỉ ảo

fake.address()
>> '83385 Jason Highway\nNew Cliffordshire, ME 80063'

Tên công ty ảo

fake.company()
>> 'Henderson-Harris'

Email ảo

fake.email()
>> This email address is being protected from spambots. You need JavaScript enabled to view it.'

Chọn ngẫu nhiên một giá trị từ Collection cho trước

fake.random_element(elements = ('Credit', 'Debit'))
>> 'Debit'

Bạn có thể tham khảo thêm các hàm tạo dữ liệu ảo khác ở đây: https://faker.readthedocs.io/en/master/providers.html

Tạo Data Frame với Faker

Để tạo data frame với Faker, bạn có thể dùng đoạn code mẫu sau.

# So luong dong du lieu can tao
N_RECORDS = 1000

# Tien hanh tao du lieu
name = [fake.name() for _ in range(N_RECORDS)]
address = [fake.address() for _ in range(N_RECORDS)]
company = [fake.company() for _ in range(N_RECORDS)]
card_type = [fake.random_element(elements = ('Credit', 'Debit')) for _ in range(N_RECORDS)]

# Tao data frame
data = {'name': name, 'address': address, 'company': company, 'card_type': card_type}
df = pd.DataFrame.from_dict(data)

Hiển thị 5 dòng đầu tiên.

df.head()

Kiểm tra thông tin Data Frame. Bạn có thể thấy data frame này có 4 cột và 1000 dòng đúng như thiết lập của chúng ta.

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000 entries, 0 to 999
Data columns (total 4 columns):
 #   Column     Non-Null Count  Dtype 
---  ------     --------------  ----- 
 0   name       1000 non-null   object
 1   address    1000 non-null   object
 2   company    1000 non-null   object
 3   card_type  1000 non-null   object
dtypes: object(4)
memory usage: 31.4+ KB

Cuối cùng bạn có thể xuất dữ liệu này ra dạng CSV để tiện dùng cho ứng dụng khác nếu cần.

with open('./dummy_data.csv', 'w+') as output_file:
    df.to_csv(output_file, index=False)

File xuất ra có nội dung như sau:

name,address,company,card_type
Adrian Mason,"7421 Jordan Estate\nPort Christine, KS 63266","Higgins, Williams and Carter",Debit
Ricky Mack,"9688 Pamela Estates Apt. 029\nAnthonyville, VT 49551",Scott-Vaughn,Debit
Tabitha Miller,"14257 Aguirre Islands\nPort Daniel, WY 65373","Garrison, Barr and Combs",Debit
Matthew Pittman,"3531 Lopez Rapid Suite 893\nAlyssaview, MD 44356",Fox-Austin,Credit
Barry Stokes,"23795 Reyes Pines Suite 697\nWest Joshua, KY 60989",Young and Sons,Debit

Vậy là bạn đã có một file dữ liệu ảo với 1000 dòng để thử nghiệm code của mình rồi!

Bạn có thể truy cập code đầy đủ của bài viết này tại đây: https://github.com/chauvinhloi/datasciencevn/blob/main/faker/Notebook.ipynb

 

Tạo dữ liệu dummy với Faker https://datasciencevn.com/images/contents/Python/faker/intro.jpg#joomlaImage://local-images/contents/Python/faker/intro.jpg?width=1920&height=1283 Binh Le
Tin Tức Liên Quan