본문 바로가기

Data Engineering/Language

[Python] Faker 가짜 데이터 생성 (롤 X)

가짜 데이터

개발 테스트를 하다보면, 캐글에서 데이터를 가져와야하거나 공공데이터에서 데이터를 가져와서 쓸때가 많다. 그러나 로그인부터 적절한 데이터를 찾기까지 귀찮을 때가 있어서 대충 엑셀에다 pk 주고 데이터를 아무렇게나 생성할 때가 많았다. 이제부터 그렇게 하지 말고, 좀 더 쉽고 빠르게 가짜 데이터를 얻는 방법인 Faker라이브러리를 알아보자

라이브러리 설치

!pip install Faker

라이브러리 임포트

from pyspark.sql import functions as F
from faker import Faker
from collections import OrderedDict 
import uuid

fake = Faker()

화자는 Pyspark 환경에서 사용했음

라이브러리 사용

fake_firstname = F.udf(fake.first_name)
fake_lastname = F.udf(fake.last_name)
fake_email = F.udf(fake.ascii_company_email)
fake_date = F.udf(lambda:fake.date_time_this_month().strftime("%m-%d-%Y %H:%M:%S"))
fake_address = F.udf(fake.address)
operations = OrderedDict([("APPEND", 0.5),("DELETE", 0.1),("UPDATE", 0.3),(None, 0.01)])
fake_operation = F.udf(lambda:fake.random_elements(elements=operations, length=1)[0])
fake_id = F.udf(lambda: str(uuid.uuid4()))

df = spark.range(0, 100000)
df = df.withColumn("id", fake_id())
df = df.withColumn("firstname", fake_firstname())
df = df.withColumn("lastname", fake_lastname())
df = df.withColumn("email", fake_email())
df = df.withColumn("address", fake_address())
df = df.withColumn("operation", fake_operation())
df = df.withColumn("operation_date", fake_date())

df.repartition(100).write.format("json").mode("overwrite").save(folder+"/customers")

 

repartition()은 Spark에서 데이터를 다시 분할하여 파티셔닝을 조정하는 메서드이며 데이터를 여러 파티션으로 분할하면 여러 작업자(worker)가 동시에 작업이 가능하다.

기타사항

Faker 인스턴스를 생성할 때, "ko_KR"을 넘겨주면 한글로 반환됨

반응형