rubus0304 님의 블로그

[데이터분석 2주차] 데이터분석 도메인 이해, 파이썬 기초문법 본문

Data Analyst/Weekly

[데이터분석 2주차] 데이터분석 도메인 이해, 파이썬 기초문법

rubus0304 2024. 10. 12. 23:59

 

1. 데이터분석 도메인 이해

 

(관심직무) 글로벌 마케팅 데이터 분석가

 

1)데이터활용 직무 기업 (경력)- 글로벌 마케팅 데이터 분석

기업 직무 경력
(주)
아티언스
글로벌
마케팅
데이터
분석가 
[주요업무]
- 글로벌 기업 디지털 마케팅 데이터 마트 구축
- 광고/마케팅 데이터 수집 기획 및 로직 수립
- 법인 커뮤니케이션
- 대시보드 기획 지원

[자격요건]
- 2년 이상의 디지털 마케팅 경험
- 중급 이상의 영어실력  (영어미팅 가능)
-SQL 초급

[우대사항]
- Tableau, DataStudio에 대해 기초 경험
- 대기업 데이터 관련 프로젝트 경험
- GA, Adobe 경험
- GCP, Big Query 경험
- 엑셀, PPT 활용 우수

https://www.jobkorea.co.kr/Recruit/GI_Read/45642682?Oem_Code=C1&logpath=1&stext=%EB%B9%84%EC%A6%88%EB%8B%88%EC%8A%A4%20%EB%B6%84%EC%84%9D%EA%B0%80&listno=21

(주)
신도리코
마케팅 커뮤니케이션 매니저

[담당업무]
- 디지털 마케팅 전략 수립 및 실행
     : 웹사이트, 소셜 미디어, 콘텐츠 마케팅, 퍼포먼스 마케팅 등의 디지털 채널을 통한 마케팅 캠페인 기획 및 운영

- 콘텐츠 기획 및 제작
    :신규 서비스와 솔루션의 특성을 반영한 콘텐츠 기획, 영상 및 비주얼 자산 개발
- 브랜드 인지도 및 고객 경험 개선
    : 고객 접점에서의 경험을 강화하기 위한 마케팅 커뮤니케이션 전략 수립
- 성과 분석 및 보고
     : 캠페인 성과 분석, KPI 설정 및 목표 달성 여부를 평가하여 마케팅 전략의 효과성을 지속적으로 개선

[자격요견]
- 학력:무관
- 경력:
- 디지털 마케팅 경력 3년 이상
- 퍼포먼스 마케팅 (SEM, SEO, Paid Media) 및 데이터 분석 경험
- 콘텐츠 기획 및  캠페인 운영 경험
- 소셜 미디어 및 디지털 채널 운영 역량
- 해외여행 결격사유 없는 자

[우대조건]
- B2B 마케팅 경력 도는 SaaS 제품 마케팅 경험
- 글로벌 시장 대상 마케팅 전략 수립 경험
- CRM 및 마케팅 자동화 툴 사용 경험 (Hubspot)
- 영어 또는 일본어 커뮤니케이션 능력

https://www.jobkorea.co.kr/Recruit/GI_Read/45713792?Oem_Code=C1&logpath=1&stext=%EA%B8%80%EB%A1%9C%EB%B2%8C%20%EB%A7%88%EC%BC%80%ED%8C%85%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B6%84%EC%84%9D%EA%B0%80&listno=2
     

 

 

GA/AA 비교: https://hazlenut1234.tistory.com/3

 

 

 

2)데이터분석 직무 기업 (경력)

 

(1) 마케팅

기업 직무 경력
에코마케팅 데이터분석가
[주요 업무]

-에코마케팅의 고객사 및 자사 브랜드의 유저 구매, 행동 데이터를 가공 및 시각화하여 의사결정에 필요한 분석 결과를 제공

- 각 브랜드의 성장에 기여하는 액션 및 지표에 대한 가설을 세우고 A/B 테스트를 설계하여 검증
- 마케팅 활동에 대한 기여도 평가 방식(MMM, MTA, Casual Impact 등) 연구 및 실무 적용 테스트
- 사내 구성원이 데이터 분석을 쉽게 시작할 수 있는 편리한 데이터 활용 환경 구축

지원 자격]

-국내외 4년제 대학 졸업자 이신 분

-3년 이상 유관 경력 있으신 분
-SQL, Python 을 활용한 데이터 분석 및 실무 경험을 보유하신 분
-BI 툴(Tableau, Looker Studio, Redash 등)을 능숙하게 활용할 수 있는 분
-데이터 분석 결과를 쉽고 명료하게 커뮤니케이션이 가능하신 분
-A/B테스트 설계 및 실행을 통해 인과관계 분석경험을 보유하신 분
-비즈니스 목표를 달성하기 위해 도출해야 할 Key Result를 논리적으로 정의할 수 있는 분

[우대 사항]
-웹, 앱 로그 데이터로 유저의 UI/UX를 개선한 경험이 있으신 분
-유저 세그먼트 분석 기법(RFM, CLV, Cohort 분석 등)에 대한 높은 이해도를 가지신 분
-ML/DL 모델 구축 및 활용 경험이 있으신 분
-새로운 분석 방식을 리서치 하고 실무에 빠르게 도입할 수 있는 분


**데이터 분석으로 유관 경력 3년이상 보유하신 분
https://job.incruit.com/jobdb_info/jobpost.asp?job=2410070005953&src=gsw*etc
     

 

 (2) 금융

기업 직무 경력
빗썸코리아 데이터분석 개발자 [담당업무]
- On-premise 데이터 시스템 구축 및 관리
- 클라우드 기반 데이터 시스템 laaS/Paas 구축 및 관리
- 가상자산 관련 데이터 수집, 가공 및 시각화
- 데이터 서비스 분석 및 설계, 개발, 관리
- 데이터 서비스 환경 고도화

[필요역량]
-4년 이상의 금융(가상자산 포함) 혹은 대형 플랫폼 데이터 관련 업무 경력이 있으신 분
- 학사 이상
- 데이터 구조의 설계와 구축 경험
- 대용량 트래픽 시스템 구축 및 운용 경험 
- 개발 조직 및 기획자 협업을 통한 데이터 설계, 구축 및 서비스 관리 경험

[우대사항]
- 데이터 파이프라인 구축 경험
- 웹크롤링/ RESTful API 경험
- 문제분석과 해결에 적극적 마인드 보유
- 고객 중심사고, 데이터 기반 의사결정에 익숙
- 다양한 직군과의 협업과 커뮤니케이션 능숙
- 관련 전공자

https://www.jobkorea.co.kr/Recruit/GI_Read/45548916?Oem_Code=C1&logpath=1&stext=%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EC%BB%A8%EC%84%A4%ED%84%B4%ED%8A%B8&listno=2
카카오페이  데이터분석팀
경력사항
경력 10년 이상

  • 조직 소개
[카카오페이 데이터분석팀]
카카오페이 데이터분석가는 서비스/사업의 성장에 필요한 인사이트를 탐색하고 적용해요.

담당 서비스/사업의 문제를 진단하고 다양한 분석 방법을 통해 해결
방안을 모색합니다.

PM/BM 및 마케터와 유기적으로 의견을 교환하고 빠르게

실행하는 Agile 업무 방식을 가지고 있어요.

데이터분석팀은 하이브리드 조직으로 각 서비스 분석의 질과 효율성을 높이는
방법을 함께 고민하고 적용해요.

또한 전사 차원으로 활용 가능한 분석 자산 생
성과 유저 분석을 수행하는 프로젝트를 진행해요. 금융사, 통신사, 제조업 등의 다양한 커리어패스를 경험한 분석가들이 모여, 커리어에 필요한 방향을 함께 모색하거나 기술적 역량 향상을 위한 스터디를 운영하기도 해요.

  • 직무 소개
업무내용
ㆍ시니어 데이터분석가로서 담당 조직 내 분석가들과 협업하여 데이터 분석 및 활용 전략을 수립하고 필요한 리소스를 관리해요.
ㆍ서비스 지표 수립, 가설 도출과 검증, 마케팅 전략 등 분석 프레임워크를 설계하고 서비스 오너들과 협의하여 인사이트를 도출해요.
ㆍ데이터분석가로서 사용자 경험 개선과 비즈니스 목표 달성을 위한 지표설정과 분석을 수행하고 인사이트를 발굴해요.
ㆍ사용자의 서비스 이용현황을 다양한 관점에서 분석하고 주요 지표를 변화를 모니터링해요.
ㆍ사용자 습관과 아하모먼트(Ahamoment)를 탐색하여 유저 리텐션을 개선하고 유저 가치를 향상시키는 요인을 찾아요.

ㆍ총 경력 8년 이상이신 분을 원해요.
ㆍ데이터 기반으로 서비스 품질 향상 및 마케팅 성과에 기여한 경험이 있으신
ㆍ문제 해결을 위한 가설 수립 및 검증이 가능하고, 이를 논리적으로 설명 가능하신 분
ㆍSQL/R/Python 을 활용한 데이터 추출/가공/분석/리포팅이 가능하신 분
ㆍ다양한 직군의 실무자 및 경영진에 맞는 데이터에 기반한 커뮤니케이션이 가능하신 분
ㆍ스스로의 생각과 호기심을 비즈니스 측면의 관점으로 전환하고, 이를 데이터에 접목시켜본 경험이 있으신 분
ㆍ데이터 품질/활용도 향상에 대한 고민과 현황 개선을 위해 끊임없이 강구하는 자세를 보유

우대사항
ㆍ조직 또는 프로젝트를 리딩하신 경험이 있으신 분
ㆍ유저-서비스간 상호작용의 전 단계를 체계화하고 인사이트를 도출할 수 있는 분
ㆍ도메인에 대한 이해를 바탕으로 데이터 기반으로 적극적인 제안을 하실 수 있는 분
ㆍ분석가의 작업 프로세스 전반과 관심사를 잘 이해하고 더 잘 일하기 위해 함께 고민할 수 있는 분
ㆍAB테스트 기반 가설검증 및 모바일 서비스 데이터 분석 방법(LTV,AARRR, Cohort, Funnel 등)을 깊게 활용한 경험이 있으신 분
ㆍ통계, 산업공학 등 데이터 관련 공학을 전공
ㆍ분석업무 관련 포트폴리오를 제출해주신 분.

 

 

(그 외)

IT -네,카,라,쿠,배,당,토/직,야,몰,두,센

화학 - LG화학, 금호화학, 롯데화학, 

제조업 - LG 디스플레이, 현대차

공공기관 - 코트라 빅데이터 분석팀

대학원  계약학과

기업 기업소개 초임
네이버   7000
카카오   6000
라인   5000
쿠팡   6000
배달의 민족   6000
당근마켓   6500
토스   5000
직방   6000
야놀자   5000
몰로코 AI머신러닝 활용 모바일 광고 솔루션 제공

- 국내 넷마블, GS 등  주요기업에서 몰로코 서비스 사용
- 안익진 대표 창업, 실리콘 밸리 진출 회사
- 한국이 실리콘밸리에서 창업한 스타트업 중 첫 유니콘 회사
- MOLOCO = '머신러닝 컴퍼니'의미
6000
두나무 가상화폐거래소 '업비트','증권플러스' 운영사

- 가상화폐와 증권거래서비스 제공기업
7000
센드버그 온라인 채팅 솔루션 제공 기업

- 미국의 '레닛', 데이팅 앱 '힌지'에서 사용
- 국내에서는  KB금융, 넥슨 등에서 센드버그 서비스 사용
- 미국 실리콘밸리에 진출한 유니콘 기업
- 1억 7천만명 넘는 이용자 확보한 클라우드 기반 채팅 솔루션 업체
5000
마이리얼트립 여행종합예약 플랫폼

- 항공권, 숙소, 패키지 등 여행에 필요한 다양한 서비스 한번에
6000
에이블리코퍼레이션  에이블리코퍼레이션에서 운영하는 '에이블리'라는 스타일커머스 플랫폼

- 2018년 월간 사용자 수 200만 명 돌파, 2021년부터 3년 연속 버티컬 커머스 사용자 수 1위 차지
- '4910', 'amood' 라는 쇼핑몰도 운영 중
3000
그린랩스 농업 테크 기업

- 첨단 기술로 농업을 혁신하며 농업 종사자들의 수익을 극대화시켜 주는 기업
4500
원티드 AI 기반의 커리어 관리 서비스 

- 차별화된 데이터를 활용해 사용자 각자에게 가장 잘 맞는 커리어 경로를 설계하고 커리어 성장 경험을 제공
4000

 

 

2. 파이썬 문법정리

문법 내용
1.변수 선언과 자료형
변수 선언 a = 3 # 3을 a에 넣는다.
print(a)

b = a # a에 들어 있는 값인 3을 b에 넣는다.
print(b)

a = 5 # a에 5라는 새로운 값을 넣는다.
print(a, b) # 5 3
숫자형
자료형
1) 사칙연산 (+,-,*,/)

ex)
a=7, b=2
a+b =c
print (c)    --> 9


a+b # 9
a-b # 5
a*b # 14
a/b # 3.5
 
2) 변수에 저장된 값 연산  후 다시 그 값을 같은 변수에 저장가능

a=5
a= a+3    ( a+= 3으로 줄여쓸 수도 있음!)
print(a)   -->8

3) 나눗셈의 나머지

a//b # 3 (몫)
a%b # 1 (나머지)
a**b # 49 (거듭제곱)
  
Bool 자료형 참/거짓

x= True (참)
y=False (거짓)

(에러)
z= rue  (x) * 소문자로 쓰면 자료형으로 인식하지 않고 변수명으로 생각해 에러남.
True = 1 (x) *True/ False 는 변수명으로 쓸 수 없음.


보통 '비교연산자'의 결과로 나타내기 위해 쓰임.

4 > 2 # True 크다
5 < 1 # False 작다
6 >= 5 # True 크거나 같다
4 <= 4 # True 작거나 같다
3 == 5 # False 같다
4 != 7 # True 같지 않다


불 자료형에는 논리연산자를 이용할 수 있다.

a = 4 > 2 # True
not a # False NOT 연산자로 참을 거짓으로, 거짓을 참으로 바꿔준다.
a and b # False AND 연산자로 모두 참이어야 참을 반환한다.
a or b # True OR 연산자로 둘 중 하나만 참이면 참이다.


(연습문제)
숫자들의 평균 구하기

a = 24
b = 16
c = 26

print((a+b+c)/3)
2.문자열 다루기
문자열 1) 문자열 기초

파이썬에서는 '글'도 데이터로 사용할 수 있는데요, 이것을 '문자열'이라고 합니다.

작은 따옴표 또는 큰 따옴표. 둘 다 같아요!
a = "aa"
b = 'aa'

2) 따옴표로 감싸지 않으면 변수이름을 뜻함. (꼭 구분해서 써야함!)

a = 1
b = "a"
c = a
print(a, b, c)  --> 1 "a" 1

따라서, 이렇게 다양한 방법으로 만들 수 있기 때문에, 문자열에 따옴표를 포함해야할 때 쓰면 편해요

ex) print("I'm happy :)")
문자열 연산 문자열 간의 더하기는 두 문자열을 이어붙인 문자열을 반환합니다.

first_name = "Harry"
last_name = "Potter"
first_name + last_name     # HarryPotter
first_name + " " + last_name      # Harry Potter

a = "3"
b = "5"
a + b       # 35

문자열과 정수를 더하면 에러!

a = "3"
a + 5        #  ERROR  (문자열과 숫자형은 더할 수 없어서 에러!)


문자열의 길이는 len( ) 함수

 
print(len("abcde"))     # 5
print(len("Hello, Sparta!"))     # 14
print(len("안녕하세요."))      # 6


그 외에도 다양한 기능
이렇게 특정 자료형 뒤에 . 을 붙이고 쓰는 내장 함수들을 '메소드(method)'


1) 모든 알파벳을 대문자/소문자로 바꾸기

sentence = 'Python is FUN!'
sentence.upper()    # PYTHON IS FUN!
sentence.lower()      # python is fun!


2) 특정 문자를 기준으로 문자열을 나누기

# 이메일 주소에서 도메인 'gmail'만 추출하기

myemail = 'test@gmail.com'

result = myemail.split('@')      # ['test','gmail.com']   (뒤에 배울 '리스트'라는 자료형이에요 :))

result[0]    # test (리스트의 첫번째 요소)
result[1]    # gmail.com (리스트의 두 번째 요소

result2 = result[1].split('.')     # ['gmail','com']

result2[0] # gmail    -> 우리가 알고 싶었던 것
result2[1] # com

# 한 줄로 한 번에!

myemail.split('@')[1].split('.')[0]


3) 특정 문자를 다른 문자로 바꾸기

txt = '서울시-마포구-망원동'
print(txt.replace('-', '>'))       # '서울시>마포구>망원동'

인덱싱과 슬라이싱 1) 문자열은 '문자들의 모임'이기 때문에 그 일부를 따로 떼어 부르는 방법이 있음.
한 글자 씩 부를 때는 몇 번째인지 '인덱스'를 넣어 불러서 인덱싱이라고 합니다.

f="abcdefghijklmnopqrstuvwxyz"
f[1]     # b       (파이썬은 숫자를 0부터 셉니다)

2) 문자열의 일부를 잘라낼 때는 슬라이싱

f[4:15]     # efghijklmno f[4]부터 f[15] 전까지, 총 15-4=11개!

f[8:]      # ijklmnopqrstuvwxyz f[8]부터 끝까지앞의 8개 빼고!

f[:7]       # abcdefg 시작부터 f[7] 전까지, 앞의 7개!

f[:]       # abcdefghijklmnopqrstuvwxyz 처음부터 끝까지


3)특정 문자열로 자르고 싶을 때! split('문자열') 을 활용

myemail = 'abc@sparta.co'

domain = myemail.split('@')[1].split('.')[0]

print(domain)


(연습문제)
Q. 문자열의 앞의 반만 출력하기
"sparta" 의 앞의 3글자인 "spa" 만 출력

text = "sparta"
print(text[:3])

Q. 전화번호의 지역번호 출력하기
phone = "02-123-1234"

phone = "02-123-1234"
print(phone.split("-")[0])
3. 리스트와 딕셔너리
리스트 기초 1) 순서가 있는, 다른 자료형들의 모임!

a = [1, 5, 2]
b = [3, "a", 6, 1]
c = []
d = list()
e = [1, 2, 4, [2, 3, 4]]


2) 리스트의 길이도 len() 함수를 사용해서 잴 수 있어요.

a = [1, 5, 2]
print(len(a)) # 3

b = [1, 3, [2, 0], 1]
print(len(b)) # 4


3) 순서가 있기 때문에, 문자열에서처럼 인덱싱과 슬라이싱을 사용할 수 있음

a = [1, 3, 2, 4]

print(a[3])   # 4
print(a[1:3])   # [3, 2]
print(a[-1])    # 4 (맨 마지막 것)


4) 리스트의 요소가 리스트라면? 중첩해서!

a = [1, 2, [2, 3], 0]

print(a[3])      # [2, 3]
print(a[3][0])      # 2


리스트 더 많은 기능들 1) 덧붙이기

a = [1, 2, 3]
a.append(5)
print(a) # [1, 2, 3, 5]

a.append([1, 2])
print(a) # [1, 2, 3, 5, [1, 2]]

# 더하기 연산과 비교!
+= [2, 7]
print(a) # [1, 2, 3, 5, [1, 2], 2, 7]


2) 정렬하기

a = [2, 5, 3]
a.sort()

print(a)     # [2, 3, 5]

a.sort (reverse=True)

print(a)       # [5, 3, 2]


3) 요소가 리스트 안에 있는지 알아보기

a = [2, 1, 4, "2", 6]

print(1 in a)      # True
print("1" in a)      # False
print(0 not in a)      # True

딕셔너리 기초 1) 딕셔너리는 키(key)와 밸류(value)의 쌍으로 이루어진 자료의 모임입니다.
영한사전에서 영어 단어를 검색하면 한국어 뜻이 나오는 것처럼요!

person = {"name":"Bob", "age": 21}
print(person["name"])

2) 딕셔너리를 만드는 데는 여러가지 방법을 쓸 수 있습니다.

a = {"one":1, "two":2}

# 빈 딕셔너리 만들기
a = {}
a = dict()


3) 딕셔너리의 요소에는 순서가 없음 (인덱싱을 사용불가)

person = {"name":"Bob", "age": 21}

print(person[0]) # 0이라는 key가 없으므로 KeyError 발생!


4) 딕셔너리의 값을 업데이트하거나 새로운 쌍의 자료를 넣을 수 있습니다.

person = {"name":"Bob", "age": 21}

person["name"] = "Robert"
print(person) # {'name': 'Robert', 'age': 21}

person["height"] = 174.8
print(person) # {'name': 'Robert', 'age': 21, 'height': 174.8}


5) 딕셔너리의 밸류로는 아무 자료형이나 쓸 수 있어요. 다른 딕셔너리를 넣을 수도 있죠!

person = {"name":"Alice", "age": 16, "scores": {"math": 81, "science": 92, "Korean": 84}}

print(person["scores"]) # {'math': 81, 'science': 92, 'Korean': 84}
print(person["scores"]["science"]) # 92


딕셔너리의 더 많은 기능들 딕셔너리 안에 해당 키가 존재하는지 알고 싶을 때는 in 을 사용합니다.

person = {"name":"Bob", "age": 21}

print("name" in person) # True
print("email" in person) # False
print("phone" not in person) # True
 리스트와 딕셔너리의 조합 딕셔너리는 리스트와 함께 쓰여 자료를 정리하는 데 쓰일 수 있습니다.

people = [{'name': 'bob', 'age': 20}, {'name': 'carry', 'age': 38}]

# people[0]['name']의 값은? 'bob'
# people[1]['name']의 값은? 'carry'

person = {'name': 'john', 'age': 7}
people.append(person)

# people의 값은?   [{'name':'bob','age':20}, {'name':'carry','age':38}, {'name':'john','age':7}]
# people[2]['name']의 값은?    'john'


(연습문제)

Q. 딕셔너리에서 원하는 정보를 찾아보기
[코드스니펫] - 딕셔너리 퀴즈


people = [
{'name': 'bob', 'age': 20, 'score':{'math':90,'science':70}},
{'name': 'carry', 'age': 38, 'score':{'math':40,'science':72}},
{'name': 'smith', 'age': 28, 'score':{'math':80,'science':90}},
{'name': 'john', 'age': 34, 'score':{'math':75,'science':100}}
]

smith의 science 점수를 출력해보세요

print(people[3]['score']['science'])
4. 조건문
if문 1) 조건을 만족했을 때만 특정 코드를 실행하도록 하는 문법입니다.

money = 5000
if money > 3800:
    print("택시 타자!")


2) 파이썬에서는 어디까지 구문에 포함되는지를 들여쓰기로 구분하기 때문에 아주 중요합니다.
-> 조건에는 불 자료형이 들어갑니다. money > 3800은 True

money = 5000
if money > 3800:
   print("택시 타자!")

else/
elif
1) 조건을 만족하지 않을 때 다른 코드를 실행하고 싶을 때 쓰는 문법입니다.

money = 2000
if money > 3800:
print("택시 타자!")
else:
print("걸어가자...")

2) 다양한 조건을 판단할 때는 elif 를 쓰면 좋아요!

age = 27
if age < 20:
print("청소년입니다.")
elif age < 65:
print("성인입니다.")
else:
print("무료로 이용하세요!")

5. 반복문
for문 0부터 9까지 숫자를 출력해볼까요?

print(0)
print(1)
print(2)
...
print(9)

파이썬에서는 아래처럼 쓰는 것이 더 자연스럽습니다.

fruits = ['사과', '배', '감', '귤']
for fruit in fruits:
print(fruit)


(연습문제1)- Q. 사람의 나이 출력하기

people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby', 'age': 57},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]

이 리스트에서 나이가 20보다 큰 사람만 출력합니다

for person in people:
if person['age'] > 20:

print(person['name'])


(연습문제2)for 문 - enumerate, break

fruits = ['사과', '배', '감', '귤','귤','수박','참외','감자','배','홍시','참외','오렌지']

for i, fruit in enumerate(fruits):
print(i,fruit)

예를 들어 앞에 5개만 출력해보고 싶다면?

for i, fruit in enumerate(fruits):
     print(i, fruit)
     if i == 4:
         break

5-1. 반복문 연습문제
  Q1. 리스트에서 짝수만 출력하는 함수 만들기
- 짝수 출력하기

num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]

이 리스트에서 짝수인 요소만 출력해봅시다.

num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
for num in num_list:
if num % 2 == 0:

print(num)


Q2. 리스트에서 짝수의 개수를 출력하기

num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]

num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
count = 0
for num in num_list:
if num % 2 == 0:
count += 1

print(count)



Q. 리스트 안에 있는 모든 숫자 더하기

num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]

result = 0
for num in num_list:
result += num
print(result)

print(sum(a_list))


Q. 리스트 안에 있는 자연수 중 가장 큰 숫자 구하기

num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]

max_value = 0
for num in num_list:
if num > max_value:
max_value = num

print(max_value)

print(max(a_list))
6. 함수
함수 사용 방법 함수는 반복적으로 사용하는 코드들에 이름을 붙여놓은 것입니다.

def hello():
print("안녕!")
print("또 만나요!")


hello()
hello()


조건문에 넣을 값을 바꿔가면서 결과를 확인할 때 쓰면 편합니다.

def bus_rate(age):
      if age > 65:
         print("무료로 이용하세요")
      elif age > 20:
         print("성인입니다.")
      else:
         print("청소년입니다")

bus_rate(27)
bus_rate(10)
bus_rate(72)


단순한 출력 뿐만 아니라 결과 값을 돌려주도록 함수를 만들 수도 있어요!

def bus_fee(age):
      if age > 65:
           return 0
      elif age > 20:
           return 1200
      else:
           return 0

money = bus_fee(28)
print(money)


Q. 주민등록번호를 입력받아 성별을 출력하는 함수 만들기

def check_gender(pin):
print('')

my_pin = '200101-3012345'
check_gender(my_pin)


주민등록번호 뒷자리의 맨 첫 번째 숫자가 1, 3 등 홀수이면 남성, 2, 4 등 짝수이면 여성이죠?

힌트! → "2"라는 문자열을 숫자로 바꾸려면? int("2") 이렇게, int로 감싸주세요!

def check_gender(pin):
      num = int(pin.split('-')[1][0])
      if num % 2 == 0:
             print('여성')
      else:
             print('남성')

my_pin = "200101-3012345"
check_gender(my_pin)
7.튜플,집합
튜플 튜플은 리스트와 비슷하지만 불변 인 자료형 입니다. 마찬가지로 순서가 존재하죠!

a = (1,2,3)
print(a[0])

예를 들어 아래와 같은 작업이 불가합니다!

a = (1,2,3)
a[0] = 99

주로 사용은 아래와 같이, 딕셔너리 대신 리스트와 튜플로 딕셔너리 '비슷하게' 만들어
사용해야 할 때 많이 쓰입니다!


a_dict = [('bob','24'),('john','29'),('smith','30')]

집합 (set) 집합은 말 그대로 '집합'을 구현하는 방법! 좋은점: 중복이 제거 됩니다

a = [1,2,3,4,5,3,4,2,1,2,4,2,3,1,4,1,5,1]
a_set = set(a)
print(a_set)

교집합 / 합집합 / 차집합도 구할 수 있어요

a = ['사과','감','수박','참외','딸기']
b = ['사과','멜론','청포도','토마토','참외']

print(a & b) # 교집합
print(a | b) # 합집합



(연습문제) 구글링문제 - Q. A가 들은 수업 중, B가 듣지 않은 수업을 찾아보기
- AB수업 문제

student_a = ['물리2','국어','수학1','음악','화학1','화학2','체육']
student_b = ['물리1','수학1','미술','화학2','체육']

a와 b의 '차집합' 구하는 방법을 구글링해보세요!

set_a = set(student_a)
set_b = set(student_b)

print(set_a-set_b)



8.f-string
변수로 더 직관적인 문자열 만들기 예를 들어 아래 for문을 살펴보겠습니다.
- 점수 모음

scores = [
{'name':'영수','score':70},
{'name':'영희','score':65},
{'name':'기찬','score':75},
{'name':'희수','score':23},
{'name':'서경','score':99},
{'name':'미주','score':100},
{'name':'병태','score':32}
]

이름과 점수를 모두 출력

for s in scores:
name = s['name']
score = str(s['score'])
print(name,score)

아래와 같이 출력해보면 어떨까요?

for s in scores:
name = s['name']
score = str(s['score'])
print(name+'는 '+score+'점 입니다')


f-stirng을 이용하면 훨씬 간단

for s in scores:
     name = s['name']
     score = str(s['score'])
     print(f'{name}은 {score}점입니다')

9.예외처리
try-except문 에러가 있어도 건너뛰게 할 수 있는 방법
- try-except 예제

people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby', 'age': 57},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]

실제 프로젝트 남용하는 것은 금물! 어디서 에러가 났는지 알 수 없어요 ?


다음과 같이 20세 보다 큰 사람만 출력한다고 해봅시다.
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby', 'age': 57},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]

for person in people:
      if person['age'] > 20:
         print (person['name'])

그런데 만약, bobby가 age를 갖고 있지 않다면? - 데이터 하나가 잘못 들어간거죠!


people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby'},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]

for person in people:
      if person['age'] > 20:
         print (person['name'])

그 때 아래와 같이 try except 구문을 이용하면 에러를 넘길 수 있답니다.

for person in people:
      try:
           if person['age'] > 20:
              print (person['name'])
      except:
           name = person['name']
           print(f'{name} - 에러입니다')

10.파일 불러오기
 여러개 파일로 분리하려면 1) main_test.py

from main_func import *
say_hi()


2) main_func.py

def say_hi():
print('안녕!')

11.한줄의 마법
if문-삼항연산자 만약 조건에 따라 다른 값을 변수에 저장하고 싶다면?

num = 3

if num%2 == 0:
     result = "짝수"
else:
      result = "홀수"

print(f"{num}은 {result}입니다.")


이것을 한 줄에 적는 것이 파이썬의 유일한 삼항연산자인 조건식입니다

num = 3
result = "짝수" if num%2 == 0 else "홀수"
print(f"{num}은 {result}입니다.")

(참일 때 값) if (조건) else (거짓일 때 값) 으로 항이 3개라 삼항 연산자입니다 ?



for문 (한방에) a_list 의 각 요소에 2를 곱한 새로운 리스트를 만들고 싶다면?

a_list = [1, 3, 2, 5, 1, 2]

b_list = []
for a in a_list:
     b_list.append(a*2)

print(b_list)


이것을 한 번에 쓸 수 있는 방법이 있죠!

a_list = [1, 3, 2, 5, 1, 2]
b_list = [a*2 for a in a_list]
print(b_list)

12. map,filter,lambda식
map   map - 리스트의 모든 원소를 조작하기
- 리스트조작 연습
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby', 'age': 57},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]

1. 1차 조작

def check_adult(person):
      if person['age'] > 20:
          return '성인'
else:
          return '청소년'

result = map(check_adult, people)
print(list(result))


2.2차 조작!

def check_adult(person):
       return '성인' if person['age'] > 20 else '청소년'

result = map(check_adult, people)
print(list(result))


3. 3차 조작!

result = map(lambda x: ('성인' if x['age'] > 20 else '청소년'), people)
print(list(result))



 filter - 리스트의 모든 원소 중 특별한 것만 뽑기 map과 아주 유사한데, True인 것들만 뽑기! (map보다 훨씬 쉬워요!)

result = filter(lambda x: x['age'] > 20, people)
print(list(result))
13. 함수 심화
함수의 매개변수 이 내용들은 직접 쓰는 것보단 알고 있으면 내장함수 등을 사용할 때 도큐먼트를 읽는 데 도
이 됩니다!

1.함수에 인수를 넣을 때, 어떤 매개변수에 어떤 값을 넣을지 정해줄 수 있어요. 순서 상관 없음!

def cal(a, b):
      return a + 2 * b

print(cal(3, 5))
print(cal(5, 3))
print(cal(a=3, b=5))
print(cal(b=5, a=3))


2.특정 매개변수에 디폴트 값을 지정해줄 수 있어요.

def cal2(a, b=3):
      return a + 2 * b

print(cal2(4))
print(cal2(4, 2))
print(cal2(a=6))
print(cal2(a=1, b=7))


3.  입력값의 개수를 지정하지 않고 모두 받는 방법!

def call_names(*args):
      for name in args:
           print(f'{name}야 밥먹어라~')

call_names('철수','영수','희재')


이렇게 여러 개의 인수를 하나의 매개변수로 받을 때 관례적으로 args 라는 이름을 사용
합니다. arguments라는 뜻이에요!

4.키워드 인수를 여러 개 받는 방법!

def get_kwargs(**kwargs):
      print(kwargs)

get_kwargs(name='bob')
get_kwargs(name='john', age='27')

14.클래스
 
우선, 클래스를 언제 사용하는지 생각해보시죠!


중앙에서 HP 관리


각 객체가HP관리 (더 자유로움)

클래스의 사용 방법을 눈으로 살펴보겠습니다.

class Monster():
         hp = 100
         alive = True

         def damage(self, attack):
               self.hp = self.hp - attack
               if self.hp < 0:
                  self.alive = False

         def status_check(self):
               if self.alive:
                  print('살아있다')
               else:
                  print('죽었다')

m = Monster()
m.damage(120)

m2 = Monster()
m2.damage(90)

m.status_check()
m2.status_check()

 

파이썬 강의자료.pdf
3.16MB