어떤 회사에서 인터넷 서비스를 만드는데 정식으로 서비스를 오픈하기 전에 회원 관리 시스템이 제대로 동작하는지 테스트하려고 합니다. 이때 임의로 일일이 회원 정보를 만들어서 입력한 후에 테스트할 수도 있겠지만 아주 많은 회원 정보가 필요하다면 이렇게 일일이 만드는 것은 쉽지 않습니다.
여기서는 파이썬을 이용해 가상의 사용자 정보를 생성하는 방법을 알아보겠습니다. 다양한 회원 정보가 있겠지만 이름, 휴대폰 번호, 회원 ID를 임의로 생성하는 방법을 알아보겠습니다. 마직막으로 가상 사용자 정보를 판다스 DataFrame으로 할당하고 CSV 파일로 저장하는 방법을 살펴보겠습니다.
당신의 의뢰인은 당신에게 10000명의 가상 사용자 정보를 생성해 달라고 요청했습니다. 필요한 사용자 정보는 이름, 휴대폰 번호, 회원 ID입니다. 구체적인 요구 사항은 다음과 같습니다.
010-xxxx-yyyy와 같은 형식으로 구성한다.4~10 자리 알파벳 소문자와 숫자로 구성한다. 회원 ID 첫 글자는 숫자여서는 안되고 알파벳이여야 한다. ,이름,휴대폰번호,회원ID
0,백종애,010-1756-4250,vz5yf
1,홍덕탐,010-7821-1095,qpnm
2,박천건,010-5164-9863,g3wrzd9okm
3,곽라택,010-8094-2735,zpsi
4,권빛아,010-9278-4219,mugvwpdc
5,정동초,010-0652-6415,y1ew48mh
6,권철민,010-3602-6417,zy87svmzo
7,정정로,010-9208-9731,bfu0z
8,안안영,010-1593-8931,rfacgmv
9,차정백,010-3015-7056,s8liur1
10,윤춘건,010-0687-0543,m8cz1
11,차태담,010-3256-4670,cfb5olesk
12,남복종,010-1945-6582,lmy2
13,정춘무,010-9108-9457,qazmx0
14,남궁조래,010-4123-5371,z7vftic
15,정현석,010-0689-1947,g24k51imv
16,황보조택,010-8702-0749,z5d6ib
17,황건사,010-0671-0461,clhz
18,윤옥채,010-2386-0652,pk2z0ws
19,황마백,010-2170-4079,x5h7c6
20,장춘해,010-4281-8640,u64l
이번 프로젝트를 파이썬으로 수행하기 위해 필요한 내용은 다음과 같습니다.
choice(), sample() 함수str.join() 함수이번 프로젝트에 필요한 사전 지식은 다음의 책에서도 확인할 수 있습니다. 특히 random 모듈을 사용하는 다양한 예제가 있으니 참고하면 도움이 될 것입니다.
먼저 이름을 랜덤하게(무작위로) 생성해 보겠습니다. 이를 위해 파이썬 내장 모듈인 random 모듈을 이용하겠습니다. 성(Last name)과 성을 제외한 이름(First name) 에 들어가는 글자를 미리 리스트로 정의해 두고 random 모듈의 함수를 이용해 이름(Full name)을 생성하겠습니다. 성(Last name)의 경우는 한국에서 사용하는 성과 두 글자 성 일부를 선택해 리스트로 지정했습니다. 또한 성을 제외한 이름(First name)의 경우는 임의로 선정한 한 글자를 요소로 갖는 리스트로 지정했습니다. Last name을 생성하기 위해서는 시퀀스에서 임의의 항목 하나를 반환하는 choice() 함수를 이용하고 First name을 생성하고 위해서는 시퀀스에서 중복되지 않는 인자를 반환하는 sample() 함수를 이용하겠습니다.
이를 위한 코드는 다음과 같습니다.
import random
def get_rand_name():
last_names = ["김", "이", "박", "최", "정", "강", "조", "윤", "장", "임",
"한", "오", "서", "신", "권", "황", "안", "송", "류", "전",
"홍", "고", "문", "양", "손", "배", "조", "백", "허", "유",
"남", "심", "노", "정", "하", "곽", "성", "차", "주", "우",
"남궁", "황보", "제갈", "사공", "선우", "서문", "독고"]
first_names = ["강", "건", "경", "고", "관", "나", "남", "노", "누", "다",
"단", "담", "대", "덕", "도", "동", "라", "래", "로", "루",
"마", "만", "명", "무", "문", "미", "민", "백", "범", "별",
"병", "보", "빛", "사", "산", "상", "새", "서", "석", "선",
"아", "안", "애", "엄", "영", "예", "오", "옥", "완", "요",
"자", "장", "재", "전", "정", "조", "종", "주", "준", "지",
"찬", "창", "채", "천", "철", "초", "춘", "복", "치", "탐",
"태", "택", "하", "한", "해", "혁", "현", "형", "혜", "호"]
last_name = random.choice(last_names) # Last name 생성
first_name = "".join(random.sample(first_names, 2)) # First name 생성
full_name = last_name + first_name # Full name 생성
return full_name
앞에서 만든 get_rand_name() 함수를 호출해 보겠습니다.
get_rand_name()
(결과 출력)
'사공미나'
get_rand_name()
(결과 출력)
'박형단'
get_rand_name()
(결과 출력)
'오동춘'
결과를 보면 임의로 이름이 잘 생성되는 것을 볼 수 있습니다.
다음은 휴대폰 번호를 생성해 보겠습니다. 앞에서 이용한 random 모듈의 sample() 함수를 다시 한번 이용해 10개의 숫자 중 4개를 생성합니다. 이를 위한 코드는 다음과 같습니다.
def get_rand_phone_number():
numbers = "0123456789"
num1 = "".join(random.sample(numbers, 4))
num2 = "".join(random.sample(numbers, 4))
phone_num = "010-{0}-{1}".format(num1, num2)
return phone_num
이제 앞에서 만든 get_rand_phone_number() 함수를 호출해 보겠습니다.
get_rand_phone_number()
(결과 출력)
'010-8235-6590'
get_rand_phone_number()
(결과 출력)
'010-5096-6502'
get_rand_phone_number()
(결과 출력)
'010-7842-8735'
역시 휴대폰 번호가 잘 생성되는 것을 볼 수 있습니다.
다음은 회원 ID를 생성해 보겠습니다. 회원 ID는 4~10 자리의 알파벳과 숫자로만 구성할 수 있다고 가정합니다. 단, 첫 번째 자리에는 숫자는 올 수 없고 알파벳만 올 수 있습니다. 회원 ID를 생성하기 위해서 역시 앞에서 사용했던 random 모듈을 그대로 이용합니다. 앞에서와 다른 점은 회원 ID의 경우 알파벳과 숫자 4~10 자리까지 구성할 수 있으므로 먼저 randint() 함수로 회원 ID 문자의 자리수를 임의로 생성하고 생성한 자리수에 맞춰서 다시 임의의 회원 ID를 생성합니다. 또한 첫 번째 자리가 숫자인 경우에는 회원 ID를 다시 생성하도록 했습니다.
이를 위한 코드는 다음과 같습니다.
def get_rand_member_ID():
alphabet_numbes = "abcdefghizklmnopqrstuvwxyz0123456789"
digit = random.randint(4,10)
while(True):
member_ID = "".join(random.sample(alphabet_numbes, digit))
if(member_ID[0] not in '0123456789'): # 첫 번째 자리가 숫자인지 확인해서
break # 숫자이면 while문을 빠져나감
return member_ID
이제 위에서 만든 get_rand_member_ID() 함수를 실행해 보겠습니다.
get_rand_member_ID()
(결과 출력)
'iyl2k'
get_rand_member_ID()
(결과 출력)
'femwtd0'
get_rand_member_ID()
(결과 출력)
'z4rbq7'
실행 결과를 보면 임의의 회원 ID가 잘 생성된 것을 볼 수 있습니다.
이제 앞에서 만든 함수들을 이용해 사용자 정보(이름, 휴대폰 번호, 회원 ID)를 생성하고 이것을 판다스 DataFrame 데이터로 할당한 후에 CSV 파일로 생성하는 방법에 대해 살펴보겠습니다.
import pandas as pd
user_infos = []
for k in range(1000):
name = get_rand_name()
phone_number = get_rand_phone_number()
member_ID = get_rand_member_ID()
user_infos.append([name, phone_number, member_ID])
columns_name = ['이름', '휴대폰번호', '회원ID']
df = pd.DataFrame(user_infos, columns =columns_name)
df
(결과 출력)
| 이름 | 휴대폰번호 | 회원ID | |
|---|---|---|---|
| 0 | 백종애 | 010-1756-4250 | vz5yf |
| 1 | 홍덕탐 | 010-7821-1095 | qpnm |
| 2 | 박천건 | 010-5164-9863 | g3wrzd9okm |
| 3 | 곽라택 | 010-8094-2735 | zpsi |
| 4 | 권빛아 | 010-9278-4219 | mugvwpdc |
| ... | ... | ... | ... |
| 995 | 남궁단동 | 010-8391-0831 | bhzo2k |
| 996 | 주담영 | 010-2536-2847 | rnzpvc5q |
| 997 | 고강다 | 010-7952-7098 | dtaxo6r |
| 998 | 전루자 | 010-0729-2830 | z3v7h6bxg |
| 999 | 고고안 | 010-2109-1037 | h61u |
1000 rows × 3 columns
이제 생성한 DataFrame 데이터를 to_csv()를 이용해 CSV 파일로 저장하겠습니다. 이를 위한 코드는 다음과 같습니다.
csv_file_name = "가상_사용자_정보.csv"
df.to_csv(csv_file_name)
윈도우 탐색기로 CSV 파일이 있는 폴더로 이동하면 CSV 파일이 생성된 것을 볼 수 있습니다.
이번 프로젝트에서는 파이썬을 이용해 가상의 사용자 정보를 생성하는 방법을 알아봤습니다. 이 프로젝트를 진행하기 위해 필요한 내용을 사전 지식도 살펴봤습니다. 여기서 살펴본 가상 사용자 정보 생성 방법은 다양한 응용에 활용할 수 있습니다. 참고로 가상 사용자의 정보를 생성하는 웹 사이트(https://randomuser.me/)도 있습니다. 앞에서 살펴본 내용을 활용하면 이러한 웹 사이트도 만들 수 있을 것입니다.