Today I Learned

[내일배움캠프 QA/QC 트랙 6기 본캠프] TIL #007 — 프로그래밍 기초

JiJi0406 2026. 5. 19. 21:34

001

오늘의 키워드: 다시 시작

 

이번 주부터 기초 프로젝트를 함께 진행할 새로운 팀원분들을 만나게 됐다. 그동안은 혼자 공부하고 프로젝트 방향도 혼자 고민했었는데, 그러다보면 괜히 내가 제대로 가고 있는 건지 의문이 들 때도 있었지만... 이제는 같이 이야기 나누고 방향을 맞춰갈 사람들이 생겼다는 게 좀 든든해졌다 ^_^

 

오늘부터는 데이터 분석 파이썬 종합반 강의도 본격적으로 시작했다. 당장 완벽하게 이해하려 하기보다는 흐름을 익히는 데 집중해보자 !

 


002

오늘 배운 내용, 나만의 언어로 정리하기

예시 코드는 다시 보았을 때 이해하기 쉽도록 생성형 AI로 재제작하였습니다.

 

 

 [5/19 손보미 튜터님 라이브세션]

새 기술이 계속 나오는 환경에서 문법 암기는 의미가 없다.

모르는 부분이 생기면 그때그때 검색해서 내 코드에 적용하는 능력을 키우는 것이 훨씬 중요하다.

 

파이썬은 학문이 아니라 실무다.

문법이 기억 안 난다고 화면만 보며 고민하지 말고, 일단 손으로 코드를 직접 치면서 익히는 것이 먼저다.

 

세션 내용에만 갇히지 말고 내 관심 분야와 연결되는 데이터 분석을 스스로 찾아 공부해야 한다.

내 도메인과 얼라인이 되는 데이터를 다뤄봐야 진짜 실력이 늘기 때문이다.

 

교과서식 기초 학습(Bottom-up)과 목적 중심 학습(Top-down)을 항상 병행해야 한다.

이론을 다지면서 동시에 내가 만들고 싶은 결과물을 향해 부딪혀보는 과정이 모두 필요하다.

 

위키독스 같은 플랫폼에 공부 내용을 정리해 책으로 만들면 나만의 훌륭한 포트폴리오가 된다.

TIL 꾸준히 열심히 작성하자...

 

 

새로 알게 된 함수

.upper() / .lower() 대소문자 변환
'기준'.join(리스트) 리스트를 특정 문자 사이에 끼워 문자열로 합치기
.split('기준') 기준 문자로 쪼개서 리스트로 반환. 공백·콤마 분리에 자주 씀
.replace('기존', '변경') ★ 과제 출제 예정. 치환 및 공백 처리에 많이 씀
.startswith() / .endswith() 특정 문자로 시작/끝나는지 여부 → True/False 반환

 

 

 

[데이터 분석 파이썬 종합반] : 1~2주차 수강 완료

 

1. 코랩/주피터 노트북 단축키

Ctrl + M + A  새 코드 셀 추가 (위)
Ctrl + M + D  코드 셀 삭제
Ctrl + M + -  코드 셀 분할
Ctrl + M + M  마크다운 셀로 변경

 

 

2. 변수와 사칙연산

변수는 값을 담아두는 공간
이름은 나도 남도 바로 알아볼 수 있게 짓기
복잡한 코드는 # 주석 활용하여 메모 남겨두기. 코드는 혼자 보는 게 X
★ 연산자 정리 (몰랐던 것만)

 

// 몫 (정수 나눗셈) 7 // 2 → 3
% 나머지 7 % 2 → 1
** 거듭제곱 2 ** 3 → 8

 

3. 자료형(Data Type)

변수에 담긴 값의 종류. print(type(변수))로 확인 가능

int 소수점 없는 정수 count = 3
float 소수점 포함 실수. 연산 결과에 실수가 포함되면 결과도 float rate = 4.6 (내 생일 ㅎ)
str 따옴표로 감싼 문자열. +로 이어 붙이기 가능 name = "타란이"
bool True / False. is_adult = True

 

4. NaN (Not a Number)

 데이터에 값이 비어있는 결측치(Null). 자료형은 아니고, 데이터 분석할 때 쓰이는 특수한 수치값임.

 

5. 입력문 (input)

사용자에게 키보드로 값을 직접 입력받을 때 사용하는 함수

N = input('숫자를 입력하세요 : ')

 

💡 + 5/20 문제 풀어보면서 찾은 내용 ★★★

input() 함수로 입력받은 값은 내가 숫자를 치든 문자를 치든 컴퓨터는 무조건 '문자열(str)'로 인식함
만약 2345를 치면, 숫자 이천삼백사십오가 아니라 문자 '2345'로 저장됨.
그래서 이걸 가지고 사칙연산을 하거나 진짜 숫자로 쓰고 싶다면, int(input()) 처럼 숫자의 형태로 바꿔줘야 함!!

 

6. 문자열(String)

인덱싱 & 슬라이싱

* 주의: 범위 지정해서 슬라이싱할 때

가져오고자 하는 끝 인덱스에

+1을 해줘야 제대로 추출 가능

letter = "python"

letter[:4]      # "pyth"  — 0~3번째
letter[-3:-1]   # "ho"    — 뒤에서 3번째 ~ 2번째

 

 

 

문자열 연산 — 문자열끼리 더하면 이어 붙이고, 곱하면 반복된다.

city = "Seoul"

"Welcome to " + city + "!"   # "Welcome to Seoul!"  — 이어 붙이기
"ha" * 3                      # "hahaha"             — 반복

 

7. 리스트 vs 튜플 vs 딕셔너리

 

  리스트 [ ]  튜플 ( )  딕셔너리 { }
수정 가능 불가 가능
접근 방식 인덱스 인덱스
중복 가능 가능 키 중복 불가, 값은 가능

 

언제 쓰냐

  • 리스트 — 순서가 있고 값이 바뀔 수 있는 데이터. 데이터 목록, 수집한 값들.
  • 튜플 — 바뀌면 안 되는 데이터. 리스트보다 속도 빠름.
  • 딕셔너리 — 이름표가 필요한 데이터. "이 값이 뭘 의미하는지" 키로 명확히 해야 할 때.
my_list = [1, 2, 3]          # 수정 가능
my_tuple = (1, 2, 3)         # 수정 불가
my_dict = {'a': 1, 'b': 2}  # 키로 접근

 

 

7-1. 리스트(List) 메서드

값을 자유롭게 바꿀 수 있는 가변 자료구조로, 데이터 목록을 생성하고 조작할 때 사용

  • .append(값) : 리스트 맨 뒤에 새로운 항목을 추가
  • .extend(리스트) : 기존 리스트 뒤에 다른 리스트의 모든 항목을 통째로 이어 붙임
  • .insert(인덱스, 값) : 지정한 특정 위치(인덱스)에 값을 삽입
  • .remove(값) : 리스트에서 입력한 값과 일치하는 첫 번째 항목을 찾아 삭제
  • .pop(인덱스) : 해당 위치의 값을 리스트에서 꺼내서 삭제하며, 그 값을 반환
  • .index(값) : 특정 값이 리스트의 몇 번째 인덱스에 위치해 있는지 번호를 반환
  • .count(값) : 리스트 내에 해당 값이 총 몇 개 존재하는지 개수를 세어줌
  • .sort() : 리스트 안의 데이터들을 오름차순으로 정렬 (reverse=True 설정 시 내림차순 정렬)
  • .reverse() : 정렬 여부와 관계없이 현재 리스트의 순서를 앞뒤로 뒤집음
  • .clear() : 리스트 안의 모든 항목을 삭제하여 빈 리스트로 만듦
# 리스트 메서드 활용 예시
users = ['Alice', 'Bob']

users.append('Charlie')      # ['Alice', 'Bob', 'Charlie']
users.insert(1, 'David')     # ['Alice', 'David', 'Bob', 'Charlie']
users.remove('Bob')          # ['Alice', 'David', 'Charlie']

popped_user = users.pop(0)   # 'Alice' 추출 후 삭제
print(users)                 # ['David', 'Charlie']

 

 

7-2. 튜플(Tuple)의 특징: 데이터 보호

한 번 생성하면 요소를 추가, 삭제, 수정할 수 없는 불변 자료구조. 값을 변경하는 메서드(append, remove 등) 자체를 아예 사용할 수 없기 때문에 수정하려면 리스트로 변환해야 함.

# 튜플 수정 예시
fix_coords = (37.5, 126.9)

# 조작을 위해 리스트로 잠시 변경
temp_list = list(fix_coords)
temp_list[0] = 37.6

# 수정 완료 후 다시 튜플로 변환
fix_coords = tuple(temp_list)
print(fix_coords)            # (37.6, 126.9)

 

 

7-3. 딕셔너리(Dictionary) 메서드: Key-Value 데이터 관리

Key와 Value가 한 쌍으로 묶인 자료구조. 순서가 아닌 '키'를 이용해 해시 테이블 방식으로 원하는 값을 빠르게 찾아낸다.

  • .keys() : 딕셔너리에 들어있는 모든 Key(키)만 모아서 반환한다.
  • .values() : 딕셔너리에 들어있는 모든 Value(값)만 모아서 반환한다.
  • .items() : Key와 Value를 튜플 쌍으로 묶은 데이터 구조를 반환한다.
  • .get(Key) : 특정 Key에 해당하는 Value를 가져온다. 딕셔너리[Key] 방식과 달리, 존재하지 않는 Key를 조회해도 에러가 발생하지 않고 None을 반환하므로 프로그램의 안정성을 높일 수 있다.
  • .pop(Key) : 특정 Key를 지정해 그 항목을 삭제하고, 연결되어 있던 Value를 반환한다.
  • .popitem() : 딕셔너리의 맨 마지막에 있는 Key-Value 쌍을 꺼내고 삭제한다.
# 딕셔너리 메서드 활용 예시
market_data = {'BTC': 9000, 'ETH': 500}

print(market_data.keys())       # dict_keys(['BTC', 'ETH'])
print(market_data.values())     # dict_values([9000, 500])

# .get을 통한 안전한 데이터 조회
print(market_data.get('XRP'))   # 에러 대신 None 반환

# 값 추출 및 삭제
eth_price = market_data.pop('ETH')
print(eth_price)                # 500
print(market_data)              # {'BTC': 9000}

뭐가 많아서 헷갈리는데, 당연히 다 외우지는 않고 적당히 이해하며 넘기고 있음...

 

 

 

[데이터 리터러시] 1주차 수강 완료

데이터 리터러시란 데이터를 활용해 스스로 목적을 세우고, 올바른 질문을 던지는 능력

문제 정의 → 데이터 분석 → 결론 및 액션

 

대부분의 실수는 문제 정의를 건너뛰고 바로 데이터부터 들여다보는 데서 생긴다.

 

 

문제를 구조화할 때 쓰는 도구:

MECE 누락도 중복도 없이 문제를 쪼개는 원칙
Logic Tree 문제를 하위 단위로 분해해 원인과 해결책을 구조화

 

비즈니스 핵심 지표들:

활성 유저(Active User) 허들이 높을수록 유저 수는 줄지만, 핵심 유저의 가치는 커짐
재방문율(Retention) 서비스 재사용 비율. N-Day / Unbounded / Bracket 방식으로 분류. 높을수록 CAC 회수가 빠름
퍼널(Funnel) & AARRR 유저 이탈 구간을 확인하고 마케팅 효율을 높이는 프레임워크
LTV 고객 한 명이 생애 주기 동안 가져다주는 이익. 신규 고객 획득 비용(CAC)의 기준이 됨
북극성 지표 서비스의 핵심 가치를 대표하는 하나의 선행 지표. 팀 전체가 같은 방향을 보게 함

 

분석의 함정
: 심슨의 역설, 시각화 왜곡, 샘플링 편향, 상관관계와 인과관계의 혼동.
두 데이터의 추이가 비슷하다고 모두 인과관계가 있는 것은 X

 

 

결과 vs 결론 

결과 데이터 처리 후 나오는 숫자, 그래프 등 단순 출력물 "매출이 10% 올랐습니다"
결론 결과를 바탕으로 이끌어낸 의미와 액션. 과도한 주관적 추측은 배제할 필요가 있다. "매출이 10% 오른 이유는 A이므로 다음 달엔 B를 해야 합니다"

 

프로젝트할 때 북극성 지표가 무엇인지부터 정의하는 습관을 들여봐야겠다 - !

 


003

오늘의 시행착오

 

 

강의 수강 후 에이타니로 복습 퀴즈를 풀어봤는데, 리스트와 딕셔너리의 차이를 묻는 문제에서 대답하지 못했다.

 

이런 식으로 내 답변 채점해줌. 처음 써보는데 앞으로 공부하다가 막히면 많이 활용할 것 같다.

 


 

004

내일 학습할 것

  • 에이타니 AI 퀴즈 5문제 아침 루틴으로 고정
  • 오늘 배운 내용 복습하고 파이썬 종합반 3주차 수강