dartlab / PROJECT_README.md
eddmpython's picture
add project README as PROJECT_README.md
d027f25 verified

DartLab

DartLab

์ข…๋ชฉ์ฝ”๋“œ ํ•˜๋‚˜. ๊ธฐ์—…์˜ ์ „์ฒด ์ด์•ผ๊ธฐ.

DART ์ „์ž๊ณต์‹œ์™€ EDGAR ๊ณต์‹œ, ํ•œ ์ค„์˜ Python์œผ๋กœ ๊ตฌ์กฐํ™”ํ•˜๊ณ  ๋น„๊ตํ•œ๋‹ค.

PyPI Python License CI Coverage Docs Blog

๋ฌธ์„œ ยท ๋ธ”๋กœ๊ทธ ยท ๋ผ์ด๋ธŒ ๋ฐ๋ชจ ยท Colab์—์„œ ์—ด๊ธฐ ยท Molab์—์„œ ์—ด๊ธฐ ยท English ยท ํ›„์›

HuggingFace Data

DartLab Demo

ํšŒ์‚ฌ์—๋Š” ์ด์•ผ๊ธฐ๊ฐ€ ์žˆ๋‹ค

์ˆซ์ž๋ฅผ ๋‚˜์—ดํ•˜๋ฉด ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ๋˜์ง€๋งŒ, ์ˆซ์ž์˜ ์ธ๊ณผ๋ฅผ ์—ฐ๊ฒฐํ•˜๋ฉด ์Šคํ† ๋ฆฌ๊ฐ€ ๋œ๋‹ค. DartLab์€ ๊ทธ ์Šคํ† ๋ฆฌ๋ฅผ ์ฝ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.

์‚ฌ๋žŒ์ด ์ง์ ‘ ์ฝ๋Š”๋‹ค โ€” ์ข…๋ชฉ์ฝ”๋“œ ํ•˜๋‚˜๋กœ ์žฌ๋ฌด์ œํ‘œ, ๊ณต์‹œ, ๋น„์œจ์„ ๊บผ๋‚ด๊ณ , 6๋ง‰ ์ธ๊ณผ ๊ตฌ์กฐ๋กœ "์™œ ์ด ํšŒ์‚ฌ์˜ ๋งˆ์ง„์ด ์ด ์ˆ˜์ค€์ธ๊ฐ€"๋ฅผ ์ถ”์ ํ•œ๋‹ค. ์ฝ”๋“œ ํ•œ ์ค„์ด๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜์˜ค๊ณ , ๊ทธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ด์•ผ๊ธฐ๋ฅผ ๋งŒ๋“ ๋‹ค.

AI๊ฐ€ ์ฝ์–ด์ค€๋‹ค โ€” ๊ฐ™์€ ๋„๊ตฌ๋ฅผ AI๊ฐ€ ์กฐํ•ฉํ•ด์„œ ์งˆ๋ฌธ์— ๋งž๋Š” ๋ถ„์„ ํ๋ฆ„์„ ์Šค์Šค๋กœ ์„ค๊ณ„ํ•˜๊ณ , ์ฝ”๋“œ์™€ ๊ฒฐ๊ณผ๋ฅผ ํˆฌ๋ช…ํ•˜๊ฒŒ ๋ณด์—ฌ์ค€๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋‹ต๋งŒ ์–ป๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๋ถ„์„ ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šด๋‹ค.

๋‘ ๊ฒฝ๋กœ ๋ชจ๋‘ ๊ฐ™์€ ์—”์ง„ ์œ„์—์„œ ๋™์ž‘ํ•œ๋‹ค.

๋ฌธ์ œ

์‚ผ์„ฑ์ „์ž์˜ "๋งค์ถœ์•ก"์„ 5๋…„๊ฐ„ ๋น„๊ตํ•˜๋ ค๊ณ  ํ•œ ์  ์žˆ๋Š”๊ฐ€?

DART์—์„œ ์‚ฌ์—…๋ณด๊ณ ์„œ๋ฅผ ์—ด๋ฉด ๊ฐ™์€ ์ˆซ์ž๊ฐ€ ifrs-full_Revenue, dart_Revenue, ๋งค์ถœ์•ก, ์˜์—…์ˆ˜์ต ๋„ค ๊ฐ€์ง€ ์ด๋ฆ„์œผ๋กœ ๋‚˜์˜จ๋‹ค. ์ž‘๋…„๊ณผ ์˜ฌํ•ด์˜ ๋ชฉ์ฐจ ๊ตฌ์กฐ๊ฐ€ ๋‹ค๋ฅด๋‹ค. SKํ•˜์ด๋‹‰์Šค์™€ ๋น„๊ตํ•˜๋ ค๋ฉด ๊ฐ™์€ ์ž‘์—…์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ํ•ด์•ผ ํ•œ๋‹ค.

์ง„์งœ ๋ฌธ์ œ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ๊ฒŒ ์•„๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ์ด๋ฆ„์œผ๋กœ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

DartLab์€ ํ•˜๋‚˜์˜ ์ „์ œ ์œ„์— ์„œ ์žˆ๋‹ค: ๋ชจ๋“  ๊ธฐ๊ฐ„์€ ๋น„๊ต ๊ฐ€๋Šฅํ•ด์•ผ ํ•˜๊ณ , ๋ชจ๋“  ํšŒ์‚ฌ๋Š” ๋น„๊ต ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค. ๊ณต์‹œ ์„น์…˜์„ ํ† ํ”ฝ-๊ธฐ๊ฐ„ ๊ทธ๋ฆฌ๋“œ๋กœ ์ •๊ทœํ™”ํ•˜๊ณ (95% ๋งคํ•‘์œจ), XBRL ๊ณ„์ •์„ ํ‘œ์ค€ ์ด๋ฆ„์œผ๋กœ ํ†ต์ผํ•œ๋‹ค(97% ๋งคํ•‘์œจ) โ€” ์–‘์‹์ด ์•„๋‹ˆ๋ผ ๊ธฐ์—…์„ ๋น„๊ตํ•œ๋‹ค.

๋น ๋ฅธ ์‹œ์ž‘

uv add dartlab
import dartlab

c = dartlab.Company("005930")       # ์‚ผ์„ฑ์ „์ž

c.sections                          # ๋ชจ๋“  topic, ๋ชจ๋“  ๊ธฐ๊ฐ„, ๋‚˜๋ž€ํžˆ
# shape: (41, 12) โ€” 41๊ฐœ ํ† ํ”ฝ ร— 12๊ฐœ ๊ธฐ๊ฐ„
#                     2025Q4  2024Q4  2024Q3  2023Q4  ...
# companyOverview       v       v       v       v
# businessOverview      v       v       v       v
# riskManagement        v       v       v       v

ํ…์ŠคํŠธ์™€ ์ˆซ์ž์˜ ์‹œ๊ณ„์—ด ์ˆ˜ํ‰ํ™” โ€” ์ „ ๊ธฐ๊ฐ„ ๋น„๊ต ๊ฐ€๋Šฅ์„ฑ์˜ ํ•ต์‹ฌ

c.sections ์ถœ๋ ฅ ์˜ˆ์‹œ โ€” ์‚ผ์„ฑ์ „์ž 41๊ฐœ ํ† ํ”ฝ ร— 12๊ฐœ ๊ธฐ๊ฐ„

c.show("IS")                        # ์†์ต๊ณ„์‚ฐ์„œ โ€” ๋ถ„๊ธฐ๊ฐ€ ๊ธฐ๋ณธ

๋ถ„๊ธฐ๋ณ„ ์žฌ๋ฌด์ œํ‘œ๊ฐ€ ๊ธฐ๋ณธ โ€” snakeId + ํ•œ๊ธ€ ํ•ญ๋ชฉ๋ช… ๋™์‹œ ์ œ๊ณต

c.show('IS') โ€” ์‚ผ์„ฑ์ „์ž ๋ถ„๊ธฐ ์†์ต๊ณ„์‚ฐ์„œ
c.show("IS", freq="Y")             # freq="Y"๋กœ ์—ฐ๊ฐ„ ํ•ฉ์‚ฐ

๊ฐ™์€ ๋ฐ์ดํ„ฐ, ์—ฐ๊ฐ„์œผ๋กœ โ€” 4๋ถ„๊ธฐ ํ•ฉ์‚ฐ ์ž๋™ ์ฒ˜๋ฆฌ

c.show('IS', freq='Y') โ€” ์‚ผ์„ฑ์ „์ž ์—ฐ๊ฐ„ ์†์ต๊ณ„์‚ฐ์„œ
c.show("businessOverview")          # ์ด ํšŒ์‚ฌ๊ฐ€ ์‹ค์ œ๋กœ ๋ญ˜ ํ•˜๋Š”์ง€
c.diff("businessOverview")          # ์ž‘๋…„ ๋Œ€๋น„ ๋ญ๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋Š”์ง€
c.show("ratios")                    # ์žฌ๋ฌด๋น„์œจ, ์ด๋ฏธ ๊ณ„์‚ฐ๋จ

c.filings()                         # ๋ชจ๋“  ๋ณด๊ณ ์„œ โ€” DART ๋ทฐ์–ด๋กœ ๋ฐ”๋กœ ์—ฐ๊ฒฐ

์‚ฌ์—…๋ณด๊ณ ์„œ๋ถ€ํ„ฐ ๋ถ„๊ธฐ๋ณด๊ณ ์„œ๊นŒ์ง€, dartUrl๋กœ ์›๋ฌธ ์ฆ‰์‹œ ํ™•์ธ

c.filings() โ€” ์‚ผ์„ฑ์ „์ž ๋ณด๊ณ ์„œ ๋ชฉ๋ก + DART ๋ทฐ์–ด ๋งํฌ
# ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค, ๋‹ค๋ฅธ ๋‚˜๋ผ
us = dartlab.Company("AAPL")
us.show("business")
us.show("ratios")

# ์ž์—ฐ์–ด๋กœ ์งˆ๋ฌธ
dartlab.ask("์‚ผ์„ฑ์ „์ž ์žฌ๋ฌด๊ฑด์ „์„ฑ ๋ถ„์„ํ•ด์ค˜")
# โ†’ AI๊ฐ€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉฐ ๋ถ„์„: "์˜์—…์ด์ต๋ฅ ์ด 8.6%โ†’21.4%๋กœ ๋ฐ˜๋“ฑ..."

API ํ‚ค ๋ถˆํ•„์š”. HuggingFace์—์„œ ์ž๋™ ๋‹ค์šด๋กœ๋“œ, ๋กœ์ปฌ ์บ์‹œ๋กœ ์ฆ‰์‹œ ๋กœ๋“œ.

DartLab์€ ๋ฌด์—‡์ธ๊ฐ€

ํ•˜๋‚˜์˜ ํ˜ธ์ถœ ๊ณ„์•ฝ. dartlab.์—”์ง„() ์œผ๋กœ ๊ฐ€์ด๋“œ ๋ณด๊ณ  dartlab.์—”์ง„("์ถ•") ์œผ๋กœ ์‹คํ–‰.

์ฒ˜์Œ์ด๋ผ๋ฉด? Company โ†’ Review โ†’ Ask ์ˆœ์„œ๋กœ. ์ข…๋ชฉ์ฝ”๋“œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ณ , ๋ณด๊ณ ์„œ๋ฅผ ๋งŒ๋“ค๊ณ , AI์—๊ฒŒ ๋ฌผ์–ด๋ณธ๋‹ค.

๋ ˆ์ด์–ด ์—”์ง„ ํ•˜๋Š” ์ผ ์ง„์ž…์  ๋…ธํŠธ๋ถ
Data Data HuggingFace ์‚ฌ์ „ ๊ตฌ์ถ•, ์ž๋™ ๋‹ค์šด๋กœ๋“œ Company("005930") โ€”
L0/L1 Company ๊ณต์‹œ + ์žฌ๋ฌด์ œํ‘œ + ์ •ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์ข…๋ชฉ์ฝ”๋“œ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉ c.show(), c.select() Colab marimo
L1 Gather ์™ธ๋ถ€ ์‹œ์žฅ ๋ฐ์ดํ„ฐ (์ฃผ๊ฐ€/์ˆ˜๊ธ‰/๋งคํฌ๋กœ/๋‰ด์Šค) dartlab.gather() Colab marimo
L1 Scan ์ „ ์ข…๋ชฉ ํšก๋‹จ ๋น„๊ต (๊ฑฐ๋ฒ„๋„Œ์Šค/๋น„์œจ/ํ˜„๊ธˆํ๋ฆ„ ๋“ฑ) dartlab.scan() Colab marimo
L1 Quant ๊ธฐ์ˆ ์ ยท์ •๋Ÿ‰ ๋ถ„์„ (๋ชจ๋ฉ˜ํ…€/ํŒฉํ„ฐ/ํŒจํ„ด) c.quant() Colab marimo
L2 Analysis ์ˆ˜์ต์„ฑ/์•ˆ์ •์„ฑ/ํ˜„๊ธˆํ๋ฆ„ ๋“ฑ ์žฌ๋ฌด ์ธ๊ณผ ๋ถ„์„ + ๊ฐ€์น˜ํ‰๊ฐ€ + ์ „๋ง c.analysis("financial", "์ˆ˜์ต์„ฑ") Colab marimo
L2 Macro ์‹œ์žฅ ๋ ˆ๋ฒจ ๋งคํฌ๋กœ (์‚ฌ์ดํด/๊ธˆ๋ฆฌ/์œ ๋™์„ฑ/์‹ฌ๋ฆฌ/์ž์‚ฐ) dartlab.macro("์‚ฌ์ดํด") Colab marimo
L2 Credit ๋…๋ฆฝ ์‹ ์šฉํ‰๊ฐ€ (dCR ๋“ฑ๊ธ‰, ๋ถ€๋„ํ™•๋ฅ , ๊ฑด์ „๋„) c.credit("๋“ฑ๊ธ‰") Colab marimo
L2 Review ๋ถ„์„ ์—”์ง„์„ ์กฐํ•ฉํ•œ ๋ณด๊ณ ์„œ (rich/html/markdown/json) c.review("์ˆ˜์ต์„ฑ") Colab marimo
L3 AI ์ ๊ทน์  ๋ถ„์„๊ฐ€ โ€” ์ฝ”๋“œ ์‹คํ–‰ + ํ•ด์„ dartlab.ask() Colab marimo
L4 Channel ์™ธ๋ถ€ ๊ณต์œ  โ€” dartlab channel ํ•œ ์ค„๋กœ ํฐ์—์„œ PC dartlab ์‚ฌ์šฉ dartlab channel โ€”
core Search ๊ณต์‹œ ์‹œ๋งจํ‹ฑ ๊ฒ€์ƒ‰ (alpha) dartlab.search() Colab marimo
facade Listing ์ข…๋ชฉ/๊ณต์‹œ/topic ์นดํƒˆ๋กœ๊ทธ API dartlab.listing() Colab marimo
viz Viz ์ฐจํŠธ/๋‹ค์ด์–ด๊ทธ๋žจ (emit_chart) emit_chart({...}) โ€”
guide Guide ์•ˆ๋‚ด ๋ฐ์Šคํฌ โ€” readiness/์—๋Ÿฌ/๊ต์œก dartlab.guide.checkReady() โ€”

๋ชจ๋“  ๋…ธํŠธ๋ถ: marimo ยท colab ยท Open in marimo

Company

์„ค๊ณ„: ops/company.md

์„ธ ๊ฐ€์ง€ ๋ฐ์ดํ„ฐ ์†Œ์Šค โ€” docs(์ „๋ฌธ ๊ณต์‹œ), finance(XBRL ์žฌ๋ฌด์ œํ‘œ), report(DART API ์ •ํ˜• ๋ฐ์ดํ„ฐ) โ€” ๋ฅผ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ํ†ตํ•ฉ. HuggingFace์—์„œ ์ž๋™ ๋‹ค์šด๋กœ๋“œ, ์„ค์ • ๋ถˆํ•„์š”.

c = dartlab.Company("005930")

c.index                         # ๋ญ๊ฐ€ ์žˆ๋Š”์ง€ -- topic ๋ชฉ๋ก + ๊ฐ€์šฉ ๊ธฐ๊ฐ„
c.show("BS")                    # ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋ ค๋ฉด -- topic๋ณ„ DataFrame
c.select("IS", ["๋งค์ถœ์•ก"])       # ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์œผ๋ ค๋ฉด -- finance๋“  docs๋“  ๊ฐ™์€ ํŒจํ„ด
c.trace("BS")                   # ์–ด๋””์„œ ์™”๋Š”์ง€ -- source provenance
c.diff()                        # ๋ญ๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ -- ๊ธฐ๊ฐ„ ๊ฐ„ ํ…์ŠคํŠธ ๋ณ€ํ™”

์ฃผ์„(Notes) โ€” BS/IS ์ด์•ก ์ด๋ฉด์˜ ํ•ญ๋ชฉ๋ณ„ ๋ถ„ํ•ด. c.show("topic")์œผ๋กœ ์žฌ๋ฌด์ œํ‘œ์™€ ๊ฐ™์€ ํŒจํ„ด์œผ๋กœ ์ ‘๊ทผ. DART(K-IFRS HTML ํŒŒ์‹ฑ)์™€ EDGAR(US-GAAP XBRL ํƒœ๊ทธ) ๋™์ผ ์ธํ„ฐํŽ˜์ด์Šค.

c.show(...) ๋‚ด์šฉ DART EDGAR
"inventory" ์›์žฌ๋ฃŒ/์žฌ๊ณตํ’ˆ/์ œํ’ˆ ๋ถ„ํ•ด โœ… โœ…
"borrowings" ๋‹จ๊ธฐ/์žฅ๊ธฐ ์ฐจ์ž…๊ธˆ ๋ถ„ํ•ด โœ… โœ…
"tangibleAsset" ์œ ํ˜•์ž์‚ฐ ์ทจ๋“์›๊ฐ€/๊ฐ๊ฐ€์ƒ๊ฐ/์žฅ๋ถ€๊ฐ€ โœ… โœ…
"intangibleAsset" ์˜์—…๊ถŒ/๊ฐœ๋ฐœ๋น„ ๋“ฑ โœ… โœ…
"receivables" ๋งค์ถœ์ฑ„๊ถŒ + ๋Œ€์†์ถฉ๋‹น๊ธˆ โœ… โœ…
"provisions" ๋ณด์ฆ/์†Œ์†ก/๊ตฌ์กฐ์กฐ์ • ์ถฉ๋‹น๋ถ€์ฑ„ โœ… โœ…
"eps" ๊ธฐ๋ณธ/ํฌ์„ ์ฃผ๋‹น์ด์ต โœ… โœ…
"segments" ๋ถ€๋ฌธ๋ณ„ ๋งค์ถœ/์ด์ต โœ… โœ…
"costByNature" ์›์žฌ๋ฃŒ/๊ธ‰์—ฌ/๊ฐ๊ฐ€์ƒ๊ฐ ์„ฑ๊ฒฉ๋ณ„ ๋น„์šฉ โœ… โœ…
"lease" ์‚ฌ์šฉ๊ถŒ์ž์‚ฐ/๋ฆฌ์Šค๋ถ€์ฑ„ โœ… โœ…
"affiliates" ๊ด€๊ณ„๊ธฐ์—… ์ง€๋ถ„๋ฒ• ํˆฌ์ž โœ… โœ…
"investmentProperty" ํˆฌ์ž๋ถ€๋™์‚ฐ ๊ณต์ •๊ฐ€์น˜/์žฅ๋ถ€๊ฐ€ โœ… โœ…

marimo Colab

Scan โ€” ์ „ ์ข…๋ชฉ ํšก๋‹จ ๋น„๊ต

์„ค๊ณ„: ops/scan.md

์ „ ์ข…๋ชฉ ๋Œ€์ƒ ํšก๋‹จ ๋ถ„์„. ๊ฑฐ๋ฒ„๋„Œ์Šค, ์ธ๋ ฅ, ์ฃผ์ฃผํ™˜์›, ๋ถ€์ฑ„, ํ˜„๊ธˆํ๋ฆ„, ๊ฐ์‚ฌ, ๋‚ด๋ถ€์ž, ์ด์ต์˜ ์งˆ, ์œ ๋™์„ฑ, ๋„คํŠธ์›Œํฌ, ๊ณ„์ •/๋น„์œจ ๋น„๊ต ๋“ฑ.

dartlab.scan("governance")            # ์ „์ข…๋ชฉ ์ง€๋ฐฐ๊ตฌ์กฐ
dartlab.scan("ratio", "roe")          # ์ „์ข…๋ชฉ ROE
dartlab.scan("account", "๋งค์ถœ์•ก")      # ์ „์ข…๋ชฉ ๋งค์ถœ์•ก ์‹œ๊ณ„์—ด

2,500+ ์ข…๋ชฉ์˜ ๋งค์ถœ์•ก์„ ํ•œ ๋ฒˆ์— โ€” ๋ถ„๊ธฐ๋ณ„ ์‹œ๊ณ„์—ด๋กœ ์ฆ‰์‹œ ๋น„๊ต

dartlab.scan('account', '๋งค์ถœ์•ก') โ€” ์ „์ข…๋ชฉ ๋งค์ถœ์•ก ํšก๋‹จ ๋น„๊ต

Gather โ€” ์™ธ๋ถ€ ์‹œ์žฅ ๋ฐ์ดํ„ฐ

์„ค๊ณ„: ops/gather.md

์ฃผ๊ฐ€, ์ˆ˜๊ธ‰, ๊ฑฐ์‹œ์ง€ํ‘œ, ๋‰ด์Šค โ€” Polars DataFrame์œผ๋กœ.

dartlab.gather("price", "005930")             # KR OHLCV
dartlab.gather("price", "AAPL", market="US")  # US ์ฃผ๊ฐ€
dartlab.gather("macro", "FEDFUNDS")           # ์ž๋™ US ๊ฐ์ง€
dartlab.gather("news", "์‚ผ์„ฑ์ „์ž")             # Google News RSS

Analysis โ€” ์žฌ๋ฌด ์ธ๊ณผ ๋ถ„์„

์„ค๊ณ„: ops/analysis.md

์ˆ˜์ต๊ตฌ์กฐ โ†’ ์ˆ˜์ต์„ฑ โ†’ ์„ฑ์žฅ์„ฑ โ†’ ์•ˆ์ •์„ฑ โ†’ ํ˜„๊ธˆํ๋ฆ„ โ†’ ์ž๋ณธ๋ฐฐ๋ถ„ โ†’ ๊ฐ€์น˜ํ‰๊ฐ€ โ†’ ์ „๋ง. ์›๋ณธ ์žฌ๋ฌด์ œํ‘œ๋ฅผ ์ธ๊ณผ ์„œ์‚ฌ๋กœ ๊ฐ€๊ณตํ•œ๋‹ค.

c.analysis("financial", "์ˆ˜์ต์„ฑ")       # ์ˆ˜์ต์„ฑ ๋ถ„์„
c.analysis("์ˆ˜์ต์„ฑ")                     # ๋‹จ์ถ•ํ˜• (financial ์ž๋™)

print(c.credit())                            # ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ถ• ๊ฐ€์ด๋“œ DataFrame (self-discovery)
c.credit("๋“ฑ๊ธ‰")                             # dCR-AA, ๊ฑด์ „๋„ 93/100
c.credit("๋“ฑ๊ธ‰", detail=True)                # ๋“ฑ๊ธ‰ + ์„œ์‚ฌ + ์ง€ํ‘œ ์‹œ๊ณ„์—ด

Credit โ€” ๋…๋ฆฝ ์‹ ์šฉ๋ถ„์„

์„ค๊ณ„: ops/credit.md | ๋ณด๊ณ ์„œ: dartlab.pages.dev/blog/credit-reports

3-Track ๋ชจ๋ธ(์ผ๋ฐ˜/๊ธˆ์œต/์ง€์ฃผ) + Notch Adjustment + CHS ์‹œ์žฅ ๋ณด์ • + ๋ณ„๋„์žฌ๋ฌด ๋ธ”๋ Œ๋”ฉ.

79๊ฐœ์‚ฌ ๊ฒ€์ฆ: ๋Œ€๊ธฐ์—… 87% (26/30), ์ค‘๋Œ€ํ˜• 82% (41/50), ์ „์ฒด 70% (55/79, v5.0 ๊ณผ๋Œ€ํ‰๊ฐ€ ์ˆ˜์ • ํ›„ ์žฌ์ธก์ • ์˜ˆ์ •). ์‚ผ์„ฑ์ „์ž AA+ ์ •ํ™• ์ผ์น˜. ๊ฒ€์ฆ ๋ฐฉ๋ฒ•๋ก ์€ methodology ์ฐธ์กฐ.

print(c.credit())            # self-discovery โ€” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ถ• + ์ข…ํ•ฉ ๋“ฑ๊ธ‰

cr = c.credit("๋“ฑ๊ธ‰")        # ์ข…ํ•ฉ ๋“ฑ๊ธ‰
print(cr["grade"])          # dCR-AA+
print(cr["healthScore"])    # 96 (0-100, ๋†’์„์ˆ˜๋ก ๊ฑด์ „)
print(cr["pdEstimate"])     # 0.01% ๋ถ€๋„ํ™•๋ฅ 

cr = c.credit("๋“ฑ๊ธ‰", detail=True)  # ๋“ฑ๊ธ‰ + ์„œ์‚ฌ + ์ง€ํ‘œ + ๊ดด๋ฆฌ ์„ค๋ช…
print(cr["divergenceExplanation"])  # ์‹ ํ‰์‚ฌ์™€ ์™œ ๋‹ค๋ฅธ์ง€

์‹ ์šฉ๋ถ„์„ ๋ณด๊ณ ์„œ ๋ฐœ๊ฐ„ (credit ์„œ์‚ฌ + ์‹ ํ‰์‚ฌ ๋Œ€์กฐ๊ฐ€ review 5๋ง‰์— ์ž๋™ ํ†ตํ•ฉ):

from dartlab.review.publisher import publishReport
publishReport("005930")               # 6๋ง‰ ๋ณด๊ณ ์„œ (credit narrative + audit ํฌํ•จ)

Macro โ€” ์ข…๋ชฉ์ฝ”๋“œ ์—†์ด ๊ฒฝ์ œ๋ฅผ ์ฝ๋‹ค

์„ค๊ณ„: ops/macro.md

Company ์—†์ด ๊ฒฝ์ œ ํ™˜๊ฒฝ์„ ๋ถ„์„ํ•œ๋‹ค. import dartlab ํ•˜๋‚˜๋กœ.

dartlab.macro("์‚ฌ์ดํด")          # ๊ฒฝ๊ธฐ 4๊ตญ๋ฉด ํŒ๋ณ„
dartlab.macro("๊ธˆ๋ฆฌ")            # ๊ธˆ๋ฆฌ + Nelson-Siegel ์ˆ˜์ต๋ฅ ๊ณก์„ 
dartlab.macro("์˜ˆ์ธก")            # LEI + ์นจ์ฒดํ™•๋ฅ  + Hamilton RS + GDP Nowcast
dartlab.macro("์ข…ํ•ฉ")            # ๋งคํฌ๋กœ ์ข…ํ•ฉ + ํˆฌ์ž์ „๋žต + ํฌํŠธํด๋ฆฌ์˜ค ๋งคํ•‘

์‹œ์žฅ ์‚ฌ์ดํดยท๊ธˆ๋ฆฌยท์œ ๋™์„ฑยท์‹ฌ๋ฆฌยท์ž์‚ฐ ์‹ ํ˜ธ์™€ ๊ธ€๋กœ๋ฒŒ ๊ฑฐ์‹œ ๋ถ„์„ ๋ฐฉ๋ฒ•๋ก (Hamilton EM, Kalman DFM, Nelson-Siegel, Cleveland Fed ํ”„๋กœ๋น—, Sahm Rule, BIS Credit-to-GDP)์„ numpy๋งŒ์œผ๋กœ ์ง์ ‘ ๊ตฌํ˜„.

๋ฐฑํ…Œ์ŠคํŠธ ์‹ค์ฆ (2000-2024, FRED): Cleveland Fed ํ”„๋กœ๋น—์ด ๋ฏธ๊ตญ 3/3 ์นจ์ฒด๋ฅผ 2-16๊ฐœ์›” ์ „์— ์‚ฌ์ „ ๊ฐ์ง€, recall 90%.

Review โ€” ๋ถ„์„์„ ๋ณด๊ณ ์„œ๋กœ

์„ค๊ณ„: ops/review.md

analysis๋ฅผ ๊ตฌ์กฐํ™” ๋ณด๊ณ ์„œ๋กœ ์กฐ๋ฆฝ. 4๊ฐœ ์ถœ๋ ฅ ํ˜•์‹: rich(ํ„ฐ๋ฏธ๋„), html, markdown, json.

c.review()              # ์ „์ฒด ๋ณด๊ณ ์„œ
c.reviewer()            # ๋ณด๊ณ ์„œ + AI ์ข…ํ•ฉ์˜๊ฒฌ

์‚ผ์„ฑ์ „์ž ๋ณด๊ณ ์„œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ: "๋งค์ถœ +23.8% ์„ฑ์žฅ, ์˜์—…์ด์ต๋ฅ  8.6%โ†’21.4% ๋ฐ˜๋“ฑ. FCF ์–‘์ˆ˜ ์ „ํ™˜, ROIC > WACC โ€” ์žฌํˆฌ์ž๊ฐ€ ๊ฐ€์น˜๋ฅผ ์ฐฝ์ถœํ•˜๋Š” ๊ตฌ๊ฐ„."

์ƒ˜ํ”Œ ๋ณด๊ณ ์„œ: ์‚ผ์„ฑ์ „์ž ยท SKํ•˜์ด๋‹‰์Šค ยท ๊ธฐ์•„ ยท ํ•œํ™”์˜ค์…˜ ยท SKํ…”๋ ˆ์ฝค ยท LGํ™”ํ•™ ยท ์—”์”จ์†Œํ”„ํŠธ ยท ์•„๋ชจ๋ ˆํผ์‹œํ”ฝ

์ด์•ผ๊ธฐ๊พผ โ€” ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ผ ์ด์•ผ๊ธฐ๋‹ค

์„ค๊ณ„: ops/review.md ยท ์‹œ๋ฆฌ์ฆˆ: ๊ธฐ์—…์ด์•ผ๊ธฐ

๊ธฐ์—…๋ถ„์„์€ ๋น„์œจ ๋‚˜์—ด์ด ์•„๋‹ˆ๋‹ค. DartLab์€ 5๊ฐœ ์—”์ง„(analysis, credit, scan, quant, macro)์˜ ๊ฒฐ๊ณผ๋ฅผ 6๋ง‰ ์Šคํ† ๋ฆฌํ…”๋ง ๊ตฌ์กฐ๋กœ ์กฐํ•ฉํ•ด ๋ธ”๋กœ๊ทธ์— ๋ฐœ๊ฐ„ ๊ฐ€๋Šฅํ•œ ๊ธฐ์—…์ด์•ผ๊ธฐ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•œ๋‹ค.

from dartlab.review.publisher import publishReport
publishReport("068270")    # ์…€ํŠธ๋ฆฌ์˜จ โ€” 6๋ง‰ ๊ธฐ์—…์ด์•ผ๊ธฐ ์ž๋™ ๋ฐœ๊ฐ„

๋ฐœ๊ฐ„๋œ ๊ธฐ์—…์ด์•ผ๊ธฐ:

๊ธฐ์—… ์ด์•ผ๊ธฐ
SKํ•˜์ด๋‹‰์Šค ํ•œ๊ตญ ๋ฐ˜๋„์ฒด 30๋…„์˜ ๋ฏธ์Šคํ„ฐ๋ฆฌ, ์˜์—…์ด์ต๋ฅ  58%
์‚ผ์–‘์‹ํ’ˆ ๋ผ๋ฉด ๋น…3 ๊ผด๋“ฑ์ด ๋งค์ถœ 2.3์กฐ ๊ธ€๋กœ๋ฒŒ ์‹ํ’ˆ ๊ฑฐ์ธ์ด ๋˜๊ธฐ๊นŒ์ง€
๋‘์‚ฐ์—๋„ˆ๋นŒ๋ฆฌํ‹ฐ ๋ถ€์ฑ„๋น„์œจ 305%์—์„œ 129%๊นŒ์ง€, 9๋…„ ๋‹ค์ด์–ดํŠธ์˜ ์ง„์งœ ๋ชจ์Šต
์•Œํ…Œ์˜ค์   9๋…„ ์ ์ž ๋ฐ”์ด์˜คํ…์ด ํ•œ ๊ฑด์˜ ๋ผ์ด์„ ์Šค๋กœ ์˜์—…์ด์ต +1,069์–ต
HMM ์‹œ์žฅ์ด ์•„๋‹ˆ๋ผ ์‚ฌ์ดํด์ด ์ฃผ๊ฐ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ํšŒ์‚ฌ
์…€ํŠธ๋ฆฌ์˜จ IMF๋กœ ์ง์žฅ ์žƒ์€ 41์„ธ, 5์ฒœ๋งŒ์›์œผ๋กœ ์‹œ์ž‘ํ•ด 25๋…„ ํ›„ ๋ฌดํ˜•์ž์‚ฐ 13.78์กฐ
ํ•œํ™”์—์–ด๋กœ์ŠคํŽ˜์ด์Šค ์‚ผ์„ฑ์ด 8,400์–ต์— ๋ฒ„๋ฆฐ ๋ฌด๊ธฐ๊ฐ€ ์ˆ˜์ฃผ์ž”๊ณ  37์กฐ๊ฐ€ ๋๋‹ค
HDํ˜„๋Œ€์ผ๋ ‰ํŠธ๋ฆญ 7๋…„ ์ „ ์ ์ž 1,006์–ต์ด ์˜ฌํ•ด 1์กฐ๊ฐ€ ๋๋‹ค, ๋ณ€์••๊ธฐ ํ•˜๋‚˜๋กœ
๊ณ ๋ ค์•„์—ฐ 50๋…„ ๋งŒ์— ์ฒซ ์ˆœ์†์‹ค 2,457์–ต, ๊ทธ๋Ÿฐ๋ฐ ์˜์—…์ด์ต์€ ์‚ฌ์ƒ ์ตœ๋Œ€
์—์ดํ”ผ์•Œ ํ™”์žฅํ’ˆ ํšŒ์‚ฌ๊ฐ€ ๊ฐ€์ „์„ 4,070์–ต ํŒ”์•˜๋‹ค, ๊ทธ๊ฒŒ ์‹œ์ž‘์ด์—ˆ๋‹ค

Search โ€” ๊ณต์‹œ๋ฅผ ์˜๋ฏธ๋กœ ๊ฒ€์ƒ‰ (alpha)

์„ค๊ณ„: ops/search.md

๋ชจ๋ธ ์—†์Œ, GPU ์—†์Œ, cold start ์—†์Œ. 400๋งŒ ๋ฌธ์„œ 95% ์ •๋ฐ€๋„ โ€” ์ž„๋ฒ ๋”ฉ๋ณด๋‹ค ์ •ํ™•, 1/100 ๋น„์šฉ. ๋ฒค์น˜๋งˆํฌ ์ƒ์„ธ๋Š” methodology ์ฐธ์กฐ.

dartlab.search("์œ ์ƒ์ฆ์ž ๊ฒฐ์ •")                     # ์œ ์ƒ์ฆ์ž ๊ณต์‹œ ์ฐพ๊ธฐ
dartlab.search("๋Œ€ํ‘œ์ด์‚ฌ ๋ณ€๊ฒฝ", corp="005930")       # ์ข…๋ชฉ ํ•„ํ„ฐ
dartlab.search("ํšŒ์‚ฌ๊ฐ€ ๋ˆ์„ ๋นŒ๋ ธ๋‹ค")                 # ์ž์—ฐ์–ด๋„ ๋™์ž‘

AI โ€” ์ ๊ทน์  ๋ถ„์„๊ฐ€

์„ค๊ณ„: ops/ai.md

AI๊ฐ€ dartlab์˜ ์ „์ฒด API๋กœ Python ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•œ๋‹ค. ๋ชจ๋“  ์ฝ”๋“œ์™€ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 60+ ์งˆ๋ฌธ ๊ฒ€์ฆ, 1ํšŒ ์„ฑ๊ณต๋ฅ  95%+. ๊ฒ€์ฆ ๋ฒ”์œ„์™€ ํ•œ๊ณ„๋Š” methodology ์ฐธ์กฐ.

dartlab.ask("์‚ผ์„ฑ์ „์ž ์žฌ๋ฌด๊ฑด์ „์„ฑ ๋ถ„์„ํ•ด์ค˜")
dartlab.ask("์‚ผ์„ฑ์ „์ž ๋ถ„์„", provider="gemini")  # ๋ฌด๋ฃŒ provider ์‚ฌ์šฉ ๊ฐ€๋Šฅ

Provider: gemini(๋ฌด๋ฃŒ), groq(๋ฌด๋ฃŒ), cerebras(๋ฌด๋ฃŒ), oauth-codex(ChatGPT ๊ตฌ๋…), openai, ollama(๋กœ์ปฌ) ๋“ฑ. Rate limit ์‹œ ์ž๋™ ๋Œ€์ฒด.

Channel โ€” ์™ธ๋ถ€์—์„œ ๋‚ด PC dartlab ์ ‘๊ทผ

์„ค๊ณ„: ops/channel.md

PC์—์„œ ํ•œ ์ค„์ด๋ฉด ํฐ์—์„œ dartlab UI ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ. Microsoft DevTunnels ์ž๋™ ์…‹์—….

dartlab channel

ํ๋ฆ„:

  1. winget์œผ๋กœ devtunnel CLI ์ž๋™ ์„ค์น˜ (์ตœ์ดˆ 1ํšŒ)
  2. GitHub OAuth 1ํšŒ ์ธ์ฆ (๋ธŒ๋ผ์šฐ์ € ์ž๋™ ์˜คํ”ˆ)
  3. ์˜๊ตฌ URL + QR ๋ฐœ๊ธ‰ (https://<id>-8400.<region>.devtunnels.ms)
  4. ํฐ Chrome์— URL/QR ์ž…๋ ฅ โ†’ dartlab UI ๊ทธ๋Œ€๋กœ ๋™์ž‘

๋„๋ฉ”์ธ 0๊ฐœ, ํ† ํฐ ํŠธ๋ฆญ 0๊ฐœ. VS Code Remote Tunnels์™€ ๋™์ผ ์ธํ”„๋ผ๋ผ ๋ชจ๋ฐ”์ผ ํ˜ธํ™˜์„ฑ ๊ฒ€์ฆ๋จ. ๋ฉ”์‹œ์ง• ๋ด‡ ์˜ต์…˜ (--telegram/slack/discord) ๋„ ์ง€์›.

์•„ํ‚คํ…์ฒ˜

L0  core/        ํ”„๋กœํ† ์ฝœ, ์žฌ๋ฌด ์œ ํ‹ธ, docs ์œ ํ‹ธ, ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ
L1  providers/   ๊ตญ๊ฐ€๋ณ„ ๋ฐ์ดํ„ฐ (DART, EDGAR, EDINET)
    gather/      ์™ธ๋ถ€ ์‹œ์žฅ ๋ฐ์ดํ„ฐ (Naver, Yahoo, FRED)
    scan/        ์‹œ์žฅ ํšก๋‹จ๋ถ„์„ โ€” scan("๊ทธ๋ฃน", "์ถ•")
    quant/       ๊ธฐ์ˆ ์  ๋ถ„์„ โ€” c.quant()
L2  analysis/    ์žฌ๋ฌด + ์ „๋ง + ๊ฐ€์น˜ํ‰๊ฐ€ โ€” analysis("๊ทธ๋ฃน", "์ถ•")
    credit/      ๋…๋ฆฝ ์‹ ์šฉํ‰๊ฐ€ โ€” c.credit()
    macro/       ์‹œ์žฅ ๋ ˆ๋ฒจ ๋งคํฌ๋กœ โ€” dartlab.macro()
    review/      5์—”์ง„ ์กฐํ•ฉ ๋ณด๊ณ ์„œ (analysis + credit + scan + quant + macro)
L3  ai/          ์ ๊ทน์  ๋ถ„์„๊ฐ€ โ€” dartlab.ask()
L4  vscode/      VSCode ํ™•์žฅ (dartlab chat --stdio)
    ui/web/      Svelte SPA ์›น ์ธํ„ฐํŽ˜์ด์Šค

import ๋ฐฉํ–ฅ์€ CI ๊ฐ•์ œ. ์ƒˆ ๊ตญ๊ฐ€ ์ถ”๊ฐ€ = provider ํŒจํ‚ค์ง€ ํ•˜๋‚˜, core ์ˆ˜์ • 0์ค„.

๋ ˆ์ด์–ด ๊ฐ„ ์†Œ๋น„ ํ๋ฆ„

๊ฐ ๋ ˆ์ด์–ด๊ฐ€ ๋ˆ„๊ตฌ๋ฅผ ์†Œ๋น„ํ•˜๊ณ  ๋ˆ„๊ตฌ์—๊ฒŒ ์†Œ๋น„๋˜๋Š”์ง€:

flowchart TB
    subgraph L4["L4 ยท ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค"]
        UI["vscode / CLI / web"]
    end
    subgraph L3["L3 ยท LLM ๋ถ„์„๊ฐ€"]
        AI["ai<br/>dartlab.ask()"]
    end
    subgraph L2["L2 ยท ๋ถ„์„"]
        ANA["analysis<br/>์žฌ๋ฌด ์ธ๊ณผ + ์ „๋ง + ๊ฐ€์น˜ํ‰๊ฐ€"]
        CRD["credit<br/>๋…๋ฆฝ ์‹ ์šฉํ‰๊ฐ€"]
        MAC["macro<br/>์‹œ์žฅ ํ•ด์„"]
        REV["review<br/>๋ธ”๋ก์‹ ๋ณด๊ณ ์„œ"]
    end
    subgraph L1["L1 ยท ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘"]
        PRV["providers<br/>DART / EDGAR / EDINET"]
        GAT["gather<br/>FRED / ECOS / Naver / Yahoo"]
        SCN["scan<br/>์ „์ข…๋ชฉ ํšก๋‹จ"]
        QNT["quant<br/>๊ธฐ์ˆ ์  25์ง€ํ‘œ"]
    end
    subgraph L0["L0 ยท ์ธํ”„๋ผ"]
        CORE["core<br/>protocols + finance + docs + search"]
    end

    UI --> AI
    AI --> REV
    AI --> ANA
    AI --> MAC
    AI --> SCN
    REV --> ANA
    REV --> CRD
    REV --> SCN
    REV --> QNT
    REV --> MAC
    ANA --> PRV
    ANA --> GAT
    CRD --> PRV
    MAC --> GAT
    SCN --> PRV
    QNT --> GAT
    PRV --> CORE
    GAT --> CORE
    SCN --> CORE
    QNT --> CORE

    classDef l0 fill:#f5f5f5,stroke:#999
    classDef l1 fill:#e8f4ff,stroke:#4a90e2
    classDef l2 fill:#fff4e6,stroke:#e67e22
    classDef l3 fill:#f0e6ff,stroke:#8e44ad
    classDef l4 fill:#e6ffe6,stroke:#27ae60
    class CORE l0
    class PRV,GAT,SCN,QNT l1
    class ANA,CRD,MAC,REV l2
    class AI l3
    class UI l4

ํ•ต์‹ฌ ๊ทœ์น™:

  • ํ™”์‚ดํ‘œ๋Š” ํ•ญ์ƒ ์œ„โ†’์•„๋ž˜ (L4โ†’L3โ†’L2โ†’L1โ†’L0). ์—ญ๋ฐฉํ–ฅ import ๊ธˆ์ง€ (CI ๊ฒ€์ฆ)
  • L2 ์—”์ง„๋ผ๋ฆฌ๋Š” ์„œ๋กœ import ๊ธˆ์ง€ โ€” analysis โ†› credit, macro โ†› analysis. ์กฐํ•ฉ์€ review ๋˜๋Š” ai์˜ ๋ชซ
  • ์ƒˆ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์‹œ ์ ํ•ฉํ•œ ๋ ˆ์ด์–ด๋ฅผ ๋จผ์ € ๊ฒฐ์ •ํ•œ ๋’ค ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ํ๋ฅด๊ฒŒ ํ•œ๋‹ค

EDGAR (๋ฏธ๊ตญ)

๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค, ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์†Œ์Šค. SEC API์—์„œ ์ž๋™ ์ˆ˜์ง‘, ์‚ฌ์ „ ๋‹ค์šด๋กœ๋“œ ๋ถˆํ•„์š”.

# Korea (DART)                          # US (EDGAR)
c = dartlab.Company("005930")           c = dartlab.Company("AAPL")
c.sections                              c.sections
c.show("businessOverview")              c.show("business")
c.show("BS")                            c.show("BS")
c.show("ratios")                        c.show("ratios")
c.diff("businessOverview")              c.diff("10-K::item7Mdna")

MCP โ€” AI ์–ด์‹œ์Šคํ„ดํŠธ ์—ฐ๋™

MCP ์„œ๋ฒ„ ๋‚ด์žฅ. Claude Desktop, Claude Code, Cursor์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.

# Claude Code โ€” ํ•œ ์ค„ ์„ค์ •
claude mcp add dartlab -- uv run dartlab mcp

# Codex CLI
codex mcp add dartlab -- uv run dartlab mcp
Claude Desktop / Cursor ์„ค์ •

claude_desktop_config.json ๋˜๋Š” .cursor/mcp.json์— ์ถ”๊ฐ€:

{
  "mcpServers": {
    "dartlab": {
      "command": "uv",
      "args": ["run", "dartlab", "mcp"]
    }
  }
}

์ž๋™ ์ƒ์„ฑ: dartlab mcp --config claude-desktop

OpenAPI โ€” ์›๋ณธ ๊ณต๊ณต API

from dartlab import OpenDart, OpenEdgar

# ํ•œ๊ตญ (opendart.fss.or.kr ๋ฌด๋ฃŒ API ํ‚ค ํ•„์š”)
d = OpenDart()
d.filings("์‚ผ์„ฑ์ „์ž", "2024")
d.finstate("์‚ผ์„ฑ์ „์ž", 2024)

# ๋ฏธ๊ตญ (API ํ‚ค ๋ถˆํ•„์š”)
e = OpenEdgar()
e.filings("AAPL", forms=["10-K", "10-Q"])

๋ฐ์ดํ„ฐ

๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” HuggingFace์— ์‚ฌ์ „ ๊ตฌ์ถ• โ€” ์ž๋™ ๋‹ค์šด๋กœ๋“œ. EDGAR๋Š” SEC API ์ง์ ‘ ์ˆ˜์ง‘.

๋ฐ์ดํ„ฐ์…‹ ๊ทœ๋ชจ ์šฉ๋Ÿ‰
DART docs 2,500+ ๊ธฐ์—… ~8 GB
DART finance 2,700+ ๊ธฐ์—… ~600 MB
DART report 2,700+ ๊ธฐ์—… ~320 MB
EDGAR ์ฃผ๋ฌธํ˜• SEC API

ํŒŒ์ดํ”„๋ผ์ธ: ๋กœ์ปฌ ์บ์‹œ(์ฆ‰์‹œ) โ†’ HuggingFace(์ž๋™ ๋‹ค์šด๋กœ๋“œ) โ†’ DART API(ํ‚ค ํ•„์š”). ๋Œ€๋ถ€๋ถ„ ์ฒ˜์Œ ๋‘ ๋‹จ๊ณ„๋กœ ์ถฉ๋ถ„.

๋ฐ”๋กœ ์‹œ์ž‘ํ•˜๊ธฐ

๋ผ์ด๋ธŒ ๋ฐ๋ชจ โ€” ์„ค์น˜ ์—†์ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐ”๋กœ

๋…ธํŠธ๋ถ: Company ยท Scan ยท Review ยท Gather ยท Analysis ยท Ask (AI)

๋ฌธ์„œ

๋ฌธ์„œ ยท ๋น ๋ฅธ ์‹œ์ž‘ ยท API ๊ฐœ์š”

๋ธ”๋กœ๊ทธ (120+ ๊ธ€): ์ „์ฒด ยท ๊ธฐ์—…์ด์•ผ๊ธฐ ยท ์‹ ์šฉํ‰๊ฐ€ ๋ณด๊ณ ์„œ ยท ๋งคํฌ๋กœ ๋ณด๊ณ ์„œ

์•ˆ์ •์„ฑ

Tier ๋ฒ”์œ„
Stable DART Company (sections, show, trace, diff, BS/IS/CF, CIS, index, filings, profile), EDGAR Company core, valuation, forecast, simulation
Beta EDGAR ํŒŒ์›Œ์œ ์ € (SCE, notes, freq, coverage), credit, insights, distress, ratios, timeseries, network, governance, workforce, capital, debt, chart/table/text ๋„๊ตฌ, ask/chat, OpenDart, OpenEdgar, Server API, MCP
Experimental AI ๋„๊ตฌ ํ˜ธ์ถœ, export, viz (์ฐจํŠธ)

์ž์„ธํ•œ ๊ธฐ์ค€์€ docs/stability.md๋ฅผ ๋ณธ๋‹ค.

๊ธฐ์—ฌ

๊ธฐ์—ฌ์ž๋ฅผ ๋Œ€ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ, ์ƒˆ ๋ถ„์„ ์ถ•, ๋งคํ•‘ ์ˆ˜์ •, ๋ฌธ์„œ ๊ฐœ์„  โ€” ์–ด๋–ค ๊ธฐ์—ฌ๋“  dartlab์„ ๋” ์ข‹๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๊ทœ์น™ ํ•˜๋‚˜: ์‹คํ—˜ ๋จผ์ €, ์—”์ง„์€ ๊ทธ ๋‹ค์Œ. ์•„์ด๋””์–ด๋Š” experiments/์—์„œ ๊ฒ€์ฆํ•œ ๋’ค ์—”์ง„์— ๋ฐ˜์˜ํ•œ๋‹ค.

  • ์‹คํ—˜ ํด๋”: experiments/XXX_name/ โ€” ๊ฐ ํŒŒ์ผ์€ ๋…๋ฆฝ ์‹คํ–‰ ๊ฐ€๋Šฅ, docstring์— ์‹ค์ œ ๊ฒฐ๊ณผ ํฌํ•จ
  • ๋ฐ์ดํ„ฐ ๊ธฐ์—ฌ (accountMappings.json, sectionMappings.json ๋“ฑ): ์‹คํ—˜ ์ฆ๊ฑฐ๊ฐ€ ์žˆ์„ ๋•Œ ์ˆ˜์šฉ
  • ํ•œ๊ตญ์–ด/์˜์–ด ์ด์Šˆ์™€ PR ๋ชจ๋‘ ํ™˜์˜
  • ์–ด๋””์„œ ์‹œ์ž‘ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด ์ด์Šˆ๋ฅผ ์—ด์–ด์ฃผ์„ธ์š”

๋ผ์ด์„ ์Šค

MIT