Faker Python Series 4: Data Dummy Unik, Opsional, dan Berbobot

Hai, teman-teman! Coba bayangin kamu sedang menyiapkan 1.000 pelanggan dummy dengan Faker untuk menguji fitur registrasi. Tabel pelanggan sudah rapi, dan kolom email diberi aturan UNIQUE, karena satu email hanya boleh dipakai satu akun. Skripnya dijalankan, lalu berhenti di tengah jalan:

Gagal di pelanggan ke-294: Puti Siska Manullang, M.Ak <qsaragih@hotmail.com>
IntegrityError: UNIQUE constraint failed: pelanggan.email

Ternyata qsaragih@hotmail.com sudah dipakai pelanggan ke-79, Prayogo Irawan. Dua orang yang namanya sama sekali tidak mirip mendapat email yang sama, dan dua-duanya bukan bermarga Saragih. Di bagian 4 ini kita bereskan masalah itu dengan fitur unique di Faker Python, sekalian dua masalah lain yang membuat data dummy terasa palsu: datanya terlalu lengkap, dan pilihannya muncul terlalu rata.

Sampul Faker Python Series bagian 4: Data Dummy Unik, Opsional, dan Berbobot, dengan logo Python di atas latar sirkuit biru tua

TL;DR: Faker mengacak tanpa mengingat hasil sebelumnya, jadi nilai kembar pasti muncul kalau datanya banyak. fake.unique membuat Faker mengingat nilai yang sudah keluar, dan melempar UniquenessException kalau stok nilainya habis. fake.optional mengosongkan sebagian nilai menjadi None sesuai peluang prob. random_element dengan OrderedDict membuat pilihan muncul sesuai bobot, dan Faker(["id_ID", "en_US"]) mencampur beberapa locale. Hasilnya, 1.000 pelanggan dummy lolos import tanpa error.

Kartu istilah Unique Constraint atau batasan keunikan: Aturan di tabel database yang menolak dua baris berisi nilai yang sama di satu kolom, misalnya email

Sebelum Mulai

Artikel ini melanjutkan tiga bagian sebelumnya. Kalau belum pernah memakai Faker, mulai dari bagian 1 tentang dasar Faker dan locale id_ID. Penyimpanan ke CSV dan JSON, serta Faker.seed(), dibahas di bagian 2.

Semua contoh di sini diuji dengan Python 3.14 dan Faker 40.43.0, dan selalu diawali Faker.seed(2026). Jadi kalau versi Faker-mu sama, hasilnya juga akan sama persis. Faker versi 40 butuh minimal Python 3.10, sesuai keterangan di halaman Faker di PyPI.

Kenapa Data Dummy Faker Bisa Kembar?

Setiap kali dipanggil, Faker mengambil nilai acak dari daftar yang terbatas, dan tidak mengingat apa yang sudah pernah keluar. Makin banyak data yang dibuat, makin besar peluang dua panggilan mendapat nilai yang sama. Email dari free_email() pun dirakit dari potongan nama, angka, dan beberapa domain gratis, jadi kombinasinya tidak tak terbatas.

Coba bayangin kocokan arisan. Nama yang sudah keluar dimasukkan lagi ke gelas sebelum kocokan berikutnya, jadi nama yang sama bisa keluar dua kali. Faker bekerja persis seperti itu.

Kita hitung seberapa sering hal itu terjadi:

from collections import Counter

from faker import Faker

Faker.seed(2026)
fake = Faker("id_ID")

nama_depan = [fake.first_name() for _ in range(500)]
print("Nama depan berbeda:", len(set(nama_depan)), "dari 500")

daftar_email = [fake.free_email() for _ in range(1000)]
kembar = {email: jumlah for email, jumlah in Counter(daftar_email).items() if jumlah > 1}
print("Email kembar dari 1.000:", kembar)

Hasilnya:

Nama depan berbeda: 356 dari 500
Email kembar dari 1.000: {'dlestari@hotmail.com': 2}

Dari 500 nama depan, hanya 356 yang berbeda. Email lebih jarang kembar, tapi satu saja sudah cukup untuk menggagalkan import ke kolom UNIQUE.

Ada satu hal lagi yang terlihat di pembuka tadi: email tidak dibuat dari nama pelanggan. fake.name() dan fake.free_email() adalah dua panggilan acak yang terpisah, jadi Puti Siska Manullang bisa saja mendapat email qsaragih.

Dokumentasi Faker sendiri mengingatkan soal ini dengan menyebut birthday paradox: dalam kelompok 23 orang saja, peluang ada dua orang yang berulang tahun di hari yang sama sudah lebih dari 50%. Nilai kembar jauh lebih cepat muncul daripada yang kita kira.

Menjaga Data Tetap Unik: dari set() Manual ke fake.unique

fake.unique membuat Faker mengingat semua nilai yang sudah dihasilkan, terpisah untuk setiap method. Kalau nilai baru ternyata kembar, Faker mengacak ulang sampai mendapat nilai yang belum pernah keluar. Cara memakainya cukup menyisipkan .unique di antara fake dan nama method, misalnya fake.unique.free_email().

Sebelum memakai fitur itu, kita coba dulu cara yang paling terpikir: mencatat sendiri.

Cara Manual: Catat Sendiri dengan set

Idenya sederhana. Simpan semua email yang sudah keluar di sebuah set, dan kalau ada email yang sudah tercatat, ambil ulang:

def buat_email_unik(jumlah):
    sudah_dipakai = set()
    hasil = []
    while len(hasil) < jumlah:
        email = fake.free_email()
        if email in sudah_dipakai:
            continue                      # kembar, ambil ulang
        sudah_dipakai.add(email)
        hasil.append(email)
    return hasil


daftar_email = buat_email_unik(1000)
print(len(daftar_email), "email,", len(set(daftar_email)), "berbeda")
1000 email, 1000 berbeda

Berhasil. Tapi ada dua masalah. Pertama, setiap kolom yang harus unik butuh set dan perulangannya sendiri. Kedua, kalau stok nilai yang mungkin keluar ternyata lebih sedikit dari yang diminta, misalnya 21 nomor meja dari rentang 1 sampai 20, perulangan while ini tidak akan pernah selesai. Program jadi hang tanpa pesan apa pun.

fake.unique: Faker yang Punya Ingatan

Yang kita butuhkan sebenarnya kocokan arisan yang kertasnya tidak dimasukkan lagi ke gelas. Faker sudah menyediakannya lewat fake.unique:

daftar_email = [fake.unique.free_email() for _ in range(1000)]
print(len(daftar_email), "email,", len(set(daftar_email)), "berbeda")
1000 email, 1000 berbeda

Hasilnya sama dengan cara manual, tapi tanpa set dan tanpa while. Ingatannya terpisah per method, jadi fake.unique.free_email() dan fake.unique.name() punya catatan masing-masing.

UniquenessException: Saat Stok Nilai Habis

Lalu bagaimana dengan masalah 21 nomor meja tadi? Faker tidak mengulang selamanya. Kalau setelah 1.000 kali percobaan nilai baru tetap kembar, Faker menyerah dan melempar UniquenessException:

from faker.exceptions import UniquenessException

try:
    nomor_meja = [fake.unique.random_int(min=1, max=20) for _ in range(21)]
except UniquenessException as e:
    print("UniquenessException:", e)
UniquenessException: Got duplicated values after 1,000 iterations.

Error ini jauh lebih baik daripada program yang diam-diam hang. Pesannya juga jelas: stok nilainya habis. Perbaikannya, perbesar rentang nilai atau kurangi jumlah data yang diminta.

Jebakan: Faker.seed() Tidak Menghapus Ingatan unique

Ini yang sempat membuat bingung. Seed dipakai supaya hasil Faker bisa diulang, jadi wajar kalau kita mengira Faker.seed() juga mengembalikan semuanya ke kondisi awal. Ternyata tidak:

Faker.seed(2026)
try:
    fake.unique.random_int(min=1, max=20)
except UniquenessException:
    print("Setelah seed ulang, nomor meja 1-20 masih dianggap terpakai")

fake.unique.clear()
print("Setelah clear():", fake.unique.random_int(min=1, max=20))
Setelah seed ulang, nomor meja 1-20 masih dianggap terpakai
Setelah clear(): 18

Seed hanya mengatur urutan angka acaknya. Catatan nilai yang sudah dipakai disimpan terpisah di object fake, dan baru terhapus lewat fake.unique.clear(). Kalau kamu membuat beberapa dataset dalam satu program, panggil clear() di antara keduanya.

Kolom yang Boleh Kosong: fake.optional

fake.optional membungkus method Faker supaya kadang mengembalikan None. Parameter prob adalah peluang nilainya terisi, dan nilai bawaannya 0,5. Jadi fake.optional.phone_number(prob=0.7) menghasilkan nomor telepon sekitar 70% dari waktu, dan None sisanya.

Kenapa perlu sengaja dikosongkan? Data dari Faker selalu lengkap: setiap pelanggan punya nomor telepon, alamat, dan tanggal lahir. Data asli tidak seperti itu. Banyak orang melewati kolom yang tidak wajib.

Kalau data uji selalu lengkap, kode seperti telepon.startswith("+62") tidak pernah bertemu None. Bug-nya baru ketahuan setelah aplikasi dipakai orang sungguhan, dalam bentuk AttributeError: 'NoneType' object has no attribute 'startswith'. Data dummy yang sebagian kosong membuat bug semacam ini muncul lebih awal, saat masih di tahap uji.

daftar_telepon = [fake.optional.phone_number(prob=0.7) for _ in range(1000)]
print("Telepon kosong:", daftar_telepon.count(None), "dari 1.000")
Telepon kosong: 290 dari 1.000

290 dari 1.000, dekat dengan 30% yang kita minta. Fitur ini memang belum dibahas di halaman utama dokumentasi Faker. Cara kerjanya bisa dibaca langsung di kode OptionalProxy di repositori Faker, dan kemunculannya tercatat di CHANGELOG Faker sebagai "Add .optional proxy".

Nilai None ini ikut terbawa saat data disimpan. Di CSV, None menjadi sel kosong:

nama,telepon
Tgk. Kamal Suartini,(058) 611 8151
Zalindra Pratiwi,+62 (0706) 205-7963
Gading Rahayu,
Panji Uwais,

Di JSON, None menjadi null:

[
  {
    "nama": "Tgk. Kamal Suartini",
    "telepon": "(058) 611 8151"
  },
  {
    "nama": "Zalindra Pratiwi",
    "telepon": "+62 (0706) 205-7963"
  },
  {
    "nama": "Gading Rahayu",
    "telepon": null
  },
  {
    "nama": "Panji Uwais",
    "telepon": null
  }
]

Kode lengkap yang menyimpan kedua file ini ada di 5_opsional.py di GitHub.

Data Berbobot: Tunai Lebih Sering daripada Transfer

random_element bisa menerima OrderedDict berisi pasangan nilai dan bobot. Makin besar bobotnya, makin sering nilai itu terpilih. Bobotnya tidak harus berjumlah 1: bobot 6, 3, dan 1 artinya sama dengan 60%, 30%, dan 10%.

Tanpa bobot, setiap pilihan punya peluang yang sama. Coba ambil metode bayar 10.000 kali:

from collections import Counter, OrderedDict

tanpa_bobot = ["Tunai", "QRIS", "Transfer"]
print("Tanpa bobot:", Counter(fake.random_element(tanpa_bobot) for _ in range(10000)))
Tanpa bobot: Counter({'QRIS': 3440, 'Tunai': 3349, 'Transfer': 3211})

Masing-masing sekitar sepertiga. Untuk menguji grafik atau laporan, sebaran serata ini justru menyesatkan. Coba bayangin warung yang sebagian besar pembelinya bayar tunai. Grafik metode bayarnya mestinya didominasi satu batang, bukan tiga batang yang tingginya hampir sama.

Bobot ditulis lewat OrderedDict:

metode_bayar = OrderedDict([
    ("Tunai", 6),
    ("QRIS", 3),
    ("Transfer", 1),
])
print("Dengan bobot:", Counter(fake.random_element(metode_bayar) for _ in range(10000)))
Dengan bobot: Counter({'Tunai': 6042, 'QRIS': 2959, 'Transfer': 999})

Sekarang sebarannya mendekati 6:3:1. Kalau butuh beberapa nilai sekaligus, pakai random_elements dengan parameter length. Bobotnya tetap berlaku:

print(fake.random_elements(metode_bayar, length=5))
['Transfer', 'QRIS', 'QRIS', 'QRIS', 'Tunai']

Kenapa harus OrderedDict, bukan dict biasa? Faker sengaja menolak dict biasa dengan pesan Use OrderedDict only to avoid dependency on PYTHONHASHSEED. Tujuannya supaya hasil acak berbobot tetap sama setiap kali di-seed. Detail parameternya ada di dokumentasi random_elements, dan Counter yang dipakai untuk menghitung ada di modul collections Python.

Multi-Locale: Pelanggan Lokal dan Ekspatriat

Semua pelanggan kita sejauh ini bernama Indonesia, karena locale-nya hanya id_ID. Padahal aplikasi di kota besar biasanya juga punya pengguna dengan nama asing. Faker bisa mencampur beberapa locale sekaligus lewat mode multi-locale, cukup dengan memberikan daftar locale:

fake = Faker(["id_ID", "en_US"])
print(fake.locales)
print([fake.name() for _ in range(6)])
['id_ID', 'en_US']
['Olivia Mulyani', 'Umar Rahimah', 'Kimberly Cross', 'Laurie Allen', 'Edward Januar', 'Steven Henry']

Setiap panggilan memilih salah satu locale secara acak. "Olivia Mulyani" tetap berasal dari locale id_ID, karena daftar nama depan di locale itu memang memuat nama seperti Olivia.

Kalau butuh locale tertentu, aksesnya seperti mengambil isi dictionary:

print(fake["en_US"].name(), "|", fake["id_ID"].name())
James Bailey | Yani Waluyo

Pembagian setengah-setengah mungkin terlalu banyak untuk aplikasi lokal. Sama seperti metode bayar, locale juga bisa diberi bobot lewat OrderedDict. Untuk membuktikannya, kita hitung negara asal yang dihasilkan current_country(), karena method ini selalu mengembalikan negara dari locale yang terpilih:

fake_berbobot = Faker(OrderedDict([("id_ID", 9), ("en_US", 1)]))
print(Counter(fake_berbobot.current_country() for _ in range(10000)))
Counter({'Indonesia': 9040, 'United States': 960})

Sekitar 9 banding 1, sesuai bobotnya. fake.unique juga tetap bisa dipakai di mode ini.

Menggabungkan Semua: Pelanggan Dummy yang Lolos Import

Sekarang semua bagian digabung ke skrip pembuka tadi. Email dibuat unik, telepon boleh kosong, metode bayar berbobot, dan sekitar 10% pelanggan bernama asing. Tanggal diubah ke teks dengan isoformat() supaya aman disimpan ke CSV maupun JSON. Alasannya dibahas di bagian 2.

import csv
import sqlite3
from collections import Counter, OrderedDict

from faker import Faker

Faker.seed(2026)
fake = Faker(OrderedDict([("id_ID", 9), ("en_US", 1)]))

METODE_BAYAR = OrderedDict([
    ("Tunai", 6),
    ("QRIS", 3),
    ("Transfer", 1),
])


def buat_pelanggan():
    return {
        "id": fake.uuid4(),
        "nama": fake.name(),
        "email": fake.unique.free_email(),
        "telepon": fake.optional.phone_number(prob=0.7),
        "kota": fake["id_ID"].city(),
        "metode_bayar": fake.random_element(METODE_BAYAR),
        "tanggal_daftar": fake.date_this_decade().isoformat(),
    }


def simpan_csv(daftar_pelanggan, nama_file):
    with open(nama_file, "w", newline="", encoding="utf-8") as file:
        writer = csv.DictWriter(file, fieldnames=daftar_pelanggan[0].keys())
        writer.writeheader()
        writer.writerows(daftar_pelanggan)


def simpan_sqlite(daftar_pelanggan):
    koneksi = sqlite3.connect(":memory:")
    koneksi.execute("""
        CREATE TABLE pelanggan (
            id TEXT PRIMARY KEY,
            nama TEXT NOT NULL,
            email TEXT NOT NULL UNIQUE,
            telepon TEXT,
            kota TEXT,
            metode_bayar TEXT,
            tanggal_daftar TEXT
        )
    """)
    koneksi.executemany(
        "INSERT INTO pelanggan VALUES (:id, :nama, :email, :telepon, :kota, :metode_bayar, :tanggal_daftar)",
        daftar_pelanggan,
    )
    return koneksi.execute("SELECT COUNT(*) FROM pelanggan").fetchone()[0]


daftar_pelanggan = [buat_pelanggan() for _ in range(1000)]
simpan_csv(daftar_pelanggan, "pelanggan.csv")

print("Tersimpan di SQLite:", simpan_sqlite(daftar_pelanggan), "baris")
print("Telepon kosong:", sum(1 for p in daftar_pelanggan if p["telepon"] is None))
print("Metode bayar:", Counter(p["metode_bayar"] for p in daftar_pelanggan))

Hasilnya:

Tersimpan di SQLite: 1000 baris
Telepon kosong: 298
Metode bayar: Counter({'Tunai': 599, 'QRIS': 304, 'Transfer': 97})

Kali ini 1.000 baris masuk semua tanpa IntegrityError. Ada beberapa detail kecil yang perlu diperhatikan:

  • id memakai fake.uuid4(), bukan uuid.uuid4(). UUID dari Faker ikut diatur seed, jadi hasilnya bisa diulang. Peluang UUID4 kembar praktis nol, jadi tidak perlu .unique.
  • kota memakai fake["id_ID"]. Pelanggan ekspatriat tetap tinggal di kota Indonesia, bukan di kota Amerika.
  • Kolom telepon di tabel tidak diberi NOT NULL. Nilai None dari Python masuk ke SQLite sebagai NULL, sesuai aturan konversi tipe di modul sqlite3. Kalau kolomnya diberi NOT NULL, import justru gagal di baris pertama yang teleponnya kosong.
  • Kolom email tetap UNIQUE. Aturan UNIQUE di dokumentasi CREATE TABLE SQLite inilah yang menangkap email kembar di pembuka artikel, dan sekarang tidak ada lagi yang tertangkap.

Error yang Sering Muncul Saat Membuat Data Unik dengan Faker Python

Ada enam pesan error yang paling sering muncul saat memakai unique, optional, dan bobot. Baris terakhir sebenarnya bukan kesalahan di Faker, tapi bug yang memang ingin kita temukan dengan data dummy.

Gejala Penyebab Perbaikan
IntegrityError: UNIQUE constraint failed Faker menghasilkan nilai kembar untuk kolom yang harus unik Pakai fake.unique, misalnya fake.unique.free_email()
UniquenessException: Got duplicated values after 1,000 iterations. Stok nilai yang mungkin keluar sudah habis, atau fake.unique masih menyimpan catatan lama Perbesar rentang, kurangi jumlah data, atau panggil fake.unique.clear()
TypeError: cannot use 'tuple' as a dict key (unhashable type: 'list') Mengirim list ke method unique, misalnya fake.unique.random_element(["Tunai", "QRIS"]) Ganti list dengan tuple: ("Tunai", "QRIS")
ValueError: Use OrderedDict only to avoid dependency on PYTHONHASHSEED Bobot ditulis dengan dict biasa Bungkus dengan OrderedDict([...])
ValueError: prob must be between 0 and 1 fake.optional dipanggil dengan prob=0 atau lebih dari 1 Isi prob lebih dari 0 dan paling besar 1
AttributeError: 'NoneType' object has no attribute ... Kode belum siap menerima nilai kosong dari fake.optional Cek dulu if telepon: sebelum memakai nilainya

Error ketiga muncul karena fake.unique menyimpan argumen sebagai kunci catatannya. Menurut dokumentasi Faker, unique hanya bisa dipakai dengan argumen dan hasil yang hashable, sedangkan list tidak termasuk.

Tantangan untuk Kamu

Coba kerjakan dulu sebelum membuka jawabannya. Ketiganya cukup memakai fitur yang sudah dibahas di artikel ini.

Tantangan 1. Buat tanggal_lahir yang hanya terisi sekitar 60%, untuk pelanggan berumur 17 sampai 70 tahun, dan simpan dalam format teks YYYY-MM-DD. Hati-hati dengan nilai yang kosong.

def buat_tanggal_lahir():
    tanggal = fake.optional.date_of_birth(prob=0.6, minimum_age=17, maximum_age=70)
    if tanggal is None:
        return None                       # None tidak punya isoformat()
    return tanggal.isoformat()


daftar_tanggal = [buat_tanggal_lahir() for _ in range(1000)]
print("Tanggal lahir kosong:", daftar_tanggal.count(None), "dari 1.000")
print("Contoh:", daftar_tanggal[:4])
Tanggal lahir kosong: 427 dari 1.000
Contoh: ['1977-07-18', None, None, None]

Parameter lain seperti minimum_age tetap diteruskan ke date_of_birth(), jadi optional bisa membungkus method apa pun. Pengecekan if tanggal is None wajib, karena memanggil isoformat() pada None langsung memicu AttributeError.

Tantangan 2. Buat kolom kota yang berbobot: Jakarta tiga kali lebih sering muncul daripada Bandung, Surabaya, Medan, dan Makassar.

KOTA = OrderedDict([
    ("Jakarta", 3),
    ("Bandung", 1),
    ("Surabaya", 1),
    ("Medan", 1),
    ("Makassar", 1),
])
print(Counter(fake.random_element(KOTA) for _ in range(7000)))
Counter({'Jakarta': 3082, 'Medan': 1037, 'Makassar': 984, 'Surabaya': 956, 'Bandung': 941})

Total bobotnya 7, jadi dari 7.000 data Jakarta mestinya sekitar 3.000 dan kota lain masing-masing sekitar 1.000. Hasilnya cocok.

Tantangan 3. Buat 50 kode voucher unik dengan format VCR- diikuti empat angka, misalnya VCR-0427.

kode_voucher = [fake.unique.bothify("VCR-####") for _ in range(50)]
print(len(kode_voucher), "kode,", len(set(kode_voucher)), "berbeda, contoh:", kode_voucher[:3])
50 kode, 50 berbeda, contoh: ['VCR-7973', 'VCR-6250', 'VCR-9142']

bothify() mengganti setiap # dengan angka acak, dan unique memastikan tidak ada kode kembar. Empat angka berarti stoknya 10.000 kode. Kalau formatnya cuma VCR-#, stoknya tinggal 10, dan permintaan 50 kode berakhir dengan UniquenessException.

Kode lengkap ketiga jawaban ada di 9_tantangan.py di GitHub.

Penutup

Dari bagian ini, ukuran data dummy yang bagus bergeser. Yang dicari ternyata bukan data yang paling acak, tapi data yang paling mirip berantakannya data asli: ada kolom yang harus unik, ada kolom yang sering kosong, dan ada pilihan yang jauh lebih sering muncul daripada yang lain.

Artikel berikutnya adalah Faker Python Series 5: Provider NIK Dummy yang Lolos Validasi. Locale id_ID ternyata belum punya NIK, dan fake.ssn() masih menghasilkan nomor jaminan sosial format Amerika. Jadi kita buat provider sendiri.

Daftar semua artikel seri ini ada di label Faker Python. Kalau kamu pernah kena bug yang baru ketahuan setelah data asli masuk, coba tebak: fitur mana dari artikel ini yang bisa menangkapnya lebih awal, unique, optional, atau bobot? Ceritakan di kolom komentar.

Source code lengkap artikel ini bisa dilihat di GitHub: 04-faker-unique-optional-python

FAQ

Bagaimana cara membuat data unik dengan Faker Python? Sisipkan .unique di antara object Faker dan nama method, misalnya fake.unique.free_email(). Faker akan mengingat setiap nilai yang sudah dihasilkan method itu dan mengacak ulang kalau ada yang kembar. Catatannya terpisah untuk setiap method, jadi unique.name() dan unique.free_email() tidak saling memengaruhi.

Apa arti UniquenessException di Faker? UniquenessException muncul kalau Faker sudah mencoba 1.000 kali tapi tetap tidak menemukan nilai yang belum pernah keluar. Artinya stok nilai yang mungkin dihasilkan sudah habis, misalnya meminta 21 angka unik dari rentang 1 sampai 20. Perbaikannya, perbesar rentang, kurangi jumlah data, atau hapus catatan lama dengan fake.unique.clear().

Kenapa fake.unique masih error setelah Faker.seed() dipanggil ulang? Faker.seed() hanya mengatur urutan angka acak, sedangkan catatan nilai yang sudah dipakai fake.unique disimpan terpisah di object Faker. Setelah seed ulang, nilai-nilai lama tetap dianggap terpakai. Panggil fake.unique.clear() untuk menghapus catatannya.

Apa fungsi fake.optional di Faker? fake.optional membuat method Faker kadang mengembalikan None untuk meniru kolom yang tidak diisi. Parameter prob adalah peluang nilainya terisi, dengan nilai bawaan 0,5. Contohnya, fake.optional.phone_number(prob=0.7) mengisi nomor telepon sekitar 70% dari waktu.

Bagaimana cara membuat pilihan acak berbobot di Faker? Kirim OrderedDict berisi pasangan nilai dan bobot ke fake.random_element() atau fake.random_elements(). Bobotnya tidak harus berjumlah 1, jadi bobot 6, 3, dan 1 artinya 60%, 30%, dan 10%. dict biasa ditolak Faker, supaya hasilnya tetap sama setiap kali di-seed.

Referensi

Posting Komentar untuk "Faker Python Series 4: Data Dummy Unik, Opsional, dan Berbobot"