Skip to content

Commit bc504ab

Browse files
authored
docs: ko: agent_data_analyst.ipynb
1 parent da94ebd commit bc504ab

File tree

1 file changed

+311
-0
lines changed

1 file changed

+311
-0
lines changed
Lines changed: 311 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,311 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "markdown",
5+
"source": [
6+
"# 데이터분석 에이전트: 눈깜짝할 사이에 데이터에서 인사이트 얻기 ✨\n",
7+
"_저자: [Aymeric Roucher](https://huggingface.co/m-ric)_\n",
8+
"\n",
9+
"> 이 튜토리얼은 고급 과정입니다. 사전에 [이 쿡북](agents)에 대한 개념을 이해하고 있어야 합니다!\n",
10+
"\n",
11+
"이번에 만들 **데이터 분석 에이전트**는 :\n",
12+
" **데이터 분석 라이브러리를 사용한 코드 에이전트로,데이터프레임을 불러오고 변환해 데이터로부터 인사이트를 찾아내고,결과를 시각화합니다!**\n",
13+
"\n",
14+
"\n",
15+
"예를 들어 여러분이 '[Kaggle Titanic 챌린지](https://www.kaggle.com/competitions/titanic)'의 데이터를 직접 분석해 개별 승객의 생존 여부를 예측하고 싶다고 가정해 봅시다.\n",
16+
"하지만 직접 분석에 들어가기 전에, 자율 에이전트가 수치도 추출해주고 그에 맞게 그래프도 그려주어 인사이트를 뽑아내주면 좋겠군요.\n",
17+
"\n",
18+
"이 시스템을 설정해 보겠습니다.\n",
19+
"\n",
20+
"아래 명령어를 실행하여 필요한 의존성을 설치하세요:"
21+
],
22+
"metadata": {
23+
"id": "ihQ3c6IWDa6G"
24+
}
25+
},
26+
{
27+
"cell_type": "code",
28+
"execution_count": null,
29+
"metadata": {
30+
"id": "0WauABimpjta"
31+
},
32+
"outputs": [],
33+
"source": [
34+
"!pip install seaborn \"transformers[agents]\""
35+
]
36+
},
37+
{
38+
"cell_type": "markdown",
39+
"metadata": {
40+
"id": "4LJXMiy3pjtb"
41+
},
42+
"source": [
43+
"우선 에이전트를 생성합니다. 이 쿡북에서는 `ReactCodeAgent`를 사용했습니다. (더 많은 종류의 에이전트를 확인하려면 [이 문서](https://huggingface.co/docs/transformers/en/agents) 를 참조하세요.)\n",
44+
"이 에이전트는 별도의 도구를 제공하지 않아도 스스로 코드를 작성하고 실행할 수 있습니다.\n",
45+
"\n",
46+
"일반적으로 `additional_authorized_imports`에 라이브러리를 전달할 때, 파이썬 인터프리터는 환경에 설치된 라이브러리만 사용할 수 있기 때문에, 해당 라이브러리들이 로컬 환경에 설치되어 있는지 확인해야 합니다.\n",
47+
"\n",
48+
"\n",
49+
"⚙ 해당 에이전트는 [meta-llama/Meta-Llama-3.1-70B-Instruct](https://huggingface.co/meta-llama/Meta-Llama-3.1-70B-Instruct) 모델을 사용하며, HF의 Inference API를 사용하는 `HfEngine` 클래스로 구동됩니다. Inference API를 통해 빠르고 쉽게 OS 모델을 실행할 수 있습니다."
50+
]
51+
},
52+
{
53+
"cell_type": "code",
54+
"execution_count": null,
55+
"metadata": {
56+
"id": "XPrHXQgFpjtb"
57+
},
58+
"outputs": [],
59+
"source": [
60+
"from transformers.agents import HfEngine, ReactCodeAgent\n",
61+
"from huggingface_hub import login\n",
62+
"import os\n",
63+
"\n",
64+
"login(os.getenv(\"HUGGINGFACEHUB_API_TOKEN\"))\n",
65+
"llm_engine = HfEngine(\"meta-llama/Meta-Llama-3.1-70B-Instruct\")\n",
66+
"\n",
67+
"agent = ReactCodeAgent(\n",
68+
" tools=[],\n",
69+
" llm_engine=llm_engine,\n",
70+
" additional_authorized_imports=[\"numpy\", \"pandas\", \"matplotlib.pyplot\", \"seaborn\"],\n",
71+
" max_iterations=10,\n",
72+
")"
73+
]
74+
},
75+
{
76+
"cell_type": "markdown",
77+
"metadata": {
78+
"id": "iGSuFGGwpjtb"
79+
},
80+
"source": [
81+
"## 데이터 분석 📊🤔\n",
82+
"저자는 구글 코랩을 사용하였으므로, 드라이브를 마운트하고 분석에 사용할 디렉토리를 생성했습니다."
83+
]
84+
},
85+
{
86+
"cell_type": "code",
87+
"source": [
88+
"from google.colab import drive\n",
89+
"drive.mount('/content/drive') # 구글 드라이브 마운트"
90+
],
91+
"metadata": {
92+
"id": "qWYp-IertEN1",
93+
"collapsed": true
94+
},
95+
"execution_count": null,
96+
"outputs": []
97+
},
98+
{
99+
"cell_type": "code",
100+
"source": [
101+
"import os\n",
102+
"\n",
103+
"os.chdir('/content/drive/My Drive/Colab Notebooks') # 원하는 경로로 변경\n",
104+
"print(os.getcwd()) # 변경된 경로 확인"
105+
],
106+
"metadata": {
107+
"id": "UCK6t2u5sKpm",
108+
"collapsed": true
109+
},
110+
"execution_count": null,
111+
"outputs": []
112+
},
113+
{
114+
"cell_type": "code",
115+
"execution_count": null,
116+
"metadata": {
117+
"id": "pywHujGvpjtb"
118+
},
119+
"outputs": [],
120+
"source": [
121+
"# 디렉토리 생성\n",
122+
"os.mkdir(\"./figures\")"
123+
]
124+
},
125+
{
126+
"cell_type": "code",
127+
"source": [
128+
"os.chdir('/content/drive/My Drive/Colab Notebooks/figures') # 생성한 디렉토리 경로로 변경\n",
129+
"print(os.getcwd()) # 변경된 경로 확인"
130+
],
131+
"metadata": {
132+
"id": "X2wTtXDjNYyI",
133+
"collapsed": true
134+
},
135+
"execution_count": null,
136+
"outputs": []
137+
},
138+
{
139+
"cell_type": "markdown",
140+
"source": [
141+
"실제 캐글 대회에서 사용된 추가 노트를 에이전트를 실행할 때 `run`메소드의 kwarg로 넘겨주었습니다."
142+
],
143+
"metadata": {
144+
"id": "gnruiFV_62KL"
145+
}
146+
},
147+
{
148+
"cell_type": "code",
149+
"source": [
150+
"additional_notes = \"\"\"\n",
151+
"### Variable Notes\n",
152+
"승객ID : 승객 아이디\n",
153+
"생존여부 : (0: 사망, 1: 생존)\n",
154+
"클래스: 사회경제적 지위\n",
155+
"1 = 상류층\n",
156+
"2 = 중산층\n",
157+
"3 = 하류층\n",
158+
"성별 : 남성, 여성\n",
159+
"나이 : 나이가 1 미만일 경우 소수로 표시됩니다. 나이가 추정된 경우, xx.5 형태로 표시됩니다.\n",
160+
"형제배우자: 이 데이터셋은 가족 관계를 다음과 같이 정의합니다...\n",
161+
"형제자매 = 형제, 자매, 이복형제, 이복자매\n",
162+
"배우자 = 남편, 아내 (애인과 약혼자는 간주하지 않았습니다.)\n",
163+
"부모자식: 이 데이터셋은 가족 관계를 다음과 같이 정의합니다...\n",
164+
"부모 = 어머니, 아버지\n",
165+
"자식 = 딸, 아들, 양녀, 양자\n",
166+
"유모와 여행을 온 몇 어린이들의 경우, 부모자식=0 로 표현합니다.\n",
167+
"요금: 티켓 요금\n",
168+
"\"\"\"\n",
169+
"\n",
170+
"analysis = agent.run(\n",
171+
" \"\"\"당신은 데이터 분석 전문가입니다. 소스 파일을 로드하고 내용을 분석해주세요.\n",
172+
"먼저 주어진 변수와 생존율과의 상관관계에 대해 흥미로운 질문 3가지를 나열하고, 해당 질문에 하나씩 답하고 관련된 숫자를 찾아내세요.\n",
173+
"matplotlib/seaborn을 사용해 3가지 질문에 관련된 그래프를 그리고, './figures/' 폴더에 저장하십시오. 다른 그래프를 그리기 전에 plt.clf()로 각 그래프를 지워야 합니다. 그래프의 라벨명은 영어로 해주세요.\n",
174+
"\n",
175+
"최종 답변 : 숫자로부터 찾은 상관관계와 인사이트를 요약해주세요.\n",
176+
"(인사이트 예시: \"is_december와 boredness 간의 상관관계는 1.3453으로, 이는 사람들이 겨울에 더 지루함을 느낄 가능성이 높다는 것을 시사합니다.\")\n",
177+
"최종 답변은 최소한 3개의 번호가 매겨진 항목이어야합니다.\n",
178+
"\"\"\",\n",
179+
" additional_notes=additional_notes,\n",
180+
" source_file=\"titanic_ko/train.csv\",\n",
181+
")"
182+
],
183+
"metadata": {
184+
"id": "Xe5jfSWStgrc",
185+
"collapsed": true
186+
},
187+
"execution_count": null,
188+
"outputs": []
189+
},
190+
{
191+
"cell_type": "code",
192+
"execution_count": 21,
193+
"metadata": {
194+
"id": "8hA-jMsePGQF",
195+
"colab": {
196+
"base_uri": "https://localhost:8080/"
197+
},
198+
"outputId": "be0dd5c4-8bda-4723-9acf-394ed044297e"
199+
},
200+
"outputs": [
201+
{
202+
"output_type": "stream",
203+
"name": "stdout",
204+
"text": [
205+
"성별과 생존여부 간의 상관관계: \n",
206+
"남성: 0.188908\n",
207+
"여성: 0.742038\n",
208+
"클래스와 생존여부 간의 상관관계: \n",
209+
"1등급: 0.629630\n",
210+
"2등급: 0.472826\n",
211+
"3등급: 0.242363\n",
212+
"나이와 생존여부 간의 상관관계-confidence level: -0.077221\n"
213+
]
214+
}
215+
],
216+
"source": [
217+
"print(analysis)"
218+
]
219+
},
220+
{
221+
"cell_type": "markdown",
222+
"source": [],
223+
"metadata": {
224+
"id": "6BnDH9SG3uH4"
225+
}
226+
},
227+
{
228+
"cell_type": "markdown",
229+
"metadata": {
230+
"id": "hcT-BISRpjtd"
231+
},
232+
"source": [
233+
"놀랍지 않나요? 에이전트에게 시각화 도구를 제공해 자신이 만든 그래프를 분석하게 할 수도 있습니다!\n",
234+
"\n",
235+
"## 데이터과학자 에이전트 : 예측 수행하기 🛠️\n",
236+
"\n",
237+
"👉 이제 더 깊이 들어가 봅시다 : **데이터를 기반으로 모델이 예측을 수행하도록 합니다.**\n",
238+
"\n",
239+
"예측 수행을 위해 `additional_authorized_imports`에 `sklearn`도 추가해줍니다."
240+
]
241+
},
242+
{
243+
"cell_type": "code",
244+
"execution_count": null,
245+
"metadata": {
246+
"id": "1qSXRraDpjtd"
247+
},
248+
"outputs": [],
249+
"source": [
250+
"agent = ReactCodeAgent(\n",
251+
" tools=[],\n",
252+
" llm_engine=llm_engine,\n",
253+
" additional_authorized_imports=[\n",
254+
" \"numpy\",\n",
255+
" \"pandas\",\n",
256+
" \"matplotlib.pyplot\",\n",
257+
" \"seaborn\",\n",
258+
" \"sklearn\",\n",
259+
" ],\n",
260+
" max_iterations=12,\n",
261+
")\n",
262+
"\n",
263+
"output = agent.run(\n",
264+
" \"\"\"당신은 전문가 수준의 머신러닝 엔지니어입니다.\n",
265+
"'titanic_ko/train.csv' 파일을 사용하여 '생존여부'를 예측하는 머신러닝 모델을 학습시키세요.\n",
266+
"'titanic_ko/test.csv' 파일의 행에 대한 예측을 수행한 후, 결과를 'titanic_ko/output.csv'에 출력하세요.\n",
267+
"함수와 모듈을 사용하기 전에 반드시 임포트하세요!\n",
268+
"\"\"\",\n",
269+
" additional_notes=additional_notes + \"\\n\" + analysis,\n",
270+
")"
271+
]
272+
},
273+
{
274+
"cell_type": "markdown",
275+
"metadata": {
276+
"id": "Iimn7AWtpjtd"
277+
},
278+
"source": [
279+
"위에서 에이전트가 출력한 테스트 예측을 Kaggle에 제출하면 **0.78229**으로, 이는 17,360명 중 2824등에 해당하며, 저자가 몇 년 전 이 데이터분석 챌린지를 처음 시도해 힘들게 얻었던 결과보다 더 나은 성과입니다.\n",
280+
"\n",
281+
"결과는 다를 수 있지만, 몇 초 만에 에이전트를 사용해 이 정도 성과를 낼 수 있다는 점이 매우 인상적입니다.\n",
282+
"\n",
283+
"🚀 이것은 에이전트를 활용한 단순한 데이터 분석 사례일 뿐입니다. 사용 사례에 맞게 충분히 개선할 수 있습니다 🤗"
284+
]
285+
}
286+
],
287+
"metadata": {
288+
"kernelspec": {
289+
"display_name": "disposable",
290+
"language": "python",
291+
"name": "python3"
292+
},
293+
"language_info": {
294+
"codemirror_mode": {
295+
"name": "ipython",
296+
"version": 3
297+
},
298+
"file_extension": ".py",
299+
"mimetype": "text/x-python",
300+
"name": "python",
301+
"nbconvert_exporter": "python",
302+
"pygments_lexer": "ipython3",
303+
"version": "3.12.2"
304+
},
305+
"colab": {
306+
"provenance": []
307+
}
308+
},
309+
"nbformat": 4,
310+
"nbformat_minor": 0
311+
}

0 commit comments

Comments
 (0)