[250206] 사전캠프 15일차 아티클 스터디 + Python (random 모듈, 딕셔너리 다루기 : .items, .keys, .values)

이효원·2025년 2월 6일

아티클

주니어 데이터 사이언티스트에게 하고 싶은 말

[주제]
주니어 데이터사이언티스트가 해야하는 고민

[아티클 요약]

  • 어떤 역량을 특화할 것인가 (커리어 방향성)
    • 도메인 전문가 : 도메인 전문석 + 네트워크 능력 키움
      • 해당 업종 내 다양한 비즈니스 문제를 접하며 전문성을 쌓아야 함
    • 분석 전문가 : 통계 및 머신러닝 방법론에 특화
    • 엔지니어 : 개발 및 시스템 역량을 키워 분석 역량을 갖춘 엔지니어
      • 해당 기술의 트렌드를 선도하는 프로젝트를 통해 전문 역량을 쌓아야 함
  • 어떤 업계/회사/팀에 지원할 것인가 (어느 회사가 일하기 좋은가)
    • 기업 내 데이터 활용의 전략적 위치 파악
      • 채용 규모, 신입 경력 채용 등 확인
    • 내가 가치를 만들 수 있는 포지션인지 파악
      • 인터뷰에서 팀의 니즈 및 전략적 방향에 대해 질문
    • 회사가 기술적인 성장에 얼마나 관심이 있는지 파악
      • 공고에서 회사의 기술 스택이 어떤지 확인
      • 회사의 기술 역량이 외부적으로 공유된 자료가 있는지 확인
    • 무조건 신기술을 추종하는 것도 위험
    • 지원하는 조직이 회사에 어떤 기여를 하고 있는지 파악
    • 비즈니스 성장 커브 및 건강성 확인
  • 코딩과 모델링 실력 수준
    • 분석가는 이미 존재하는 데이터를 리포팅하는데 그칠 수도 있음
      • 물론 리포팅은 중요하지만, 가치 상승이 어렵다고 느껴짐
      • 단순 리포팅 업무는 점점 간단해지고 있다
  • 데이터 사이언티스트가 지속적인 가치를 만들어낼 수 있는 방법 : 분석의 스케일링과 자동화
    • 분석의 스케일링
      • 개발된 분석 기법을 공유하기위해 라이브러리 및 템플릿 제작
      • 이를 통해 필요에 따라 분석 수행 가능
    • 자동화 모델 생성
      • 반복되는 의사결정을 단순화 및 자동화
      • 지표 이상을 모니터링하고 알람을 주는 알고리즘 등
      • 이를 위해서는 개발 및 모델링 역량 필수적
    • 이를 통해 사내 모든 구성원이 분석가의 역할 수행
      • A/B 테스트 도입 후 비슷한 유형 실험 분석 템플릿화 및 자동화
      • 분석 조직은 도전적인 분석 기법 개발에 집중되어야 함
  • 실력있는 엔지니어와 분석가들이 함께 일할 수 있는 환경 필요
    • 신뢰할 수 있는 인프라 및 데이터 파이프라인, 분석 코드 라이브러리화 문화 필요
    • 데이터 엔지니어와 분석가의 협업 필수적
  • 인터뷰 준비 방법
    • 많은 사람들이 지원 기업의 제품, 팀에 대해 이해하려는 노력이 적음
    • 고려해야 할 사항
      • 나는 어떤 인프라와 데이터를 사용할까
      • 지원하는 팀이 당면한 분석 및 엔지니어링 문제는 무엇일까
      • 내 스킬셋과 관심사에 부합하는 부분은 무엇일까
      • 지원 분야에 대한 공개적인 자료는 어디서 찾을 수 있을까
      • 내 성장 목표는 지원 기업의 중장기 목표와 일치한가
    • 가상의 케이스에 대한 문제 해결력을 주로 평가
    • 이력서는 다양한 사항보다 핵심에 집중
      [인사이트]
      아티클에서 설명한 것 처럼 취업 이후에 대한 명확한 생각과 준비 없이 당장 취업하는 것에만 급급하면 취업 후에도 문제가 생길 수 있다고 생각했다. 취업을 위해 도메인과 기업만 생각했었는데, 정말 하고 싶은 업무와 분석은 무엇인지, 추후 어떻게 성장하고 싶은지에 대한 고민이 우선적으로 더 필요하다는 것을 느꼈다. 특히 역량 특화 부분에서 분석 머신러닝 전문가가 될 것인지, 개발 역량을 키운 엔지니어가 될 것인지 게임에서 2차전직을 선택하는 느낌이 들었는데 꾸준히 공부를 해서 이 부분을 더 고민해봐야겠다.

Python

반복문 연습

part 1. 주어진 리스트와 찾고자 하는 값을 입력받아, 해당 값이 리스트에서 몇 번 등장하는지 출력해주세요.

numbers = [1, 2, 3, 4, 2, 2, 5, 2]
value_to_find = 2
count = 0
for number in numbers:
    if number == value_to_find:
        count += 1
print(f'리스트에서 {value_to_find}{count}회 등장합니다!')
# 출력 : 리스트에서 2는 4회 등장합니다!

part 2. 리스트에 포함된 모든 숫자의 합을 계산하는 프로그램을 작성해주세요.

numbers = [10, 20, 30, 40, 50]
total_sum = 0
for sum in numbers:
    total_sum += sum
print(total_sum)
# 출력 : 150

part 3. 팩토리얼 계산하기

number = 5
i = 1
fac = 1
while i <= number:
    fac = i * fac
    i += 1
print(fac)
# 출력 : 120

Python 응용 lv1. 랜덤 닉네임 생성기


a = ['기절초풍', '멋있는', '재미있는']
b = ['도전적인', '노란색의', '바보같은']
c = ['돌고래', '개발자', '오랑우탄']
import random
# 나의 풀이
print(f'{random.choice(a)} {random.choice(b)} {random.choice(c)}')
# 답지
# 함수 생성
def ramdom_nicname():
	# 랜덤 세 단어 합치기
    abc = random.choice(a) + random.choice(b) + random.choice(c)
    return abc
# my_name에 함수 지정
my_name = ramdom_nicname()
print(my_name)

나는 그냥 print만 생각했고, 답은 함수를 생성하고 my_name 변수까지 생성함. 답은 똑같이 나오지만 활용하는거까지 신경쓰자.

random 모듈

파이썬에서 무작위 수를 생성할 때 유용하게 사용할 수 있는 내장 모듈

import random
random.choice(sequence) # 주어진 시퀀스(리스트, 튜플 등)에서 무작위로 하나의 요소를 반환합니다.
random.shuffle(sequence) # 시퀀스의 항목들을 무작위로 섞습니다. 리스트에서만 사용 가능합니다.
random.sample(sequence, k) # 시퀀스에서 중복 없이 k개의 항목을 무작위로 선택하여 반환합니다.

Python 응용 lv2. 자판기 생성

  1. 사용자가 볼 수 있게 메뉴를 표시합니다.
    • 다음과 같은 음료를 실행창에 표시합니다.
      • 사이다 1,700원
      • 콜라 1,900원
      • 식혜 2,500원
      • 솔의눈 3,000원
  2. 사용자는 음료를 선택할 수 있습니다.
    • 사용자에게 어떤 음료를 살 것인지를 입력받습니다.
      • ex) 사이다
      • 목록에 없는 음료일 경우 실행이 종료됩니다.
  3. 사용자는 지불할 금액을 입력할 수 있습니다.
    • 사용자에게 얼마를 넣을지 입력받습니다.
      • ex) 2000
      • 지불하는 금액이 선택한 음료의 비용보다 작다면 “돈이 부족합니다.” 를 출력합니다
  4. 사용자는 음료를 구매하고 남은 잔액을 확인할 수 있습니다.
    • 잔액을 화면에 표시합니다.
      • ex) 입력한 돈 2000원, 사이다 1700원 일때 300원을 잔액으로 보여줍니다.
# 음료 딕셔너리 생성
drink = {'사이다' : 1700, '콜라' : 1900, '식혜' : 2500, '솔의눈' : 3000}
# for문 활용해 메뉴 표시
for i in drink:
    print(f'{i} {drink[i]}원')
# input 사용해 음료 선택하기
choice = str(input('어떤 음료를 구매하시겠습니까?: '))
# 음료 있다면
# drink.keys()표시는 안해도 결과 동일. 만약 한다면 코드의 의도를 명확히 하기 위해. 
if choice in drink:
	# 지불하는 금액 입력
    money = int(input('얼마를 넣겠습니까?: '))
    # 지불 금액이 선택 음료보다 적은 경우
    if money < drink[choice]:
            print('돈이 부족합니다.')
    # 많거나 같아서 구매할 수 있는 경우
    else:
    	# 잔돈 표시
        change = money - drink[choice]
        print(f'잔돈입니다: {change}원')
# 목록에 없는 음료일 경우
else:
	# 실행 종료
    print('없는 음료입니다.')

제작 완료!

# 제대로 구매
사이다 1700원
콜라 1900원
식혜 2500원
솔의눈 3000원
어떤 음료를 구매하시겠습니까?: 솔의눈
얼마를 넣겠습니까?: 5000
잔돈입니다: 2000# 존재하지 않는 상품
어떤 음료를 구매하시겠습니까?: 참이슬
없는 음료입니다.
# 지불 금액 부족
어떤 음료를 구매하시겠습니까?: 콜라
얼마를 넣겠습니까?: 1000
돈이 부족합니다.

이런 식으로 작동한다.

딕셔너리 다루는 법

그런데 답지에서는 딕셔너리의 key와 value를 구분해서 작성했다.
GPT에게 질문

# 효원님의 코드 (현재 코드)
for i in drink:
    print(f'{i} {drink[i]}원')
이 코드는 drink 딕셔너리에서 키만 순차적으로 가져와서 i로 사용하고, 
그 키를 이용해 drink[i]로 값을 찾아 출력하는 방식입니다. 
이렇게 해도 정상적으로 동작합니다.

# 답지 코드 (키와 값 구분해서 사용)
for key, value in drink.items():
    print(f'{key} {value}원')
이 방식에서는 drink.items()를 사용하여 
딕셔너리의 키와 값을 동시에 순회하면서 key와 value로 각각 저장합니다.
이렇게 하면 키와 값을 각각 구분해서 사용할 수 있습니다.

키와 값을 모두 for문으로 하나씩 보내줘야하니까 items를 쓰는게 더 편한 거였다!
내 자판기에서
values를 찾기 위해선 딕셔너리.values() 표시 필수.

items() 딕셔너리의 각 항목을 (key, value) 형태의 튜플로 반환
keys() 딕셔너리의 키만 반환
values() 딕셔너리의 값만 반환

느낀점

Python 달리기반 문제를 풀어봤다...확실히 배우는 게 많다. 파이썬 lv3을 풀기 전에 sql부터 하고 진도를 나가야겠다. 사전캠프도 이제 일주일 남았다! 사전캠프때 배우는 것들만이라도 마스터하고 시작하고 싶다!

0개의 댓글