저는 파이썬 기초부터 데이터 분석까지 다양한 강의를 진행하며, 5000명 이상의 수강생을 온·오프라인에서 만나왔습니다.
수강생들의 어려움을 가까이에서 파악하며, 데이터를 더 쉽게 이해하고 실습할 수 있도록 고민한 경험을 강의에 녹여내고 있습니다.
이러한 경험을 바탕으로, 『파이썬 데이터 분석가 되기 + 챗GPT』라는 책을 집필했으며, 이 책이 누구나 부담 없이 데이터 분석을 시작할 수 있는 안내서가 되기를 바라며 강의를 진행하고 있습니다.
현재 패스트캠퍼스, 클래스101, 멀티캠퍼스, 메가스터디, 국비지원등 여러 플랫폼에서 데이터 분석 메인 강사로 강의를 진행하고 있습니다.
약력
현) 서울아산병원 빅데이터연구센터 데이터사이언티스트
머신러닝, 딥러닝, IT플랫폼 개발, SCI 논문 저자
서강대학교 AI·SW대학원 데이터사이언스 석사 졸업
숙명여자대학교 컴퓨터과학 학사 졸업
MIT IDSS Program 'Data Science and Machine Learning' 수료
저서
파이썬 데이터 분석가 되기 + 챗GPT
강의 및 컨설팅
패스트캠퍼스: '실패 없이 완주하는 파이썬 데이터 분석 입문' 강의 런칭
클래스101: 'ChatGPT를 이용한 Python 데이터 분석 정복하기' 강의 런칭
패스트캠퍼스: '실습으로 끝장내는 파이썬 데이터 분석 입문' 기업 전용 강의 런칭
국비지원: '한 번에 따라하는 파이썬 데이터 분석 기초 완주반' 강의 런칭
메가스터디: '파이썬 프로그래밍 기초', '인공지능을 위한 파이썬 라이브러리 활용' 강의 런칭
멀티캠퍼스: '파이썬 데이터 분석 입문 with ChatGPT' 강의 런칭
삼성전자: Citizen Developer 양성 과정 '파이썬 프로그래밍 기초'
대한의료정보학회: '의료 데이터를 활용한 실전 분석' 튜토리얼
서강대학교, 숙명여자대학교, 한국외국어대학교, 아주대학교, 한국교통대학교, 울산대학교, 한국폴리텍대학교 : '파이썬 프로그래밍 기초', '파이썬을 활용한 머신러닝 및 데이터 분석 실습'
S-OIL, SK 플래닛, 현대오토에버, 대상 주식회사: '프롬프트 엔지니어링', '생성형 AI를 활용한 업무 자동화', '파이썬 오픈 API기반 웹 크롤링 강의', 'RNN을 활용한 주가 데이터 분석'
잡코리아: '인공지능 분야 취업 컨설팅'
강의
수강평
- [왕초보] [누적 5,000명+] Python 프로그래밍 기초 완성 로드맵
- [왕초보] [누적 5,000명+] Python 프로그래밍 기초 완성 로드맵
- [왕초보] [누적 5,000명+] Python 프로그래밍 기초 완성 로드맵
- [왕초보] [누적 5,000명+] Python 프로그래밍 기초 완성 로드맵
- [왕초보] [누적 5,000명+] Python 프로그래밍 기초 완성 로드맵
게시글
질문&답변
range함수 관련
안녕하세요. 셀레나입니다!강의 13장의 반복문 관련 내용이네요. 😊 이 예제는 반복문의 기본 개념을 설명하기 위한 첫 번째 예제입니다. 처음 반복문을 접하시는 분들이 반복자(i) 개념을 익히도록 돕기 위해 편의상 i를 사용했으며, 이후에는 반복자를 활용하는 다양한 방식을 설명하고 있습니다.이후에는 반복자를 활용하는 다양한 방식을 설명하고 있습니다. 만약 클린 코드 관점에서 본다면, i 변수를 사용하지 않는 경우 _로 대체하는 것이 더 적절합니다.예를 들어, 아래처럼 작성하면 불필요한 변수 선언 없이 반복문을 실행할 수 있습니다.for _ in range(5): print('파이썬 프로그래밍') 이렇게 하면 반복 변수(i)를 사용하지 않는다는 의도를 명확히 드러낼 수 있습니다. 감사합니다. :)
- 2
- 1
- 18
질문&답변
if 질문
안녕하세요! 셀레나입니다. 🙂 파이썬에서 가장 중요한 문법 중 하나는 '들여쓰기' 입니다!들여쓰기를 해줘야만 컴퓨터가 if 문과 실행할 코드를 같은 그룹으로 묶어 이해하고 실행할 수 있습니다. 예를 들어, 아래 코드에서:if 1: print('true') # ❌ 들여쓰기 없음 (오류 발생) 이렇게 작성하면 컴퓨터는 if 문 이후에 실행할 코드가 없다고 인식합니다.그래서 반드시 들여쓰기를 해줘야 합니다! if 1: print('true') # ✅ 올바른 들여쓰기 이렇게 하면 컴퓨터가 "if 문이 참이면 print('true')를 실행하면 되겠구나!" 라고 이해합니다. 💡들여쓰기는 파이썬에서 필수적인 문법 요소입니다. 다른 프로그래밍 언어에서는 들여쓰기가 선택 사항이지만, 파이썬에서는 들여쓰기를 하지 않으면 오류가 발생합니다. 꼭 기억해 주세요!
- 2
- 1
- 21
질문&답변
포맷팅 질문
안녕하세요. 셀레나입니다. 포맷팅은 중요한 개념이죠! :) 열심히 복습도 하신다니 너무 멋지세요!! 언제나 응원합니다. 첫 번째 예제는 0번째 인덱스를 가지고 옵니다. print('나는 {}호선을 타고 학교를 가'.format(6)) print('나는 {0}호선을 타고 학교를 가'.format(6))두 줄 모두 "나는 6호선을 타고 학교를 가"를 출력합니다.{}는 자동 인덱스(0번),{0}은 명시적으로 0번 인덱스를 사용한 거예요. 두 번째 예제는 오류가 납니다. 같이 살펴보도록 하죠~! print('나는 {1}차를 타고 학교를 가'.format('우리집'))이건 에러가 납니다.왜냐하면?.format('우리집')은 인자 하나만 넘겼어요.그런데 {1}은 인덱스 1 를 참조하겠다는 의미예요.하지만 인자는 하나밖에 없어서 IndexError가 발생합니다.오류를 해결하기 위해서는 {0}은 인덱스 0 를 참조해주세요! print('나는 {1}호선을 타고 학교를 가'.format(643))이것도 마찬가지로 에러가 납니다. 643은 하나의 인자일 뿐이고, 1번째 인덱스는 없어요. 정리하면,format()에 넘긴 인자의 개수가 중괄호에서 참조하는 인덱스보다 적으면 에러가 납니다.숫자 하나를 넘기더라도 {1}은 1번째 인덱스를 찾으려고 하기 때문에, 문자열의 1번째 문자나 숫자의 1의 자릿수를 참조하는 게 아니에요.단순히 인덱스 기준으로 format() 함수의 인수 리스트를 참조하는 겁니다. 새로운 예제로 이해해보겠습니다! print('나는 {1}호선을 타고 학교를 가'.format('우리집', 2)) # 출력: 나는 2호선을 타고 학교를 가여기선 인자를 두 개 넘겼기 때문에 {1}은 2를 잘 참조할 수 있어요. 이해되실까요? :) 파이썬 공부 화이팅입니다!!!
- 2
- 1
- 15
질문&답변
딕셔너리 반복자 질문
안녕하세요. 셀레나입니다. :)답변드립니다.딕셔너리에서 for 문을 사용할 때 기본적으로 반복 변수는 키 값을 받습니다. 하지만 .items(), .values() 메서드를 활용하면 값(value)이나 (키, 값) 쌍도 가져올 수 있습니다. 1. 기본적으로 키만 반복my_dict = {'a': 1, 'b': 2, 'c': 3} for key in my_dict: print(key) # a, b, c (키만 출력) 2. 키와 값을 함께 사용 (.items())for key, value in my_dict.items(): print(f"키: {key}, 값: {value}") 3. 값만 반복 (.values())for value in my_dict.values(): print(value) # 1, 2, 3 (값만 출력) 즉, 반복 변수는 키로 고정되지 않고, .items()나 .values()를 사용하면 값도 활용할 수 있습니다.
- 2
- 1
- 19
질문&답변
set 질문
안녕하세요! 셀레나입니다. :) set1.update([11,13]) 코드에서 [11,13]이 리스트 자체로 추가될 것이라고 예상하셨지만, update() 함수는 리스트의 각 요소를 개별적으로 추가하는 함수입니다. 즉, {1,2,3,4,5,6,[11,13]}처럼 리스트 [11,13]이 통째로 추가되는 것이 아니라, 11과 13이 각각 추가됩니다. 🔹집합(set)은 변경 가능한(mutable) 객체를 요소로 가질 수 없습니다.따라서 리스트는 집합에 직접 추가할 수 없지만, 튜플(immutable 객체)은 추가할 수 있습니다. set1 = {1, 2, 3, 4, 5, 6} set1.add((11, 13)) # 리스트가 아닌 튜플로 추가 print(set1) # {1, 2, 3, 4, 5, 6, (11, 13)} ✔add() 함수를 사용하면 단일 요소만 추가할 수 있습니다.✔(11, 13)을 튜플로 감싸면 하나의 요소로 인식되어 집합에 추가됩니다.
- 2
- 2
- 29
질문&답변
클래스 질문
1. teddy_jelly('red', 'strawberry')는 함수의 인수인가요? 네, 함수의 인수와 비슷한 개념으로 이해할 수 있습니다.teddy_jelly('red', 'strawberry')는 **클래스의 생성자(__init__ 메서드)**를 호출하여 teddy_jelly 클래스의 인스턴스를 생성하는 코드입니다. class TeddyBearJelly: def __init__(self, color, taste): self.color = color self.taste = taste jelly = [ TeddyBearJelly("red", "strawberry"), TeddyBearJelly("yellow", "lemon"), TeddyBearJelly("green", "apple") ] 이때, TeddyBearJelly("red", "strawberry")는 함수를 호출하는 방식과 비슷하지만, 실제로는 생성자 __init__을 실행하여 객체(인스턴스)를 만드는 과정입니다. 즉, "red"와 "strawberry"가 __init__의 color와 taste 매개변수로 전달됩니다.결과적으로,jelly 리스트에는 TeddyBearJelly 클래스의 인스턴스들이 저장됩니다.왜 함수의 인수와 비슷한 개념인가? 생성자는 일반적인 함수처럼 동작하며, __init__ 메서드는 클래스의 객체를 초기화하는 역할을 합니다. 즉, 아래 코드를 보면: class TeddyBearJelly: def __init__(self, color, taste): # color와 taste는 인수 self.color = color self.taste = taste jelly = [ TeddyBearJelly("red", "strawberry"), # "red", "strawberry"가 인수로 전달됨 TeddyBearJelly("yellow", "lemon"), TeddyBearJelly("green", "apple") ] 이때 TeddyBearJelly("red", "strawberry")는클래스의 생성자 __init__을 호출하면서 "red"와 "strawberry"를 인수로 전달함.생성자 __init__ 내부에서 self.color = color, self.taste = taste로 저장됨.새로운 TeddyBearJelly 인스턴스가 생성되고, 이 객체가 jelly 리스트에 저장됨. 결론"red"와 "strawberry"는 __init__ 메서드의 인수로 전달되는 값클래스의 인스턴스를 생성하는 과정이 함수 호출과 유사따라서 함수의 인수와 비슷한 개념이라고 이해하는 것이 맞습니다. 2. print(jelly[0].color)에서 .color의 의미는? jelly[0].color에서 .color는 jelly 리스트의 첫 번째 객체(TeddyBearJelly 인스턴스)의 color 속성에 접근하는 것입니다. print(jelly[0].color) # 'red' 출력 print(jelly[0].taste) # 'strawberry' 출력 이 표현이 함수의 호출 방식(함수())과 유사해 보일 수 있지만, 속성에 접근하는 방식일 뿐 함수 호출과는 다릅니다. .color가 self.color = color와 관련이 있는가? 네, 관련이 있습니다! 클래스 내부에서 self.color = color라고 정의하면, 각 인스턴스에 color라는 속성이 생깁니다.즉, TeddyBearJelly("red", "strawberry")을 만들면, 내부적으로 다음과 같이 저장됩니다. # TeddyBearJelly("red", "strawberry") 생성 시 인스턴스.color = "red" 인스턴스.taste = "strawberry"그래서 jelly[0].color는 jelly[0]이라는 TeddyBearJelly 객체의 color 속성에 접근하여 "red"를 가져오는 것입니다.화이팅입니다!!! :)
- 2
- 1
- 24