Python 에서 가짜 데이터를 생성할 수 있는 Faker 사용법
개요
개발 프로젝트를 진행하다 보면 설계 검증, 화면 기획 및 paging test 등 프로토타이핑 검증과 테스트 용도로 데이타가 필요한 경우가 많습니다.
이런 테스트 데이터 생성은 중요하지만 바쁜 시간을 쪼개서 test data 를 만들기는 쉽지 않고 하드 코딩된 테스트 데이터는 별로 유용하지가 않습니다.
Python Faker 는 PHP Faker, Perl Faker 등에서 많은 영향을 받은 프로젝트로 python 에서 더미 데이타를 쉽게 생성할 수 있게 해줍니다.
pip install Faker
사용
기본 사용법
Faker() 객체를 실행한 후에 테스트 데이터를 생성하는 메서드를 호출합니다.
데이터 종류에 따라 메서드 이름이 정해져 있으며 예로 사람 이름을 생성하는 메서드는 name(), 주소를 생성하는 메서드는 address() 입니다.
from faker import Faker
f = Faker()
f.name()
## 'Amy Floyd'
f.address()
## '493 David Ridges\nDonaldburgh, NV 01334'
랜덤한 가짜 데이터를 생성하므로 각 메서드를 호출할 때 마다 결과값이 달라집니다.
date time
date() 메서드로 임의의 날자를 생성할 수 있습니다.
f.date()
## '1991-04-12'
날자가 특정 범위내에 있어야만 할 경우가 있습니다. 예로 회원 가입일이 미래 시간이면 이상하므로 현재일 이전이어야 합니다.
다음과 같이 end_datetime 에 종료일을 명시해주면 되며 날자 지정시 years, months 를 사용할 수 있습니다. 예로 다음은 가장 최근일을 2년전으로 고정해서 날자를 생성합니다.
f.date(pattern='%Y-%m-%d', end_datetime='-2years')
## '1991-04-12'
시간은 time() 메서드를 사용하며 timezone() 은 임의의 타임존을 생성합니다.
f.time()
## '15:54:25'
f.timezone()
## 'Africa/Douala'
f.time()
## '15:54:25'
f.timezone()
## 'Africa/Douala'
날자와 시간이 같이 필요할 경우 datetime() 메서드를 사용하면 됩니다.
f.datetime()
## datetime.datetime(1978, 7, 17, 19, 34, 9)
특정 기간의 시간 날자가 필요할 경우도 있습니다. 예로 서비스 시작일부터 현재까지 임의의 날자가 필요한 경우 위에서 설명한 메서드들로는 충족할 수 없습니다.
이럴 때 date_time_between() 으로 특정 기간내 날자/시간 데이터를 생성할 수 있습니다.
PHP Faker 처럼 start end 와 end date 는 사람이 읽기 좋은 문자열로 전달하면 되며 다음은 2년전과 오늘 날자 사이의 임의의 날자/시간 데이터를 생성합니다.
f.date_time_between('-2months', 'now')
## datetime.datetime(2021, 10, 16, 21, 7, 53)
다음은 27일 이전과 지난 주 사이의 임의의 날자/시간 데이터를 생성합니다.
f.date_time_between('-27days', '-1weeks')
## datetime.datetime(2021, 10, 16, 21, 7, 53)
텍스트 생성
Lorem Ipsum 같이 랜덤한 긴 글을 생성하는 기능으로 게시판등을 테스트해야할 경우 유용합니다.
필요에 따라 단어를 리턴하는 word(), 구문을 리턴하는 sentence(), 단락을 리턴하는 paragraph(), 긴 문장을 리턴하는 text() 중에 선택해서 사용하면 됩니다.
## 문장 리턴
f.word()
##
## 문장 리턴
f.text()
## number of character 지정
f.text(400)
## 여러 문장 리턴
f.texts()
## 문장 길이 지정
f.texts(200)
한글 locale 사용
기본 로캘은 영어인데 한글 로캘로 바꾸면 테스트 데이터를 한글로 생성할 수 있습니다.
로캘을 변경하려면 Faker() 객체 생성시 로캘 이름을 파라미터로 전달해 주면 됩니다.
from faker import Faker
f = Faker('ko_KR')
f.name()
## '안진호'
f.address()
## '전라남도 파주시 서초중앙길'
f.text()
## text, word 에는 한글 미적용
다른 Provider 사용
PHP Faker 에서 차용한 개념같은데 python Faker 는 테스트 데이터를 생성하는 생성기를 Provider 라 부르며 외부에서 생성한 걸 넣어주거나 적당한 게 없다면 직접 만들어서 사용할 수 있습니다.
예로 식당 서비스를 준비중인데 테스트용으로 한식 메뉴가 필요하다면 원본 Faker 에는 당연히 이런 기능이 없을 겁니다.
기본 탑재한 Faker provider 목록은 providers 에서 확인할 수 있으며 커뮤니티에서 개발한 프로바이더는 여기에서 확인할 수 있습니다.
예로 공항 관련 프로바이더인 airtravel 을 사용하려면 다음과 같이 프로바이더를 설치합니다.
pip install faker_airtravel
그리고 Faker() 객체에 add_provider 메서드에 사용할 provider 를 등록해 주면 됩니다.
from faker import Faker
from faker_airtravel import AirTravelProvider
f = Faker('ko_KR')
f.add_provider(AirTravelProvider)
정상적으로 등록이 완료되었으면 faker 에서 추가한 provider 메서드를 사용할 수 있습니다.
f.airport_object()
## {'airport': 'Dallas Love Field airport',
## 'iata': 'DAL',
## 'icao': 'KDAL',
## 'city': 'Dallas',
f.airport_iata()
## 'YVR'
f.airline()
## 'Cebu Pacific Air'
f.flight()
## {'airline': 'Tianjin Airlines',
## 'origin': {'airport': 'Velikiydvor airport',
## 'iata': 'MSQ',
## 'icao': 'UMMS',