반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

오늘은 파이썬을 이용해 zip 파일을 만드는 방법에 대해 알아보겠습니다. 사무자동화를 할 때에 압축된 폴더를 다운로드 받거나, 압축해서 업로드 해야할 때 사용할 수 있습니다.

 


 

관련 패키지 불러오기

 

zipfile은 파이썬 표준 라이브로리로 따로 설치할 필요는 없고 import로 불러와주시면 됩니다.

 

import zipfile
import os

 

<파이썬 표준 라이브러리_zipfile 공식 문서>

https://docs.python.org/ko/3/library/zipfile.html

 

zipfile — ZIP 아카이브 작업 — Python 3.9.6 문서

zipfile — ZIP 아카이브 작업 소스 코드: Lib/zipfile.py ZIP 파일 형식은 흔히 쓰이는 아카이브와 압축 표준입니다. 이 모듈은 ZIP 파일을 만들고, 읽고, 쓰고, 추가하고, 나열하는 도구를 제공합니다. 이

docs.python.org

 

압축하기

 

바로 압축하는 방법에 대해서 알아보겠습니다. 원리는 간단합니다.

 

압축하고자 하는 zip 파일 생성 - zip 파일에 넣고 싶은 파일 write - zip 파일 닫기

 

이 3단계를 하나의 파일을 압축하는 경우와 여러개의 파일을 압축하는 경우 2가지로 나눠서 설명드려 보겠습니다.

 

 

하나의 파일 압축하기

 

1단계. 압축하고자 하는 zip 파일 생성 (꼭 os.chdir로 현재 경로를 바꾸어 줄 것)

 

먼저 os.chdir( )로 현재 작업할 경로를 다시 설정해줄 필요가 있습니다. 그러지 않고 절대 경로로 할 시, 의도와 다르게 가장 상위 디렉토리(폴더)부터 모든 디렉토리가 압축됩니다.

 

또한 zip 파일 생성을 위해 폴더를 따로 만들어 줄 필요가 없습니다. 곧 바로 zip 파일이 생성되는 것이니깐요.

 

os.chdir('/Users/username/Desktop/zipfile 패키지 테스트 폴더')

my_zip = zipfile.ZipFile('코딩유치원.zip', 'w')

 

<실행 결과> 코딩유치원.zip 생성됨

코딩유치원 폴더는 따로 만들어 줄 필요 없음

 

현재의 상태(zip 파일 close 안 해줌)에서는 아래와 같이 zip 파일을 열 수가 없다는 점 참고바랍니다.

 

 

 

2단계. 생성한 zip 파일에 넣고자 하는 파일 입력하기

 

아까 설정해준 현재 작업 경로에 test1.txt를 생성해두고 그것을 write 해줍니다.

참고로 현재 작업 폴더가 아닌 곳의 test1 파일을 write( '절대경로')로 입력할 시, 이상하게 작동하니 주의하세요.

 

# 현재 작업 경로에 test1.txt 파일이 있어야 함
my_zip.write('test1.txt')

 

<실행 결과> 코딩유치원.zip 안에 test1.txt 들어감

 

현재 상태에서도 zip 파일을 더블클릭해서 열어보려 해도 아래와 같은 경고창이 뜨면서 확인할 수가 없습니다.

 

 

3단계. zip 파일 닫기

 

zip 파일 안에 원하는 파일을 모두 넣으셨다면 close( ) 메소드를 통해 zip를 닫아주어야합니다.

 

my_zip.close()

 

<실행 결과> 코딩유치원.zip을 더블 클릭하여 압축해제 시

 

의도와 다르게 가장 상위 디렉토리(폴더)부터 모든 디렉토리가 압축된 것을 확인 할 수 있습니다. 다른 방법이 필요하겠습니다.

 

 

<주의!>

 

만약 경로를 chdir( )로 바꾸어 주지 않고 절대 경로를 사용하여 압축할 시 아래와 같이 의도치 않은 압축 파일이 생성됩니다.

 

my_zip = zipfile.ZipFile('/Users/username/Desktop/zipfile 패키지 테스트 폴더/코딩유치원.zip', 'w')

my_zip.write('/Users/sangwoo/Desktop/zipfile 패키지 테스트 폴더/코딩유치원/test1.txt')

my_zip.close()

 

여러개의 파일 압축하기

 

여러개의 파일을 한꺼번에 압축하려면 with 문과 for문을 함께 사용해 주시면 됩니다.

아래의 코드를 보시고 직접 한 번 해보시기 바랍니다. 그 외 개념은 위에서 했던 것과 같으므로 자세한 설명은 생략하도록 하겠습니다.

 

file_list = ['코딩유치원.txt', '투손플레이스.txt', '고양이미로.xlsx']

with zipfile.ZipFile("코딩은 코딩유치원이지ㅎㅎ.zip", 'w') as my_zip:

    for i in file_list:
        
        my_zip.write(i)
    
    my_zip.close()

 

<실행 결과> 

 

 

압축해제

 

압축을 해제 하는 방법은 크게 2가지가 있습니다. 여러 파일 중 1개만 골라서 압축해제하는 방법과 전체를 다 압축해제하는 방법입니다.

 

개별파일 압축해제

 

ZipFile.extract(member, path=None, pwd=None)

 

path에는 추출할 zip 폴더의 경로를 넣어줄 수 있으며, 넣어주지 않으면 현재 작업 폴더로 지정한 파일을 추출합니다. member는 파일명.확장자명이며, pwd는 암호화된 파일에 사용되는 비밀번호입니다.

 

zipfile.ZipFile('코딩은 코딩유치원이지ㅎㅎ.zip').extract('코딩유치원.txt')

 

<실행 결과> 

 

 

 

모든파일 압축해제

 

ZipFile.extractall(path=None, members=None, pwd=None)

 

path에는 추출할 zip 폴더의 경로를 넣어줄 수 있으며, 넣어주지 않으면 현재 작업 폴더로 지정한 파일을 추출합니다. members에는 리스트 형식의 '파일명'을 넣어주시면 선택적으로 여러개의 파일을 압축해제 가능하며, pwd는 암호화된 파일에 사용되는 비밀번호입니다.

 

# 전체를 압축해제 하고 싶을 때
zipfile.ZipFile('코딩은 코딩유치원이지ㅎㅎ.zip').extractall()

# 전체가 아닌 몇 개만 압축해제 하고 싶을 때
zipfile.ZipFile('코딩은 코딩유치원이지ㅎㅎ.zip').extractall(members = ['투손플레이스.txt','고양이미로.xlsx'])

 

 

오늘은 zipfile 패키지를 이용해 zip 파일의 압축/압축 해제 하는 방법에 대해서 알아보았습니다.

 

긴 내용 읽으며 공부하신 여러분! 고생 많으셨습니다!!

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 


 

오늘은 영어를 해석할 때 자주 도움받는 구글 번역(Google Translate)을 파이썬에서 사용하는 방법에 대해 알아보겠습니다.

 

구글 번역 페이지

 

 

Googletrans 설치하기

 

googletrans 패키지는 원래 3.0.0 버전까지 문제가 많아서 AttributeError: 'NoneType' object has no attribute 'group' 라는 에러를 출력시키면서 잘 실행이 되지 않았습니다. 하지만 2021년 1월 12일에 4.0.0 버전이 릴리즈 되면서 그러한 에러가 해결되었답니다.

 

2021년 7월 1일 현재에도 그냥 pip install googletrans로 설치를 하면 구버전이 설치되므로 꼭 아래의 코드를 입력해주세요. 혹시 이미 설치를 하셨다면 pip uninstall googletrans로 패키지를 지운 후에 다시 설치하시기 바랍니다.

 

pip install googletrans==4.0.0-rc1

 

 

Googletrans 불러오기

 

googletrans 패키지를 사용하려면 import를 해주셔야합니다.

 

from googletrans import Translator

# Translator 클래스 객체 선언 (translator라는 변수명은 마음대로 정해주면 됨)
translator = Translator()

 

혹시 import googletrans가 아닌 from googletrans import Translator를 사용한 이유가 궁금하신 분은 아래의  글을 참고해주세요.

 

2021.05.24 - [파이썬 기초/기초 문법] - [python 기초] import OO와 from OO import*의 차이

 

 

Googletrans 사용하기

 

googletrans 패키지로는 번역과 감지 2가지 기능을 사용할 수 있습니다. 하나씩 알아보겠습니다.

 

번역 (translate)

 

가장 기본적인 번역을 해보겠습니다. 해당 코드는 위의 코드가 있어야 작동하는 점 참고바랍니다.

 

print(translator.translate('안녕')

>>> Translated(src=ko, dest=en, text=Hi, pronunciation=None, extra_data="{'confiden...")

 

translator.translate( )의 결과물은 Translated라는 클래스의 객체입니다. 쉽게 말해 안에 무엇이 들어있는 결과물이랄까요.

 

이 안에는 src, dest, text, pronunciation이란 요소들이 들어있으며, 이것들이 뜻하는 내용은 아래와 같습니다.

 

요소 의미
src 번역 전 언어
dest 번역 후 언어
text 번역 결과
pronunciation 번역 결과의 발음 (영어로 표기)

 

참고로 source 언어(src)는 입력된 문자열을 자동 감지하여 판단한 것이 디폴트이고, 번역될 언어(dest)는 영어가 디폴트입니다.

 

 

만약 Translated에서 특정 요소만 가져오고 싶다면 아래와 같이 코딩해주시면 됩니다.

translator.translate("안녕").text

>>> 'Hi'

 

그리고 아까 결과에서 pronunciation가 None으로 나온 이유는 번역 후 언어가 영어이므로 text가 곧 pronunciation이기 때문입니다.

한국어를 일본어로 바꿔보면 영어로 발음이 나오는 것을 확인 하실 수 있습니다.

print(translator.translate('안녕', src='ko', dest='ja'))

>>> Translated(src=ko, dest=ja, text=こんにちは, pronunciation=Kon'nichiwa, extra_data="{'confiden...")

 

 

감지 (detect)

 

입력받은 문자열을 알아서 판단하여 어떤 언어인지 되돌려줍니다.

 

print(translator.detect('안녕'))

>>> Detected(lang=ko, confidence=None)


print(translator.detect('veritas lux mea'))

>>> Detected(lang=la, confidence=None)

# 언어만 확인
print(translator.detect('안녕').lang)

 

Detected 클래스는 lang과 confidence를 요소로 가지며 각각 감지한 언어와 결과의 신뢰도(0~1.0)를 나타냅니다. 제가 할 때는 신뢰도는 나오지 않네요.

 

 

 

< googletrans에서 지원하는 언어>

LANGUAGES = {
    'af': 'afrikaans',
    'sq': 'albanian',
    'am': 'amharic',
    'ar': 'arabic',
    'hy': 'armenian',
    'az': 'azerbaijani',
    'eu': 'basque',
    'be': 'belarusian',
    'bn': 'bengali',
    'bs': 'bosnian',
    'bg': 'bulgarian',
    'ca': 'catalan',
    'ceb': 'cebuano',
    'ny': 'chichewa',
    'zh-cn': 'chinese (simplified)',
    'zh-tw': 'chinese (traditional)',
    'co': 'corsican',
    'hr': 'croatian',
    'cs': 'czech',
    'da': 'danish',
    'nl': 'dutch',
    'en': 'english',
    'eo': 'esperanto',
    'et': 'estonian',
    'tl': 'filipino',
    'fi': 'finnish',
    'fr': 'french',
    'fy': 'frisian',
    'gl': 'galician',
    'ka': 'georgian',
    'de': 'german',
    'el': 'greek',
    'gu': 'gujarati',
    'ht': 'haitian creole',
    'ha': 'hausa',
    'haw': 'hawaiian',
    'iw': 'hebrew',
    'he': 'hebrew',
    'hi': 'hindi',
    'hmn': 'hmong',
    'hu': 'hungarian',
    'is': 'icelandic',
    'ig': 'igbo',
    'id': 'indonesian',
    'ga': 'irish',
    'it': 'italian',
    'ja': 'japanese',
    'jw': 'javanese',
    'kn': 'kannada',
    'kk': 'kazakh',
    'km': 'khmer',
    'ko': 'korean',
    'ku': 'kurdish (kurmanji)',
    'ky': 'kyrgyz',
    'lo': 'lao',
    'la': 'latin',
    'lv': 'latvian',
    'lt': 'lithuanian',
    'lb': 'luxembourgish',
    'mk': 'macedonian',
    'mg': 'malagasy',
    'ms': 'malay',
    'ml': 'malayalam',
    'mt': 'maltese',
    'mi': 'maori',
    'mr': 'marathi',
    'mn': 'mongolian',
    'my': 'myanmar (burmese)',
    'ne': 'nepali',
    'no': 'norwegian',
    'or': 'odia',
    'ps': 'pashto',
    'fa': 'persian',
    'pl': 'polish',
    'pt': 'portuguese',
    'pa': 'punjabi',
    'ro': 'romanian',
    'ru': 'russian',
    'sm': 'samoan',
    'gd': 'scots gaelic',
    'sr': 'serbian',
    'st': 'sesotho',
    'sn': 'shona',
    'sd': 'sindhi',
    'si': 'sinhala',
    'sk': 'slovak',
    'sl': 'slovenian',
    'so': 'somali',
    'es': 'spanish',
    'su': 'sundanese',
    'sw': 'swahili',
    'sv': 'swedish',
    'tg': 'tajik',
    'ta': 'tamil',
    'te': 'telugu',
    'th': 'thai',
    'tr': 'turkish',
    'uk': 'ukrainian',
    'ur': 'urdu',
    'ug': 'uyghur',
    'uz': 'uzbek',
    'vi': 'vietnamese',
    'cy': 'welsh',
    'xh': 'xhosa',
    'yi': 'yiddish',
    'yo': 'yoruba',
    'zu': 'zulu',
}

 

오늘 준비한 내용은 여기까지입니다.

 

이 패키지를 어디에 쓸지는 고민해봐야 할 것 같네요.


<참고자료>

 

https://pearlluck.tistory.com/372

 

구글번역API 사용하기 | googletrans 4.0.0 으로 설치해야한다

번역이 필요해서 당연히 구글번역 API를 썼다. 가장 대표적이고 무료인 googletrans pip install googletrans  그리고 사용하기도 쉽다 from googletrans import Translator translator = Translator() result= t..

pearlluck.tistory.com

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

<DART-FSS 관련 지난 글>

 

2021.06.10 - [파이썬 패키지/전자공시시스템(DART)] - [Python/Dart] 파이썬으로 공시 정보 가져오기 1편_ DART API와 DART-FSS 패키지 소개

2021.06.22 - [파이썬 패키지/전자공시시스템(DART)] - [Python/Dart] 파이썬으로 공시 정보 가져오기 2편_ 상장된 회사 재무제표 EXCEL로 저장하기

2021.06.25 - [파이썬 패키지/전자공시시스템(DART)] - [Python/Dart] 파이썬으로 공시 정보 가져오기 3편_특정회사 혹은 특정 공시유형 가져오기

2021.06.27 - [파이썬 패키지/전자공시시스템(DART)] - [Python/Dart] 파이썬으로 공시 정보 가져오기 4편_재무제표 4종 골라서 DataFrame으로 추출하기(ft. 재무상태표, 손익계산서, 포괄손익계산서, 현금흐름표)

2021.06.27 - [파이썬 패키지/전자공시시스템(DART)] - [Python/Dart] 파이썬으로 공시 정보 가져오기 5편_dart-fss 재무제표 다운로드 안될 때 해결법


이번 시간에 배울 내용은 XBRL을 추출하는 방법입니다.

 

그런데 도대체 XBRL이 뭘까요? 궁금해서 찾아봤습니다.

 

XBRL이란?

 

XBRL(eXtensible Business Reporting Language)은 기업의 비즈니스 리포트에서 복잡한 기업 정보가 보다 더 효율적으로 생성, 교환, 비교될 수 있도록 하기 위하여 XML(eXtensible Markup Language)을 비즈니스 리포팅 영역에 응용한 표준입니다. 주로 재무제표와 같은 재무 정보를 정의하고 교환하는 일에 사용한다고 합니다.

 

자세한 내용은 아래의 글을 참고해주세요.

 

https://www.2e.co.kr/news/articleView.html?idxno=210265

 

기업 보고 데이터 표준, XBRL 소개 - 투이컨설팅

XBRL은 기업보고 데이터의 공급망을 바꾼다XBRL(eXtensibe Business Reporting Language)은 XML을 기반으로 복잡한 기업정보를 생성, 교환, 비교할 수 있도록 만들어진 국제 표준이다. 기업의 재무보고서를 데

www.2e.co.kr

 

 

 

그럼 지금부터 dart-fss 패키지에서 어떻게 XBRL 파일을 추출하고 사용할 수 있는지 알아보겠습니다.

 

XBRL 데이터 추출

 

XBRL 파일을 추출하는 방법은 아주 간단합니다. 복잡한 설명보다 코드로 설명드리겠습니다.

 

# 삼성전자 code
corp_code = '00126380'

reports = dart.filings.search(corp_code=corp_code, bgn_de='20210101', pblntf_detail_ty='a001')

# 가장 최신 보고서 선택
report = reports[0]

# report에서 xbrl 파일 추출
xbrl = report.xbrl

 

2021.06.25 - [파이썬 패키지/전자공시시스템(DART)] - [Python/Dart] 파이썬으로 공시 정보 가져오기 3편_특정회사 혹은 특정 공시유형 가져오기

 

지난 글에서 아직 report에 들어가있는 데이터를 어떻게 사용할지 모르겠다고 했던 것 기억하시나요?

 

report 출력 결과

 

바로 그 report에 .xbrl만 붙여주면 report의 데이터를 종류별로 꺼내어 쓸 수 있습니다. (모두 다는 아니고 특정 데이터들만 가능합니다)

 

어떻게 꺼내어 쓰는지는 아래에서 설명드리겠습니다.

 

 

XBRL 데이터 분석

 

방금 전 추출한 xbrl 안에는 수 많은 데이터들이 분류되어 있습니다. 각각의 데이터들을 아래의 함수들로 가져올 수가 있답니다.

 

메소드 기능 매개변수 반환 자료형
exist_consolidated( ) 연결 재무제표 존재 여부 확인 - True/False
get_cash_flows( ) 현금흐름표 separate = True or False
(True: 개별, False: 연결)

미입력 시, False가 기본값
list of Table

(여기서 Table은 DataFrame과 같은 말)
get_changes_in_equity( ) 자본변동표
get_financial_statement( ) 재무상태표
get_income_statement( ) 포괄손익계산서
get_audit_information( ) 감사 정보 lang = 'ko' or 'en'

미입력 시, 'ko'가 기본값
DataFrame
get_author_information( ) 작성자 정보
get_document_information( ) 공시 문서 정보
get_entity_address_information( ) 주소 정보
get_entity_information( ) 공시 대상 정보
get_financial_statement_information( ) 재무제표 정보
get_period_information( ) 공시 문서 기간 정보
get_table_by_code( ) Table 코드와 일치하는 Table 반환 code = 'Table 코드번호'

꼭 입력해주어야 함
Table
or None

 

<예시 코드>

 

연결재무제표 존재 여부 확인 (True / False)

xbrl.exist_consolidated()

>>> True

 

연결 현금흐름표 추출

# 연결 현금흐름표 추출 (리스트 반환)
list_cf = xbrl.get_cash_flows()

# 연결 현금프름표 출력
cf = list_cf[0]


>>> {'code': 'D520000', 'definition': '[D520000] Statement of cash flows, indirect method - Consolidated financial statements'}

해당 내용을 Pandas 패키지의 DataFrame 형태로 나타내는 방법은 아래에서 이어서 설명드리겠습니다.

 

공시 작성자 정보 출력

# 공시 작성자 정보
xbrl.get_author_information( )

 

 

재무제표 4종 DataFrame으로 가져오기

 

사실 재무제표를 가져오는 방법은 지난 글에서도 소개드린 적이 있습니다. 개인적으로 생각하기에 재무제표를 가져오는 것이 목적이라면 아래의 글에서 소개드린 방법을 추천드리지만, 그래도 이런 방법이 있다는 정도만 설명드리고 넘어가도록 하겠습니다.

 

2021.06.27 - [파이썬 패키지/전자공시시스템(DART)] - [Python/Dart] 파이썬으로 공시 정보 가져오기 4편_재무제표 4종 골라서 DataFrame으로 추출하기(ft. 재무상태표, 손익계산서, 포괄손익계산서, 현금흐름표)

 

(*여기까지 공부하고 보니 지난 시간에 배웠던 dart.fs.extract( ) 함수가 xbrl 문서를 다운로드 받는 것이었다는 것을 알 수 있었습니다.)

 

 

연결 현금흐름표 DataFrame 추출

# 연결 현금흐름표 추출 (리스트 반환)
list_cf = xbrl.get_cash_flows()

# 연결 현금흐름표 출력
cf = list_cf[0]

# 연결 현금흐름표 DataFrame 형태로 출력
cf.to_DataFrame()

 

출력 결과는 너무 길어서 5개만 잘라서 캡쳐했으니 직접 확인해보시면 좋을 것 같아요.

 

오늘 배운 내용은 아래의 참고자료를 참고하였으며, 필요하다고 생각되는 내용만 다루었습니다.

 

더 자세한 내용이 필요하신 분은 아래의 링크를 참고해주세요.

 

오늘을 마지막으로 dart-fss 사용법에 대한 내용은 모두 다루어보았습니다. 하지만 dart-fss라는 패키지를 공부해보니 함수는 다르나 중복되는 결과들이 많아서 총정리를 할 필요성을 느낍니다.

 

다음에는 지금까지 배운 dart-fss 패키지에서 목적별로 어떤 함수를 사용하는 것이 좋을지 정리하는 시간을 가지도록 하겠습니다.


https://dart-fss.readthedocs.io/en/latest/dart_xbrl.html#dart_fss.xbrl.dart_xbrl.DartXbrl.exist_consolidated

 

XBRL 데이터 추출 — dart-fss documentation v0.3.10 documentation

© Copyright 2021, Sungwoo Jo Revision 2a7bb3e6.

dart-fss.readthedocs.io

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

최근 제무재표를 가져오는 아래의 코드를 다른 컴퓨터에서 실행하려다가 알 수 없는 에러가 출력되어 애를 먹었습니다. 오늘은 이 에러를 해결한 방법에 대해서 공유해보려합니다.

 

# CASE 1

# DART 에 공시된 회사 리스트 불러오기
corp_list = dart.get_corp_list()

# 삼성전자 검색
samsung = corp_list.find_by_corp_name('삼성전자', exactly=True)[0]

# 2012년부터 연간 연결재무제표 불러오기
fs1 = samsung.extract_fs(bgn_de='20210101')



# CASE 2

fs2 = dart.fs.extract(corp_code='00126380', bgn_de='20210101')

 

출력된 에러

 

AttributeError: ("type object 'object' has no attribute 'dtype'", "An error occurred while fetching or analyzing"...

에러 출력 이미지

 

에러 원인

 

구글링을 통해 알아낸 원인은 Pandas와 Numpy 패키지의 버전이 구버전이기 때문이었습니다. (관련 자료는 글 마지막에 첨부해놓음)

 

에러는 두 패키지를 업그레이드 함으로써 해결되었습니다.

 

 

에러 해결 방법

 

터미널 창에서 아래와 같이 pip 명령어를 이용해 pandas와 numpy 패키지를 삭제 및 재설치 하면 됩니다.

 

1. pandas 버전 업그레이드

 

* (수정) 아래의 코드 한줄만 넣으면 됨

pip install pandas --upgrade

 

1) pandas 설치 삭제(pip uninstall pandas)

2) pandas 설치 (pip install pandas)

 

2. numpy 버전 업그레이드

 

* (수정) 아래의 코드 한줄만 넣으면 됨

pip install numpy --upgrade

 

1) numpy 설치 삭제(pip uninstall numpy)

 

2) numpy 설치 (pip install numpy)

 

 

(주의) Pandas와 Numpy를 모두 업그레이드 했다면, 쥬피터 노트북을 완전히 종료했다가 켜주셔야지 정상 작동합니다!

 

 

 

 


<참고자료>

 

https://github.com/pandas-dev/pandas/issues/39520

 

BUG: AttributeError: type object 'object' has no attribute 'dtype' with numpy 1.20.x and pandas versions 1.0.4 and earlier · Is

root@548977c7dc-62l72:/app# pip list | grep pandas pandas 1.0.3 In ipython ,i try initializing df ` In [1]: import pandas as pd In [2]: pd.DataFrame([],columns=['a','b','c']...

github.com

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

<DART-FSS 관련 지난 글>

 

2021.06.10 - [파이썬 패키지/전자공시시스템(DART)] - [Python/Dart] 파이썬으로 공시 정보 가져오기 1편_ DART API와 DART-FSS 패키지 소개

2021.06.22 - [파이썬 패키지/전자공시시스템(DART)] - [Python/Dart] 파이썬으로 공시 정보 가져오기 2편_ 상장된 회사 재무제표 EXCEL로 저장하기

2021.06.25 - [파이썬 패키지/전자공시시스템(DART)] - [Python/Dart] 파이썬으로 공시 정보 가져오기 3편_특정회사 혹은 특정 공시유형 가져오기


이번 시간에 배울 함수는 재무제표만을 추출해주는 함수입니다.

 

지금까지 배운 것이 워낙 비슷비슷한 느낌이라서 정리하면 다음과 같습니다.

 

2편: 상장 회사 전체 리스트 받고, 거기서 종목을 골라서 저장 후, 재무제표 혹은 공시정보를 꺼내어 쓰는 방법 (통합 버전)

3편: 공시정보에 특화된 방법(전체 or 특정 종목)

4편(이번 시간 배울 것): 재무제표에 특화된 방법 (특정 종목 재무제표 추출)

         --> 2편의 종목.extract_fs( )와 표현만 다르고 완전 같다고 보면 됨

 


그럼 지금부터 재무제표를 추출하는 방법에 대해서 알아보겠습니다.

 

특정회사 재무제표 일괄 추출

(함수) dart_fss.fs.extract( )

 

<매개변수>

옵션 기능 기본 값 자료형
corp_code 공시대상회사의 고유번호(8자리) 필수 입력 str
bgn_de 검색시작 접수일자('YYYYMMDD') 필수 입력 str
end_de 검색종료 접수일자('YYYYMMDD') 오늘 날짜 str
fs_tp 재무제표 종류 선택
(‘bs’:  재무상태표, ‘is’ : 손익계산서, ‘cis’ : 포괄손익계산서, ‘cf’ : 현금흐름표)
('bs', 'is', 'cis', 'cf) tuple,
str
separate 개별재무제표 여부 (True : 개별 재무제표 / False : 연결 재무제표) False str
report_tp 연간, 반기, 분기 보고서 선택 (중복 선택 가능)

사용 예시)
(str) ‘annual’ : 연간, ‘half’ : 연간 + 반기, ‘quarter’ : 연간 + 반기 + 분기
(list) [‘annual’] : 연간, [‘half’]: 반기, [‘quarter’] 분기, [‘annual’, ‘half’]: 연간+반기
None str,
list
lang 언어 선택 ('ko' : 한글, 'en' : 영어) 'ko' str
separator 숫자 1000 단위 구분자 표시 여부 (True / False) True str
dataset 'xbrl' : xbrl 파일 우선 데이터 추출
'web' : web page 우선 데이터 추출
'xbrl' str

 

<예시 코드_삼성전자 2020년 사업보고서(연간) 가져오기>

 

import dart_fss as dart

# Open DART API KEY 설정
api_key='xxxxxxxxxxxxxxxxxxxxxxxxxxxx'
dart.set_api_key(api_key=api_key)

# 삼성전자 기업코드로 2021년 1월 1일부터 현재날짜 사이에 나온 사업보고서 가져오기
corp_code_samsung = '00126380'
fs = dart.fs.extract(corp_code=corp_code_samsung, bgn_de='20210101')

 

<코드 실행 결과>

 

위의 코드를 실행하셨다면 위와 같이 재무제표 하나가 Dart API를 통해 다운로드 받아집니다. 변수 fs에 어떤 값이 저장되어 있는지 아래에서 확인해봅시다.

 

기본적으로 위에서 봤던 여러 파라미터들의 값이 저장되어 있고, 가장 핵심 정보인 financial statement에는 재무상태표, 손익계산서, 포괄손익계산서, 현금흐름표가 순서대로 들어가 있는 것을 보실 수 있습니다.

 

이제 이 결과를 3가지 메소드(클래스 안에 정의된 함수)로 활용한는 법에 대해서 알아보겠습니다.

 

 

재무제표 일괄 추출 결과

(클래스) dart_fss.fs.FinancialStatement( )

 

위에서 재무제표를 추출하셨다면 그 추출의 결과물(fs)를 활용하셔야겠죠? 이를 위해 아래의 3가지 메소드를 사용할텐데 하나씩 알아보겠습니다.

 

메소드 기능
save( ) 재무제표 정보를 모두 엑셀파일로 일괄저장
show( ) 재무제표 정보를 표시해주는 Method
to_dict( ) FinancialStatement의 요약 정보를 Dictionary 로 반환

 

to_dict( )

 

가장 먼저 위에서 예시 코드로 확인한 결과를 Dictionary로 반환해주는 메소드인 to_dict( ) 입니다. 아직은 어디에 사용할지 모르겠네요.

그냥 이런 것이 있다는 정도만 알아두시면 좋겠습니다. (아까 예제코드의 fs 출력 결과와 같죠?)

 

 

show( )

 

아마 가장 많이 사용할 것으로 생각하는 show( ) 메소드입니다. 방금 전 얻은 재무제표(재무상태표, 손익계산서, 포괄손익계산서, 현금흐름표)를 원하는대로 표 형태로 가져 올 수 있습니다. 이 표는 Pandas 패키지의 데이터프레임(DataFrame) 형식으로 Pandas로 데이터 분석이 가능 합니다.

 

옵션 기능 기본 값 자료형
tp 재무제표 종류 선택
(‘bs’:  재무상태표, ‘is’ : 손익계산서, ‘cis’ : 포괄손익계산서, ‘cf’ : 현금흐름표)
필수 입력 str
show_class class 표시 여부 (True/False) True bool
show_depth 표시할 class 열 갯수 10 int
show_concept concept_id 표시 여부 (True/False) True bool

 

여기서 tp는 무엇인지 감이 오실 것이고, 나머지 3개가 무엇인지 감이 안오실거예요. 한번 show( ) 메소드를 이용해서 값을 보면서 하나씩 설명 드려보겠습니다.

 

<코드>

# 재무제표에서 제무상태표만 출력하는 코드
# ‘bs’:  재무상태표, ‘is’ : 손익계산서, ‘cis’ : 포괄손익계산서, ‘cf’ : 현금흐름표
df = fs.show('bs')
df

 

<실행 결과>

 

show( ) 메소드를 이용해 제무상태표를 출력해보았습니다. 가장 왼쪽에 concept_id라는 열 이름을 보이시나요?

자산항목을 구분하는 id인데 아직은 어디 사용할 수 있을지 모르겠네요. 저는 한국인이니 label_ko를 이용해 자산항목을 구분할 예정입니다. concept_id를 표에서 보시기 싫으시면 show_concept = False로 설정해주시면 됩니다.

 

그리고 class0부터 class4로 분류를 해둔 것 보이시나요? 위에서 4가지 메소드 중 show_class( )와 show_depth( )와 관련있는 부분입니다. 위의 concept_id와 같이 class를 없애고 싶으면 show_class = False로 설정해주시고, 만약 class를 2번까지만 출력하고 싶다고 하면 show_depth = 2로 설정해주시며 되겠습니다.

 

 

save( )

 

첫 시간에도 다루어 보았던 save( ) 메소드입니다. Dart API에서 받은 fs를 엑셀로 저장하는 기능을 합니다.

 

# 재무제표 일괄저장

# 기본 저장경로: 현재경로/fsdata
# 기본 저장 파일명: corp_code_report_tp.xlsx

fs.save()

 

원하는 경로에 원하는 파일명으로 저장하시고 싶으면 아래와 같이 하시면 됩니다.

 

filename = '삼성전자_제무재표'
path = '/User/xxxxx/Desktop/'
fs.save(filename=filename, path=path)

 


 

지금까지 배운 지식을 이용해서 전체 상장기업의 재무제표를 다운받고 싶으면 아래와 같은 과정을 코드로 구현하면 될 것 같네요.

 

1) 전체 상장 기업 리스트 받기

 

2) for문을 이용해 corp_list에서 종목 코드만 추출

 

3) dart.fs.extract(corp_code='여기 for문으로 종목 코드 바꿔가며 입력', bgn_de='20210101')으로 제무재표 정보 변수에 담기

 

4) 변수에 담은 재무제표 정보를 save( )로 엑셀로 저장하거나, show( )로 데이터 프레임으로 가져와서 필요한 데이터만 추출

 

이 부분은 추후에 좀 더 자세히 다루어 보도록 하겠습니다.

 

실적 시즌에 이런 방식으로 기업을 스크리닝해본다면 투자에 정말 큰 무기가 될 것 같거든요!


<참고 자료>

 

DART-FSS 공식 문서 (*조금씩 틀린 부분이 있으니 주의할 것)

 

https://dart-fss.readthedocs.io/en/latest/dart_fs.html

 

재무제표 일괄 추출 — dart-fss documentation v0.3.10 documentation

[‘annual’, ‘quarter’]: 연간 + 분기, [‘half’, ‘quarter’]: 반기 + 분기, [‘annual’, ‘half’, ‘quarter’]: 연간 + 반기 + 분기

dart-fss.readthedocs.io

 

반응형
반응형

안녕하세요, 코린이를 위한 코딩 유치원에 오신 것을 환영합니다.

 

 

이번 시간에는 제목처럼 VSCode에서 Jupyter Notebook 사용하는 법에 대해 알아보겠습니다.

 

[코딩유치원 파이썬 개발환경 구축 강의]

 

2021.03.02 - [파이썬 기초/개발환경 구축] - [코딩유치원] 파이썬 개발환경 구축 1편 (파이썬 VS 아나콘다)

2021.03.04 - [파이썬 기초/개발환경 구축] - [코딩유치원] 파이썬 개발환경 구축 2편 (어떤 IDE를 사용할까?)

2021.03.05 - [파이썬 기초/개발환경 구축] - [코딩유치원] 파이썬 개발환경 구축 3편 (VS code 설치 및 초기설정)

2021.03.08 - [파이썬 기초/개발환경 구축] - [코딩유치원] 파이썬 개발환경 구축 4편 (VS Code와 친해지기)

2021.06.26 - [파이썬 기초/개발환경 구축] - [Python/VSCode] 파이썬 개발환경 구축 5편_VSCode에서 Jupyter notebook 사용하는 법

2021.07.14 - [파이썬 기초/개발환경 구축] - [Python/VSCode] 파이썬 개발환경 구축 6편_코드를 예쁘게 만들어주는 강추 Extension 4가지


 

저희 코딩유치원에서 주로 사용하는 IDE는 VSCode입니다. 아래와 같은 장점 때문이죠.

 

VSCode 장점

1. 완전 무료

2. 가볍고 시작 속도가 빠름

3. 확장 프로그램 설치를 통해 다양한 언어 코딩 가능 (그 중 하나가 파이썬)

4. 한국어 패치 가능

5. 코드 편집 UI가 심플하고 알아보기 쉬움

 

이런 장점 덕분에 VSCode는 한 설문 조사에서 '2020년 가장 인기있는 파이썬 IDE의 인기순위'에서 2위를 차지했습니다.

 

출처. zephyrnet.com/ko/here-are-the-most-popular-python-ides-editors

 

다만 제가 지금까지 사용해보니 아주 강력한 도구인 것은 의심의 여지가 없으나, 확실히 데이터 분석을 할 때에는 확실히 Jupyter notebook이 편하더군요. 블록 단위로 코드를 쪼개어서 바로바로 실행 결과를 확인하고, 그 값이 계속 저장되어 있다는 주피터 노트북의 장점은 대체 불가라고 할까요.

 

그래서 보통의 코딩은 VSCode에서 데이터 분석은 Anconda Navigator를 켜서 Jupyter notebook을 번갈아 사용하던 중,

VSCode에서 Jupyter notebook을 사용하는 법을 배우게 되어 그 내용을 공유해보려 합니다.

 

 

파이썬 익스텐션 설치

 

아마 이 글을 읽고 계신다면 VSCode로 파이썬 익스텐션을 사용하시고 계신분들이 대부분이겠지만 혹시나 하는 마음에 지난 글의 링크를 공유드립니다. 설치가 되어 있으시면 바로 다음 단계로 넘어가 주세요.

 

2021.03.05 - [파이썬 기초/개발환경 구축] - 파이썬 개발환경 구축 3편 (VS code 설치 및 초기설정, 한글패치)

 

VSCODE EXTENSION의 설명에 Jupyter notebook이 지원된다는 내용

 

 

주피터 노트북 파일 생성(.IPYNB)

 

구글에 VSCode에서 Jupyter notebook 사용법을 검색해보면 아래와 같은 방법이 나오지만 왠지 복잡하다는 느낌이듭니다.

 

1단계. 커맨드 팔레트(Ctrl+Shift+P) 켜기

2단계. 검색창에 create 입력

3단계. Jupyter:Create New Blank Notebook 선택

 

위의 방법을 사용하셔도 되지만 저는 아래의 방법을 더 추천드립니다. 정말 간단하거든요.

 

새로운 파이썬 파일을 만들 때 '파일명.py' 대신에 '파일명.ipynb'를 입력해주시기만 하면 끝! 정말 쉽죠?

 

한 번 사용해 볼까요?

 

간단히 리스트를 만들어서 출력해봅시다. 아래의 그림을 보면 a = [1, 2, 3] 이라는 리스트를 만들고, 변수 a를 확인해보면 [1, 2, 3]이 출력되는 것을 확인 하실 수 있을거예요.

 

참고로, 아래의 빨간색 사각형으로 표시한 아이콘을 클릭하면 현재 사용하고 있는 변수들을 모두 볼 수 있답니다. 정말 좋지 않나요?!

 

 

 

자주 사용하는 주피터 노트북 단축키

 

주피터 노트북의 단축키를 그대로 사용할 수 있으니 아래의 단축키 리스트를 알아두시면 유용하실거예요.

 

단축키 기능
Shift+Enter 선택한 셀 실행 후, 다음 셀 선택 (셀이 없으면 생성)
Ctrl+Enter 선택한 셀 모두 실행 (맥북은 Command + Enter도 됨)
A 위에 셀 추가
B 아래에 셀 추가
X 잘라내기
C 복사하기
V 붙여넣기
Z 지운 셀 되돌리기
DD 선택한 셀 삭제
H 단축키 설명창 열기

 

 

<참고> Kernel died with exit code 1 에러 해결 방법

 

저는 한 번에 위의 과정에서 막힘이 없었지만 저의 회사 동료는 아래와 같은 에러가 출력되어 해결하는데에 애를 먹었습니다.

 


정확한 원인은 모르겠지만 아래의 코드로 해결했답니다.

 

터미널 창에 해당 코드를 입력

conda install ipykernel --update-deps --force-reinstall

 

오늘 준비한 내용은 여기까지입니다.

 

여러분들의 파이썬 공부에 많은 도움이 되었길 바래봅니다.


<참고 자료>

 

Kernel died with exit code 1 에러 해결 참고 글

https://github.com/microsoft/vscode-jupyter/issues/5689

 

"Kernel died with exit code 1" when trying to run code on interactive window · Issue #5689 · microsoft/vscode-jupyter

Hi, I used to be able to run my python file using the interactive window. However, all of a sudden, I keep getting the following error "Kernel died with exit code 1" when I try to run my ...

github.com

 

VScode에서 Jupyter notebook 사용하는 방법 참고 글

https://junglow9.tistory.com/10

 

Visual Studio Code(vscode)에서 jupyter notebook 사용하기.

PANDAS로 데이터 분석 공부하려고, 컴퓨터 켤 때마다, jupyter 서버를 실행하고, 웹 브라우저에서 노트북을 클릭하는게 매우 불편했습니다. 그래서, 자주 사용하는 Visual Studio Code에서 jupyter notebook을

junglow9.tistory.com

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

<DART-FSS 관련 지난 글>

 

2021.06.10 - [파이썬 패키지/전자공시시스템(DART)] - [Python / Dart] 파이썬으로 재무제표 정보 가져오기 1편_ DART API와 DART-FSS 패키지 소개

2021.06.22 - [파이썬 패키지/전자공시시스템(DART)] - [Python / Dart] 파이썬으로 재무제표 정보 가져오기 2편_ 상장된 모든 회사 재무제표 EXCEL로 저장하기

 


지난 시간에 배운 내용이 기업을 선택한 후, 해당 기업의 재무제표를 가져오거나 공시보고서를 검색하는 것이었다면, 이번 시간에 배울 함수는 특정 기간의 특정 공시 유형의 보고서들을 가져올 수 있습니다. 지금부터 어떤 매개변수들을 설정해줄 수 있는지 알아보겠습니다.

 

공시보고서 검색

(함수) dart_fss.filings.search( )

 

<매개변수>

옵션 기능 기본 값 자료형
corp_code 공시대상회사의 고유번호(8자리) 미입력 시, 모든 회사 검색
검색기간은 3개월로 제한
str
bgn_de 검색시작 접수일자(YYYYMMDD) 종료일(end_de) str
end_de 검색종료 접수일자(YYYYMMDD) 오늘 날짜 str
last_reprt_at 최종보고서만 검색여부(Y or N) N str
pblntf_ty 공시유형 및 공시상세유형 참고 None str
pblntf_detail_ty 공시유형 및 공시상세유형 참고 None str
corp_cls 법인구분 : Y(유가), K(코스닥), N(코넥스), E(기타) 전체 조회 str
sort 정렬, {접수일자: date, 회사명: crp, 고서명: rpt} ?? str
sort_mth 오름차순(asc), 내림차순(desc) 내림차순('desc') str
page_no 페이지 번호(1~n) 1 int
page_count 페이지당 건수(1~100) 10 int

 

<예시 코드>

import dart_fss as dart

# 오늘 나온 공시 검색
reports = dart.filings.search()

# 2021년 1월 1일부터 2021년 3월 31일까지 검색 (페이지당 표시 건수: 100)
reports = dart.filings.search(bgn_de='20190101', end_de='20190331', page_count=100)

# 2019년 5월 1일부터 2019년 7월 1일까지 연간보고서만 검색
reports = dart.filings.search(bgn_de='20190501', end_de='20190701', pblntf_detail_ty='a001')

# 2019년 5월 1일부터 2019년 7월 1일까지 연간보고서 및 반기보고서 검색
reports = dart.filings.search(bgn_de='20190501', end_de='20190701', pblntf_detail_ty=['a001', 'a002'])

 

 

공시보고서 검색 결과

(클래스) dart_fss.filings.search.SearchResults

 

위에서 dart_fss.filings.search( )로 얻은 결과, 즉 reports라는 변수 안에는 어떤 것이 들어있을까요?

 

아래와 같이 크게 5가지 요소를 가집니다.

요소 기능
page_no 표시된 페이지 번호
page_count 페이지당 표시할 리포트수
total_count 총 건수
total_page 총 페이지수
report_list 검색된 리포트 리스트

 

주피터 노트북으로 검색결과를 출력해보았습니다.

 

import dart_fss as dart

# 2021년 1월 1일부터 2021년 3월 31일까지 검색
reports = dart.filings.search(bgn_de='20210101', end_de='20210331')

reports

 

<출력 결과>

 

잘 보시면 page_no는 1, page_count는 10, total_count는 68908, total_page는 6891인 것을 확인 하실 수 있습니다.

 

이게 무슨의미인지 잠시 알아보겠습니다.

 

먼저 page_count의 10은 기본값입니다. 우리가 저기 위에서 함수를 사용할 때, 따로 인자를 넣어주지 않았기에 10이라는 기본 값이 들어갔고, 총 검색결과가 1페이지에 10개씩 나뉘어서 저장된 상태입니다.

 

즉, 2021년 1월 1일부터 2021년 3월 31일까지 나온 공시 보고서의 총 갯수가 68908개이며, 이걸 10개씩 나누어 총 6891개의 페이지를 가지는 것이죠.

 

마지막으로 page_no가 1이므로 1페이지의 공시 10개만 report_list에 들어가 있는 것을 확인할 수 있습니다.

 

 

실제 사용 예시

 

지금까지 배운 것을 가지고 실제로 삼성전자의 최신 공시보고서 하나를 가져와보겠습니다.

 

import dart_fss as dart

# 삼성전자 code
corp_code = '00126380'

reports = dart.filings.search(corp_code=corp_code, bgn_de='20210101', pblntf_detail_ty='a001')

# 가장 최신 보고서 선택
newest_report = reports[0]

# 참고
# 0-4번 보고서 선택
# zero_to_fourth_report = reports[0:5]

# 가장 오래된 보고서 선택
# oldest_report = reports[-1]

 

<주피터 노트북 실행 결과>

 

아직은 이 자료를 어떻게 사용할 수 있는지는 모르겠네요. 어떻게 활용하는지는 조금 더 공부한 후 포스팅 하도록 하겠습니다.

 

 

참고로, 지난 시간 배운 함수를 이용하면 같은 결과를 얻을 수 있습니다.

# 삼성전자 code
corp_code = '00126380'

# 모든 상장된 기업 리스트 불러오기
corp_list = get_corp_list()

# 삼성전자
samsung = corp_list.find_by_corp_code(corp_code=corp_code)

# 연간보고서 검색
reports = samsung.search_filings(bgn_de='20210101', pblntf_detail_ty='a001')

# 가장 최신 보고서 선택
newest_report = reports[0]

 


<참고 자료>

 

DART-FSS 공식 문서

https://dart-fss.readthedocs.io/en/latest/dart_search.html#dart_fss.filings.search.SearchResults.page_count

 

공시정보 검색 — dart-fss documentation v0.3.10 documentation

© Copyright 2021, Sungwoo Jo Revision 2a7bb3e6.

dart-fss.readthedocs.io

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

오늘은 지난 글에 이어서 DART-FSS 패키지로 원하는 회사 혹은 모든 회사의 재무제표를 엑셀 파일로 저장하는 것을 해보겠습니다.

향후 저장받은 데이터를 Pandas 모듈로 가공해서 유의미한 투자 정보를 얻고, 실제 투자에도 적용해 볼 계획입니다.

 

<DART-FSS 관련 지난 글>

 

2021.06.10 - [파이썬 패키지/전자공시시스템(DART)] - [Python / Dart] 파이썬으로 재무제표 정보 가져오기 1편_ DART API와 DART-FSS 패키지 소개

 


 

1. 공시된 기업 정보 불러오기

 

아래의 코드를 이용하면 DART에 공시된 모든 회사의 [회사 코드] + 회사 이름을 리스트 형태로 받을 수 있습니다. 

 

# DART에 공시된 모든 회사 리스트 불러오기

corp_list = dart.get_corp_list()

 

참고로 corp_list를 DART API로부터 받아오는데에 시간이 걸리는데 측정해보니 11.72초 정도로 나오네요.

주로 사용하는 IDE인 VS Code를 사용하니깐 매번 코드를 실행할 때마다 리스트를 불러와서 시간이 아까우므로, 다음부터 Jupyter Notebook을 이용한다면 매번 12초씩 아낄 수 있겠습니다.

 

 

corp_list의 요소가 어떤 데이터 형태를 가지고 있는지, 요소는 몇 개나 있는지 확인해보았습니다. 리스트의 길이를 측정하는 len( ) 함수를 이용해 확인해보니 상장된 기업수가 8만 7천개가 넘네요!

# 리스트의 첫번째 종목정보 출력

print(corp_list[0])

>>> [00434003]다코


# 리스트 종목 갯수 출력

print(len(corp_list))

>>> 87098


# corp_list 자료형 확인

print(type(corp_list))

>>> <class 'dart_fss.corp.corp_list.CorpList'>

 

혹시 종목 87098개가 궁금하신분들은 for문을 이용해서 터미널창에 모두 출력해보세요. 저는 처음으로 터미널 창 스크롤 범위가 오버돼서 이전 정보가 안보이는 것을 경험할 수 있었답니다!

# 모든 회사 [코드]회사명 출력

for i in corp_list:
    print(i,end="")

 

 

2. corp_list 활용 메소드

 

사실 우리가 위에서 얻게된 corp_list는 클래스이며, 따로 메소드를 가지고 있습니다. 즉, corp_list.함수의 형태로 몇 가지 함수를 사용할 수 있습니다.

 

역시 말보다는 코드죠. 가장 자주 사용할 함수 2가지를 예시로 가져와봤습니다.

 

# 삼성전자 회사명으로 검색

samsung = corp_list.find_by_corp_name('삼성전자', exactly=True)[0]


# 삼성전자 회사 코드로 검색

samsung = corp_list.find_by_corp_code('00126380')[0]

 

참고로 exactly 옵션을 설정하지 않으면 기본적으로 False로 설정되어 있습니다. 여기서 특별히 True로 설정해주었는데, 그 이유는 False일 때는 '삼성전자'가 들어간 '삼성전자서비스씨에스'를 출력해주기 때문입니다.

 

또한 corp_list.find_by_corp_name( ) 함수의 결과 데이터는 [[종목 코드]종목 이름]의 형태로 리스트 [ ]로 한겹 쌓여져있습니다. 이를 벗겨내기 위해서 corp_list.find_by_corp_name( )[0]으로 코딩한 점 유의해 주세요.

 

<관련 메소드>

메소드 기능
find_by_corp_code(self, corp_code) DART에서 사용하는 회사 코드를 이용한 찾기
find_by_corp_name(self, corp_name[, …]) 회사 명칭을 이용한 검색
find_by_product(self, product[, market]) 취급 상품으로 검색(코스피, 코스닥, 코넥스만 지원)
find_by_sector(self, sector[, market]) 산업 섹터로 검색(코스피, 코스닥, 코넥스만 지원)
find_by_stock_code(self, stock_code[, …]) 주식 종목 코드를 이용한 찾기
load(self[, profile]) 회사 정보가 없을시 회사 정보 로딩

 

<여기서 잠깐! corp_code와 stock_code의 차이점>

 

corp_code는 dart에서 사용하는 코드를 말하며 stock_code는 아래와 같이 검색포털에서 주식정보를 검색하면 나오는 코드입니다.

위에서 다루었던 삼성전자의 corp_code (00126380)와 다른 것을 확인 할 수 있습니다.

 

3.  회사 정보로 재무제표 다운받기

 

위에서 samsung이란 변수에 회사 정보([종목 코드]종목 이름)을 저장했습니다. 이 samsung이란 변수도 사실 클래스의 인스턴스(객체)로서 메소드를 사용할 수 있습니다.

 

주로 사용할 만한 메소드는 아래의 5개 중 extract_fs와 search_fillings이며, 이번 시간에는 목표로 했던 재무제표를 정보를 가져오는 extract_fs( ) 메소드를 사용해 보겠습니다.

메소드 기능
extract_fs(bgn_de[, end_de, fs_tp, …]) 재무제표 검색
load(self) 종목 정보 로딩
search_filings([bgn_de, end_de, …]) 공시보고서 검색
to_dict() 종목에 관한 모든 정보를 Dictionary 형태로 반환
update(info) Update information

 

코드는 아래와 같이 간단합니다. 다만 실행하시면 자료를 가져오는데에 시간이 꽤 걸릴거예요.

 

# 2020년부터 연간 연결재무제표 불러오기
fs = samsung.extract_fs(bgn_de='20200101')

# 재무제표 검색 결과를 엑셀파일로 저장 (기본저장위치: 실행폴더/fsdata)
fs.save()

 

<여기서 잠깐! extract_fs 메소드의 인자(옵션)>

 

꼭 입력이 필요한 검색시작 일자(bgn_de)를 제외하고는 모두 기본값이 들어가 있습니다.

 

옵션 기능 기본 값 자료형
bgn_de 검색시작 접수일자('YYYYMMDD') 필수 입력 str
end_de 검색종료 접수일자('YYYYMMDD') 오늘 날짜 str
fs_tp 재무제표 종류 선택
(‘bs’:  재무상태표, ‘is’ : 손익계산서, ‘cis’ : 포괄손익계산서, ‘cf’ : 현금흐름표)
('bs', 'is', 'cis', 'cf) tuple,
str
separate 개별재무제표 여부 (True : 개별 재무제표 / False : 연결 재무제표) False str
report_tp 연간, 반기, 분기 보고서 선택
(‘annual’ : 연간, ‘half’ : 반기, ‘quarter’ : 분기)
None str
lang 언어 선택 ('ko' : 한글, 'en' : 영어) 'ko' str
separator 숫자 1000 단위 구분자 표시 여부 (True / False) True str
dataset 'xbrl' : xbrl 파일 우선 데이터 추출
'web' : web page 우선 데이터 추출
'xbrl' str

 

 

코드 실행 결과 아래와 같은 이름의 엑셀 파일이 저장됩니다. 참고로 excel 파일이 있는 fsdata 폴더는 현재 작업 디렉토리에 존재합니다.

 

엑셀 파일을 열어보면 아래와 같이 데이터들이 있습니다. 데이터들이 의미하는 바는 추후 정리하는 시간을 갖겠습니다.

 

 

참고로 위에서 설정했던 (bgn_de='20200101')은 아래의 그림에서 시작 기간을 의미합니다.

 

아래는 dart에서 검색한 연결 재무상태표입니다.

 

 


<참고자료>

 

DART-FSS 공식문서

https://dart-fss.readthedocs.io/en/latest/dart_corp.html

 

기업정보검색 — dart-fss documentation v0.3.10 documentation

© Copyright 2021, Sungwoo Jo Revision 2a7bb3e6.

dart-fss.readthedocs.io

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

 

[웹 크롤링 기초]

2021.03.22 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링 기초 of 기초

2021.03.23 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 크롬드라이버 크롬 버전에 맞춰서 설치하는법

2021.03.24 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링 관련 패키지 3종 총정리

2021.03.27 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링을 위한 속성 HTML, CSS 요약 정리

2021.03.28 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 동적/정적 페이지 차이와 그에 따른 크롤링 방법 간단정리

 

[정적 웹크롤링]

2021.03.30 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링 정적 수집 방법 개념 정리_find, find_all, select, select_one

2021.04.02 - [파이썬 패키지/웹 크롤링] - [Python/Requests/Beautifulsoup] 네이버 뉴스 기사 제목 크롤링을 통한 정적 수집 기초 정리

2021.04.06 - [파이썬 패키지/웹 크롤링] - [Python/Reuqests/Beautifulsoup] 파이썬 정적 웹크롤링 텍스트, 이미지, 하이퍼링크, 속성 가져오는 법

 

[동적 웹크롤링]

2021.04.03 - [분류 전체보기] - [코딩유치원] 네이버 뉴스 기사 제목 크롤링을 통한 동적 수집 기초 정리(selenium, beautifulsoup)

2021.06.21 - [파이썬 패키지/웹 크롤링] - [Python/Selenium] 파이썬 동적 웹크롤링 텍스트, 하이퍼링크, 이미지, 속성 가져오는 법

2021.05.22 - [파이썬 패키지/GUI 프로그램] - [파이썬 GUI 프로그래밍] 잡플래닛 리뷰 정보 크롤링 GUI 프로그램

 


 

이번 시간에는 Selenium 패키지를 이용한 동적 웹크롤링을 할 때, 텍스트와 속성(하이퍼링크, 이미지)을 가져오는 방법에 대해서 알아보겠습니다. 참고로 Request와 Beautifulsoup 패키지를 사용하여 텍스트, 이미지, 하이퍼링크를 추출하는 방법은 지난 글을 참고해주세요.

 

실습을 통해서 하나씩 알아볼텐데요. 대략적인 순서는 이렇습니다.

 

1. 검색할 키워드 입력

2. 크롬 드라이버로 원하는 url 접속

3. 뉴스 제목 텍스트 추출

4. 뉴스 url 링크 추출

5. 뉴스 썸네일 이미지 추출

     - 이미지 src 리스트에 저장

     - 이미지 저장할 폴더 생성

     - src를 이용해 이미지 다운로드

 

 

우선 지난 시간에 다뤘던 1번 2번 단계는 설명 없이 코드만 공유드리고 넘어가도록 하겠습니다.

#step1.selenium 패키지와 time 모듈 import
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

#step2.검색할 키워드 입력
query = input('검색할 키워드를 입력하세요: ')

#step3.크롬드라이버로 원하는 url로 접속
url = 'https://www.naver.com/'
driver = webdriver.Chrome('/Users/sangwoo/Desktop/chromedriver')
driver.get(url)
time.sleep(3)

#step4.검색창에 키워드 입력 후 엔터
search_box = driver.find_element_by_css_selector("input#query")
search_box.send_keys(query)
search_box.send_keys(Keys.RETURN)
time.sleep(2)

#step5.뉴스 탭 클릭
driver.find_element_by_xpath('//*[@id="lnb"]/div[1]/div/ul/li[2]/a').click()
time.sleep(2)

 

참고로 위의 코드를 실행하면 아래와 같이 입력한 키워드의 뉴스 검색 결과가 출력됩니다. 참고로 한 페이지에 뉴스는 10개가 출력됩니다.

 

 

해당 화면이 출력되셨다면 F12 버튼을 누르시고 크롤링을 원하는 부분을 selenium 패키지로 가져와야합니다.

 

지금 배우고 있는 동적 웹크롤링과는 조금 다르지만 참고하시면 좋을 것 같아 지난글의 링크를 공유드립니다.

 

2021.04.02 - [파이썬 패키지/웹크롤링] - [코딩유치원] 네이버 뉴스 기사 제목 크롤링을 통한 정적 수집 기초 정리(beautifulsoup, requests)

 

 

오늘 사용할 html은 아래의 빨간색 사각형으로 표시한 부분입니다. 위 영역은 기사제목과 기사링크(href)를 담고있으며, 아래 영역은 이미지 주소(src)를 담고 있습니다.

 

 

텍스트 추출 .text

 

selenium의 텍스트 추출은 아주 쉽습니다. 아래와 같이 선택자(css selector)를 이용해 원하는 부분의 html을 변수에 저장해준 후에, 아래와 같이 for 문과 .text 함수를 이용해 주시면 됩니다.

 

#step6.뉴스 제목 텍스트 추출

news_titles = driver.find_elements_by_css_selector(".news_tit")

for i in news_titles:
    title = i.text
    print(title)

 

결과는 아래와 같이 출력됩니다.

 

 

링크 추출 .get_attribute('href')

 

링크를 가져오고 싶을 때, 속성을 가져오는 .get_attribute('href')를 사용합니다. href 속성은 방금 전 가져온 news_titles 변수에 저장되어 있으므로, 따로 한 번더 가져와줄 필요 없이 바로 for문을 써줬습니다.

 

#step7.뉴스 하이퍼링크 추출

for i in news_titles:
    href = i.get_attribute('href')
    print(href)

 

결과는 아래와 같이 10개의 url이 출력되는 것을 확인하실 수 있을거예요.

 

이미지 추출  .get_attribute('src')

 

다음으로는 이미지 추출입니다. 텍스트나 url 링크를 가져올 때와는 다르게 조금 길지만 어려워 하실 필요없어요.

 

앞서 배우신 것과 같이 이미지 주소(src)를 갖고 있는 html을 news_thumnail 변수에 저장해줍니다.

 

그 다음엔 이미지 다운로드를 위해서 해당 주소들을 리스트(link_thumnail)에 append 함수를 이용해 하나씩 담아주세요.

 

사진을 다운로드 받아서 내 PC에 저장하기 위해서는 저장할 폴더를 만들고, src 주소를 이용해 다운로드 해주면 됩니다.

폴더 생성에는 os 모듈과 urllib.request 패키지의 urlretrieve 함수가 필요한데, 모두 다 파이썬 내장 라이브러리이므로 따로 설치해주실 필요 없이 import 해주시면 돼요.

 

os 모듈과 경로에 대한 개념을을 잘 모르신다면 아래 글을 참고해주세요.

 

2021.06.07 - [파이썬 패키지/사무자동화] - [Python / os모듈] 디렉토리(폴더)와 경로 정보 활용하기

 

 

#step8.뉴스 썸네일 이미지 추출

news_thumbnail = driver.find_elements_by_css_selector("img.thumb.api_get")

link_thumbnail = []

for img in news_thumbnail:
    
    link_thumbnail.append(img.get_attribute('src'))


# 이미지 저장할 폴더 생성

import os

# path_folder의 경로는 각자 저장할 폴더의 경로를 적어줄 것(ex.img_download)
path_folder = '/Users/sangwoo/Desktop/img_download/'

if not os.path.isdir(path_folder):
    os.mkdir(path_folder)


# 이미지 다운로드

from urllib.request import urlretrieve

i = 0

for link in link_thumbnail:          
    i += 1
    urlretrieve(link, path_folder + f'{i}.jpg')        #link에서 이미지 다운로드, './imgs/'에 파일명은 index와 확장자명으로

 

<실행 결과>

 

<참고>

 

별점 추출 get_attribute('style')

이건 자주 사용하진 않는데 가끔 속성을 가져와야할 때가 있습니다. 예를 들면 제가 잡플래닛 평점을 크롤링 할 때, 별점을 아래와 같이 style 속성으로 정의하더군요. 여기에 width: 68%를 속성 추출을 이용해서 받아와서 5점 만점의 별점으로 재가공 했던 적이 있습니다.

i.get_attribute('style')

 


오늘도 공부하시느라 고생 많으셨습니다.

 

감사합니다.

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

오늘은 엑셀이나 웹브라우저처럼 파이썬 전용 패키지가 없어서 조작을 할 수 없는 경우에 아주 유용한 PyAutoGUI라는 패키지에 대해서 배워보겠습니다.

 

저는 회사에서 SAP사의 ERP(Enterprise Resource Planning)를 사용하는데, 이걸 자동화 시키려고 하니깐 무료로 제공하는 API가 없어서 고민하던 중 해당 패키지를 사용하면 좋겠다는 생각이 들어서 공부해보게 되었답니다.

 

<PyAutoGUI 관련 글>

 

2021.06.14 - [파이썬 패키지/사무자동화] - [Python / PyAutoGUI] 파이썬 마우스/키보드 조작 패키지_1편.마우스 조작하기

2021.06.15 - [파이썬 패키지/사무자동화] - [Python / PyAutoGUI] 파이썬 마우스/키보드 조작 패키지_2편.키보드 조작하기(ft.한글 입력 방법)

 


이번 시간에는 직접 좌표를 지정해서 마우스를 움직이는 방법이 아니라,

 

화면에서 찾고자 하는 이미지를 캡처&저장해놓고 그 이미지의 좌표를 찾아가는 방법에 대해서 배워보겠습니다.

 

 

1. 화면 원하는 부분 캡처하기

 

이를 위해서 먼저 화면을 캡처하는 방법을 간단히 알아보겠습니다.

 

1) Windows OS

    - 캡처 도구 (모드는 사각형 캡처를 추천)

    - 캡처 후 저장하면 자동으로 png 파일로 저장됨 (파일명은 영어로 할 것)

 

- Shift + 윈도우키 + S 

 

2) mac OS

   - Shift + Command + 4 (부분 캡처)

   - Shift + Command + 3 (전체 캡처)

   - 마찬가지로 저장 시 자동으로 png 파일로 저장됨 ((파일명은 영어로 할 것)

 

 

2. 캡처한 이미지로 좌표 정보 얻기

 

캡처한 이미지의 좌표를 얻으려면 locateOnScreen( ) 함수를 사용하시면 됩니다. 이때 괄호 안의 이미지는 같은 디렉토리에 위치해야 작동합니다. 굳이 이미지 파일을 다른 폴더에 위치시키고 싶다면 해당 경로를 입력해주어야합니다.

 

저의 경우는 화면 우측상단의 Run 버튼을 캡처해서 찾아보는 코드를 작성해보았습니다. img_capture 변수에 들어가 있는 값을 확인해보면 Box(left=x 좌표, top=y 좌표, width = 이미지 너비, height=이미지 높이)가 출력되는 것을 확인하실 수 있습니다.

 

img_capture = pyautogui.locateOnScreen("Run_icon.png")

print(img_capture)

pyautogui.click(img_capture)

 

이미지의 경로가 제대로 설정되지 않은 경우에는 에러가 출력되며, 경로는 정확하지만 화면상에서 해당 이미지를 못 찾았을 때는 None(값이 없음을 의미)을 돌려줍니다.

 

 

3. 캡처한 이미지가 화면에 여러개 일 때

 

예를 들어서 아래와 같은 체크박스를 중복 선택해야한다면 어떻게 해야할까요?

그럴 때는 아래와 같이 locateAllOnScreen( ) 함수와 for 문으로 해결 가능합니다. 위에서 배운 locateOnScreen( ) 함수와 무엇이 다른지 보이시죠? 해당 함수를 사용하면 원하는 이미지의 위치들을 리스트에 저장해놓고 for문으로 하나씩 꺼내어 쓰는 개념입니다.

 

for i in pyautogui.locateAllOnScreen("checkbox.png"):
    
    pyautogui.click(i, duration=0.25)

 

 

4. 범위 안에서만 캡처한 이미지를 찾고 싶을 때

 

다른 영역에 있는 중복되는 이미지를 무시하고 싶거나, 이미지 검색 범위를 좁혀 속도를 개선하고 싶을 때 사용하면 좋을 것 같아요.

 

import pyautogui

img_capture = pyautogui.locateOnScreen("Run_icon.png", region=(1800, 0, 1920, 100))

pyautogui.moveTo(img_capture)

 

Tip. 코드 실행 속도 측정법

import pyautogui
import time

start = time.time()  # 시작 시간 저장

img_capture = pyautogui.locateOnScreen("Run_icon.png")

pyautogui.moveTo(img_capture)

# 현재시각 - 시작시각 = 실행 시간
print("코드 실행 시간 :", time.time() - start)  

 

 

5. 이미지 인식이 됐다안됐다 할 때

 

가끔 찾고자 하는 이미지와 화면의 이미지가 어떤 이유로 100% 일치하지 않아서 잘 되던 코드가 실행이 되지 않을 경우도 있습니다. 저는 아직 겪어보지  않았지만 혹시 이런 현상이 발생한다면 지금 알려드리는 옵션을 사용해보세요!

 

이런 경우에는 예를 들어 일치도를 70% 이상이면 같은 이미지로 인식하라고 설정할 수가 있습니다.

 

이 기능을 사용하려면 아래의 패키지를 설치해주셔야 합니다.

# 이미지 처리 패키지인 opencv-python 설치
pip install opencv-python

 

사용법은 간단합니다. 지금껏 배워왔던 locateOnScreen 함수안에 confidence 옵션을 설정해주시면 됩니다.

 

img_capture = pyautogui.locateOnScreen("Run_icon.png", confidence=0.7) # 70%

pyautogui.moveTo(img_capture)

 

오늘 준비한 내용은 여기까지 입니다.

 


<참고 자료>

 

나도코딩_업무자동화 유튜브 강의:

https://www.youtube.com/watch?v=exgO1LFl9x8&t=3083s 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

오늘은 파이썬 데이터 분석하면 바로 떠오르는 패키지 중 하나인 Numpy에 대해서 알아보겠습니다.

 

Numpy는 선형대수, 수치해석, 통계 관련한 파이썬 패키지로, 어려운 프로그래밍 언어인 C, C++, Fortran에 비해 아주 쉽게 고성능의 수치 연산을 가능하게 해주는 패키지 입니다. Numerical Python의 줄임말로 '넘파이'라고 부르며, pandas와 matplotlib 같은 다른 데이터분석용 패키지의 기반이 되기도 합니다.

 

<Numpy 패키지 관련 이전 글>

 

2021.06.16 - [파이썬 패키지/데이터분석] - [Python/Numpy] 데이터 분석 수치연산 패키지_numpy 1편. ndarray, shape, axis의 개념


 

ndarray의 인덱싱과 슬라이싱

 

이미 이 글을 읽으시는 분들은 파이썬 기초 문법을 공부하시면서 리스트의 인덱싱과 슬라이싱에 대해서 한 번쯤 들어보셨을 것이라 생각됩니다. 기본적으로 ndarray의 인덱싱, 슬라이싱도 리스트와 같은 규칙을 따릅니다. 

 

2021.03.12 - [파이썬 기초/기초 문법] - [코딩유치원] 파이썬 기초 문법 4편_리스트 자료형

 

따라서 1차원 array의 인덱싱은 리스트 문법 글로 대신하고, 2차원 array에 대해서만 간단히 정리하고 넘어가겠습니다.

 

 

2차원 array의 인덱싱과 슬라이싱

 

기초문법 강의에서는 자세히 다루지 않았었지만 리스트 안에는 리스트가 들어갈 수 있습니다. 이런 식으로 말이죠.

 

arr_list = [[1,2,3],[4,5,6],[7,8,9]]

print(arr_list[0][2])    # 리스트의 0번 인덱스 안의 2번 인덱스
>>> 3

print(arr_list[2][0])    # 리스트의 2번 인덱스 안의 0번 인덱스
>>> 7

 

이 리스트를 numpy.array( ) 안에 넣어서 ndarray를 만들면 그것이 바로 행렬(matrix)가 되며, 거의 동일하게 인덱싱할 수 있습니다.

 

arr_2d = numpy.array([1,2,3],[4,5,6],[7,8,9])

# 1행, 3열  --> 3
arr_2d[0,2]

# 3행, 1열  --> 7
arr_2d[2,0]

 

비슷한 개념의 슬라이싱도 해볼까요? 이미 아시겠지만 슬라이싱이란 간단히 '범위 인덱싱'이라고 생각하시면 됩니다.

참고로 슬라이싱의 0:2가 뜻하는 것은 0이상 2이하라는 뜻입니다.

 

# 2행 모두  --> array([4,5,6])
arr_2d[1, :]

# 1열 모두 --> array([1,4,7])
arr_2d[:, 0]

# 3행의 1,2열 --> array([4,5])
print(arr_2d[2,0:2])

# 1,2행의 1,2열 --> array([1,2],[4,5])
print(arr_2d[0:2,0:2]

 

 

fancy indexing

 

fancy는 동사로 원하다, 끌리다라는 뜻이 있죠. 대충 원하는거 골라서 다 가져오겠다라는 뜻으로 해석됩니다.

말로 표현해보려다 실패하고 코드로 설명드려 보겠습니다. 

 

arr = np.array([10,20,30,40,50])

# 보통 인덱싱
arr[1]
>>> 20

# 팬시 인덱싱
arr[[0,2,4]]
>>> 10, 30, 50

 

여기서 주의하실 점은 꼭 [ ]를 한 번 더 써주셔야 한다는 것입니다. 그냥 arr[0,2,4] 이런 식으로 하시면 에러가 납니다.

당연히 리스트를 담은 변수를 넣어줘도 됩니다. arr[리스트] 이런 식으로 말이죠.

 

 

Bollean indexing

 

ndarray의 장점은 ndarray에 조건문을 적용하면 모든 값에 개별적으로 적용되어 그 결과를 True와 False로 돌려준다는 것입니다.

그렇게 나온 결과 array를 위에서 배운 fancy indexing 처럼 그대로 array[ ] 안에 넣어주면 해당 인덱스가 True인 값만 출력해줍니다.

 

이 개념은 데이터 분석에서 아주아주 유용하게 사용되므로 잘 이해하고 넘어가시는 것을 추천드립니다.

 

arr_2d = numpy.array([1,2,3],[4,5,6],[7,8,9])

arr_2d

>>> array([[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]])

# Boolean indexing

arr_2d > 2

>>> array([[False, False,  True],
          [ True,  True,  True],
          [ True,  True,  True]])


# Boolean indexing 사용법

arr2d[arr2d > 5]

>>> array([6, 7, 8, 9])

 

조금 특이한 점은 2차원 배열도 Boolean indexing을 통해 값을 얻으면 1차원 배열로 값을 출력한다는 것입니다.

 

다음 시간에는 numpy의 정렬과 사칙연산에 대해서 공부해보겠습니다.


<참고자료>

 

패스트캠퍼스_직장인을 위한 파이썬 데이터분석 올인원 패키지 Online.

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

오늘은 파이썬 데이터 분석하면 바로 떠오르는 패키지 중 하나인 Numpy에 대해서 알아보겠습니다.

 

numpy란?

 

Numpy는 선형대수, 수치해석, 통계 관련한 파이썬 패키지로, 어려운 프로그래밍 언어인 C, C++, Fortran에 비해 아주 쉽게 고성능의 수치 연산을 가능하게 해주는 패키지 입니다. Numerical Python의 줄임말로 '넘파이'라고 부르며, pandas와 matplotlib 같은 다른 데이터분석용 패키지의 기반이 되기도 합니다.

 

통상적으로 데이터분석은 VScode IDE 보다는 Jupyter Notebook을 사용하므로 만약 주피터 노트북에 대해 모르신다면 아래의 글을 읽고 나신 후에 이 글을 읽으시는 것을 추천드립니다.

 

2021.04.13 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 2편. 데이터 분석을 위한 준비 (Jupyter Notebook 설치 및 사용법)

2021.04.16 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 5편. Jupyter Notebook으로 데이터 파일 불러오기 (꿀팁. Tap과 Tap+Shift 사용법은 꼭 알아두세요!!)

 

 

numpy 설치

 

 만약 Anaconda를 설치하신 분들은 numpy가 이미 설치되어 있으며, 순정 파이썬(파이썬 공식 홈페이지에서 다운로드)를 받으신 분들은 아래의 코드를 터미널창에 입력해주세요.

pip install numpy

 

numpy 불러오기

#numpy 패키지를 np라는 이름으로 불러오기
import numpy as np

 

numpy 배열 (ndarray)

numpy의 가장 기본적인 구조로 1D array(벡터), 2D array(행렬), 3D array(텐서)와 같은 데이터 구조를 가집니다.

참고로 ndarray라는 말은 n dimension array의 줄임말입니다.

 

출처. https://velog.io/@mingki

 

여기서 알아두셔야 할 개념이 있는데 바로 axis와 shape입니다.

 

axis shape
기준이 되는 축으로 축의 갯수는 차원과 같음


(axis 0) = 1D array
(axis0, axis 1) = 2D array
(axis0, axis1, axis 2) = 3D array

배열의 차원과 크기 정보



(3, ) = 3의 배열
(4,3) = 4x3의 배열
(2,5,3) = 2x5x3의 배열

 

위에서 배운 개념들을 실제 numpy에서 어떻게 코드로 사용하는지 알아보겠습니다.

 

1차원 배열 (1D array)

 

가장 기본적인 배열인 1차원 배열입니다. 흔히 수학적으로 벡터라고 부릅니다. 따로 dtype를 설정해줄 수 있습니다.

np.array([1,2,3,4])


np.array([1,2,3,4], dtype=int)

 

2차원 배열 (2D array)

 

가장 많이 사용되는 2차원 배열입니다. 우리가 흔히 아는 행렬(Matrix)입니다.

np.array([1,2,3],[4,5,6],[7,8,9])

 

shape 확인

 

shape 함수로 해당 배열의 shape를 확인 할 수 있습니다.

my_list = [1,2,3,4]
my_list2 = [[1,2,3],[4,5,6]]   # 2행 3열

arr1 = np.array(my_list)
arr2 = np.array(my_list2)

arr1.shape
>>> (4, )

arr2.shape
>>> (2,3)   #(행,열)

 

넘파이 배열과 리스트와의 차이점

 

파이썬에서 주로 사용하는 array인 리스트와 numpy의 array인 ndarray를 비교하면서 ndarray의 특징을 알아보겠습니다.

 

1. 데이터 타입을 출력해보면 list와 numpy.ndarray로 다른 타입을 가집니다.

my_list = [1,2,3,4]

type(my_list)
>>> list

my_ndarray = np.array([1,2,3,4])

type(my_ndarray)
>>> numpy.ndarray

 

2. 리스트와 다르게 array에서는 data 타입이 단일이어야 합니다.

 

# 리스트는 각자 다른 자료형을 함께 저장 가능
my_list = [1,0.5,'python']

# ndarray는 한가지로 통일된 자료형으로 저장
my_ndarray = np.array([1,0.5,'python'])

>>> array(['1', '0.5', 'python'], dtype='<U6')    #모든 자료형이 문자열 타입으로 바뀜

 

위에서와 같이 np.array를 만들 때 따로 dtype을 지정하지 않은 경우엔 아래와 같은 규칙을 따릅니다.

 

1) 정수(int)와 실수(float)가 섞여 있는 경우 

    - 모두 실수로 바뀜

np.array([1,0.5,3])

>>> array([1. , 0.5, 3. ])

 

2) 정수, 실수, 문자열이 섞여 있는 경우

    - 모두 문자열로 바뀜 (이전 코드 참조)

 

 

즉, 별도로 dtype을 지정하지 않은 경우 아래의 우선순위를 따릅니다. (str > float > int)

 

 

만약 dtype을 별도로 지정했다면 아래와 같은 규칙을 따릅니다.

 

1) float을 int 지정했을 때는 내림 처리

np.array([1,0.9,3], dtype=int)

>>> array([1, 0, 3])

 

2) str을 int나 float으로 지정했을 경우, 에러 발생

np.array([1,0.5,'python',3], dtype=int)

>>>
ValueError: invalid literal for int() with base 10: 'python'

 

단, str이 다른 숫자와 같은 자료형태를 갖고 있으면 에러 없이 지정 dtype으로 변경

np.array([1,'2',3], dtype=int)

>>> array([1, 2, 3])

 

오늘 준비한 내용은 여기까지입니다.


<참고자료>

 

패스트캠퍼스_직장인을 위한 파이썬 데이터분석 올인원 패키지 Online.

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

오늘은 엑셀이나 웹브라우저처럼 파이썬 전용 패키지가 없어서 조작을 할 수 없는 경우에 아주 유용한 PyAutoGUI라는 패키지에 대해서 배워보겠습니다.

 

저는 회사에서 SAP사의 ERP(Enterprise Resource Planning)를 사용하는데, 이걸 자동화 시키려고 하니깐 무료로 제공하는 API가 없어서 고민하던 중 해당 패키지를 사용하면 좋겠다는 생각이 들어서 공부해보게 되었답니다.

 

<관련 글>

 

2021.06.14 - [파이썬 패키지/사무자동화] - [Python / PyAutoGUI] 파이썬 마우스/키보드 조작 패키지_1편.마우스 조작하기

 


 

이번 시간에는 지난 시간에 이어 PyAutoGUI 패키지로 키보드 조작하는 법을 공부해 보겠습니다.

 

키보드가 작동하는 것을 확인하려면 일단 메모장을 켜주세요. 메모장이 아니더라도 입력이 가능한 프로그램이면 뭐든지 가능합니다.

저의 경우엔 그냥 VS code 코딩창을 이용했습니다.

 

 

1. 문자 입력하기

 

가장 기본적인 write 함수입니다. 문자열이나 리스트의 요소를 입력하는 함수입니다.

참고로 write 함수와 typewrite는 이름만 다르고 그 기능은 같은 함수이며, 이왕이면 좀 더 짧은 write 함수를 추천드립니다.

 

import pyautogui

pyautogui.click(500, 500)

pyautogui.write('Hello world!', interval=0.2)

pyautogui.write(['H', 'e', 'l', 'l', 'o'], interval=0.2)

 

 

2. 개별 키 입력하기

 

이러한 개별 키 입력 함수는 위에서와 같이 내용을 입력하기 보다는 키 자체의 기능을 이용할 때 많이 사용할 것 같습니다.

입력 가능한 키는 보기 좋게 표로 정리해 놓았으니 참고해주세요.

 

pyautogui.press('원하는 키')

 

<입력 가능한 키> 

 

기능
'a', 'b', 'c', 'A', 'B', 'C', '1', '2', '3', '!', '@', '#' 등등 알파벳, 숫자, 특수문자 등등
'enter' (or 'return' or '\n') ENTER
'esc' ESC
'shift', 'shiftleft', 'shiftright' SHIFT, 왼쪽/오른쪽 SHIFT
'alt', 'altleft', 'altright' ALT, 왼쪽/오른쪽 ALT
'ctrl', 'ctrlleft', 'ctrlright' CTRL, 왼쪽/오른쪽 CTRL
'tab' (or '\t') TAB
'space' SPACE
'backspace', 'delete', 'del' BACKSPACE, DELETE
'pageup', 'pagedown', 'pgdn', 'pgup' PAGE UP, PAGE DOWN
'home', 'end' HOME, END
'up', 'down', 'left', 'right' 방향키
'f1', 'f2', 'f3', and so on F1 ~ F12
'pause' PAUSE
'capslock', 'numlock', 'scrolllock' CAPS LOCK, NUM LOCK, SCROLL LOCK
'insert' INSERT
'printscreen' 화면 캡처
'winleft', 'winright' 오른쪽/왼쪽 윈도우 키 (Windows 전용)
'command' Command (macOS 전용)
'option' OPTION (macOS 전용)
hanguel', 'hangul',
한/영 전환 (pyautogui에서 한글 지원 안해서 필요한지 모르겠음)

 

그 외에도 사용가능한 키 확인 해보시려면 아래의 코드로 확인 가능합니다.

print(pyautogui.KEYBOARD_KEYS)

 

 

3. 조합 키 입력

 

키를 하나가 아니라 동시에 눌러줘야하는 경우가 있습니다. 단축키 처럼 말이죠.

이 기능을 이용하면 여러분들이 아시는 단축키를 모두 사용할 수 있으니 참 유용하겠죠?!

 

# 붙여넣기 단축키
pyautogui.hotkey("ctrl", "c")

# 같은 기능 (비추천)
pyautogui.keyDown("ctrl")
pyautogui.keyDown("c")
pyautogui.keyUp("c")
pyautogui.keyUp("ctrl")

 

 

4. 한글 입력

 

위에서 배운 write 함수로는 한글을 입력할 수가 없답니다. 그래서 pyperclip이라는 패키지를 이용해서 클립보드에 잠시 한글을 저장해뒀다가 붙여넣는 방식을 사용해야 합니다.

 

먼저 아래의 코드를 커맨드 창에 입력하셔서 pyperclip 패키지를 설치합니다. 저는 왜인지 모르지만 이미 설치되어 있네요. 아마 Anaconda 패키지에 포함되어 있는 걸까요?

pip install pyperclip

 

설치를 완료하셨다면 pyperclip을 임포트 해주시고, 아래와 같이 원하는 한글 문자열을 저장했다가 Ctrl+V 단축키로 붙여넣어 주면 끝~!

 

import pyperclip

# "코딩유치원"을 클립보드에 저장
pyperclip.copy("코딩유치원") 

# 클립보드에 있는 내용을 붙여넣기
pyautogui.hotkey("ctrl", "v")

 

 

오늘 준비한 내용은 여기까지입니다.

 

다음 시간에는 화면에서 이미지를 인식해서 원하는 아이콘을 찾는 방법을 배워보겠습니다.


<참고 자료>

 

1. Automate the Boring Stuff with Python

https://automatetheboringstuff.com/2e/chapter20/

 

<나도코딩_업무자동화 유튜브 강의>

https://www.youtube.com/watch?v=exgO1LFl9x8&t=3083s 

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

오늘은 엑셀이나 웹브라우저처럼 파이썬 전용 패키지가 없어서 조작을 할 수 없는 경우에 아주 유용한 PyAutoGUI라는 패키지에 대해서 배워보겠습니다.

 

저는 회사에서 SAP사의 ERP(Enterprise Resource Planning)를 사용하는데, 이걸 자동화 시키려고 하니깐 무료로 제공하는 API가 없어서 고민하던 중 해당 패키지를 사용하면 좋겠다는 생각이 들어서 공부해보게 되었답니다.


PyAutoGUI란?

 

https://pyautogui.readthedocs.io/en/latest/index.html

 

Welcome to PyAutoGUI’s documentation! — PyAutoGUI documentation

Welcome to PyAutoGUI’s documentation! PyAutoGUI lets your Python scripts control the mouse and keyboard to automate interactions with other applications. The API is designed to be as simple. PyAutoGUI works on Windows, macOS, and Linux, and runs on Pytho

pyautogui.readthedocs.io

 

PyAutoGUI는 마우스/키보드 자동제어를 위한 패키지입니다. 흔히 알고계시는 수강신청, 콘서트 티켓 예매 매크로 같은 것을 가능케 하는 것이라 이해하시면 되겠습니다.

 

흔히 운영체제(OS)에 관계없이 모두 사용가능한 패키지를 크로스 플랫폼이라고 부르는데, PyAutoGUI가 바로 크로스 플랫폼 패키지입니다. 즉, Window, macOS, Linux와 같은 대중적인 운영체제에 모두 적용가능하다는 말입니다.

 

 

설치 방법

 

터미널 창에 pip 또는 conda를 통해서 설치를 하시면 됩니다. Anaconda 패키지로 파이썬을 설치하신 분이라면 두가지 중 아무거나 선택하시면 되고, 순정 파이썬을 설치하셨다면 pip로만 설치 가능합니다.

 

pip install pyautogui
conda install -c conda-forge pyautogui

 

사용 방법

 

1. 모니터 크기(해상도)와 마우스 현재 위치 얻기

 

PyAutoGUI는 크게 마우스와 키보드 조작 기능으로 나눌 수 있습니다. 그리고 마우스 조작을 위해서는 좌표에 대한 이해가 필요합니다. 

 

PyAutoGUI는 모니터 화면의 가장 왼쪽 위 꼭지점을 영점(0,0)으로 하며, 픽셀 단위로 x,y좌표를 가집니다.

 

0,0       X increases -->
+---------------------------+
|                           	| Y increases
|                           	|     |
|   1920 x 1080 screen      	|     |
|                           	|     V
|                           	|
|                           	|
+---------------------------+ 1919, 1079

 

 

여러분들의 모니터 해상도와 현재 마우스 위치를 확인해보기 위해서 아래의 코드를 실행해봅시다. 

 

import pyautogui

# 현재 사용하는 모니터의 해상도 출력
print(pyautogui.size())

# 현재 마우스 커서의 위치 출력
print(pyautogui.position())


<결과>

>>> Size(width=1680, height=1050)
>>> Point(x=1675, y=18)

 

참고로, 저는 트리플 모니터를 사용하는데, 사이즈는 항상 1680, 1050으로 나오며, 마우스 커서의 위치는 가장 기본 모니터인 맥북 화면의 좌측상단을 기준으로 마이너스 값이 나오기도 하고, x가 3000이 넘는 값이 나오기도 하네요.

가장 아래 모니터가 기본 모니터

 

Tip. 마우스 현재 위치 & RGB 색상 실시간으로 얻기

 

이 기능을 알기 전엔 제가 의도하는 위치의 x, y 값을 얻기위해서 위에서 배운 print(pyautogui.position( ))을 무한 반복했었습니다. 하지만 이 코드 한 줄이면 정말 편리하게 원하는 좌표를 얻을 수 있답니다.

 

pyautogui.mouseInfo()

 

참고로, windows OS 에서는 RGB 값까지 출력되지만, mac OS에서는 RGB값을 못받아오네요.

 

Windows에서 실행 시

 

macOS에서 실행 시

 

2. 마우스 이동

 

마우스를 이동하는 방법은 두 가지가 있습니다. 위에서 언급한 영점을 기준으로 좌표를 찍어 이동하는 절대 이동과 현재 커서의 위치를 기준으로 지정한 만큼 이동하는 상대 이동입니다. 코드를 보시면 바로 이해 가실거예요!

# 절대 좌표로 이동

pyautogui.moveTo(100, 100)                 # 100, 100 위치로 즉시 이동
pyautogui.moveTo(200, 200, duration=0.5)   # 200, 200 위치로 0.5초간 이동


# 상대 좌표로 이동

pyautogui.move(100, 100, duration=1)    # 현재 위치 기준으로 100, 100만큼 1초간 이동

 

3. 마우스 클릭

마우스를 이동하는 법을 배웠으면 클릭하는 법도 배워야겠죠?

 

가장 많이 사용하실 함수는 click( ) 함수입니다. 아래와 같이 많은 옵션이 있으니 하나하나 알아보겠습니다.

pyautogui.click(x=None, y=None, clicks=1, interval=0, button=PRIMARY, 
                duration=0, tween=linear, logScreenshot=None, _pause=True)

 

단순히 해당 위치에서 클릭을 수행합니다.

pyautogui.click()

 

<여기서 잠깐>

 

macOS의 경우엔 아래와 같이 권한 허용을 해주셔야지, 마우스 클릭 제어를 할 수 있습니다.

 

 

해당 위치로 가서 클릭을 수행합니다.

pyautogui.click(200, 200)

 

해당 위치에서 총 2번 클릭하며, 클릭간의 시간은 0.2초입니다. 마우스는 오른쪽 버튼을 클릭합니다.

참고로, button 옵션을 설정안하면 기본적으로 왼쪽 버튼으로 클릭하며, 'middle'과 'right', 'left'를 옵션으로 넣어줄 수 있습니다.

pyautogui.click(clicks=2, interval=0.2, button='right')

 

그 외의 옵션은 거의 사용하지 않으므로 생략하도록 하겠습니다.

 

 

4. 마우스 드래그

 

마우스를 드래그 하는 경우도 종종 있습니다. 사용법은 click 함수와 거의 같습니다.

# 1초간 400, 400 위치로 이동 후, 절대 좌표 500, 500으로 2초간 드래그
pyautogui.click(400, 400, duration=1)
pyautogui.dragTo(500, 500, 2, button='left')

# 현재 마우스 위치 기준으로 300, 300 범위만큼 왼쪽 버튼으로 드래그
pyautogui.dragRel(300, 300, 2, button='left')

 

5.  스크롤 내리기/올리기

 

우리는 마우스 휠을 조작해서 페이지의 스크롤을 내리고 올립니다. 이것도 아래의 코드로 가능합니다.

 

# 양수이면 위, 음수이면 아래

pyautogui.scroll(-100) 

pyautogui.scroll(100) 

 

오늘은 PyAutoGUI가 무엇인지와 마우스 사용법에 대해서 공부해봤습니다.

 

다음시간에는 키보드 사용법을 공부해 보겠습니다.


<참고 자료>

 

<나도코딩_업무자동화 유튜브 강의>

https://www.youtube.com/watch?v=exgO1LFl9x8&t=3083s 

 

<Codetorial PyAutoGUI Tutorial>

https://codetorial.net/pyautogui/mouse_control.html

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

오늘은 투자에 도움이 될 수 있는 파이썬 패키지를 소개드리려 합니다.

 

아마 투자를 조금 하신다는 분들은 DART(전자공시시스템)을 아실텐데요. 오늘 소개드릴 dart-fss 패키지는 DART에서 제공하는 API(Application Programming Interface)를 저희같은 초보자도 쉽게 다룰 수 있도록 해줍니다.

 

한마디로 파이썬으로 공시정보를 내맘대로 조회하고 가공해서 유의미한 투자 정보를 얻어낼 수 있다는 것입니다.

만약 투자에 관심이 있으신분들은 이번 기회에 배우셔서 투자에 꼭 적용해보시길 추천드립니다.


오늘의 주인공인 dart-fss 패키지에 대해 알아보기 전에 잠시 DART와 DART API에 대해 알아보도록 하겠습니다.

 

DART란?

 

출처. DART 홈페이지

 

DART(Data Analysis, Retrieval and Transfer System)은 데이터 분석, 검색 및 전송 시스템이라는 뜻을 가진, 대한민국 금융감독원에서 운영하는 기업정보 전자공시시스템입니다.

 

코스피, 코스닥 시장에 상장된 주식회사부터 비상장 주식회사까지 다양한 회사들이 회사의 경영상태에 대한 공시를 하는 사이트입니다. 이 시스템으로 인해 투자자 누구나 기업에 관한 정보를 손쉽게 얻을 수 있습니다.

 

 

DART API란?

 

감사하게도 DART에서 다른 사람들이 프로그램을 만들 때 사용하라고 API를 만들어 주었습니다. 여기서 API란 Application Programming Interface의 약자로 프로그램들이 서로 상호작용하는 것을 도와주는 매개체라고 이해하시면 됩니다.

 

API에 대해 조금 더 자세한 내용이 궁금하신 분들은 아래의 링크에 아주 쉽게 설명되어 있으니 참고하세요.

 

 

API란? 비개발자가 알기 쉽게 설명해드립니다! - Wishket

여러분은 API가 무엇인지 알고 계신가요? 자주 듣게 되지만 그 개념이 무엇인지 정확하게 알기란 쉽지 않은데요. 이번 시간 위시켓이  API란 무엇인지 알기 쉽게 설명해드리고자 합니다. 위시켓

blog.wishket.com

 

DART API 인증키 신청

 

DART API를 사용하기 위해서는 API 인증키를 신청해주셔야 하는데요.

 

우선 DART 회원가입을 해주셔야 합니다.

 

https://opendart.fss.or.kr/intro/main.do

 

회원 가입이 완료되신 분들은 DART 홈페이지에서 우측 상단의 '오픈API'를 클릭하시거나 위의 링크로 접속해주신 후, 로그인 하지 않으신 상태로 '인증키 신청'을 해주시면 됩니다. 크게 어렵지 않으니 아래의 gif를 참고하셔서 만들어주세요.

 

신청이 완료되셨으면 로그인 후, 인증키 관리 탭에 들어가셔서 승인이 되셨는지 확인하신 후에 좌측의 오픈API 이용현황을 클릭해주세요.

그러면 API Key가 아주 복잡한 숫자와 영어의 조합으로 나오실 거예요. 코딩하실 때 필요하니 한 곳에 Ctrl+C, Ctrl+V 해놓아주세요.

 

 

DART-FSS란?

 

대한민국 금융감독원에서 운영하는 다트 사이트 크롤링 및 재무제표 추출을 위한 라이브러리라고 공식 문서에 쓰여 있습니다.

저의 개념으로는 패키지가 맞는 말인 것 같은데 이 문서를 보니 조금 헷갈리네요.

 

https://dart-fss.readthedocs.io/en/latest/index.html

 

DART-FSS — dart-fss documentation v0.3.10 documentation

© Copyright 2021, Sungwoo Jo Revision 2a7bb3e6.

dart-fss.readthedocs.io

 

<주의 사항>

Open DART 및 DART 홈페이지의 경우 분당 100회 이상 요청시 서비스가 제한될 수 있음

 

 

 

DART-FSS 설치 방법

 

터미널(cmd) 창에서 아래와 같이 입력해주시면 됩니다. 혹시나 오타가 날 수 있으니 그냥 복사 붙여넣기해서 엔터 눌러주세요.

pip install dart-fss

 

 

DART-FSS 맛보기

 

위에서 알려드린 dart-fss 공식 문서에 들어가보시면 Quick Starts라는 이름으로 아래의 코드를 써두었습니다.

코드에 대한 것은 다음 시간에 차차 알아보기로 하고 일단 아래의 코드를 그대로 복사 붙여넣기 해서 코드를 실행해봅시다.

 

실행하실 때는 api_key = '아까 발급받은 API Key'로 바꿔주세요! 그리고 중요한 건 아닌데, 설치할 때 dart-fss이고 import 할 때는 dart_fss라는 신기한 사실! 그냥 그렇다구요ㅎㅎ..

 

혹시나 저처럼 dart_fss.py로 파일 이름을 만들었다가는 아래와 같은 에러가 뜨면서 패키지가 제대로 작동하지 않으니 주의하세요!

 

AttributeError: partially initialized module 'dart_fss' has no attribute 'set_api_key' (most likely due to a circular import)

 

import dart_fss as dart

# Open DART API KEY 설정
api_key='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
dart.set_api_key(api_key=api_key)

# DART 에 공시된 회사 리스트 불러오기
corp_list = dart.get_corp_list()

# 삼성전자 검색
samsung = corp_list.find_by_corp_name('삼성전자', exactly=True)[0]

# 2012년부터 연간 연결재무제표 불러오기
fs = samsung.extract_fs(bgn_de='20120101')

# 재무제표 검색 결과를 엑셀파일로 저장 ( 기본저장위치: 실행폴더/fsdata )
fs.save()

 

위의 코드를 실행하시면 시간이 꽤 걸려서 fsdata라는 폴더 안에 엑셀 파일이 하나 만들어집니다. 총 8개의 시트가 있는데 참고로 말씀드리면, 각각 bs’ 재무상태표, ‘is’ 손익계산서, ‘cis’ 포괄손익계산서, ‘cf’ 현금흐름표를 뜻하며 시트 이름에 Data가 들어가는 것만 보시면 됩니다.

 

 


 

오늘 준비한 내용은 여기까지고, 다음 시간부터 자주 사용할만한 함수들에 대해서 공부해보겠습니다.

 

감사합니다.

반응형

+ Recent posts