eddmpython commited on
Commit
d027f25
ยท
verified ยท
1 Parent(s): 5365d33

add project README as PROJECT_README.md

Browse files
Files changed (1) hide show
  1. PROJECT_README.md +553 -0
PROJECT_README.md ADDED
@@ -0,0 +1,553 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div align="center">
2
+
3
+ <br>
4
+
5
+ <img alt="DartLab" src=".github/assets/logo.png" width="180">
6
+
7
+ <h3>DartLab</h3>
8
+
9
+ <p><b>์ข…๋ชฉ์ฝ”๋“œ ํ•˜๋‚˜. ๊ธฐ์—…์˜ ์ „์ฒด ์ด์•ผ๊ธฐ.</b></p>
10
+ <p>DART ์ „์ž๊ณต์‹œ์™€ EDGAR ๊ณต์‹œ, ํ•œ ์ค„์˜ Python์œผ๋กœ ๊ตฌ์กฐํ™”ํ•˜๊ณ  ๋น„๊ตํ•œ๋‹ค.</p>
11
+
12
+ <p>
13
+ <a href="https://pypi.org/project/dartlab/"><img src="https://img.shields.io/pypi/v/dartlab?style=for-the-badge&color=ea4647&labelColor=050811&logo=pypi&logoColor=white" alt="PyPI"></a>
14
+ <a href="https://pypi.org/project/dartlab/"><img src="https://img.shields.io/pypi/pyversions/dartlab?style=for-the-badge&color=c83232&labelColor=050811&logo=python&logoColor=white" alt="Python"></a>
15
+ <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-94a3b8?style=for-the-badge&labelColor=050811" alt="License"></a>
16
+ <a href="https://github.com/eddmpython/dartlab/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/eddmpython/dartlab/ci.yml?branch=master&style=for-the-badge&labelColor=050811&logo=github&logoColor=white&label=CI" alt="CI"></a>
17
+ <a href="https://codecov.io/gh/eddmpython/dartlab"><img src="https://img.shields.io/codecov/c/github/eddmpython/dartlab?style=for-the-badge&labelColor=050811&logo=codecov&logoColor=white&label=Coverage" alt="Coverage"></a>
18
+ <a href="https://eddmpython.github.io/dartlab/"><img src="https://img.shields.io/badge/Docs-GitHub_Pages-38bdf8?style=for-the-badge&labelColor=050811&logo=github-pages&logoColor=white" alt="Docs"></a>
19
+ <a href="https://eddmpython.github.io/dartlab/blog/"><img src="https://img.shields.io/badge/Blog-120%2B_Articles-fbbf24?style=for-the-badge&labelColor=050811&logo=rss&logoColor=white" alt="Blog"></a>
20
+ </p>
21
+
22
+ <p>
23
+ <a href="https://eddmpython.github.io/dartlab/">๋ฌธ์„œ</a> ยท <a href="https://eddmpython.github.io/dartlab/blog/">๋ธ”๋กœ๊ทธ</a> ยท <a href="https://huggingface.co/spaces/eddmpython/dartlab">๋ผ์ด๋ธŒ ๋ฐ๋ชจ</a> ยท <a href="https://colab.research.google.com/github/eddmpython/dartlab/blob/master/notebooks/colab/01_company.ipynb">Colab์—์„œ ์—ด๊ธฐ</a> ยท <a href="https://molab.marimo.io/github/eddmpython/dartlab/blob/master/notebooks/marimo/01_company.py">Molab์—์„œ ์—ด๊ธฐ</a> ยท <a href="README_EN.md">English</a> ยท <a href="https://buymeacoffee.com/eddmpython">ํ›„์›</a>
24
+ </p>
25
+
26
+ <p>
27
+ <a href="https://huggingface.co/datasets/eddmpython/dartlab-data"><img src="https://img.shields.io/badge/Data-HuggingFace-ffd21e?style=for-the-badge&labelColor=050811&logo=huggingface&logoColor=white" alt="HuggingFace Data"></a>
28
+ </p>
29
+
30
+ <a href="https://www.youtube.com/shorts/97lYLWMWzvA"><img src="https://img.youtube.com/vi/97lYLWMWzvA/maxresdefault.jpg" alt="DartLab Demo" width="320"></a>
31
+
32
+ </div>
33
+
34
+ ## ํšŒ์‚ฌ์—๋Š” ์ด์•ผ๊ธฐ๊ฐ€ ์žˆ๋‹ค
35
+
36
+ ์ˆซ์ž๋ฅผ ๋‚˜์—ดํ•˜๋ฉด ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ๋˜์ง€๋งŒ, ์ˆซ์ž์˜ ์ธ๊ณผ๋ฅผ ์—ฐ๊ฒฐํ•˜๋ฉด ์Šคํ† ๋ฆฌ๊ฐ€ ๋œ๋‹ค.
37
+ DartLab์€ ๊ทธ ์Šคํ† ๋ฆฌ๋ฅผ ์ฝ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.
38
+
39
+ **์‚ฌ๋žŒ์ด ์ง์ ‘ ์ฝ๋Š”๋‹ค** โ€” ์ข…๋ชฉ์ฝ”๋“œ ํ•˜๋‚˜๋กœ ์žฌ๋ฌด์ œํ‘œ, ๊ณต์‹œ, ๋น„์œจ์„ ๊บผ๋‚ด๊ณ , 6๋ง‰ ์ธ๊ณผ ๊ตฌ์กฐ๋กœ "์™œ ์ด ํšŒ์‚ฌ์˜ ๋งˆ์ง„์ด ์ด ์ˆ˜์ค€์ธ๊ฐ€"๋ฅผ ์ถ”์ ํ•œ๋‹ค. ์ฝ”๋“œ ํ•œ ์ค„์ด๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜์˜ค๊ณ , ๊ทธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ด์•ผ๊ธฐ๋ฅผ ๋งŒ๋“ ๋‹ค.
40
+
41
+ **AI๊ฐ€ ์ฝ์–ด์ค€๋‹ค** โ€” ๊ฐ™์€ ๋„๊ตฌ๋ฅผ AI๊ฐ€ ์กฐํ•ฉํ•ด์„œ ์งˆ๋ฌธ์— ๋งž๋Š” ๋ถ„์„ ํ๋ฆ„์„ ์Šค์Šค๋กœ ์„ค๊ณ„ํ•˜๊ณ , ์ฝ”๋“œ์™€ ๊ฒฐ๊ณผ๋ฅผ ํˆฌ๋ช…ํ•˜๊ฒŒ ๋ณด์—ฌ์ค€๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋‹ต๋งŒ ์–ป๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๋ถ„์„ ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šด๋‹ค.
42
+
43
+ ๋‘ ๊ฒฝ๋กœ ๋ชจ๋‘ ๊ฐ™์€ ์—”์ง„ ์œ„์—์„œ ๋™์ž‘ํ•œ๋‹ค.
44
+
45
+ ## ๋ฌธ์ œ
46
+
47
+ ์‚ผ์„ฑ์ „์ž์˜ "๋งค์ถœ์•ก"์„ 5๋…„๊ฐ„ ๋น„๊ตํ•˜๋ ค๊ณ  ํ•œ ์  ์žˆ๋Š”๊ฐ€?
48
+
49
+ DART์—์„œ ์‚ฌ์—…๋ณด๊ณ ์„œ๋ฅผ ์—ด๋ฉด ๊ฐ™์€ ์ˆซ์ž๊ฐ€ `ifrs-full_Revenue`, `dart_Revenue`, `๋งค์ถœ์•ก`, `์˜์—…์ˆ˜์ต` ๋„ค ๊ฐ€์ง€ ์ด๋ฆ„์œผ๋กœ ๋‚˜์˜จ๋‹ค. ์ž‘๋…„๊ณผ ์˜ฌํ•ด์˜ ๋ชฉ์ฐจ ๊ตฌ์กฐ๊ฐ€ ๋‹ค๋ฅด๋‹ค. SKํ•˜์ด๋‹‰์Šค์™€ ๋น„๊ตํ•˜๋ ค๋ฉด ๊ฐ™์€ ์ž‘์—…์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ํ•ด์•ผ ํ•œ๋‹ค.
50
+
51
+ **์ง„์งœ ๋ฌธ์ œ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ๊ฒŒ ์•„๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ์ด๋ฆ„์œผ๋กœ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.**
52
+
53
+ DartLab์€ ํ•˜๋‚˜์˜ ์ „์ œ ์œ„์— ์„œ ์žˆ๋‹ค: **๋ชจ๋“  ๊ธฐ๊ฐ„์€ ๋น„๊ต ๊ฐ€๋Šฅํ•ด์•ผ ํ•˜๊ณ , ๋ชจ๋“  ํšŒ์‚ฌ๋Š” ๋น„๊ต ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค.** ๊ณต์‹œ ์„น์…˜์„ ํ† ํ”ฝ-๊ธฐ๊ฐ„ ๊ทธ๋ฆฌ๋“œ๋กœ ์ •๊ทœํ™”ํ•˜๊ณ (~95% ๋งคํ•‘์œจ), XBRL ๊ณ„์ •์„ ํ‘œ์ค€ ์ด๋ฆ„์œผ๋กœ ํ†ต์ผํ•œ๋‹ค(~97% ๋งคํ•‘์œจ) โ€” ์–‘์‹์ด ์•„๋‹ˆ๋ผ ๊ธฐ์—…์„ ๋น„๊ตํ•œ๋‹ค.
54
+
55
+ ## ๋น ๋ฅธ ์‹œ์ž‘
56
+
57
+ ```bash
58
+ uv add dartlab
59
+ ```
60
+
61
+ ```python
62
+ import dartlab
63
+
64
+ c = dartlab.Company("005930") # ์‚ผ์„ฑ์ „์ž
65
+
66
+ c.sections # ๋ชจ๋“  topic, ๋ชจ๋“  ๊ธฐ๊ฐ„, ๋‚˜๋ž€ํžˆ
67
+ # shape: (41, 12) โ€” 41๊ฐœ ํ† ํ”ฝ ร— 12๊ฐœ ๊ธฐ๊ฐ„
68
+ # 2025Q4 2024Q4 2024Q3 2023Q4 ...
69
+ # companyOverview v v v v
70
+ # businessOverview v v v v
71
+ # riskManagement v v v v
72
+ ```
73
+
74
+ > ํ…์ŠคํŠธ์™€ ์ˆซ์ž์˜ ์‹œ๊ณ„์—ด ์ˆ˜ํ‰ํ™” โ€” ์ „ ๊ธฐ๊ฐ„ ๋น„๊ต ๊ฐ€๋Šฅ์„ฑ์˜ ํ•ต์‹ฌ
75
+ >
76
+ > <img src=".github/assets/sections-example.webp" alt="c.sections ์ถœ๋ ฅ ์˜ˆ์‹œ โ€” ์‚ผ์„ฑ์ „์ž 41๊ฐœ ํ† ํ”ฝ ร— 12๊ฐœ ๊ธฐ๊ฐ„" width="720">
77
+
78
+ ```python
79
+
80
+ c.show("IS") # ์†์ต๊ณ„์‚ฐ์„œ โ€” ๋ถ„๊ธฐ๊ฐ€ ๊ธฐ๋ณธ
81
+ ```
82
+
83
+ > ๋ถ„๊ธฐ๋ณ„ ์žฌ๋ฌด์ œํ‘œ๊ฐ€ ๊ธฐ๋ณธ โ€” snakeId + ํ•œ๊ธ€ ํ•ญ๋ชฉ๋ช… ๋™์‹œ ์ œ๊ณต
84
+ >
85
+ > <img src=".github/assets/show-is-quarterly.webp" alt="c.show('IS') โ€” ์‚ผ์„ฑ์ „์ž ๋ถ„๊ธฐ ์†์ต๊ณ„์‚ฐ์„œ" width="720">
86
+
87
+ ```python
88
+ c.show("IS", freq="Y") # freq="Y"๋กœ ์—ฐ๊ฐ„ ํ•ฉ์‚ฐ
89
+ ```
90
+
91
+ > ๊ฐ™์€ ๋ฐ์ดํ„ฐ, ์—ฐ๊ฐ„์œผ๋กœ โ€” 4๋ถ„๊ธฐ ํ•ฉ์‚ฐ ์ž๋™ ์ฒ˜๋ฆฌ
92
+ >
93
+ > <img src=".github/assets/show-is-annual.webp" alt="c.show('IS', freq='Y') โ€” ์‚ผ์„ฑ์ „์ž ์—ฐ๊ฐ„ ์†์ต๊ณ„์‚ฐ์„œ" width="720">
94
+
95
+ ```python
96
+ c.show("businessOverview") # ์ด ํšŒ์‚ฌ๊ฐ€ ์‹ค์ œ๋กœ ๋ญ˜ ํ•˜๋Š”์ง€
97
+ c.diff("businessOverview") # ์ž‘๋…„ ๋Œ€๋น„ ๋ญ๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋Š”์ง€
98
+ c.show("ratios") # ์žฌ๋ฌด๋น„์œจ, ์ด๋ฏธ ๊ณ„์‚ฐ๋จ
99
+
100
+ c.filings() # ๋ชจ๋“  ๋ณด๊ณ ์„œ โ€” DART ๋ทฐ์–ด๋กœ ๋ฐ”๋กœ ์—ฐ๊ฒฐ
101
+ ```
102
+
103
+ > ์‚ฌ์—…๋ณด๊ณ ์„œ๋ถ€ํ„ฐ ๋ถ„๊ธฐ๋ณด๊ณ ์„œ๊นŒ์ง€, dartUrl๋กœ ์›๋ฌธ ์ฆ‰์‹œ ํ™•์ธ
104
+ >
105
+ > <img src=".github/assets/show-filings.webp" alt="c.filings() โ€” ์‚ผ์„ฑ์ „์ž ๋ณด๊ณ ์„œ ๋ชฉ๋ก + DART ๋ทฐ์–ด ๋งํฌ" width="720">
106
+
107
+ ```python
108
+ # ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค, ๋‹ค๋ฅธ ๋‚˜๋ผ
109
+ us = dartlab.Company("AAPL")
110
+ us.show("business")
111
+ us.show("ratios")
112
+
113
+ # ์ž์—ฐ์–ด๋กœ ์งˆ๋ฌธ
114
+ dartlab.ask("์‚ผ์„ฑ์ „์ž ์žฌ๋ฌด๊ฑด์ „์„ฑ ๋ถ„์„ํ•ด์ค˜")
115
+ # โ†’ AI๊ฐ€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉฐ ๋ถ„์„: "์˜์—…์ด์ต๋ฅ ์ด 8.6%โ†’21.4%๋กœ ๋ฐ˜๋“ฑ..."
116
+ ```
117
+
118
+ API ํ‚ค ๋ถˆํ•„์š”. [HuggingFace](https://huggingface.co/datasets/eddmpython/dartlab-data)์—์„œ ์ž๋™ ๋‹ค์šด๋กœ๋“œ, ๋กœ์ปฌ ์บ์‹œ๋กœ ์ฆ‰์‹œ ๋กœ๋“œ.
119
+
120
+ ## DartLab์€ ๋ฌด์—‡์ธ๊ฐ€
121
+
122
+ ํ•˜๋‚˜์˜ ํ˜ธ์ถœ ๊ณ„์•ฝ. `dartlab.์—”์ง„()` ์œผ๋กœ ๊ฐ€์ด๋“œ ๋ณด๊ณ  `dartlab.์—”์ง„("์ถ•")` ์œผ๋กœ ์‹คํ–‰.
123
+
124
+ > **์ฒ˜์Œ์ด๋ผ๋ฉด?** `Company` โ†’ `Review` โ†’ `Ask` ์ˆœ์„œ๋กœ. ์ข…๋ชฉ์ฝ”๋“œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ณ , ๋ณด๊ณ ์„œ๋ฅผ ๋งŒ๋“ค๊ณ , AI์—๊ฒŒ ๋ฌผ์–ด๋ณธ๋‹ค.
125
+
126
+ | ๋ ˆ์ด์–ด | ์—”์ง„ | ํ•˜๋Š” ์ผ | ์ง„์ž…์  | ๋…ธํŠธ๋ถ |
127
+ |--------|------|---------|--------|:------:|
128
+ | Data | [Data](ops/data.md) | HuggingFace ์‚ฌ์ „ ๊ตฌ์ถ•, ์ž๋™ ๋‹ค์šด๋กœ๋“œ | `Company("005930")` | โ€” |
129
+ | L0/L1 | [Company](ops/company.md) | ๊ณต์‹œ + ์žฌ๋ฌด์ œํ‘œ + ์ •ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์ข…๋ชฉ์ฝ”๋“œ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉ | `c.show()`, `c.select()` | [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/eddmpython/dartlab/blob/master/notebooks/colab/01_company.ipynb) [![marimo](https://marimo.io/shield.svg)](https://marimo.app/github.com/eddmpython/dartlab/blob/master/notebooks/marimo/01_company.py) |
130
+ | L1 | [Gather](ops/gather.md) | ์™ธ๋ถ€ ์‹œ์žฅ ๋ฐ์ดํ„ฐ (์ฃผ๊ฐ€/์ˆ˜๊ธ‰/๋งคํฌ๋กœ/๋‰ด์Šค) | `dartlab.gather()` | [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/eddmpython/dartlab/blob/master/notebooks/colab/02_gather.ipynb) [![marimo](https://marimo.io/shield.svg)](https://marimo.app/github.com/eddmpython/dartlab/blob/master/notebooks/marimo/02_gather.py) |
131
+ | L1 | [Scan](ops/scan.md) | ์ „ ์ข…๋ชฉ ํšก๋‹จ ๋น„๊ต (๊ฑฐ๋ฒ„๋„Œ์Šค/๋น„์œจ/ํ˜„๊ธˆํ๋ฆ„ ๋“ฑ) | `dartlab.scan()` | [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/eddmpython/dartlab/blob/master/notebooks/colab/03_scan.ipynb) [![marimo](https://marimo.io/shield.svg)](https://marimo.app/github.com/eddmpython/dartlab/blob/master/notebooks/marimo/03_scan.py) |
132
+ | L1 | [Quant](ops/quant.md) | ๊ธฐ์ˆ ์ ยท์ •๋Ÿ‰ ๋ถ„์„ (๋ชจ๋ฉ˜ํ…€/ํŒฉํ„ฐ/ํŒจํ„ด) | `c.quant()` | [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/eddmpython/dartlab/blob/master/notebooks/colab/04_quant.ipynb) [![marimo](https://marimo.io/shield.svg)](https://marimo.app/github.com/eddmpython/dartlab/blob/master/notebooks/marimo/04_quant.py) |
133
+ | L2 | [Analysis](ops/analysis.md) | ์ˆ˜์ต์„ฑ/์•ˆ์ •์„ฑ/ํ˜„๊ธˆํ๋ฆ„ ๋“ฑ ์žฌ๋ฌด ์ธ๊ณผ ๋ถ„์„ + ๊ฐ€์น˜ํ‰๊ฐ€ + ์ „๋ง | `c.analysis("financial", "์ˆ˜์ต์„ฑ")` | [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/eddmpython/dartlab/blob/master/notebooks/colab/05_analysis.ipynb) [![marimo](https://marimo.io/shield.svg)](https://marimo.app/github.com/eddmpython/dartlab/blob/master/notebooks/marimo/05_analysis.py) |
134
+ | L2 | [Macro](ops/macro.md) | ์‹œ์žฅ ๋ ˆ๋ฒจ ๋งคํฌ๋กœ (์‚ฌ์ดํด/๊ธˆ๋ฆฌ/์œ ๋™์„ฑ/์‹ฌ๋ฆฌ/์ž์‚ฐ) | `dartlab.macro("์‚ฌ์ดํด")` | [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/eddmpython/dartlab/blob/master/notebooks/colab/06_macro.ipynb) [![marimo](https://marimo.io/shield.svg)](https://marimo.app/github.com/eddmpython/dartlab/blob/master/notebooks/marimo/06_macro.py) |
135
+ | L2 | [Credit](ops/credit.md) | ๋…๋ฆฝ ์‹ ์šฉํ‰๊ฐ€ (dCR ๋“ฑ๊ธ‰, ๋ถ€๋„ํ™•๋ฅ , ๊ฑด์ „๋„) | `c.credit("๋“ฑ๊ธ‰")` | [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/eddmpython/dartlab/blob/master/notebooks/colab/07_credit.ipynb) [![marimo](https://marimo.io/shield.svg)](https://marimo.app/github.com/eddmpython/dartlab/blob/master/notebooks/marimo/07_credit.py) |
136
+ | L2 | [Review](ops/review.md) | ๋ถ„์„ ์—”์ง„์„ ์กฐํ•ฉํ•œ ๋ณด๊ณ ์„œ (rich/html/markdown/json) | `c.review("์ˆ˜์ต์„ฑ")` | [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/eddmpython/dartlab/blob/master/notebooks/colab/08_review.ipynb) [![marimo](https://marimo.io/shield.svg)](https://marimo.app/github.com/eddmpython/dartlab/blob/master/notebooks/marimo/08_review.py) |
137
+ | L3 | [AI](ops/ai.md) | ์ ๊ทน์  ๋ถ„์„๊ฐ€ โ€” ์ฝ”๋“œ ์‹คํ–‰ + ํ•ด์„ | `dartlab.ask()` | [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/eddmpython/dartlab/blob/master/notebooks/colab/09_ai.ipynb) [![marimo](https://marimo.io/shield.svg)](https://marimo.app/github.com/eddmpython/dartlab/blob/master/notebooks/marimo/09_ai.py) |
138
+ | L4 | [Channel](ops/channel.md) | ์™ธ๋ถ€ ๊ณต์œ  โ€” `dartlab channel` ํ•œ ์ค„๋กœ ํฐ์—์„œ PC dartlab ์‚ฌ์šฉ | `dartlab channel` | โ€” |
139
+ | core | [Search](ops/search.md) | ๊ณต์‹œ ์‹œ๋งจํ‹ฑ ๊ฒ€์ƒ‰ *(alpha)* | `dartlab.search()` | [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/eddmpython/dartlab/blob/master/notebooks/colab/10_search.ipynb) [![marimo](https://marimo.io/shield.svg)](https://marimo.app/github.com/eddmpython/dartlab/blob/master/notebooks/marimo/10_search.py) |
140
+ | facade | [Listing](ops/listing.md) | ์ข…๋ชฉ/๊ณต์‹œ/topic ์นดํƒˆ๋กœ๊ทธ API | `dartlab.listing()` | [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/eddmpython/dartlab/blob/master/notebooks/colab/11_listing.ipynb) [![marimo](https://marimo.io/shield.svg)](https://marimo.app/github.com/eddmpython/dartlab/blob/master/notebooks/marimo/11_listing.py) |
141
+ | viz | [Viz](ops/viz.md) | ์ฐจํŠธ/๋‹ค์ด์–ด๊ทธ๋žจ (`emit_chart`) | `emit_chart({...})` | โ€” |
142
+ | guide | [Guide](ops/guide.md) | ์•ˆ๋‚ด ๋ฐ์Šคํฌ โ€” readiness/์—๋Ÿฌ/๊ต์œก | `dartlab.guide.checkReady()` | โ€” |
143
+
144
+ > ๋ชจ๋“  ๋…ธํŠธ๋ถ: [marimo](notebooks/marimo/) ยท [colab](notebooks/colab/) ยท [![Open in marimo](https://marimo.io/shield.svg)](https://marimo.app/github.com/eddmpython/dartlab/blob/master/notebooks/marimo)
145
+
146
+ ### Company
147
+
148
+ > ์„ค๊ณ„: [ops/company.md](ops/company.md)
149
+
150
+ ์„ธ ๊ฐ€์ง€ ๋ฐ์ดํ„ฐ ์†Œ์Šค โ€” docs(์ „๋ฌธ ๊ณต์‹œ), finance(XBRL ์žฌ๋ฌด์ œํ‘œ), report(DART API ์ •ํ˜• ๋ฐ์ดํ„ฐ) โ€” ๋ฅผ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ํ†ตํ•ฉ. [HuggingFace](https://huggingface.co/datasets/eddmpython/dartlab-data)์—์„œ ์ž๋™ ๋‹ค์šด๋กœ๋“œ, ์„ค์ • ๋ถˆํ•„์š”.
151
+
152
+ ```python
153
+ c = dartlab.Company("005930")
154
+
155
+ c.index # ๋ญ๊ฐ€ ์žˆ๋Š”์ง€ -- topic ๋ชฉ๋ก + ๊ฐ€์šฉ ๊ธฐ๊ฐ„
156
+ c.show("BS") # ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋ ค๋ฉด -- topic๋ณ„ DataFrame
157
+ c.select("IS", ["๋งค์ถœ์•ก"]) # ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์œผ๋ ค๋ฉด -- finance๋“  docs๋“  ๊ฐ™์€ ํŒจํ„ด
158
+ c.trace("BS") # ์–ด๋””์„œ ์™”๋Š”์ง€ -- source provenance
159
+ c.diff() # ๋ญ๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ -- ๊ธฐ๊ฐ„ ๊ฐ„ ํ…์ŠคํŠธ ๋ณ€ํ™”
160
+ ```
161
+
162
+ **์ฃผ์„(Notes)** โ€” BS/IS ์ด์•ก ์ด๋ฉด์˜ ํ•ญ๋ชฉ๋ณ„ ๋ถ„ํ•ด. `c.show("topic")`์œผ๋กœ ์žฌ๋ฌด์ œํ‘œ์™€ ๊ฐ™์€ ํŒจํ„ด์œผ๋กœ ์ ‘๊ทผ. DART(K-IFRS HTML ํŒŒ์‹ฑ)์™€ EDGAR(US-GAAP XBRL ํƒœ๊ทธ) ๋™์ผ ์ธํ„ฐํŽ˜์ด์Šค.
163
+
164
+ | `c.show(...)` | ๋‚ด์šฉ | DART | EDGAR |
165
+ |---------------|------|:----:|:-----:|
166
+ | `"inventory"` | ์›์žฌ๋ฃŒ/์žฌ๊ณตํ’ˆ/์ œํ’ˆ ๋ถ„ํ•ด | โœ… | โœ… |
167
+ | `"borrowings"` | ๋‹จ๊ธฐ/์žฅ๊ธฐ ์ฐจ์ž…๊ธˆ ๋ถ„ํ•ด | โœ… | โœ… |
168
+ | `"tangibleAsset"` | ์œ ํ˜•์ž์‚ฐ ์ทจ๋“์›๊ฐ€/๊ฐ๊ฐ€์ƒ๊ฐ/์žฅ๋ถ€๊ฐ€ | โœ… | โœ… |
169
+ | `"intangibleAsset"` | ์˜์—…๊ถŒ/๊ฐœ๋ฐœ๋น„ ๋“ฑ | โœ… | โœ… |
170
+ | `"receivables"` | ๋งค์ถœ์ฑ„๊ถŒ + ๋Œ€์†์ถฉ๋‹น๊ธˆ | โœ… | โœ… |
171
+ | `"provisions"` | ๋ณด์ฆ/์†Œ์†ก/๊ตฌ์กฐ์กฐ์ • ์ถฉ๋‹น๋ถ€์ฑ„ | โœ… | โœ… |
172
+ | `"eps"` | ๊ธฐ๋ณธ/ํฌ์„ ์ฃผ๋‹น์ด์ต | โœ… | โœ… |
173
+ | `"segments"` | ๋ถ€๋ฌธ๋ณ„ ๋งค์ถœ/์ด์ต | โœ… | โœ… |
174
+ | `"costByNature"` | ์›์žฌ๋ฃŒ/๊ธ‰์—ฌ/๊ฐ๊ฐ€์ƒ๊ฐ ์„ฑ๊ฒฉ๋ณ„ ๋น„์šฉ | โœ… | โœ… |
175
+ | `"lease"` | ์‚ฌ์šฉ๊ถŒ์ž์‚ฐ/๋ฆฌ์Šค๋ถ€์ฑ„ | โœ… | โœ… |
176
+ | `"affiliates"` | ๊ด€๊ณ„๊ธฐ์—… ์ง€๋ถ„๋ฒ• ํˆฌ์ž | โœ… | โœ… |
177
+ | `"investmentProperty"` | ํˆฌ์ž๋ถ€๋™์‚ฐ ๊ณต์ •๊ฐ€์น˜/์žฅ๋ถ€๊ฐ€ | โœ… | โœ… |
178
+
179
+ > [![marimo](https://marimo.io/shield.svg)](https://marimo.app/github.com/eddmpython/dartlab/blob/master/notebooks/marimo/01_company.py) [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/eddmpython/dartlab/blob/master/notebooks/colab/01_company.ipynb)
180
+
181
+ ### Scan โ€” ์ „ ์ข…๋ชฉ ํšก๋‹จ ๋น„๊ต
182
+
183
+ > ์„ค๊ณ„: [ops/scan.md](ops/scan.md)
184
+
185
+ ์ „ ์ข…๋ชฉ ๋Œ€์ƒ ํšก๋‹จ ๋ถ„์„. ๊ฑฐ๋ฒ„๋„Œ์Šค, ์ธ๋ ฅ, ์ฃผ์ฃผํ™˜์›, ๋ถ€์ฑ„, ํ˜„๊ธˆํ๋ฆ„, ๊ฐ์‚ฌ, ๋‚ด๋ถ€์ž, ์ด์ต์˜ ์งˆ, ์œ ๋™์„ฑ, ๋„คํŠธ์›Œํฌ, ๊ณ„์ •/๋น„์œจ ๋น„๊ต ๋“ฑ.
186
+
187
+ ```python
188
+ dartlab.scan("governance") # ์ „์ข…๋ชฉ ์ง€๋ฐฐ๊ตฌ์กฐ
189
+ dartlab.scan("ratio", "roe") # ์ „์ข…๋ชฉ ROE
190
+ dartlab.scan("account", "๋งค์ถœ์•ก") # ์ „์ข…๋ชฉ ๋งค์ถœ์•ก ์‹œ๊ณ„์—ด
191
+ ```
192
+
193
+ > 2,500+ ์ข…๋ชฉ์˜ ๋งค์ถœ์•ก์„ ํ•œ ๋ฒˆ์— โ€” ๋ถ„๊ธฐ๋ณ„ ์‹œ๊ณ„์—ด๋กœ ์ฆ‰์‹œ ๋น„๊ต
194
+ >
195
+ > <img src=".github/assets/scan-account.webp" alt="dartlab.scan('account', '๋งค์ถœ์•ก') โ€” ์ „์ข…๋ชฉ ๋งค์ถœ์•ก ํšก๋‹จ ๋น„๊ต" width="720">
196
+
197
+ ### Gather โ€” ์™ธ๋ถ€ ์‹œ์žฅ ๋ฐ์ดํ„ฐ
198
+
199
+ > ์„ค๊ณ„: [ops/gather.md](ops/gather.md)
200
+
201
+ ์ฃผ๊ฐ€, ์ˆ˜๊ธ‰, ๊ฑฐ์‹œ์ง€ํ‘œ, ๋‰ด์Šค โ€” Polars DataFrame์œผ๋กœ.
202
+
203
+ ```python
204
+ dartlab.gather("price", "005930") # KR OHLCV
205
+ dartlab.gather("price", "AAPL", market="US") # US ์ฃผ๊ฐ€
206
+ dartlab.gather("macro", "FEDFUNDS") # ์ž๋™ US ๊ฐ์ง€
207
+ dartlab.gather("news", "์‚ผ์„ฑ์ „์ž") # Google News RSS
208
+ ```
209
+
210
+ ### Analysis โ€” ์žฌ๋ฌด ์ธ๊ณผ ๋ถ„์„
211
+
212
+ > ์„ค๊ณ„: [ops/analysis.md](ops/analysis.md)
213
+
214
+ ์ˆ˜์ต๊ตฌ์กฐ โ†’ ์ˆ˜์ต์„ฑ โ†’ ์„ฑ์žฅ์„ฑ โ†’ ์•ˆ์ •์„ฑ โ†’ ํ˜„๊ธˆํ๋ฆ„ โ†’ ์ž๋ณธ๋ฐฐ๋ถ„ โ†’ ๊ฐ€์น˜ํ‰๊ฐ€ โ†’ ์ „๋ง. ์›๋ณธ ์žฌ๋ฌด์ œํ‘œ๋ฅผ ์ธ๊ณผ ์„œ์‚ฌ๋กœ ๊ฐ€๊ณตํ•œ๋‹ค.
215
+
216
+ ```python
217
+ c.analysis("financial", "์ˆ˜์ต์„ฑ") # ์ˆ˜์ต์„ฑ ๋ถ„์„
218
+ c.analysis("์ˆ˜์ต์„ฑ") # ๋‹จ์ถ•ํ˜• (financial ์ž๋™)
219
+
220
+ print(c.credit()) # ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ถ• ๊ฐ€์ด๋“œ DataFrame (self-discovery)
221
+ c.credit("๋“ฑ๊ธ‰") # dCR-AA, ๊ฑด์ „๋„ 93/100
222
+ c.credit("๋“ฑ๊ธ‰", detail=True) # ๋“ฑ๊ธ‰ + ์„œ์‚ฌ + ์ง€ํ‘œ ์‹œ๊ณ„์—ด
223
+ ```
224
+
225
+ ### Credit โ€” ๋…๋ฆฝ ์‹ ์šฉ๋ถ„์„
226
+
227
+ > ์„ค๊ณ„: [ops/credit.md](ops/credit.md) | ๋ณด๊ณ ์„œ: [dartlab.pages.dev/blog/credit-reports](https://dartlab.pages.dev/blog/credit-reports)
228
+
229
+ 3-Track ๋ชจ๋ธ(์ผ๋ฐ˜/๊ธˆ์œต/์ง€์ฃผ) + Notch Adjustment + CHS ์‹œ์žฅ ๋ณด์ • + ๋ณ„๋„์žฌ๋ฌด ๋ธ”๋ Œ๋”ฉ.
230
+
231
+ **79๊ฐœ์‚ฌ ๊ฒ€์ฆ: ๋Œ€๊ธฐ์—… 87% (26/30), ์ค‘๋Œ€ํ˜• 82% (41/50), ์ „์ฒด 70% (55/79, v5.0 ๊ณผ๋Œ€ํ‰๊ฐ€ ์ˆ˜์ • ํ›„ ์žฌ์ธก์ • ์˜ˆ์ •). ์‚ผ์„ฑ์ „์ž AA+ ์ •ํ™• ์ผ์น˜.** ๊ฒ€์ฆ ๋ฐฉ๋ฒ•๋ก ์€ [methodology](docs/methodology.md) ์ฐธ์กฐ.
232
+
233
+ ```python
234
+ print(c.credit()) # self-discovery โ€” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ถ• + ์ข…ํ•ฉ ๋“ฑ๊ธ‰
235
+
236
+ cr = c.credit("๋“ฑ๊ธ‰") # ์ข…ํ•ฉ ๋“ฑ๊ธ‰
237
+ print(cr["grade"]) # dCR-AA+
238
+ print(cr["healthScore"]) # 96 (0-100, ๋†’์„์ˆ˜๋ก ๊ฑด์ „)
239
+ print(cr["pdEstimate"]) # 0.01% ๋ถ€๋„ํ™•๋ฅ 
240
+
241
+ cr = c.credit("๋“ฑ๊ธ‰", detail=True) # ๋“ฑ๊ธ‰ + ์„œ์‚ฌ + ์ง€ํ‘œ + ๊ดด๋ฆฌ ์„ค๋ช…
242
+ print(cr["divergenceExplanation"]) # ์‹ ํ‰์‚ฌ์™€ ์™œ ๋‹ค๋ฅธ์ง€
243
+ ```
244
+
245
+ ์‹ ์šฉ๋ถ„์„ ๋ณด๊ณ ์„œ ๋ฐœ๊ฐ„ (credit ์„œ์‚ฌ + ์‹ ํ‰์‚ฌ ๋Œ€์กฐ๊ฐ€ review 5๋ง‰์— ์ž๋™ ํ†ตํ•ฉ):
246
+
247
+ ```python
248
+ from dartlab.review.publisher import publishReport
249
+ publishReport("005930") # 6๋ง‰ ๋ณด๊ณ ์„œ (credit narrative + audit ํฌํ•จ)
250
+ ```
251
+
252
+ ### Macro โ€” ์ข…๋ชฉ์ฝ”๋“œ ์—†์ด ๊ฒฝ์ œ๋ฅผ ์ฝ๋‹ค
253
+
254
+ > ์„ค๊ณ„: [ops/macro.md](ops/macro.md)
255
+
256
+ Company ์—†์ด ๊ฒฝ์ œ ํ™˜๊ฒฝ์„ ๋ถ„์„ํ•œ๋‹ค. `import dartlab` ํ•˜๋‚˜๋กœ.
257
+
258
+ ```python
259
+ dartlab.macro("์‚ฌ์ดํด") # ๊ฒฝ๊ธฐ 4๊ตญ๋ฉด ํŒ๋ณ„
260
+ dartlab.macro("๊ธˆ๋ฆฌ") # ๊ธˆ๋ฆฌ + Nelson-Siegel ์ˆ˜์ต๋ฅ ๊ณก์„ 
261
+ dartlab.macro("์˜ˆ์ธก") # LEI + ์นจ์ฒดํ™•๋ฅ  + Hamilton RS + GDP Nowcast
262
+ dartlab.macro("์ข…ํ•ฉ") # ๋งคํฌ๋กœ ์ข…ํ•ฉ + ํˆฌ์ž์ „๋žต + ํฌํŠธํด๋ฆฌ์˜ค ๋งคํ•‘
263
+ ```
264
+
265
+ ์‹œ์žฅ ์‚ฌ์ดํดยท๊ธˆ๋ฆฌยท์œ ๋™์„ฑยท์‹ฌ๋ฆฌยท์ž์‚ฐ ์‹ ํ˜ธ์™€ ๊ธ€๋กœ๋ฒŒ ๊ฑฐ์‹œ ๋ถ„์„ ๋ฐฉ๋ฒ•๋ก (Hamilton EM, Kalman DFM, Nelson-Siegel, Cleveland Fed ํ”„๋กœ๋น—, Sahm Rule, BIS Credit-to-GDP)์„ **numpy๋งŒ์œผ๋กœ ์ง์ ‘ ๊ตฌํ˜„**.
266
+
267
+ ๋ฐฑํ…Œ์ŠคํŠธ ์‹ค์ฆ (2000-2024, FRED): Cleveland Fed ํ”„๋กœ๋น—์ด **๋ฏธ๊ตญ 3/3 ์นจ์ฒด๋ฅผ 2-16๊ฐœ์›” ์ „์— ์‚ฌ์ „ ๊ฐ์ง€**, recall 90%.
268
+
269
+ ### Review โ€” ๋ถ„์„์„ ๋ณด๊ณ ์„œ๋กœ
270
+
271
+ > ์„ค๊ณ„: [ops/review.md](ops/review.md)
272
+
273
+ analysis๋ฅผ ๊ตฌ์กฐํ™” ๋ณด๊ณ ์„œ๋กœ ์กฐ๋ฆฝ. 4๊ฐœ ์ถœ๋ ฅ ํ˜•์‹: rich(ํ„ฐ๋ฏธ๋„), html, markdown, json.
274
+
275
+ ```python
276
+ c.review() # ์ „์ฒด ๋ณด๊ณ ์„œ
277
+ c.reviewer() # ๋ณด๊ณ ์„œ + AI ์ข…ํ•ฉ์˜๊ฒฌ
278
+ ```
279
+
280
+ > ์‚ผ์„ฑ์ „์ž ๋ณด๊ณ ์„œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ: *"๋งค์ถœ +23.8% ์„ฑ์žฅ, ์˜์—…์ด์ต๋ฅ  8.6%โ†’21.4% ๋ฐ˜๋“ฑ. FCF ์–‘์ˆ˜ ์ „ํ™˜, ROIC > WACC โ€” ์žฌํˆฌ์ž๊ฐ€ ๊ฐ€์น˜๋ฅผ ์ฐฝ์ถœํ•˜๋Š” ๊ตฌ๊ฐ„."*
281
+
282
+ **์ƒ˜ํ”Œ ๋ณด๊ณ ์„œ:** [์‚ผ์„ฑ์ „์ž](docs/samples/005930.md) ยท [SKํ•˜์ด๋‹‰์Šค](docs/samples/000660.md) ยท [๊ธฐ์•„](docs/samples/000270.md) ยท [ํ•œํ™”์˜ค์…˜](docs/samples/042660.md) ยท [SKํ…”๋ ˆ์ฝค](docs/samples/017670.md) ยท [LGํ™”ํ•™](docs/samples/051910.md) ยท [์—”์”จ์†Œํ”„ํŠธ](docs/samples/036570.md) ยท [์•„๋ชจ๋ ˆํผ์‹œํ”ฝ](docs/samples/090430.md)
283
+
284
+ ### ์ด์•ผ๊ธฐ๊พผ โ€” ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ผ ์ด์•ผ๊ธฐ๋‹ค
285
+
286
+ > ์„ค๊ณ„: [ops/review.md](ops/review.md) ยท ์‹œ๋ฆฌ์ฆˆ: [๊ธฐ์—…์ด์•ผ๊ธฐ](https://eddmpython.github.io/dartlab/blog/series/company-reports)
287
+
288
+ ๊ธฐ์—…๋ถ„์„์€ ๋น„์œจ ๋‚˜์—ด์ด ์•„๋‹ˆ๋‹ค. DartLab์€ 5๊ฐœ ์—”์ง„(analysis, credit, scan, quant, macro)์˜ ๊ฒฐ๊ณผ๋ฅผ **6๋ง‰ ์Šคํ† ๋ฆฌํ…”๋ง ๊ตฌ์กฐ**๋กœ ์กฐํ•ฉํ•ด ๋ธ”๋กœ๊ทธ์— ๋ฐœ๊ฐ„ ๊ฐ€๋Šฅํ•œ ๊ธฐ์—…์ด์•ผ๊ธฐ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•œ๋‹ค.
289
+
290
+ ```python
291
+ from dartlab.review.publisher import publishReport
292
+ publishReport("068270") # ์…€ํŠธ๋ฆฌ์˜จ โ€” 6๋ง‰ ๊ธฐ์—…์ด์•ผ๊ธฐ ์ž๋™ ๋ฐœ๊ฐ„
293
+ ```
294
+
295
+ **๋ฐœ๊ฐ„๋œ ๊ธฐ์—…์ด์•ผ๊ธฐ:**
296
+
297
+ | ๊ธฐ์—… | ์ด์•ผ๊ธฐ |
298
+ |------|--------|
299
+ | [SKํ•˜์ด๋‹‰์Šค](https://eddmpython.github.io/dartlab/blog/000660-skhynix) | ํ•œ๊ตญ ๋ฐ˜๋„์ฒด 30๋…„์˜ ๋ฏธ์Šคํ„ฐ๋ฆฌ, ์˜์—…์ด์ต๋ฅ  58% |
300
+ | [์‚ผ์–‘์‹ํ’ˆ](https://eddmpython.github.io/dartlab/blog/003230-samyang-foods) | ๋ผ๋ฉด ๋น…3 ๊ผด๋“ฑ์ด ๋งค์ถœ 2.3์กฐ ๊ธ€๋กœ๋ฒŒ ์‹ํ’ˆ ๊ฑฐ์ธ์ด ๋˜๊ธฐ๊นŒ์ง€ |
301
+ | [๋‘์‚ฐ์—๋„ˆ๋นŒ๋ฆฌํ‹ฐ](https://eddmpython.github.io/dartlab/blog/034020-doosan-enerbility) | ๋ถ€์ฑ„๋น„์œจ 305%์—์„œ 129%๊นŒ์ง€, 9๋…„ ๋‹ค์ด์–ดํŠธ์˜ ์ง„์งœ ๋ชจ์Šต |
302
+ | [์•Œํ…Œ์˜ค์  ](https://eddmpython.github.io/dartlab/blog/196170-alteogen) | 9๋…„ ์ ์ž ๋ฐ”์ด์˜คํ…์ด ํ•œ ๊ฑด์˜ ๋ผ์ด์„ ์Šค๋กœ ์˜์—…์ด์ต +1,069์–ต |
303
+ | [HMM](https://eddmpython.github.io/dartlab/blog/011200-hmm) | ์‹œ์žฅ์ด ์•„๋‹ˆ๋ผ ์‚ฌ์ดํด์ด ์ฃผ๊ฐ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ํšŒ์‚ฌ |
304
+ | [์…€ํŠธ๋ฆฌ์˜จ](https://eddmpython.github.io/dartlab/blog/068270-celltrion) | IMF๋กœ ์ง์žฅ ์žƒ์€ 41์„ธ, 5์ฒœ๋งŒ์›์œผ๋กœ ์‹œ์ž‘ํ•ด 25๋…„ ํ›„ ๋ฌดํ˜•์ž์‚ฐ 13.78์กฐ |
305
+ | [ํ•œํ™”์—์–ด๋กœ์ŠคํŽ˜์ด์Šค](https://eddmpython.github.io/dartlab/blog/012450-hanwha-aerospace) | ์‚ผ์„ฑ์ด 8,400์–ต์— ๋ฒ„๋ฆฐ ๋ฌด๊ธฐ๊ฐ€ ์ˆ˜์ฃผ์ž”๊ณ  37์กฐ๊ฐ€ ๋๋‹ค |
306
+ | [HDํ˜„๋Œ€์ผ๋ ‰ํŠธ๋ฆญ](https://eddmpython.github.io/dartlab/blog/267260-hd-hyundai-electric) | 7๋…„ ์ „ ์ ์ž 1,006์–ต์ด ์˜ฌํ•ด 1์กฐ๊ฐ€ ๋๋‹ค, ๋ณ€์••๊ธฐ ํ•˜๋‚˜๋กœ |
307
+ | [๊ณ ๋ ค์•„์—ฐ](https://eddmpython.github.io/dartlab/blog/010130-korea-zinc) | 50๋…„ ๋งŒ์— ์ฒซ ์ˆœ์†์‹ค 2,457์–ต, ๊ทธ๋Ÿฐ๋ฐ ์˜์—…์ด์ต์€ ์‚ฌ์ƒ ์ตœ๋Œ€ |
308
+ | [์—์ดํ”ผ์•Œ](https://eddmpython.github.io/dartlab/blog/278470-apr) | ํ™”์žฅํ’ˆ ํšŒ์‚ฌ๊ฐ€ ๊ฐ€์ „์„ 4,070์–ต ํŒ”์•˜๋‹ค, ๊ทธ๊ฒŒ ์‹œ์ž‘์ด์—ˆ๋‹ค |
309
+
310
+ <div align="center">
311
+ <a href="https://www.youtube.com/watch?v=d7RUQIlimVM"><img src="https://img.youtube.com/vi/d7RUQIlimVM/maxresdefault.jpg" alt="์…€ํŠธ๋ฆฌ์˜จ ๊ธฐ์—…์ด์•ผ๊ธฐ" width="100%"></a>
312
+
313
+ [์…€ํŠธ๋ฆฌ์˜จ ์ด์•ผ๊ธฐ ๋ณด๊ธฐ](https://www.youtube.com/watch?v=d7RUQIlimVM) ยท [DartLab 30์ดˆ ๋ฐ๋ชจ](https://www.youtube.com/shorts/97lYLWMWzvA) ยท [์œ ํŠœ๋ธŒ ์ฑ„๋„](https://www.youtube.com/@eddmpython)
314
+ </div>
315
+
316
+ ### Search โ€” ๊ณต์‹œ๋ฅผ ์˜๋ฏธ๋กœ ๊ฒ€์ƒ‰ *(alpha)*
317
+
318
+ > ์„ค๊ณ„: [ops/search.md](ops/search.md)
319
+
320
+ ๋ชจ๋ธ ์—†์Œ, GPU ์—†์Œ, cold start ์—†์Œ. 400๋งŒ ๋ฌธ์„œ 95% ์ •๋ฐ€๋„ โ€” ์ž„๋ฒ ๋”ฉ๋ณด๋‹ค ์ •ํ™•, 1/100 ๋น„์šฉ. ๋ฒค์น˜๋งˆํฌ ์ƒ์„ธ๋Š” [methodology](docs/methodology.md) ์ฐธ์กฐ.
321
+
322
+ ```python
323
+ dartlab.search("์œ ์ƒ์ฆ์ž ๊ฒฐ์ •") # ์œ ์ƒ์ฆ์ž ๊ณต์‹œ ์ฐพ๊ธฐ
324
+ dartlab.search("๋Œ€ํ‘œ์ด์‚ฌ ๋ณ€๊ฒฝ", corp="005930") # ์ข…๋ชฉ ํ•„ํ„ฐ
325
+ dartlab.search("ํšŒ์‚ฌ๊ฐ€ ๋ˆ์„ ๋นŒ๋ ธ๋‹ค") # ์ž์—ฐ์–ด๋„ ๋™์ž‘
326
+ ```
327
+
328
+ ### AI โ€” ์ ๊ทน์  ๋ถ„์„๊ฐ€
329
+
330
+ > ์„ค๊ณ„: [ops/ai.md](ops/ai.md)
331
+
332
+ AI๊ฐ€ dartlab์˜ ์ „์ฒด API๋กœ Python ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•œ๋‹ค. ๋ชจ๋“  ์ฝ”๋“œ์™€ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 60+ ์งˆ๋ฌธ ๊ฒ€์ฆ, 1ํšŒ ์„ฑ๊ณต๋ฅ  95%+. ๊ฒ€์ฆ ๋ฒ”์œ„์™€ ํ•œ๊ณ„๋Š” [methodology](docs/methodology.md) ์ฐธ์กฐ.
333
+
334
+ ```python
335
+ dartlab.ask("์‚ผ์„ฑ์ „์ž ์žฌ๋ฌด๊ฑด์ „์„ฑ ๋ถ„์„ํ•ด์ค˜")
336
+ dartlab.ask("์‚ผ์„ฑ์ „์ž ๋ถ„์„", provider="gemini") # ๋ฌด๋ฃŒ provider ์‚ฌ์šฉ ๊ฐ€๋Šฅ
337
+ ```
338
+
339
+ Provider: `gemini`(๋ฌด๋ฃŒ), `groq`(๋ฌด๋ฃŒ), `cerebras`(๋ฌด๋ฃŒ), `oauth-codex`(ChatGPT ๊ตฌ๋…), `openai`, `ollama`(๋กœ์ปฌ) ๋“ฑ. Rate limit ์‹œ ์ž๋™ ๋Œ€์ฒด.
340
+
341
+ ### Channel โ€” ์™ธ๋ถ€์—์„œ ๋‚ด PC dartlab ์ ‘๊ทผ
342
+
343
+ > ์„ค๊ณ„: [ops/channel.md](ops/channel.md)
344
+
345
+ PC์—์„œ ํ•œ ์ค„์ด๋ฉด ํฐ์—์„œ dartlab UI ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ. Microsoft DevTunnels ์ž๋™ ์…‹์—….
346
+
347
+ ```bash
348
+ dartlab channel
349
+ ```
350
+
351
+ ํ๋ฆ„:
352
+ 1. winget์œผ๋กœ devtunnel CLI ์ž๋™ ์„ค์น˜ (์ตœ์ดˆ 1ํšŒ)
353
+ 2. GitHub OAuth 1ํšŒ ์ธ์ฆ (๋ธŒ๋ผ์šฐ์ € ์ž๋™ ์˜คํ”ˆ)
354
+ 3. ์˜๊ตฌ URL + QR ๋ฐœ๊ธ‰ (`https://<id>-8400.<region>.devtunnels.ms`)
355
+ 4. ํฐ Chrome์— URL/QR ์ž…๋ ฅ โ†’ dartlab UI ๊ทธ๋Œ€๋กœ ๋™์ž‘
356
+
357
+ ๋„๋ฉ”์ธ 0๊ฐœ, ํ† ํฐ ํŠธ๋ฆญ 0๊ฐœ. VS Code Remote Tunnels์™€ ๋™์ผ ์ธํ”„๋ผ๋ผ ๋ชจ๋ฐ”์ผ ํ˜ธํ™˜์„ฑ ๊ฒ€์ฆ๋จ. ๋ฉ”์‹œ์ง• ๋ด‡ ์˜ต์…˜ (`--telegram/slack/discord`) ๋„ ์ง€์›.
358
+
359
+ ### ์•„ํ‚คํ…์ฒ˜
360
+
361
+ ```
362
+ L0 core/ ํ”„๋กœํ† ์ฝœ, ์žฌ๋ฌด ์œ ํ‹ธ, docs ์œ ํ‹ธ, ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ
363
+ L1 providers/ ๊ตญ๊ฐ€๋ณ„ ๋ฐ์ดํ„ฐ (DART, EDGAR, EDINET)
364
+ gather/ ์™ธ๋ถ€ ์‹œ์žฅ ๋ฐ์ดํ„ฐ (Naver, Yahoo, FRED)
365
+ scan/ ์‹œ์žฅ ํšก๋‹จ๋ถ„์„ โ€” scan("๊ทธ๋ฃน", "์ถ•")
366
+ quant/ ๊ธฐ์ˆ ์  ๋ถ„์„ โ€” c.quant()
367
+ L2 analysis/ ์žฌ๋ฌด + ์ „๋ง + ๊ฐ€์น˜ํ‰๊ฐ€ โ€” analysis("๊ทธ๋ฃน", "์ถ•")
368
+ credit/ ๋…๋ฆฝ ์‹ ์šฉํ‰๊ฐ€ โ€” c.credit()
369
+ macro/ ์‹œ์žฅ ๋ ˆ๋ฒจ ๋งคํฌ๋กœ โ€” dartlab.macro()
370
+ review/ 5์—”์ง„ ์กฐํ•ฉ ๋ณด๊ณ ์„œ (analysis + credit + scan + quant + macro)
371
+ L3 ai/ ์ ๊ทน์  ๋ถ„์„๊ฐ€ โ€” dartlab.ask()
372
+ L4 vscode/ VSCode ํ™•์žฅ (dartlab chat --stdio)
373
+ ui/web/ Svelte SPA ์›น ์ธํ„ฐํŽ˜์ด์Šค
374
+ ```
375
+
376
+ import ๋ฐฉํ–ฅ์€ CI ๊ฐ•์ œ. ์ƒˆ ๊ตญ๊ฐ€ ์ถ”๊ฐ€ = provider ํŒจํ‚ค์ง€ ํ•˜๋‚˜, core ์ˆ˜์ • 0์ค„.
377
+
378
+ #### ๋ ˆ์ด์–ด ๊ฐ„ ์†Œ๋น„ ํ๋ฆ„
379
+
380
+ ๊ฐ ๋ ˆ์ด์–ด๊ฐ€ ๋ˆ„๊ตฌ๋ฅผ ์†Œ๋น„ํ•˜๊ณ  ๋ˆ„๊ตฌ์—๊ฒŒ ์†Œ๋น„๋˜๋Š”์ง€:
381
+
382
+ ```mermaid
383
+ flowchart TB
384
+ subgraph L4["L4 ยท ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค"]
385
+ UI["vscode / CLI / web"]
386
+ end
387
+ subgraph L3["L3 ยท LLM ๋ถ„์„๊ฐ€"]
388
+ AI["ai<br/>dartlab.ask()"]
389
+ end
390
+ subgraph L2["L2 ยท ๋ถ„์„"]
391
+ ANA["analysis<br/>์žฌ๋ฌด ์ธ๊ณผ + ์ „๋ง + ๊ฐ€์น˜ํ‰๊ฐ€"]
392
+ CRD["credit<br/>๋…๋ฆฝ ์‹ ์šฉํ‰๊ฐ€"]
393
+ MAC["macro<br/>์‹œ์žฅ ํ•ด์„"]
394
+ REV["review<br/>๋ธ”๋ก์‹ ๋ณด๊ณ ์„œ"]
395
+ end
396
+ subgraph L1["L1 ยท ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘"]
397
+ PRV["providers<br/>DART / EDGAR / EDINET"]
398
+ GAT["gather<br/>FRED / ECOS / Naver / Yahoo"]
399
+ SCN["scan<br/>์ „์ข…๋ชฉ ํšก๋‹จ"]
400
+ QNT["quant<br/>๊ธฐ์ˆ ์  25์ง€ํ‘œ"]
401
+ end
402
+ subgraph L0["L0 ยท ์ธํ”„๋ผ"]
403
+ CORE["core<br/>protocols + finance + docs + search"]
404
+ end
405
+
406
+ UI --> AI
407
+ AI --> REV
408
+ AI --> ANA
409
+ AI --> MAC
410
+ AI --> SCN
411
+ REV --> ANA
412
+ REV --> CRD
413
+ REV --> SCN
414
+ REV --> QNT
415
+ REV --> MAC
416
+ ANA --> PRV
417
+ ANA --> GAT
418
+ CRD --> PRV
419
+ MAC --> GAT
420
+ SCN --> PRV
421
+ QNT --> GAT
422
+ PRV --> CORE
423
+ GAT --> CORE
424
+ SCN --> CORE
425
+ QNT --> CORE
426
+
427
+ classDef l0 fill:#f5f5f5,stroke:#999
428
+ classDef l1 fill:#e8f4ff,stroke:#4a90e2
429
+ classDef l2 fill:#fff4e6,stroke:#e67e22
430
+ classDef l3 fill:#f0e6ff,stroke:#8e44ad
431
+ classDef l4 fill:#e6ffe6,stroke:#27ae60
432
+ class CORE l0
433
+ class PRV,GAT,SCN,QNT l1
434
+ class ANA,CRD,MAC,REV l2
435
+ class AI l3
436
+ class UI l4
437
+ ```
438
+
439
+ **ํ•ต์‹ฌ ๊ทœ์น™**:
440
+ - ํ™”์‚ดํ‘œ๋Š” ํ•ญ์ƒ ์œ„โ†’์•„๋ž˜ (L4โ†’L3โ†’L2โ†’L1โ†’L0). ์—ญ๋ฐฉํ–ฅ import ๊ธˆ์ง€ (CI ๊ฒ€์ฆ)
441
+ - L2 ์—”์ง„๋ผ๋ฆฌ๋Š” ์„œ๋กœ import ๊ธˆ์ง€ โ€” analysis โ†› credit, macro โ†› analysis. ์กฐํ•ฉ์€ review ๋˜๋Š” ai์˜ ๋ชซ
442
+ - ์ƒˆ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์‹œ ์ ํ•ฉํ•œ ๋ ˆ์ด์–ด๋ฅผ ๋จผ์ € ๊ฒฐ์ •ํ•œ ๋’ค ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ํ๋ฅด๊ฒŒ ํ•œ๋‹ค
443
+
444
+ ## EDGAR (๋ฏธ๊ตญ)
445
+
446
+ ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค, ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์†Œ์Šค. SEC API์—์„œ ์ž๋™ ์ˆ˜์ง‘, ์‚ฌ์ „ ๋‹ค์šด๋กœ๋“œ ๋ถˆํ•„์š”.
447
+
448
+ ```python
449
+ # Korea (DART) # US (EDGAR)
450
+ c = dartlab.Company("005930") c = dartlab.Company("AAPL")
451
+ c.sections c.sections
452
+ c.show("businessOverview") c.show("business")
453
+ c.show("BS") c.show("BS")
454
+ c.show("ratios") c.show("ratios")
455
+ c.diff("businessOverview") c.diff("10-K::item7Mdna")
456
+ ```
457
+
458
+ ## MCP โ€” AI ์–ด์‹œ์Šคํ„ดํŠธ ์—ฐ๋™
459
+
460
+ [MCP](https://modelcontextprotocol.io/) ์„œ๋ฒ„ ๋‚ด์žฅ. Claude Desktop, Claude Code, Cursor์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.
461
+
462
+ ```bash
463
+ # Claude Code โ€” ํ•œ ์ค„ ์„ค์ •
464
+ claude mcp add dartlab -- uv run dartlab mcp
465
+
466
+ # Codex CLI
467
+ codex mcp add dartlab -- uv run dartlab mcp
468
+ ```
469
+
470
+ <details>
471
+ <summary>Claude Desktop / Cursor ์„ค์ •</summary>
472
+
473
+ `claude_desktop_config.json` ๋˜๋Š” `.cursor/mcp.json`์— ์ถ”๊ฐ€:
474
+
475
+ ```json
476
+ {
477
+ "mcpServers": {
478
+ "dartlab": {
479
+ "command": "uv",
480
+ "args": ["run", "dartlab", "mcp"]
481
+ }
482
+ }
483
+ }
484
+ ```
485
+
486
+ ์ž๋™ ์ƒ์„ฑ: `dartlab mcp --config claude-desktop`
487
+
488
+ </details>
489
+
490
+ ## OpenAPI โ€” ์›๋ณธ ๊ณต๊ณต API
491
+
492
+ ```python
493
+ from dartlab import OpenDart, OpenEdgar
494
+
495
+ # ํ•œ๊ตญ (opendart.fss.or.kr ๋ฌด๋ฃŒ API ํ‚ค ํ•„์š”)
496
+ d = OpenDart()
497
+ d.filings("์‚ผ์„ฑ์ „์ž", "2024")
498
+ d.finstate("์‚ผ์„ฑ์ „์ž", 2024)
499
+
500
+ # ๋ฏธ๊ตญ (API ํ‚ค ๋ถˆํ•„์š”)
501
+ e = OpenEdgar()
502
+ e.filings("AAPL", forms=["10-K", "10-Q"])
503
+ ```
504
+
505
+ ## ๋ฐ์ดํ„ฐ
506
+
507
+ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” [HuggingFace](https://huggingface.co/datasets/eddmpython/dartlab-data)์— ์‚ฌ์ „ ๊ตฌ์ถ• โ€” ์ž๋™ ๋‹ค์šด๋กœ๋“œ. EDGAR๋Š” SEC API ์ง์ ‘ ์ˆ˜์ง‘.
508
+
509
+ | ๋ฐ์ดํ„ฐ์…‹ | ๊ทœ๋ชจ | ์šฉ๋Ÿ‰ |
510
+ |----------|------|------|
511
+ | DART docs | 2,500+ ๊ธฐ์—… | ~8 GB |
512
+ | DART finance | 2,700+ ๊ธฐ์—… | ~600 MB |
513
+ | DART report | 2,700+ ๊ธฐ์—… | ~320 MB |
514
+ | EDGAR | ์ฃผ๋ฌธํ˜• | SEC API |
515
+
516
+ ํŒŒ์ดํ”„๋ผ์ธ: ๋กœ์ปฌ ์บ์‹œ(์ฆ‰์‹œ) โ†’ HuggingFace(์ž๋™ ๋‹ค์šด๋กœ๋“œ) โ†’ DART API(ํ‚ค ํ•„์š”). ๋Œ€๋ถ€๋ถ„ ์ฒ˜์Œ ๋‘ ๋‹จ๊ณ„๋กœ ์ถฉ๋ถ„.
517
+
518
+ ## ๋ฐ”๋กœ ์‹œ์ž‘ํ•˜๊ธฐ
519
+
520
+ **[๋ผ์ด๋ธŒ ๋ฐ๋ชจ](https://huggingface.co/spaces/eddmpython/dartlab)** โ€” ์„ค์น˜ ์—†์ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐ”๋กœ
521
+
522
+ **๋…ธํŠธ๋ถ:** [Company](https://colab.research.google.com/github/eddmpython/dartlab/blob/master/notebooks/colab/01_company.ipynb) ยท [Scan](https://colab.research.google.com/github/eddmpython/dartlab/blob/master/notebooks/colab/02_scan.ipynb) ยท [Review](https://colab.research.google.com/github/eddmpython/dartlab/blob/master/notebooks/colab/03_review.ipynb) ยท [Gather](https://colab.research.google.com/github/eddmpython/dartlab/blob/master/notebooks/colab/04_gather.ipynb) ยท [Analysis](https://colab.research.google.com/github/eddmpython/dartlab/blob/master/notebooks/colab/05_analysis.ipynb) ยท [Ask (AI)](https://colab.research.google.com/github/eddmpython/dartlab/blob/master/notebooks/colab/06_ask.ipynb)
523
+
524
+ ## ๋ฌธ์„œ
525
+
526
+ [๋ฌธ์„œ](https://eddmpython.github.io/dartlab/) ยท [๋น ๋ฅธ ์‹œ์ž‘](https://eddmpython.github.io/dartlab/docs/getting-started/quickstart) ยท [API ๊ฐœ์š”](https://eddmpython.github.io/dartlab/docs/api/overview)
527
+
528
+ **๋ธ”๋กœ๊ทธ (120+ ๊ธ€):** [์ „์ฒด](https://eddmpython.github.io/dartlab/blog/) ยท [๊ธฐ์—…์ด์•ผ๊ธฐ](https://eddmpython.github.io/dartlab/blog/series/company-reports) ๏ฟฝ๏ฟฝ [์‹ ์šฉํ‰๊ฐ€ ๋ณด๊ณ ์„œ](https://eddmpython.github.io/dartlab/blog/credit-reports) ยท [๋งคํฌ๋กœ ๋ณด๊ณ ์„œ](https://eddmpython.github.io/dartlab/blog/macro-reports)
529
+
530
+ ## ์•ˆ์ •์„ฑ
531
+
532
+ | Tier | ๋ฒ”์œ„ |
533
+ |------|------|
534
+ | **Stable** | DART Company (sections, show, trace, diff, BS/IS/CF, CIS, index, filings, profile), EDGAR Company core, valuation, forecast, simulation |
535
+ | **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 |
536
+ | **Experimental** | AI ๋„๊ตฌ ํ˜ธ์ถœ, export, viz (์ฐจํŠธ) |
537
+
538
+ ์ž์„ธํ•œ ๊ธฐ์ค€์€ [docs/stability.md](docs/stability.md)๋ฅผ ๋ณธ๋‹ค.
539
+
540
+ ## ๊ธฐ์—ฌ
541
+
542
+ **๊ธฐ์—ฌ์ž๋ฅผ ๋Œ€ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.** ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ, ์ƒˆ ๋ถ„์„ ์ถ•, ๋งคํ•‘ ์ˆ˜์ •, ๋ฌธ์„œ ๊ฐœ์„  โ€” ์–ด๋–ค ๊ธฐ์—ฌ๋“  dartlab์„ ๋” ์ข‹๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
543
+
544
+ ๊ทœ์น™ ํ•˜๋‚˜: **์‹คํ—˜ ๋จผ์ €, ์—”์ง„์€ ๊ทธ ๋‹ค์Œ.** ์•„์ด๋””์–ด๋Š” `experiments/`์—์„œ ๊ฒ€์ฆํ•œ ๋’ค ์—”์ง„์— ๋ฐ˜์˜ํ•œ๋‹ค.
545
+
546
+ - **์‹คํ—˜ ํด๋”**: `experiments/XXX_name/` โ€” ๊ฐ ํŒŒ์ผ์€ ๋…๋ฆฝ ์‹คํ–‰ ๊ฐ€๋Šฅ, docstring์— ์‹ค์ œ ๊ฒฐ๊ณผ ํฌํ•จ
547
+ - **๋ฐ์ดํ„ฐ ๊ธฐ์—ฌ** (`accountMappings.json`, `sectionMappings.json` ๋“ฑ): ์‹คํ—˜ ์ฆ๊ฑฐ๊ฐ€ ์žˆ์„ ๋•Œ ์ˆ˜์šฉ
548
+ - ํ•œ๊ตญ์–ด/์˜์–ด ์ด์Šˆ์™€ PR ๋ชจ๋‘ ํ™˜์˜
549
+ - ์–ด๋””์„œ ์‹œ์ž‘ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด ์ด์Šˆ๋ฅผ ์—ด์–ด์ฃผ์„ธ์š”
550
+
551
+ ## ๋ผ์ด์„ ์Šค
552
+
553
+ MIT