달나라 노트

Python faker : fake data 생성하기, generate fake data 본문

Python/Python ETC

Python faker : fake data 생성하기, generate fake data

CosmosProject 2022. 9. 6. 19:13
728x90
반응형

 

 

 

어떤 작업을 하다보면 어떤 가상의 데이터를 필요로 할 때가 있습니다.

 

예를 들어서 DB에 있는 뭔가를 가지고 이것저것 테스트해보려고해도 DB에 데이터가 없으면 테스트를 원활하게 진행하기가 쉽지 않죠.

이런 경우에 직접 일일이 가상 데이터를 만들 수도 있고, 그냥 랜덤한 텍스트를 원하는만큼 집어넣어서 가상 데이터를 만들 수도 있습니다.

하지만 이렇게 하면 일일이 가상 데이터를 만드는건 번거로우며 시간도 오래 걸리고, 그냥 랜덤한 텍스트를 원하는 만큼 집어넣는건 현실과 좀 동떨어진 dataset이 구성될 수도 있다는 단점이 있습니다.

 

예를들어 여러 사람의 이름이 필요한 상황에서 랜덤한 텍스트를 집어넣으면 사람 이름인데 asfqwf 이런 데이터가 들어갈 수도 있죠.

 

 

이렇게 어느정도 "그럴듯한" 가상의 dataset이 필요할 때가 있는데 이때 사용할 수 있는 유용한 library가 바로 faker입니다.

 

 

faker library는 가짜 data를 생성해줍니다.

이 가짜 data를 어떻게 생성하고 어떤식으로 데이터가 return되는지를 알아봅시다.

 

 

먼저 아래 command를 이용하여 faker library를 설치해야합니다.

 

pip install faker

 

 

 

 

 

 

 

설치를 완료했으면 본격적으로 사용법을 알아봅시다.

 

여기서는 간단한 사용법만을 다뤄볼 예정입니다.

 

from faker import Faker

fake = Faker()

print(fake.name())


-- Result
Christopher Klein

 

위 코드를 보면 faker library를 이용해서 fake name을 생성한 예시입니다.

 

- fake = Faker()

fake 변수에 Faker class를 생성합니다.

 

- print(fake.name())

fake class에 있는 name method는 랜덤한 이름을 생성해줍니다.

 

 

사용법은 굉장히 간단하죠.

 

 

 

from faker import Faker

fake = Faker()

for i in range(10):
    print(fake.name())



-- Result
James Miller
Jennifer Robinson
Daniel Martinez
Courtney Scott
Michele Acosta
Sandy Lopez
Ryan Hubbard Jr.
Amanda Ross
Douglas Russo
Timothy Johnston

 

반복문을 이용해서 여러 개의 fake name을 생성한 결과입니다.

보면 그럴듯한 이름들이 랜덤하게 생성되는 것을 볼 수 있죠.

 

 

 

 

 

 

 

from faker import Faker

fake = Faker()

print(fake.address())



-- Result
2855 Janice Forges
Turnerbury, CT 86554

 

- fake.address()

address method는 fake address를 생성합니다.

위 코드의 결과를 보면 그럴듯한 주소 데이터가 return된 것을 볼 수 있죠.

 

 

 

 

 

 

from faker import Faker

fake = Faker()

print(fake.ipv4_private())



-- Result
172.24.134.220

 

- fake.ipv4_private()

ipv4_private method는 fake IP address를 생성합니다.

위 코드의 결과를 보면 그럴듯한 IP 주소가 return된 것을 볼 수 있습니다.

 

 

 

 

 

 

이렇게 faker library는 fake data를 생성해줍니다.

 

근데 한가지 아쉬운점이 있습니다.

지금까지 본 예시에서 output은 모두 영어 data였습니다.

Faker는 기본적으로 영어로 된 fake data를 생성하기 때문이죠.

그러나 만약에 영어가 아닌 한글로 된 fake data가 필요하다면 어떨까요?

 

faker library에서는 언어 설정 기능도 제공합니다.

정확히말하면 언어라기보단 지역입니다.

실제 faker 문서 내에선 Locale(위치)인자를 사용한다고 설명하고 있습니다.

 

 

from faker import Faker

fake = Faker('ko_KR')

print(fake.name())



-- Result
김서영

 

- fake = Faker('ko_KR')

Faker class를 만들 때 Faker class의 parameter로서 정해진 언어 표시자를 넣어주면 그 언어로 된 fake data를 생성해주는 class로 변합니다.

 

따라서 위 예시를 보면 동일하게 fake.name() 으로 fake name을 생성하지만 그 결과는 김서영 이라는 한글 데이터가 됩니다.

 

여기서 적은 ko_KR 같은 텍스트를 Locale(위치) 인자 라고 합니다.

 

 

 

 

from faker import Faker

fake = Faker('ko_KR')

print(fake.address())



-- Result
세종특별자치시 성동구 도산대150로

 

놀랍게도 한글로 설정한 후 address method를 통해 주소를 생성한 경우 한글로 된 한국 주소가 생성됩니다.

 

(물론 세종시에는 성동구가 없습니다. 따라서 위 주소는 실제로 검색해도 나오지 않습니다. fake address는 그럴듯한 주소를 생성해줄 뿐 이 주소가 실제 존재하는 곳인지는 보장할 수 없습니다.)

 

 

 

 

 

 

 

from faker import Faker

fake = Faker('it_IT')

print(fake.name())



-- Result
Dott. Tatiana Saraceno

 

이번에는 Faker class에서 언어를 it_IT로 설정했습니다.

it_IT는 이탈리아를 의미합니다.

즉, output되는 이름도 itallian 스러운 이름이라고 보면 될 것 같습니다. (실제로 저게 itallian스러운 이름인지는 모르겠습니다.)

 

 

 

 

 

from faker import Faker

fake = Faker('jp_JP')

print(fake.name())



-- Result
伊藤 明美

 

jp_JP는 일본어를 의미합니다.

 

 

 

 

from faker import Faker

fake = Faker('en_US')

print(fake.name())



-- Result
George Patterson

 

en_US는 영어(미국)을 의미합니다.

 

 

 

이 외에도 faker에서 제공하는 Locale 인자는 엄청나게 많습니다.

 

더 다양한 Locale 인자를 보기 위해선 아래 링크를 참고하면 됩니다.

https://faker.readthedocs.io/en/master/locales.html

 

 

 

 

 

 

 

 

from faker import Faker

fake = Faker(['en_US', 'ko_KR', 'it_IT', 'en_UK', 'it_IT', 'jp_JP'])

for i in range(10):
    print(fake.name())



-- Result
Rebecca Munoz
김도윤
허정식
橋本 直子
Linda Thompson
장상훈
양은정
Kenneth Holland
Graziano Borghese
Terry Webster

 

- fake = Faker(['en_US', 'ko_KR', 'it_IT', 'en_UK', 'it_IT', 'jp_JP'])

만약 random한 fake data를 생성할 때 여러 언어로 된 언어를 동시에 생성하고싶다면 위처럼 Faker class의 parameter에 언어 인자를 list에 담아서 한꺼번에 전달하면 됩니다.

 

위 예시의 결과를 보면 for loop와 fake.name()으로 10개의 random한 fake data를 생성하였는데, 그 결과를 보면 Faker에서 명시한 언어를 사용하는 지역에서 실제로 있을법한 이름들이 랜덤하게 생성된 것을 볼 수 있습니다.

 

 

 

 

 

 

 

 

faker의 대표적인 사용법은 알아봤습니다.

그러면 faker에서 제공하는 method는 무엇이 있을까요?

다르게 말하면 faker에서 생성할 수 있는 fake data의 종류는 무엇이 있을까요?

 

위에서 봤던 name(), address(), ipv4_address() 와 같은 fake data를 생성해주는 method들을 faker document에선 provider라고 부릅니다. (약간 의미가 다르긴 하지만 그냥 이렇게 이해하고 문서를 보면 좀 더 수월합니다.)

 

https://faker.readthedocs.io/en/master/providers.html

faker에서 제공하는 fake data를 생성해주는 method (= provider) 들은 위 링크에서 볼 수 있습니다.

 

여기서는 faker에서 사용할 수 있는 fake data 생성 method들이 무엇이 있는지 대표적인 것들 위주로 정리해보겠습니다.

 

상위 class method 설명 예시
Faker country() fake country data를 return Poland
Faker current_country() 현재 설정된 Locale의 나라를 return United States
Faker city() fake city data를 return Courtneyland
Faker street_address() fake street_address(번지수 or 길 번호)를 return 109 Shelia Station
Faker building_number() fake 건물 번호를 return 515
Faker fake.postcode() fake 우편 번호를 return 17854
Faker address() fake 주소를 return 5648 Jennifer Knolls Apt. 222
Heatherhaven, MS 58978
Faker ipv4_private() fake IP 주소를 return 172.25.71.235
Faker color() 랜덤한 색상을 hex color 형식으로 return #63d5f2
Faker color_name() fake 색깔 이름을 return DarkOrange
Faker company() fake 회사 이름을 return Myers PLC
Faker job() fake 직무 이름을 return Administrator, local government
Faker name() fake 이름을 return Troy Morris
Faker user_name() fake username을 return meyermichelle
Faker phone_number() fake 핸드폰 번호를 return 2656751075
Faker email() fake Email을 return joseph07@rodriguez-spence.com
Faker text() fake 텍스트를 return Type other daughter important until about perform table. Body direction matter entire happy miss lead benefit. Next do report people speech behind condition.
Faker sentence() fake 문장을 return Nothing everything economic success group down.

 

 

 

 

from faker import Faker

fake = Faker()

print(fake.color_name())


-- Result
SaddleBrown

 

사용법은 간단합니다.

위 표에 명시된 (또는 faker에서 제공하는) provider를 Faker class의 인자로서 사용하면 됩니다.

 

 

 

 

 

 

 

 

 

마지막으로 한 가지 provider를 봐봅시다.

 

from faker import Faker

fake = Faker()

print(fake.color())


-- Result
#fcddb8

 

color method는 위처럼 랜덤한 색상을 hex color code로 return합니다.

 

위 코드에서 생성된 색상인 #fcddb8 를 hex color 사이트에서 검색해보면 아래와같이 살색이라는 것을 알 수 있습니다.

 

- 출처 = https://color-hex.org/color/fcddb8

 

 

 

 

 

뭐 랜덤한 색상을 hex color code의 형태로 생성해주는 것은 좋은데

만약에 나는 파란 계열의 색상을 랜덤으로 생성하고싶다면 어떻게 해야할까요?

 

from faker import Faker

fake = Faker()

for i in range(10):
    print(fake.color(hue='blue'))


-- Result
#7f96e0
#8bc0d3
#2358b2
#8aa2f7
#69d9ea
#9593ea
#1170d6
#8eace5
#5e3ffc
#0aa6d1

 

color method에는 parameter에서 hue라는 인자가 있습니다.

hue 인자는 색조를 설정한다고 보시면 됩니다.

 

위 예시에서 hue='blue'로 설정되어있으므로 파란 계열의 색상에 대한 hex code를 랜덤으로 생성하라는 것입니다.

 

위 예시의 결과로 return된 hex color code를 검색해보시면 모두 파란 계열의 색일 것입니다.

 

 

 

 

from faker import Faker

fake = Faker()

for i in range(10):
    print(fake.color(hue='blue', color_format='rgb'))


-- Result
rgb(7, 92, 96)
rgb(75, 45, 183)
rgb(65, 92, 198)
rgb(46, 63, 193)
rgb(1, 121, 191)
rgb(76, 190, 232)
rgb(7, 108, 147)
rgb(123, 149, 209)
rgb(54, 45, 216)
rgb(33, 149, 175)

 

color_format 인자를 사용하면 return할 색상들의 코드 형식을 변경할 수 있습니다.

 

위 예시에서 color_format='rgb'로 설정되어있으므로 return된 color code가 모두 RGB 형식으로 되어있습니다.

 

 

faker는 단순히 완전한 랜덤 데이터를 return해주는것 뿐만 아니라 위에서 본 color provider처럼 특정 조건을 만족하는 fake data를 생성할 수 있는 provider들도 있습니다.

 

이와 관련해선 아래 링크를 보시면 됩니다.

https://faker.readthedocs.io/en/master/providers/faker.providers.color.html

 

 

 

 

 

 

 

 

- 참고

faker library document = https://faker.readthedocs.io/en/master/

 

 

 

 

 

 

728x90
반응형
Comments