HOME / CATALOG / 데이터 사이언스
데이터 사이언스

손에 잡히는 퀀트 투자 with 파이썬

파이썬을 활용한 금융 데이터 분석과 퀀트 투자 전략 검증
지은이 GIL’s LAB
도서 정보
출간일
2022년 2월 22일
쪽수
540쪽
판형
188*240*22mm
ISBN
9791158393137
시리즈
데이터 사이언스 시리즈_078
정가
32,000원
난이도
도서 소개
저자 소개
목차
예제 코드
정오표

도서 소개

직접 퀀트 투자 전략을 구현하고 검증하면서 안전한 주식투자를 시작하세요!

《손에 잡히는 퀀트 투자 with 파이썬》은 파이썬과 데이터 분석이 익숙하지 않은 분들도 퀀트 투자 전략을 검증하고 수립할 수 있도록 GIL's LAB(https://gils-lab.tistory.com/)에서 다룬 내용을 체계적으로 정리했습니다. 이 책을 읽고 나면 파이썬과 데이터 분석이 처음인 독자도 퀀트 전략을 검증하고 수립할 수 있으리라 자신합니다.

★ 이 책에서 다루는 내용 ★

  • 금융 데이터 분석에 꼭 필요한 파이썬 핵심 문법
  • 파이썬을 이용한 금융 데이터 분석
  • 웹 크롤링과 API를 이용한 금융 데이터 수집
  • 재무제표 기반의 투자 전략 검증
  • 평가 기반의 투자 전략 검증
  • 차트 기반의 투자 전략 검증
  • 기술적 지표 기반의 투자 전략 검증

 

도서 카드 뉴스

저자 소개

GIL's LAB

산업공학 박사 학위를 취득하고 국내 굴지의 대기업에서 시니어 데이터 사이언티스트로 근무하면서 시계열 데이터 분석과 머신러닝 모델링을 하고 있다. 운영 중인 블로그 GIL's LAB에 데이터 사이언스에 관한 폭넓은 주제의 글과 다양한 퀀트 실험 일지를 쓰고 있다.

목차

  • [1부] 파이썬 핵심 정리
    • ▣ 1장: 파이썬 기초 문법
      • 1.1 개발 환경 구축
        • 아나콘다 설치
        • 아나콘다 프롬프트
        • 주피터 노트북
      • 1.2 변수와 자료형
        • 숫자형: int와 float
        • 문자열 자료형: str
        • 배열 자료형: list와 tuple
        • 집합 자료형: set
        • 사전 자료형: dictionary
        • 부울 자료형: bool
        • 요약
      • 1.3 조건문
        • 기본 구조: if와 else
        • 비교 및 논리 연산자
        • elif문
        • 요약
      • 1.4 반복문
        • for문
        • while문
        • 요약
      • 1.5 함수
        • 함수의 기본 구조
        • 기본값
        • 출력이 없는 함수
        • lambda 함수
        • 요약
      • 1.6 클래스
        • 클래스 기초
        • 생성자와 속성
        • 메서드
        • 다른 패키지와 모듈 활용의 토대
        • 요약
      • 1.7 패키지와 모듈
        • 기본 개념
        • 모듈 임포트 및 함수 사용법
        • 패키지에 속한 모듈 불러오기
        • 요약
      • 1.8 예외 처리
    •  
    • ▣ 2장: 배열 연산 패키지: 넘파이
      • 2.1 자료형
        • 리스트와 ndarray의 차이점
        • ndarray 생성
        • 배열 구조 변경: reshape 메서드
        • 요약
      • 2.2 유니버설 함수와 브로드캐스팅
        • 유니버설 함수
        • 브로드캐스팅
        • 요약
      • 2.3 인덱싱과 슬라이싱
        • 기본 인덱싱과 슬라이싱
        • 리스트를 활용한 인덱싱과 슬라이싱
        • 부울 배열을 활용한 인덱싱과 슬라이싱
        • 요약
      • 2.4 집계 함수
        • 합계 함수와 axis 인자
        • 자주 사용하는 집계 함수
        • 요약
    •  
    • ▣ 3장: 데이터 핸들링 패키지: 판다스
      • 3.1 자료형
        • 시리즈 생성
        • 시리즈 속성
        • 데이터프레임 생성
        • 데이터프레임 속성
        • 현실적인 데이터프레임 생성 방법
        • 요약
      • 3.2 인덱싱과 슬라이싱
        • 인덱서: loc와 iloc
        • 칼럼 인덱싱과 생성
        • 부울 배열을 이용한 인덱싱
        • 요약
      • 3.3 파일 입출력
        • 경로 설정 방법
        • 인코딩 설정: encoding
        • 날짜 자료형 칼럼 설정: parse_dates
        • 불러올 칼럼 지정: usecols
        • 구분자 설정: sep
        • 데이터 내보내기: to_csv
        • 요약
      • 3.4 배열 연산
        • 인덱스 중심의 연산
        • apply 메서드
        • 요약
      • 3.5 데이터 병합
        • concat 함수 기초
        • concat 함수 응용: 여러 파일 불러와서 병합하기
        • merge 함수
        • 요약
      • 3.6 데이터 집계 및 정제
        • 데이터 확인
        • 변수 분포 확인
        • 데이터 통계량 확인
        • 조건부 연산: groupby 메서드
        • 결측 처리
        • 중복 처리
        • 데이터 정렬
        • 요약
      • 3.7 문자열과 날짜 자료형
        • 문자열 자료형과 str 접근자
        • 날짜 자료형
        • 요약
    •  
    • ▣ 4장: 데이터 시각화 패키지: 맷플롯립과 씨본
      • 4.1 그래프 기초와 환경 설정
        • 매직 커맨드 설정
        • 그래프 제목 및 축 이름 설정
        • 폰트 설정
        • 축 범위 설정
        • 눈금 값 설정
        • 범례 설정
        • 그래프 크기 및 스타일 설정
        • 그래프 저장
        • 요약
      • 4.2 다양한 그래프 그리기
        • 선 그래프
        • 산점도
        • 막대 그래프
        • 박스플롯
        • 히스토그램
        • 히트맵
        • 요약
      • 4.3 판다스와 맷플롯립
        • 요약
    •  
  • [2부] 금융 데이터 수집
    • ▣ 5장: 웹 크롤링을 이용한 데이터 수집
      • 5.1 웹 크롤링 기초
      • 5.2 리퀘스트와 뷰티풀수프를 이용한 크롤링
        • 리퀘스트 모듈
        • 뷰티풀수프를 이용한 파싱
        • 요약
      • 5.3 [프로젝트] 증권사 리포트 수집
        • 웹 페이지 분석
        • 파이썬을 이용한 리포트 수집
        • 수집 대상 행 결정
        • 파싱 전략 수립
        • 단일 리포트 파싱
        • 한 페이지 내 모든 리포트 수집 및 정제
        • 전체 페이지의 데이터 수집 및 파싱
        • 데이터 저장
        • 요약
      • 5.4 셀레니움을 이용한 크롤링
        • 모듈 및 드라이버 설치
        • 셀레니움 기초 문법
        • 엘리먼트 찾기: find_element와 find_elements 함수
        • 속성 가져오기
        • 요약
      • 5.5 [프로젝트] 잡플래닛 기업 평점 수집하기
        • 데이터 수집 범위 정의
        • 웹 페이지 분석
        • 단일 리뷰 크롤링
        • 전체 리뷰 크롤링
        • 요약
    •  
    • ▣ 6장: API/패키지를 이용한 데이터 수집
      • 6.1 FinanceDataReader를 이용한 금융 데이터 수집
        • 패키지 설치
        • 주요 함수: DataReader와 StockListing
        • 증시 데이터 수집
        • 기타 금융 데이터 수집
        • 요약
      • 6.2 [프로젝트] 코스피와 코스닥 전종목 주가 데이터 수집하기
        • 코스피 및 코스닥 종목 정보 수집
        • 코스피 및 코스닥 전종목 주가 데이터 수집
        • 요약
      • 6.3 Open DART를 이용한 기업공시 수집
        • API 인증키 발급
        • 패키지 설치
        • 객체 생성
        • 요약
      • 6.4 [프로젝트] 배당 정보 수집 및 가공하기
        • 데이터 파싱 전략 수립
        • 데이터 파싱
        • PER 계산
        • 요약
      • 6.5 [프로젝트] 주요 재무지표 수집 및 가공하기
        • 데이터 파싱 전략 수립
        • 데이터 파싱
        • 주요 지표 계산
        • 요약
    •  
  • [3부] 퀀트 전략 구현 및 검증
    • ▣ 7장: 재무제표 기반 투자 전략
      • 7.1 데이터 정제
        • 주가 데이터 병합
        • 배당금 및 PER 데이터 병합
        • 요약
      • 7.2 이익 상태
        • 데이터 준비
        • 환경 설정
        • 데이터 탐색 및 시각화
        • 동일 가중 교체 매매 방법에 따른 수익 비교
        • 요약
      • 7.3 부채비율, 매출 및 이익 증가율
        • 데이터 준비
        • 환경 설정
        • 수익률과의 상관관계 확인
        • 동일 가중 교체 매매 방법에 따른 수익 비교
        • 요약
      • 7.4 배당금
        • 환경 설정
        • 데이터 준비
        • 데이터 탐색 및 시각화
        • 동일 가중 교체 매매에 따른 수익 비교
        • 요약
      • 7.5 PER, ROA, ROE
        • 환경 설정
        • 데이터 준비
        • 수익률과 투자 지표 간 상관관계 확인
        • 산업군을 고려한 수익률과 투자 지표 간 상관관계 확인
        • 동일 가중 교체 매매에 따른 수익 비교
        • 요약
    •  
    • ▣ 8장: 평가 기반 투자 전략
      • 8.1 증권사 리포트
        • 그래프 환경 설정
        • 데이터 정제
        • 적정 가격과 주가 차이 탐색
        • 리포트에 따른 투자 시 기대 수익률 계산
        • 적정 가격 관련 분석
        • 요약
      • 8.2 기업 평가
        • 환경 설정
        • 데이터 준비
        • 주가와 기업 평점 간 관계 분석
        • 동일 가중 교체 매매에 따른 수익 비교
        • 요약
    •  
    • ▣ 9장: 차트 기반 투자 전략
      • 9.1 골든 크로스와 데드 크로스
        • 환경 설정
        • 데이터 준비
        • 골든/데드 크로스 발생 시 매매하는 전략 검증
        • 골든 크로스 지점에서 매수할 때의 효과 분석
        • 요약
      • 9.2 정배열과 역배열
        • 데이터 준비
        • 정배열 구간에서의 기대 수익 계산
        • 정배열 시작 – 역배열 시작 구간에서의 기대 수익 계산
        • 요약
      • 9.3 캔들 패턴
        • 데이터 준비 및 환경 설정
        • 상승장악형
        • 하락장악형
        • 적삼병
        • 흑삼병
        • 샛별형
        • 요약
    •  
    • ▣ 10장: 기술적 지표 기반 투자 전략
      • 10.1 추세 지표
        • 데이터 준비 및 환경 설정
        • 모멘텀
        • 방향성 지수
        • 엔빌롭
        • 요약
      • 10.2 시장 지표
        • 데이터 준비 및 환경 설정
        • EOM 지수
        • RSI
        • MFI
        • 요약
      • 10.3 평균 회귀 전략
        • 데이터 준비 및 환경 설정
        • 주가 회복 비율 계산
        • 주가 회복률 시각화
        • 평균 회귀 전략 구현 및 검증
        • 요약

예제 코드

정오표

5.2절, 리퀘스트와 뷰티풀수프를 이용한 크롤링

2025년 10월 20일 기준으로 크롤링 대상 사이트 변경으로 인해 본문 내 예제 코드가 작동하지 않으므로 다음과 같이 코드를 변경합니다. (깃허브 저장소에 업데이트된 코드를 내려받으실 수 있습니다.)

  • 227쪽, 첫 번째 예제 코드를 다음 코드로 교체

    import requests
    url = "https://news.daum.net/" # 2025.10.20 업데이트
    agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
    response = requests.get(url = url, headers = {"User-Agent":agent})
    response.encoding = 'utf-8' # 2025.10.20 업데이트
  • 231쪽, 두 번째 예제 코드를 다음 코드로 교체

    # 두 번째 위치의 ul 태그 찾기
    print(parsed_res_text.find_all("ul")[1]) # 2025.10.20 업데이트
  • 232쪽, 첫 번째 예제 코드를 다음 코드로 교체

    # class 속성이 txt_info인 첫 번째 span 태그 찾기
    print(parsed_res_text.find("span", attrs = {"class":"txt_info"})) # 2025.10.20 업데이트
  • 232쪽, 세 번째 예제 코드를 다음 코드로 교체

    ul_tag = parsed_res_text.find("ul", attrs = {"class":"list_newsheadline2"})  # 2025.10.20 업데이트
    print(type(ul_tag))
  • 233쪽, 첫 번째 예제 코드를 다음 코드로 교체

    news_name = li_list[0].find("a", attrs = {"class":"item_newsheadline2"})  # 2025.10.20 업데이트
    print(news_name) 
  • 233쪽, 두 번째 예제 코드를 다음 코드로 교체

    press_name = li_list[0].find("span", attrs = {"class":"txt_info"})  # 2025.10.20 업데이트
    print(press_name)
  • 234쪽, 두 번째 예제 코드를 다음 코드로 교체

    import pandas as pd 
    # 빈 리스트로 초기화
    news_name_list = []
    news_link_list = []
    press_name_list = []
    for li in li_list: # li를 li_list를 순회하면서
        # class가 link_txt인 a 태그를 news_name_tag에 저장
        news_name_tag = li.find("a", attrs = {"class":"item_newsheadline2"})  # 2025.10.20 업데이트
        press_name_tag = li.find("span", attrs = {"class":"txt_info"})  # 2025.10.20 업데이트
    
        news_name = news_name_tag.text
        press_name = press_name_tag.text
        news_link = news_name_tag["href"]
    
        news_name_list.append(news_name)
        press_name_list.append(press_name)
        news_link_list.append(news_link)
    
    data = pd.DataFrame({"뉴스명":news_name_list, 
                        "언론사명":press_name_list,
                        "뉴스링크":news_link_list})
    
    display(data.head(10))

7장, 데이터 정제 실습에서 오류가 발생할 경우

  1. 데이터정제.ipynb을 실행했을 때 다음 코드에서 오류가 발생할 경우
settle_month_dict = stock_info_data.set_index('Name')['SettleMonth']

아래 URL의 종목정보.txt 파일로 교체


  • 307쪽, 첫 번째 예제 코드의 4번째 줄

    4 print(find_stock_price(sp_data, date))

    ==>

    4 print(find_closest_stock_price(sp_data, date))
  • 318쪽, 부채비율을 구하는 공식

    부채비율 = 자본총계 / 자산총계 * 100%

    ==>

    부채비율 = 부채총계 / 자본총계

  • 318쪽, 페이지 하단 예제 코드

    1 data["부채비율"] = data["자본총계"] / data["자산총계"] * 100
    2 display(data["부채비율"].head())

    ==>

    1 data['부채비율'] = data['부채총계'] / data['자본총계'] * 100
    2 display(data['부채비율'].head())
  • 319쪽, 페이지 중간 예제 코드

    1 data["매출액증가율"] = data["매출액"].diff() / data["매출액"] * 100
    2 data.loc[data["연도"] == 2013, "매출액증가율"] = np.nan

    ==>

    1 data["매출액증가율"] = data["매출액"].diff() / data["매출액"].shift(1) * 100
    2 data.loc[data["연도"] == 2013, "매출액증가율"] = np.nan
  • 319쪽, 본문 밑에서 5번째 줄

    0번째 요소는 nan입니다.

    ==>

    0번째 요소는 nan입니다. 또한 전년도의 매출액을 가져오기 위해 shift(1)를 사용했습니다.

  • 319쪽, 페이지 하단 예제 코드

    1 data['매출액증가율'] = (data['매출액'].diff() / data['매출액']) * 100
    2 data.loc[data['연도'] == 2013, '매출액증가율'] = np.nan
    3 data['당기순이익증가율'] = (data['당기순이익'].diff() / data['당기순이익']) * 100
    4 data.loc[data['연도'] == 2013, '당기순이익증가율'] = np.nan

    ==>

    1 data['매출액증가율'] = (data['매출액'].diff() / data["매출액"].shift(1)) * 100
    2 data.loc[data['연도'] == 2013, '매출액증가율'] = np.nan
    3 data['당기순이익증가율'] = (data['당기순이익'].diff() / data["당기순이익"].shift(1)) * 100
    4 data.loc[data['연도'] == 2013, '당기순이익증가율'] = np.nan
WHERE TO BUY · 정가 32,000원
WHERE TO BUY · 정가 32,000원