파이썬 프로젝트: 가상 사용자 정보 생성하기

최은석·2022년 11월 13일

파이썬 프로젝트

목록 보기
1/3
post-thumbnail

프로젝트 배경

어떤 회사에서 인터넷 서비스를 만드는데 정식으로 서비스를 오픈하기 전에 회원 관리 시스템이 제대로 동작하는지 테스트하려고 합니다. 이때 임의로 일일이 회원 정보를 만들어서 입력한 후에 테스트할 수도 있겠지만 아주 많은 회원 정보가 필요하다면 이렇게 일일이 만드는 것은 쉽지 않습니다.

여기서는 파이썬을 이용해 가상의 사용자 정보를 생성하는 방법을 알아보겠습니다. 다양한 회원 정보가 있겠지만 이름, 휴대폰 번호, 회원 ID를 임의로 생성하는 방법을 알아보겠습니다. 마직막으로 가상 사용자 정보를 판다스 DataFrame으로 할당하고 CSV 파일로 저장하는 방법을 살펴보겠습니다.

미션

당신의 의뢰인은 당신에게 10000명의 가상 사용자 정보를 생성해 달라고 요청했습니다. 필요한 사용자 정보는 이름, 휴대폰 번호, 회원 ID입니다. 구체적인 요구 사항은 다음과 같습니다.

  • 사용자 이름은 한글 이름으로 2자로 구성된 성을 포함하며 성을 제외한 이름은 2글자로 구성한다.
  • 전화번호는 010-xxxx-yyyy와 같은 형식으로 구성한다.
  • 회원 ID는 4~10 자리 알파벳 소문자와 숫자로 구성한다. 회원 ID 첫 글자는 숫자여서는 안되고 알파벳이여야 한다.
  • 제출할 결과물은 파이썬 코드와 가상 사용자 정보가 담긴 CSV 파일이다.
  • CSV 파일의 사용자 정보 표시 형식은 아래와 같아야 한다.
,이름,휴대폰번호,회원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

힌트

이번 프로젝트를 파이썬으로 수행하기 위해 필요한 내용은 다음과 같습니다.

  • 파이썬 기본 문법
    • 변수, 문자열, 리스트, 반복문(for, while)
    • 데이터 출력(기본 출력, 형식 지정 출력)
  • 함수와 모듈
    • 함수 만들고 사용하기
    • 모듈 import하고 사용하기
    • random 모듈의 choice(), sample() 함수
  • 문자열 처리
    • 문자열 연결하기: str.join() 함수
  • 판다스(pandas)
    • DataFrame 데이터 생성하기
    • DataFrame 형식의 데이터를 CSV 파일로 쓰기

이번 프로젝트에 필요한 사전 지식은 다음의 책에서도 확인할 수 있습니다. 특히 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를 생성해 보겠습니다. 회원 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/)도 있습니다. 앞에서 살펴본 내용을 활용하면 이러한 웹 사이트도 만들 수 있을 것입니다.

profile
드림 팩토리 (Dream Factory)

0개의 댓글