update
Browse files- annotations/dummy.txt +0 -1
- app.py +188 -145
- for_assistants/NotoSansJP-Bold.zip +3 -0
- images/dummy.txt +0 -1
- requirements.txt +1 -1
- sample_data/世界の人口2023年.csv +0 -22
- sample_data/東京都年齢別人口_y23.csv +91 -0
- sample_data/{東京都年別人口.csv → 東京都男女別人口_y23.csv} +0 -4
- sample_data/桃太郎あらすじ.txt +0 -163
- sample_data/練馬区年齢別人口.csv +0 -108
annotations/dummy.txt
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
dummy
|
|
|
|
app.py
CHANGED
@@ -2,18 +2,27 @@ import os
|
|
2 |
import time
|
3 |
import datetime
|
4 |
import gradio as gr
|
5 |
-
from openai import OpenAI
|
6 |
from openai.types.beta.threads.runs import ToolCallsStepDetails
|
|
|
|
|
|
|
7 |
|
8 |
# GPT用設定
|
9 |
-
SYS_PROMPT_DEFAULT = "あなたは優秀なアシスタントです。質問をされた場合は、質問に答えるコードを作成して実行します。回答は日本語でお願いします。"
|
10 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
# file_format = {".txt", ".csv", ".pdf"}
|
12 |
-
file_format = {".txt", ".csv"}
|
13 |
|
14 |
-
#
|
15 |
-
|
16 |
-
|
|
|
17 |
|
18 |
# 各種メッセージ
|
19 |
PLACEHOLDER = "これは東京都の年別人口データです、折れ線グラフでデータの可視化をお願いします… など"
|
@@ -25,12 +34,14 @@ MAX_TRIAL = int(os.environ["MAX_TRIAL"]) # メッセージ取得最大試行数
|
|
25 |
INTER_SEC = int(os.environ["INTER_SEC"]) # 試行間隔(秒)
|
26 |
|
27 |
# サンプル用情報
|
28 |
-
examples = ["sample_data/東京都年別人口.csv", "sample_data/世界の人口2023年.csv", "sample_data/練馬区年齢別人口.csv", "sample_data/桃太郎あらすじ.txt"]
|
|
|
29 |
|
30 |
-
example_toid = {"東京都年別人口.csv" : "file-TMLJxwdTy1oaaoo2l712r1Os"
|
31 |
-
|
32 |
-
|
33 |
-
|
|
|
34 |
|
35 |
# コード出力用
|
36 |
code_mode = {'ON': True, 'OFF': False}
|
@@ -51,15 +62,15 @@ def init(state, text, file):
|
|
51 |
""" 入力チェックを行う関数
|
52 |
※ここで例外を起こすと入力できなくなるので次の関数でエラーにする """
|
53 |
|
54 |
-
print(state)
|
55 |
-
|
56 |
err_msg = ""
|
57 |
file_id = None
|
58 |
|
59 |
-
|
60 |
|
61 |
-
|
62 |
-
|
|
|
|
|
63 |
|
64 |
if not text:
|
65 |
|
@@ -70,7 +81,7 @@ def init(state, text, file):
|
|
70 |
|
71 |
elif file:
|
72 |
|
73 |
-
#
|
74 |
root, ext = os.path.splitext(file)
|
75 |
|
76 |
if ext not in file_format:
|
@@ -80,62 +91,79 @@ def init(state, text, file):
|
|
80 |
|
81 |
return state, file_id, err_msg
|
82 |
|
|
|
83 |
|
84 |
-
|
85 |
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
|
90 |
-
|
91 |
-
|
92 |
|
93 |
-
|
94 |
-
|
95 |
|
96 |
-
|
97 |
-
|
98 |
|
99 |
-
|
100 |
|
101 |
-
|
102 |
-
|
103 |
|
|
|
104 |
|
105 |
-
|
|
|
106 |
|
107 |
-
|
108 |
-
thread = client.beta.threads.create()
|
109 |
|
110 |
-
state["thread_id"] = thread.id
|
111 |
|
|
|
112 |
|
113 |
-
|
|
|
114 |
|
115 |
-
|
116 |
-
# assistant = client.beta.assistants.create(
|
117 |
-
# name="codeinter_test",
|
118 |
-
# instructions=state["system_prompt"],
|
119 |
-
# # model="gpt-4-1106-preview",
|
120 |
-
# model="gpt-3.5-turbo-1106",
|
121 |
-
# tools=[{"type": "code_interpreter"}]
|
122 |
-
# )
|
123 |
-
# state["assistant_id"] = assistant.id
|
124 |
|
125 |
-
|
|
|
|
|
|
|
|
|
126 |
|
|
|
|
|
127 |
|
128 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
129 |
|
130 |
-
|
131 |
-
basename = os.path.basename(file)
|
132 |
|
133 |
-
|
134 |
|
135 |
-
|
136 |
-
|
137 |
|
138 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
139 |
|
140 |
# ファイルのアップ
|
141 |
file_response = client.files.create(
|
@@ -152,10 +180,36 @@ def init(state, text, file):
|
|
152 |
# ファイルのIDをセット
|
153 |
file_id = file_response.id
|
154 |
|
155 |
-
print(file_id)
|
156 |
|
157 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
158 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
159 |
|
160 |
def raise_exception(err_msg):
|
161 |
""" エラーの場合例外を起こす関数 """
|
@@ -171,16 +225,8 @@ def add_history(history, text, file_id):
|
|
171 |
|
172 |
err_msg = ""
|
173 |
|
174 |
-
|
175 |
-
|
176 |
-
# テキストだけの場合そのまま追加
|
177 |
-
history = history + [(text, None)]
|
178 |
-
|
179 |
-
elif file_id is not None:
|
180 |
-
|
181 |
-
# ファイルがあればファイルIDとテキストを追加
|
182 |
-
history = history + [("file:" + file_id, DUMMY)]
|
183 |
-
history = history + [(text, None)]
|
184 |
|
185 |
# テキスト・ファイルを初期化し利用不可に
|
186 |
update_text = gr.update(value="", placeholder = "",interactive=False)
|
@@ -227,14 +273,14 @@ def bot(state, history, file_id):
|
|
227 |
run = client.beta.threads.runs.create(
|
228 |
thread_id=thread_id,
|
229 |
assistant_id=assistant_id,
|
230 |
-
instructions=system_prompt
|
231 |
)
|
232 |
|
233 |
-
# "completed"
|
234 |
for i in range(0, MAX_TRIAL, 1):
|
235 |
|
236 |
if i > 0:
|
237 |
-
time.sleep(INTER_SEC)
|
238 |
|
239 |
# メッセージ受け取り
|
240 |
run = client.beta.threads.runs.retrieve(
|
@@ -249,102 +295,94 @@ def bot(state, history, file_id):
|
|
249 |
order="asc"
|
250 |
)
|
251 |
|
252 |
-
msg_log = client.beta.threads.messages.list(
|
253 |
-
thread_id=thread_id,
|
254 |
-
# after=last_msg_id,
|
255 |
-
order="asc"
|
256 |
-
)
|
257 |
-
|
258 |
# デバッグ用
|
259 |
print(run.status)
|
260 |
-
print(
|
261 |
|
262 |
# messageを取り出す
|
263 |
for msg in messages:
|
264 |
|
265 |
if msg.role == "assistant":
|
266 |
|
267 |
-
|
268 |
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
|
273 |
-
|
274 |
|
275 |
-
|
276 |
|
277 |
-
|
278 |
|
279 |
-
|
280 |
-
|
281 |
|
282 |
-
|
283 |
-
|
284 |
|
285 |
-
|
286 |
|
287 |
-
|
288 |
|
289 |
-
|
290 |
|
291 |
-
|
292 |
|
293 |
-
|
294 |
|
295 |
-
|
|
|
296 |
|
297 |
-
|
298 |
-
last_msg_id = msg.id
|
299 |
|
300 |
-
|
|
|
301 |
|
302 |
-
|
303 |
-
|
304 |
|
305 |
-
|
306 |
-
if len(cont_dict.get("text").get("annotations")) > 0:
|
307 |
|
308 |
-
|
309 |
|
310 |
-
|
|
|
311 |
|
312 |
-
|
313 |
-
ant_file_id = ct_ant[0].get("file_path").get("file_id")
|
314 |
|
315 |
-
|
|
|
316 |
|
317 |
-
|
318 |
-
|
319 |
|
320 |
-
|
321 |
-
ant_file = file_download(client, ant_file_id, ANT_FOLDER, ext)
|
322 |
|
323 |
-
|
324 |
|
325 |
-
|
326 |
|
327 |
-
|
|
|
328 |
|
329 |
-
|
330 |
-
res_text = res_text + "\n\n" + ANT_MSG
|
331 |
|
332 |
-
|
|
|
333 |
|
334 |
-
|
335 |
-
|
|
|
336 |
|
337 |
-
|
338 |
-
history = history + [[None, res_text]]
|
339 |
-
else:
|
340 |
|
341 |
-
|
|
|
342 |
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
# Chatbotを返す(labelとhistoryを更新)
|
347 |
-
yield gr.Chatbot(label=run.status ,value=history), image_file, ant_file, err_msg
|
348 |
|
349 |
# メッセージIDを保存
|
350 |
state["last_msg_id"] = last_msg_id
|
@@ -354,7 +392,7 @@ def bot(state, history, file_id):
|
|
354 |
|
355 |
if not code_mode:
|
356 |
|
357 |
-
yield gr.Chatbot(label=run.status ,value=history), image_file, ant_file, err_msg
|
358 |
|
359 |
break
|
360 |
else:
|
@@ -394,11 +432,11 @@ def bot(state, history, file_id):
|
|
394 |
yield gr.Chatbot(label=run.status ,value=history), image_file, ant_file, err_msg
|
395 |
break
|
396 |
|
397 |
-
else:
|
398 |
-
|
399 |
|
400 |
-
|
401 |
-
|
402 |
|
403 |
|
404 |
def get_code(run_steps):
|
@@ -464,18 +502,22 @@ def clear_click(state):
|
|
464 |
with gr.Blocks() as demo:
|
465 |
|
466 |
title = "<h2>GPT Code Interpreter対応チャット</h2>"
|
467 |
-
message = "
|
468 |
message += "・こういうときにエラーになるなどフィードバックあればお待ちしています。<br>"
|
469 |
-
message += '※動いているかわかりづらいですが、左上の"in_progress(Request:XX)"が止まっていなければ回答の生成中となります。<br>'
|
470 |
-
message += "※グラフの日本語文字化けの対応の仕方を注意事項に記載しました。<br>"
|
471 |
message += "・コードインタープリターAPIの解説動画はこちらです→"
|
472 |
-
message += "https://www.youtube.com/watch?v=tFmedAM1FM8<br
|
|
|
|
|
|
|
|
|
|
|
|
|
473 |
|
474 |
-
gr.Markdown(title + message)
|
475 |
|
476 |
# セッションの宣言
|
477 |
state = gr.State({
|
478 |
-
"system_prompt":
|
479 |
"openai_key" : "",
|
480 |
"code_mode" : False,
|
481 |
"client" : None,
|
@@ -497,7 +539,7 @@ with gr.Blocks() as demo:
|
|
497 |
btn = gr.Button(value="送信")
|
498 |
# btn_download = gr.Button(value="画像のダウンロード") # 保留中
|
499 |
# btn_clear = gr.ClearButton(value="リセット", components=[chatbot, text_msg, up_file, file_id, result_image, sys_msg, result_file])
|
500 |
-
btn_clear = gr.ClearButton(value="リセット", components=[chatbot, text_msg, up_file])
|
501 |
sys_msg = gr.Textbox(label="システムメッセージ", interactive = False)
|
502 |
result_file = gr.File(label="出力ファイル", type="filepath",interactive = False)
|
503 |
|
@@ -519,9 +561,9 @@ with gr.Blocks() as demo:
|
|
519 |
# txt_msg = text_msg.submit(respond, inputs=[text_msg, image, chatbot], outputs=[text_msg, image, chatbot])
|
520 |
|
521 |
with gr.Tab("設定") as set:
|
522 |
-
openai_key = gr.Textbox(label="OpenAI API Key", visible=
|
523 |
# language = gr.Dropdown(choices=["Japanese", "English"], value = "Japanese", label="Language", interactive = True)
|
524 |
-
system_prompt = gr.Textbox(value =
|
525 |
code_output = gr.Dropdown(label="コード出力", choices=["OFF", "ON"], value = "OFF", interactive = True)
|
526 |
|
527 |
# 設定タブからChatタブに戻った時の処理
|
@@ -529,16 +571,17 @@ with gr.Blocks() as demo:
|
|
529 |
|
530 |
with gr.Tab("注意事項") as notes:
|
531 |
caution = "現在Assistant APIはβ版でのリリースとなっています。<br>"
|
532 |
-
caution += "そのためか一部のファイルのアップロードが上手くいかないため、制限をかけています。<br>"
|
533 |
-
caution += "(現在アップできるファイル形式は.txtと.csvのみ)<br>"
|
534 |
-
caution += "本来はPDFなども利用できるはずなので、今後更新したいと思います。<br>"
|
535 |
caution += "文字化けする場合「NotoSansJP-Bold.zipを解凍してフォントを取得して下さい。」と指示し<br>"
|
536 |
caution += "グラフ作成時に「フォントはNotoSansJP-Boldを使用して下さい。」と指示して下さい。<br>"
|
537 |
caution += "※NotoSansJP-Bold.zipをアップする必要はありません。<br>"
|
538 |
-
caution += "詳細はこちら→https://github.com/nekoniii3/openai_multi_chat/tree/main/Code_Interpreter/docs
|
539 |
gr.Markdown("<h3>" + caution + "</h3>")
|
540 |
|
541 |
|
542 |
-
|
543 |
-
demo.launch(debug=True)
|
544 |
|
|
|
|
|
|
2 |
import time
|
3 |
import datetime
|
4 |
import gradio as gr
|
|
|
5 |
from openai.types.beta.threads.runs import ToolCallsStepDetails
|
6 |
+
from openai import (
|
7 |
+
OpenAI, AuthenticationError, NotFoundError, BadRequestError
|
8 |
+
)
|
9 |
|
10 |
# GPT用設定
|
11 |
+
# SYS_PROMPT_DEFAULT = "あなたは優秀なアシスタントです。質問をされた場合は、質問に答えるコードを作成して実行します。回答は日本語でお願いします。"
|
12 |
+
|
13 |
+
# アシスタント用設定
|
14 |
+
DF_MODEL = "gpt-3.5-turbo-1106"
|
15 |
+
ASSIST_NAME = "Code Interpreter Assistant for O3"
|
16 |
+
AST_SYS_PROMPT = "あなたは優秀なアシスタントです。質問をされた場合は、質問に答えるコードを作成して実行します。回答は日本語でお願いします。"
|
17 |
+
|
18 |
+
# DUMMY = "********************"
|
19 |
# file_format = {".txt", ".csv", ".pdf"}
|
20 |
+
file_format = {".txt", ".csv", ".jpg", ".jpeg", ".png", ".xlsx", ".pdf", ".zip"}
|
21 |
|
22 |
+
# 各種フォルダ
|
23 |
+
FONT_FILE_PATH = "for_assistants/NotoSansJP-Bold.zip"
|
24 |
+
# IMG_FOLDER = "images"
|
25 |
+
# ANT_FOLDER = "annotations"
|
26 |
|
27 |
# 各種メッセージ
|
28 |
PLACEHOLDER = "これは東京都の年別人口データです、折れ線グラフでデータの可視化をお願いします… など"
|
|
|
34 |
INTER_SEC = int(os.environ["INTER_SEC"]) # 試行間隔(秒)
|
35 |
|
36 |
# サンプル用情報
|
37 |
+
# examples = ["sample_data/東京都年別人口.csv", "sample_data/世界の人口2023年.csv", "sample_data/練馬区年齢別人口.csv", "sample_data/桃太郎あらすじ.txt"]
|
38 |
+
examples = ["sample_data/東京都男女別人口_y23.csv","sample_data/東京都年齢別人口_y23.csv"]
|
39 |
|
40 |
+
# example_toid = {"東京都年別人口.csv" : "file-TMLJxwdTy1oaaoo2l712r1Os"
|
41 |
+
# ,"世界の人口2023年.csv" : "file-rafHPSkmMciOjKovah0u5oug"
|
42 |
+
# , "練馬区年齢別人口.csv" : "file-B5VqVSqgh8dB70ygHwt0LVIH"
|
43 |
+
# , "桃太郎あらすじ.txt" : "file-ylcNO5LShDYgDk5wiuSiyTMA"}
|
44 |
+
# ,"South Africa-2023.csv" : "file-6aarxpoX4TISJjqPH2Pi3QMV"}
|
45 |
|
46 |
# コード出力用
|
47 |
code_mode = {'ON': True, 'OFF': False}
|
|
|
62 |
""" 入力チェックを行う関数
|
63 |
※ここで例外を起こすと入力できなくなるので次の関数でエラーにする """
|
64 |
|
|
|
|
|
65 |
err_msg = ""
|
66 |
file_id = None
|
67 |
|
68 |
+
if state["openai_key"] == "":
|
69 |
|
70 |
+
# OpenAI API Key未入力
|
71 |
+
err_msg = "OpenAI API Keyを入力してください。(設定タブ)"
|
72 |
+
|
73 |
+
return state, file_id, err_msg
|
74 |
|
75 |
if not text:
|
76 |
|
|
|
81 |
|
82 |
elif file:
|
83 |
|
84 |
+
# 入力ファイルの形式チェック
|
85 |
root, ext = os.path.splitext(file)
|
86 |
|
87 |
if ext not in file_format:
|
|
|
91 |
|
92 |
return state, file_id, err_msg
|
93 |
|
94 |
+
try:
|
95 |
|
96 |
+
if state["client"] is None:
|
97 |
|
98 |
+
# 初回起動時は初期処理をする
|
99 |
+
# os.environ["OPENAI_API_KEY"] = os.environ["TEST_OPENAI_KEY"] # テスト時
|
100 |
+
os.environ["OPENAI_API_KEY"] = state["openai_key"]
|
101 |
|
102 |
+
# クライアント新規作成
|
103 |
+
client = OpenAI()
|
104 |
|
105 |
+
# client作成後は消す
|
106 |
+
os.environ["OPENAI_API_KEY"] = ""
|
107 |
|
108 |
+
# セッションにセット
|
109 |
+
state["client"] = client
|
110 |
|
111 |
+
else:
|
112 |
|
113 |
+
# 既存のクライアントをセット
|
114 |
+
client = state["client"]
|
115 |
|
116 |
+
if state["thread_id"] == "":
|
117 |
|
118 |
+
# スレッド作成
|
119 |
+
thread = client.beta.threads.create()
|
120 |
|
121 |
+
state["thread_id"] = thread.id
|
|
|
122 |
|
|
|
123 |
|
124 |
+
if state["assistant_id"] == "":
|
125 |
|
126 |
+
# 既存のアシスタントがあればIDを取得
|
127 |
+
assistant_id = get_assist_id(client, ASSIST_NAME)
|
128 |
|
129 |
+
if assistant_id == "":
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
130 |
|
131 |
+
# フォントファイルをアップ
|
132 |
+
font_file_response = client.files.create(
|
133 |
+
purpose="assistants",
|
134 |
+
file=open(FONT_FILE_PATH,"rb"),
|
135 |
+
)
|
136 |
|
137 |
+
# IDの取得
|
138 |
+
font_file_id = font_file_response.id
|
139 |
|
140 |
+
# アシスタント新規作成
|
141 |
+
assistant = client.beta.assistants.create(
|
142 |
+
name=ASSIST_NAME,
|
143 |
+
instructions=AST_SYS_PROMPT,
|
144 |
+
model=DF_MODEL,
|
145 |
+
file_ids=[font_file_id],
|
146 |
+
tools=[{"type": "code_interpreter"}] # テスト中はオフ
|
147 |
+
)
|
148 |
|
149 |
+
assistant_id = assistant.id
|
|
|
150 |
|
151 |
+
state["assistant_id"] = assistant_id
|
152 |
|
153 |
+
# アシスタントIDでフォルダ作成
|
154 |
+
os.makedirs(state["assistant_id"], exist_ok=True)
|
155 |
|
156 |
+
if file:
|
157 |
+
|
158 |
+
# ファイル名取得
|
159 |
+
# basename = os.path.basename(file)
|
160 |
+
|
161 |
+
# if example_toid.get(basename):
|
162 |
+
|
163 |
+
# # サンプルの場合は用意したIDをセット
|
164 |
+
# file_id = example_toid.get(basename)
|
165 |
+
|
166 |
+
# else:
|
167 |
|
168 |
# ファイルのアップ
|
169 |
file_response = client.files.create(
|
|
|
180 |
# ファイルのIDをセット
|
181 |
file_id = file_response.id
|
182 |
|
|
|
183 |
|
184 |
+
except NotFoundError as e:
|
185 |
+
err_msg = "アシスタントIDが間違っています。新しく作成する場合はアシスタントIDを空欄にして下さい。"
|
186 |
+
except AuthenticationError as e:
|
187 |
+
err_msg = "認証エラーとなりました。OpenAPIKeyが正しいか、支払い方法などが設定されているか確認して下さい。"
|
188 |
+
except Exception as e:
|
189 |
+
err_msg = "その他のエラーが発生しました。"
|
190 |
+
print(e)
|
191 |
+
finally:
|
192 |
+
return state, file_id, err_msg
|
193 |
+
|
194 |
+
def get_assist_id(client, assist_name):
|
195 |
+
|
196 |
+
assist_id = ""
|
197 |
+
|
198 |
+
assist_list = client.beta.assistants.list()
|
199 |
+
|
200 |
+
if len(assist_list.data) == 0:
|
201 |
|
202 |
+
return assist_id
|
203 |
+
|
204 |
+
for assist in assist_list:
|
205 |
+
|
206 |
+
if assist.name == assist_name:
|
207 |
+
|
208 |
+
assist_id = assist.id
|
209 |
+
|
210 |
+
break
|
211 |
+
|
212 |
+
return assist_id
|
213 |
|
214 |
def raise_exception(err_msg):
|
215 |
""" エラーの場合例外を起こす関数 """
|
|
|
225 |
|
226 |
err_msg = ""
|
227 |
|
228 |
+
# 入力テキスト追加
|
229 |
+
history = history + [(text, None)]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
230 |
|
231 |
# テキスト・ファイルを初期化し利用不可に
|
232 |
update_text = gr.update(value="", placeholder = "",interactive=False)
|
|
|
273 |
run = client.beta.threads.runs.create(
|
274 |
thread_id=thread_id,
|
275 |
assistant_id=assistant_id,
|
276 |
+
# instructions=system_prompt
|
277 |
)
|
278 |
|
279 |
+
# "completed"となるまで繰り返す
|
280 |
for i in range(0, MAX_TRIAL, 1):
|
281 |
|
282 |
if i > 0:
|
283 |
+
time.sleep(INTER_SEC) # 指定秒待��
|
284 |
|
285 |
# メッセージ受け取り
|
286 |
run = client.beta.threads.runs.retrieve(
|
|
|
295 |
order="asc"
|
296 |
)
|
297 |
|
|
|
|
|
|
|
|
|
|
|
|
|
298 |
# デバッグ用
|
299 |
print(run.status)
|
300 |
+
print(messages)
|
301 |
|
302 |
# messageを取り出す
|
303 |
for msg in messages:
|
304 |
|
305 |
if msg.role == "assistant":
|
306 |
|
307 |
+
for content in msg.content:
|
308 |
|
309 |
+
res_text = ""
|
310 |
+
file_id = ""
|
311 |
+
ant_file = None
|
312 |
|
313 |
+
cont_dict = content.model_dump() # 辞書型に変換
|
314 |
|
315 |
+
ct_image_file = cont_dict.get("image_file")
|
316 |
|
317 |
+
if ct_image_file:
|
318 |
|
319 |
+
# imageファイルがあるならIDセット
|
320 |
+
res_file_id = ct_image_file.get("file_id")
|
321 |
|
322 |
+
# ファイルをダウンロード
|
323 |
+
image_file = file_download(client, res_file_id, assistant_id, ".png")
|
324 |
|
325 |
+
if image_file is None:
|
326 |
|
327 |
+
err_msg = "ファイルのダウンロードに失敗しました。"
|
328 |
|
329 |
+
else:
|
330 |
|
331 |
+
res_text = IMG_MSG
|
332 |
|
333 |
+
history = history + [[None, res_text]]
|
334 |
|
335 |
+
# 最終メッセージID更新
|
336 |
+
last_msg_id = msg.id
|
337 |
|
338 |
+
else:
|
|
|
339 |
|
340 |
+
# 返答テキスト取得
|
341 |
+
res_text = cont_dict["text"].get("value")
|
342 |
|
343 |
+
# 注釈(参照ファイル)ががある場合取得
|
344 |
+
if len(cont_dict.get("text").get("annotations")) > 0:
|
345 |
|
346 |
+
ct_ant = cont_dict.get("text").get("annotations")
|
|
|
347 |
|
348 |
+
if ct_ant[0].get("file_path") is not None:
|
349 |
|
350 |
+
# 参照ファイルのID取得
|
351 |
+
ant_file_id = ct_ant[0].get("file_path").get("file_id")
|
352 |
|
353 |
+
if ct_ant[0].get("text") is not None:
|
|
|
354 |
|
355 |
+
# ファイル形式(拡張子)取得
|
356 |
+
ext = "." + ct_ant[0].get("text")[ct_ant[0].get("text").rfind('.') + 1:]
|
357 |
|
358 |
+
# ファイルダウンロード
|
359 |
+
ant_file = file_download(client, ant_file_id, assistant_id, ext)
|
360 |
|
361 |
+
if ant_file is None:
|
|
|
362 |
|
363 |
+
err_msg = "参照ファイルのダウンロードに失敗しました。"
|
364 |
|
365 |
+
else:
|
366 |
|
367 |
+
# 参照ファイルがある旨のメッセージを追加
|
368 |
+
res_text = res_text + "\n\n" + ANT_MSG
|
369 |
|
370 |
+
if res_text != "":
|
|
|
371 |
|
372 |
+
# Chat画面更新
|
373 |
+
if history[-1][1] is not None:
|
374 |
|
375 |
+
# 新しい行を追加
|
376 |
+
history = history + [[None, res_text]]
|
377 |
+
else:
|
378 |
|
379 |
+
history[-1][1] = res_text
|
|
|
|
|
380 |
|
381 |
+
# 最終メッセージID更新
|
382 |
+
last_msg_id = msg.id
|
383 |
|
384 |
+
# Chatbotを返す(labelとhistoryを更新)
|
385 |
+
yield gr.Chatbot(label=run.status, value=history), image_file, ant_file, err_msg
|
|
|
|
|
|
|
386 |
|
387 |
# メッセージIDを保存
|
388 |
state["last_msg_id"] = last_msg_id
|
|
|
392 |
|
393 |
if not code_mode:
|
394 |
|
395 |
+
# yield gr.Chatbot(label=run.status ,value=history), image_file, ant_file, err_msg
|
396 |
|
397 |
break
|
398 |
else:
|
|
|
432 |
yield gr.Chatbot(label=run.status ,value=history), image_file, ant_file, err_msg
|
433 |
break
|
434 |
|
435 |
+
# else:
|
436 |
+
# if i > 3:
|
437 |
|
438 |
+
# # 作業中とわかるようにする
|
439 |
+
# yield gr.Chatbot(label=run.status + " (Request:" + str(i) + ")" ,value=history), image_file, ant_file, err_msg
|
440 |
|
441 |
|
442 |
def get_code(run_steps):
|
|
|
502 |
with gr.Blocks() as demo:
|
503 |
|
504 |
title = "<h2>GPT Code Interpreter対応チャット</h2>"
|
505 |
+
message = "・設定タブからAPIKEYを入力してください<br>"
|
506 |
message += "・こういうときにエラーになるなどフィードバックあればお待ちしています。<br>"
|
|
|
|
|
507 |
message += "・コードインタープリターAPIの解説動画はこちらです→"
|
508 |
+
message += "https://www.youtube.com/watch?v=tFmedAM1FM8<br>"
|
509 |
+
message += '※動いているかわかりづらいですが、左上の"in_progress(Request:XX)"が止まっていなければ回答の生成中となります。<br>'
|
510 |
+
message += "※グラフの日本語文字化けの対応方法を注意事項に記載しました。<br>"
|
511 |
+
|
512 |
+
# title = "<h2>Code Interpreterデモアプリ</h2>"
|
513 |
+
# message = "<h3>最初に[設定]タブからOpenAIキーを入力してください。"
|
514 |
+
# message += "</h3>"
|
515 |
|
516 |
+
gr.Markdown(title + "<h3>" + message + "</h3>")
|
517 |
|
518 |
# セッションの宣言
|
519 |
state = gr.State({
|
520 |
+
"system_prompt": "",
|
521 |
"openai_key" : "",
|
522 |
"code_mode" : False,
|
523 |
"client" : None,
|
|
|
539 |
btn = gr.Button(value="送信")
|
540 |
# btn_download = gr.Button(value="画像のダウンロード") # 保留中
|
541 |
# btn_clear = gr.ClearButton(value="リセット", components=[chatbot, text_msg, up_file, file_id, result_image, sys_msg, result_file])
|
542 |
+
btn_clear = gr.ClearButton(value="リセット", components=[chatbot, text_msg, up_file, result_image])
|
543 |
sys_msg = gr.Textbox(label="システムメッセージ", interactive = False)
|
544 |
result_file = gr.File(label="出力ファイル", type="filepath",interactive = False)
|
545 |
|
|
|
561 |
# txt_msg = text_msg.submit(respond, inputs=[text_msg, image, chatbot], outputs=[text_msg, image, chatbot])
|
562 |
|
563 |
with gr.Tab("設定") as set:
|
564 |
+
openai_key = gr.Textbox(label="OpenAI API Key", visible=True)
|
565 |
# language = gr.Dropdown(choices=["Japanese", "English"], value = "Japanese", label="Language", interactive = True)
|
566 |
+
system_prompt = gr.Textbox(value = "",lines = 5, label="Custom instructions", interactive = True, visible=False)
|
567 |
code_output = gr.Dropdown(label="コード出力", choices=["OFF", "ON"], value = "OFF", interactive = True)
|
568 |
|
569 |
# 設定タブからChatタブに戻った時の処理
|
|
|
571 |
|
572 |
with gr.Tab("注意事項") as notes:
|
573 |
caution = "現在Assistant APIはβ版でのリリースとなっています。<br>"
|
574 |
+
# caution += "そのためか一部のファイルのアップロードが上手くいかないため、制限をかけています。<br>"
|
575 |
+
# caution += "(現在アップできるファイル形式は.txtと.csvのみ)<br>"
|
576 |
+
# caution += "本来はPDFなども利用できるはずなので、今後更新したいと思います。<br>"
|
577 |
caution += "文字化けする場合「NotoSansJP-Bold.zipを解凍してフォントを取得して下さい。」と指示し<br>"
|
578 |
caution += "グラフ作成時に「フォントはNotoSansJP-Boldを使用して下さい。」と指示して下さい。<br>"
|
579 |
caution += "※NotoSansJP-Bold.zipをアップする必要はありません。<br>"
|
580 |
+
caution += "詳細はこちら→https://github.com/nekoniii3/openai_multi_chat/tree/main/Code_Interpreter/docs/%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E5%88%A9%E7%94%A8"
|
581 |
gr.Markdown("<h3>" + caution + "</h3>")
|
582 |
|
583 |
|
584 |
+
if __name__ == "__main__":
|
|
|
585 |
|
586 |
+
demo.queue()
|
587 |
+
demo.launch(debug=True)
|
for_assistants/NotoSansJP-Bold.zip
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:a4e86a6b7c33c42fc1e5abf15c988c0ce9c1c39377b04ff2acb68034fbe00525
|
3 |
+
size 3367847
|
images/dummy.txt
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
dummy
|
|
|
|
requirements.txt
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
# gradio==4.2.0
|
2 |
-
openai==1.
|
|
|
1 |
# gradio==4.2.0
|
2 |
+
openai==1.7.1
|
sample_data/世界の人口2023年.csv
DELETED
@@ -1,22 +0,0 @@
|
|
1 |
-
Age,M,F
|
2 |
-
0-4,337082467,319557714
|
3 |
-
5-9,351715561,331015496
|
4 |
-
10-14,346898098,325046485
|
5 |
-
15-19,328189555,307629576
|
6 |
-
20-24,313191215,294184526
|
7 |
-
25-29,304421477,287497451
|
8 |
-
30-34,308206126,294461443
|
9 |
-
35-39,293650660,283742580
|
10 |
-
40-44,264954566,258134000
|
11 |
-
45-49,238892693,235655907
|
12 |
-
50-54,230886182,231469447
|
13 |
-
55-59,204396487,210274344
|
14 |
-
60-64,162559789,173807303
|
15 |
-
65-69,135678685,152556237
|
16 |
-
70-74,99662458,119189625
|
17 |
-
75-79,61653088,78620257
|
18 |
-
80-84,36107650,52173305
|
19 |
-
85-89,17564615,30311032
|
20 |
-
90-94,5956267,12939489
|
21 |
-
95-99,1189572,3510425
|
22 |
-
100+,130480,547105
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sample_data/東京都年齢別人口_y23.csv
ADDED
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
階層,令和5年1月1日現在/年齢,令和5年1月1日現在/総数(人),令和5年1月1日現在/男(人),令和5年1月1日現在/女(人),令和4年1月1日現在/年齢,令和4年1月1日現在/総数(人),令和4年1月1日現在/男(人),令和4年1月1日現在/女(人),差引増減/総数(人),差引増減/男(人),差引増減/女(人),増減率(総数)(%)
|
2 |
+
1,0,87008,44630,42378,-,0,0,0,87008,44630,42378,0
|
3 |
+
1,1,91032,46647,44385,0,91152,46693,44459,-120,-46,-74,-0.13
|
4 |
+
1,2,93581,48024,45557,1,95461,48941,46520,-1880,-917,-963,-1.97
|
5 |
+
1,3,95502,48665,46837,2,97025,49579,47446,-1523,-914,-609,-1.57
|
6 |
+
1,4,100792,51773,49019,3,102008,52401,49607,-1216,-628,-588,-1.19
|
7 |
+
1,5,102429,52228,50201,4,103363,52715,50648,-934,-487,-447,-0.9
|
8 |
+
1,6,105243,53730,51513,5,106110,54195,51915,-867,-465,-402,-0.82
|
9 |
+
1,7,106622,54484,52138,6,107540,54999,52541,-918,-515,-403,-0.85
|
10 |
+
1,8,104807,53445,51362,7,105140,53584,51556,-333,-139,-194,-0.32
|
11 |
+
1,9,105546,53889,51657,8,105795,54006,51789,-249,-117,-132,-0.24
|
12 |
+
1,10,103211,52810,50401,9,103357,52866,50491,-146,-56,-90,-0.14
|
13 |
+
1,11,102789,52887,49902,10,102828,52889,49939,-39,-2,-37,-0.04
|
14 |
+
1,12,104836,53835,51001,11,104729,53797,50932,107,38,69,0.1
|
15 |
+
1,13,103938,53317,50621,12,103783,53319,50464,155,-2,157,0.15
|
16 |
+
1,14,103794,53057,50737,13,103735,53012,50723,59,45,14,0.06
|
17 |
+
1,15,102696,52802,49894,14,102451,52665,49786,245,137,108,0.24
|
18 |
+
1,16,101401,51662,49739,15,101051,51578,49473,350,84,266,0.35
|
19 |
+
1,17,97131,49627,47504,16,96966,49549,47417,165,78,87,0.17
|
20 |
+
1,18,103668,52552,51116,17,100872,51259,49613,2796,1293,1503,2.77
|
21 |
+
1,19,112691,57155,55536,18,103645,52847,50798,9046,4308,4738,8.73
|
22 |
+
1,20,118741,60256,58485,19,114295,58133,56162,4446,2123,2323,3.89
|
23 |
+
1,21,125652,62586,63066,20,117457,59183,58274,8195,3403,4792,6.98
|
24 |
+
1,22,137067,68160,68907,21,128043,63987,64056,9024,4173,4851,7.05
|
25 |
+
1,23,156621,77106,79515,22,135810,67575,68235,20811,9531,11280,15.32
|
26 |
+
1,24,168929,83198,85731,23,159702,78236,81466,9227,4962,4265,5.78
|
27 |
+
1,25,175207,86693,88514,24,167117,81971,85146,8090,4722,3368,4.84
|
28 |
+
1,26,178384,88899,89485,25,172660,85758,86902,5724,3141,2583,3.32
|
29 |
+
1,27,175098,87351,87747,26,172049,85656,86393,3049,1695,1354,1.77
|
30 |
+
1,28,181800,91377,90423,27,180094,90438,89656,1706,939,767,0.95
|
31 |
+
1,29,171665,86613,85052,28,171176,86209,84967,489,404,85,0.29
|
32 |
+
1,30,171547,86919,84628,29,172372,87277,85095,-825,-358,-467,-0.48
|
33 |
+
1,31,169777,86098,83679,30,171460,87025,84435,-1683,-927,-756,-0.98
|
34 |
+
1,32,165295,83218,82077,31,166883,84048,82835,-1588,-830,-758,-0.95
|
35 |
+
1,33,164668,83420,81248,32,166310,84242,82068,-1642,-822,-820,-0.99
|
36 |
+
1,34,171112,86619,84493,33,172849,87474,85375,-1737,-855,-882,-1
|
37 |
+
1,35,173431,87895,85536,34,175105,88872,86233,-1674,-977,-697,-0.96
|
38 |
+
1,36,174474,88313,86161,35,176321,89323,86998,-1847,-1010,-837,-1.05
|
39 |
+
1,37,179695,91409,88286,36,181527,92348,89179,-1832,-939,-893,-1.01
|
40 |
+
1,38,186958,95537,91421,37,188572,96360,92212,-1614,-823,-791,-0.86
|
41 |
+
1,39,187241,95860,91381,38,188739,96671,92068,-1498,-811,-687,-0.79
|
42 |
+
1,40,186221,95332,90889,39,187793,96226,91567,-1572,-894,-678,-0.84
|
43 |
+
1,41,186165,95190,90975,40,187480,96001,91479,-1315,-811,-504,-0.7
|
44 |
+
1,42,189821,96947,92874,41,191135,97719,93416,-1314,-772,-542,-0.69
|
45 |
+
1,43,196288,99883,96405,42,197367,100512,96855,-1079,-629,-450,-0.55
|
46 |
+
1,44,201030,102481,98549,43,201748,102945,98803,-718,-464,-254,-0.36
|
47 |
+
1,45,203801,103883,99918,44,204778,104510,100268,-977,-627,-350,-0.48
|
48 |
+
1,46,208445,106356,102089,45,209310,106877,102433,-865,-521,-344,-0.41
|
49 |
+
1,47,212244,108210,104034,46,213069,108766,104303,-825,-556,-269,-0.39
|
50 |
+
1,48,225408,114194,111214,47,226154,114758,111396,-746,-564,-182,-0.33
|
51 |
+
1,49,233104,117930,115174,48,234026,118523,115503,-922,-593,-329,-0.39
|
52 |
+
1,50,229268,115593,113675,49,230145,116183,113962,-877,-590,-287,-0.38
|
53 |
+
1,51,226156,113902,112254,50,227051,114484,112567,-895,-582,-313,-0.39
|
54 |
+
1,52,219422,111084,108338,51,220394,111643,108751,-972,-559,-413,-0.44
|
55 |
+
1,53,214830,109734,105096,52,215816,110268,105548,-986,-534,-452,-0.46
|
56 |
+
1,54,211765,109077,102688,53,212857,109685,103172,-1092,-608,-484,-0.51
|
57 |
+
1,55,215139,110748,104391,54,216329,111427,104902,-1190,-679,-511,-0.55
|
58 |
+
1,56,155689,80558,75131,55,156692,81134,75558,-1003,-576,-427,-0.64
|
59 |
+
1,57,198044,102304,95740,56,199367,103134,96233,-1323,-830,-493,-0.66
|
60 |
+
1,58,182601,94434,88167,57,183876,95228,88648,-1275,-794,-481,-0.69
|
61 |
+
1,59,168484,86931,81553,58,169870,87750,82120,-1386,-819,-567,-0.82
|
62 |
+
1,60,157982,81229,76753,59,159706,82397,77309,-1724,-1168,-556,-1.08
|
63 |
+
1,61,149351,76456,72895,60,150752,77421,73331,-1401,-965,-436,-0.93
|
64 |
+
1,62,145487,74342,71145,61,146909,75239,71670,-1422,-897,-525,-0.97
|
65 |
+
1,63,138790,70754,68036,62,140277,71739,68538,-1487,-985,-502,-1.06
|
66 |
+
1,64,135713,69019,66694,63,137109,69909,67200,-1396,-890,-506,-1.02
|
67 |
+
1,65,124772,62657,62115,64,126279,63666,62613,-1507,-1009,-498,-1.19
|
68 |
+
1,66,124815,62230,62585,65,126425,63328,63097,-1610,-1098,-512,-1.27
|
69 |
+
1,67,126565,62978,63587,66,128127,64068,64059,-1562,-1090,-472,-1.22
|
70 |
+
1,68,125169,62072,63097,67,126888,63243,63645,-1719,-1171,-548,-1.35
|
71 |
+
1,69,126611,62064,64547,68,128367,63303,65064,-1756,-1239,-517,-1.37
|
72 |
+
1,70,134370,65346,69024,69,136356,66766,69590,-1986,-1420,-566,-1.46
|
73 |
+
1,71,138037,66694,71343,70,140253,68245,72008,-2216,-1551,-665,-1.58
|
74 |
+
1,72,148729,71230,77499,71,151342,73017,78325,-2613,-1787,-826,-1.73
|
75 |
+
1,73,170208,80330,89878,72,173411,82519,90892,-3203,-2189,-1014,-1.85
|
76 |
+
1,74,167808,78464,89344,73,171270,80807,90463,-3462,-2343,-1119,-2.02
|
77 |
+
1,75,169772,78309,91463,74,173461,80844,92617,-3689,-2535,-1154,-2.13
|
78 |
+
1,76,114262,51543,62719,75,117064,53366,63698,-2802,-1823,-979,-2.39
|
79 |
+
1,77,100355,44328,56027,76,103012,46073,56939,-2657,-1745,-912,-2.58
|
80 |
+
1,78,120888,52366,68522,77,124459,54662,69797,-3571,-2296,-1275,-2.87
|
81 |
+
1,79,127677,54440,73237,78,131675,56930,74745,-3998,-2490,-1508,-3.04
|
82 |
+
1,80,120499,50678,69821,79,124681,53262,71419,-4182,-2584,-1598,-3.35
|
83 |
+
1,81,117791,48677,69114,80,122467,51468,70999,-4676,-2791,-1885,-3.82
|
84 |
+
1,82,105098,42448,62650,81,109658,45108,64550,-4560,-2660,-1900,-4.16
|
85 |
+
1,83,88263,34890,53373,82,92724,37423,55301,-4461,-2533,-1928,-4.81
|
86 |
+
1,84,82240,31805,50435,83,86726,34285,52441,-4486,-2480,-2006,-5.17
|
87 |
+
1,85,86261,32467,53794,84,91734,35405,56329,-5473,-2938,-2535,-5.97
|
88 |
+
1,86,78107,28710,49397,85,83832,31648,52184,-5725,-2938,-2787,-6.83
|
89 |
+
1,87,75111,26875,48236,86,81298,29933,51365,-6187,-3058,-3129,-7.61
|
90 |
+
1,88,60474,20836,39638,87,66298,23673,42625,-5824,-2837,-2987,-8.78
|
91 |
+
1,89,54990,18089,36901,88,61100,20940,40160,-6110,-2851,-3259,-10
|
sample_data/{東京都年別人口.csv → 東京都男女別人口_y23.csv}
RENAMED
@@ -1,5 +1,4 @@
|
|
1 |
和暦(年次)・(各年1月1日),西暦(年次)・(各年1月1日),総数/人口(人),総数/増減数(人),男女別/男/人口(人),男女別/男/増減数(人),男女別/女/人口(人),男女別/女/増減数(人),地域別/区部/人口(人),地域別/区部/増減数(人),地域別/市部/人口(人),地域別/市部/増減数(人),地域別/町村部/人口(人),地域別/町村部/増減数(人)
|
2 |
-
昭和32,1957,8259474,-,4252152,-,4007322,-,7142559,-,1035603,-,81312,-
|
3 |
昭和33,1958,8524433,264959,4399593,147441,4124840,117518,7359266,216707,1084404,48801,80763,-549
|
4 |
昭和34,1959,8828705,304272,4560824,161231,4267881,143041,7598964,239698,1146960,62556,82781,2018
|
5 |
昭和35,1960,9106349,277644,4706355,145531,4399994,132113,7796178,197214,1227950,80990,82221,-560
|
@@ -66,6 +65,3 @@
|
|
66 |
令和3,2021,13297089,39493,6537442,14629,6759647,24864,9115890,31248,4101271,9081,79928,-836
|
67 |
令和4,2022,13277052,-20037,6522919,-14523,6754133,-5514,9092428,-23462,4105528,4257,79096,-832
|
68 |
令和5,2023,13260553,-16499,6509894,-13025,6750659,-3474,9083767,-8661,4098680,-6848,78106,-990
|
69 |
-
,,,,,,,,,,,,,
|
70 |
-
住民基本台帳による東京都の世帯と人口 令和5年1月,,,,,,,,,,,,,
|
71 |
-
時系列 第3表 男女別人口及び地域別人口(日本人) (昭和32年~令和5年),,,,,,,,,,,,,
|
|
|
1 |
和暦(年次)・(各年1月1日),西暦(年次)・(各年1月1日),総数/人口(人),総数/増減数(人),男女別/男/人口(人),男女別/男/増減数(人),男女別/女/人口(人),男女別/女/増減数(人),地域別/区部/人口(人),地域別/区部/増減数(人),地域別/市部/人口(人),地域別/市部/増減数(人),地域別/町村部/人口(人),地域別/町村部/増減数(人)
|
|
|
2 |
昭和33,1958,8524433,264959,4399593,147441,4124840,117518,7359266,216707,1084404,48801,80763,-549
|
3 |
昭和34,1959,8828705,304272,4560824,161231,4267881,143041,7598964,239698,1146960,62556,82781,2018
|
4 |
昭和35,1960,9106349,277644,4706355,145531,4399994,132113,7796178,197214,1227950,80990,82221,-560
|
|
|
65 |
令和3,2021,13297089,39493,6537442,14629,6759647,24864,9115890,31248,4101271,9081,79928,-836
|
66 |
令和4,2022,13277052,-20037,6522919,-14523,6754133,-5514,9092428,-23462,4105528,4257,79096,-832
|
67 |
令和5,2023,13260553,-16499,6509894,-13025,6750659,-3474,9083767,-8661,4098680,-6848,78106,-990
|
|
|
|
|
|
sample_data/桃太郎あらすじ.txt
DELETED
@@ -1,163 +0,0 @@
|
|
1 |
-
桃太郎
|
2 |
-
楠山正雄
|
3 |
-
|
4 |
-
一
|
5 |
-
|
6 |
-
むかし、むかし、あるところに、おじいさんとおばあさんがありました。まいにち、おじいさんは山へしば刈かりに、おばあさんは川へ洗濯せんたくに行きました。
|
7 |
-
ある日、おばあさんが、川のそばで、せっせと洗濯せんたくをしていますと、川上かわかみから、大きな桃ももが一つ、
|
8 |
-
「ドンブラコッコ、スッコッコ。
|
9 |
-
ドンブラコッコ、スッコッコ。」
|
10 |
-
と流ながれて来きました。
|
11 |
-
「おやおや、これはみごとな桃ももだこと。おじいさんへのおみやげに、どれどれ、うちへ持もって帰かえりましょう。」
|
12 |
-
おばあさんは、そう言いいながら、腰こしをかがめて桃ももを取とろうとしましたが、遠とおくって手がとどきません。おばあさんはそこで、
|
13 |
-
「あっちの水みいずは、かあらいぞ。
|
14 |
-
こっちの水みいずは、ああまいぞ。
|
15 |
-
かあらい水みいずは、よけて来こい。
|
16 |
-
ああまい水みいずに、よって来こい。
|
17 |
-
と歌うたいながら、手をたたきました。すると桃ももはまた、
|
18 |
-
「ドンブラコッコ、スッコッコ。
|
19 |
-
ドンブラコッコ、スッコッコ。」
|
20 |
-
といいながら、おばあさんの前まえへ流ながれて来きました。おばあさんはにこにこしながら、
|
21 |
-
「早はやくおじいさんと二人ふたりで分わけて食たべましょう。」
|
22 |
-
と言いって、桃ももをひろい上あげて、洗濯物せんたくものといっしょにたらいの中に入いれて、えっちら、おっちら、かかえておうちへ帰かえりました。
|
23 |
-
夕方ゆうがたになってやっと、おじいさんは山からしばを背負せおって帰かえって来きました。
|
24 |
-
「おばあさん、今いま帰かえったよ。」
|
25 |
-
「おや、おじいさん、おかいんなさい。待まっていましたよ。さあ、早はやくお上あがんなさい。いいものを上あげますから。」
|
26 |
-
「それはありがたいな。何なんだね、そのいいものというのは。」
|
27 |
-
こういいながら、おじいさんはわらじをぬいで、上に上あがりました。その間まに、おばあさんは戸棚とだなの中からさっきの桃ももを重おもそうにかかえて来きて、
|
28 |
-
「ほら、ごらんなさいこの桃ももを。」
|
29 |
-
と言いいました。
|
30 |
-
「ほほう、これはこれは。どこからこんなみごとな桃ももを買かって来きた。」
|
31 |
-
「いいえ、買かって来きたのではありません。今日きょう川で拾ひろって来きたのですよ。」
|
32 |
-
「え、なに、川で拾ひろって来きた。それはいよいよめずらしい。」
|
33 |
-
こうおじいさんは言いいながら、桃ももを両手りょうてにのせて、ためつ、すがめつ、ながめていますと、だしぬけに、桃ももはぽんと中から二つに割われて、
|
34 |
-
「おぎゃあ、おぎゃあ。」
|
35 |
-
と勇いさましいうぶ声こえを上あげながら、かわいらしい赤あかさんが元気げんきよくとび出だしました。
|
36 |
-
「おやおや、まあ。」
|
37 |
-
おじいさんも、おばあさんも、びっくりして、二人ふたりいっしょに声こえを立たてました。
|
38 |
-
「まあまあ、わたしたちが、へいぜい、どうかして子供こどもが一人ひとりほしい、ほしいと言いっていたものだから、きっと神かみさまがこの子をさずけて下くださったにちがいない。」
|
39 |
-
おじいさんも、おばあさんも、うれしがって、こう言いいました。
|
40 |
-
そこであわてておじいさんがお湯ゆをわかすやら、おばあさんがむつきをそろえるやら、大おおさわぎをして、赤あかさんを抱だき上あげて、うぶ湯ゆをつかわせました。するといきなり、
|
41 |
-
「うん。」
|
42 |
-
と言いいながら、赤あかさんは抱だいているおばあさんの手をはねのけました。
|
43 |
-
「おやおや、何なんという元気げんきのいい子だろう。」
|
44 |
-
おじいさんとおばあさんは、こう言いって顔かおを見合みあわせながら、「あッは、あッは。」とおもしろそうに笑わらいました。
|
45 |
-
そして桃ももの中から生うまれた子だというので、この子に桃太郎ももたろうという名なをつけました。
|
46 |
-
|
47 |
-
二
|
48 |
-
|
49 |
-
おじいさんとおばあさんは、それはそれはだいじにして桃太郎ももたろうを育そだてました。桃太郎ももたろうはだんだん成長せいちょうするにつれて、あたりまえの子供こどもにくらべては、ずっと体からだも大きいし、力ちからがばかに強つよくって、すもうをとっても近所きんじょの村むらじゅうで、かなうものは一人ひとりもないくらいでしたが、そのくせ気きだ���はごくやさしくって、おじいさんとおばあさんによく孝行こうこうをしました。
|
50 |
-
桃太郎ももたろうは十五になりました。
|
51 |
-
もうそのじぶんには、日本にほんの国中くにじゅうで、桃太郎ももたろうほど強つよいものはないようになりました。桃太郎ももたろうはどこか外国がいこくへ出かけて、腕うでいっぱい、力ちからだめしをしてみたくなりました。
|
52 |
-
するとそのころ、ほうぼう外国がいこくの島々しまじまをめぐって帰かえって来きた人があって、いろいろめずらしい、ふしぎなお話はなしをした末すえに、
|
53 |
-
「もう何年なんねんも何年なんねんも船ふねをこいで行くと、遠とおい遠とおい海うみのはてに、鬼おにが島しまという所ところがある。悪わるい鬼おにどもが、いかめしいくろがねのお城しろの中に住すんで、ほうぼうの国くにからかすめ取とった貴とうとい宝物たからものを守まもっている。」
|
54 |
-
と言いいました。
|
55 |
-
桃太郎ももたろうはこの話はなしをきくと、その鬼おにが島しまへ行ってみたくって、もう居いても立たってもいられなくなりました。そこでうちへ帰かえるとさっそく、おじいさんの前まえへ出て、
|
56 |
-
「どうぞ、わたくしにしばらくおひまを下ください。」
|
57 |
-
と言いいました。
|
58 |
-
おじいさんはびっくりして、
|
59 |
-
「お前まえどこへ行くのだ。」
|
60 |
-
と聞ききました。
|
61 |
-
「鬼おにが島しまへ鬼おにせいばつに行こうと思おもいます。」
|
62 |
-
と桃太郎ももたろうはこたえました。
|
63 |
-
「ほう、それはいさましいことだ。じゃあ行っておいで。」
|
64 |
-
とおじいさんは言いいました。
|
65 |
-
「まあ、そんな遠方えんぽうへ行くのでは、さぞおなかがおすきだろう。よしよし、おべんとうをこしらえて上あげましょう。」
|
66 |
-
とおばあさんも言いいました。
|
67 |
-
そこで、おじいさんとおばあさんは、お庭にわのまん中に、えんやら、えんやら、大きな臼うすを持もち出だして、おじいさんがきねを取とると、おばあさんはこねどりをして、
|
68 |
-
「ぺんたらこっこ、ぺんたらこっこ。ぺんたらこっこ、ぺんたらこっこ。」
|
69 |
-
と、おべんとうのきびだんごをつきはじめました。
|
70 |
-
きびだんごがうまそうにでき上あがると、桃太郎ももたろうのしたくもすっかりでき上あがりました。
|
71 |
-
桃太郎ももたろうはお侍さむらいの着きるような陣羽織じんばおりを着きて、刀かたなを腰こしにさして、きびだんごの袋ふくろをぶら下さげました。そして桃ももの絵えのかいてある軍扇ぐんせんを手に持もって、
|
72 |
-
「ではおとうさん、おかあさん、行ってまいります。」
|
73 |
-
と言いって、ていねいに頭あたまを下さげました。
|
74 |
-
「じゃあ、りっぱに鬼おにを退治たいじしてくるがいい。」
|
75 |
-
とおじいさんは言いいました。
|
76 |
-
「気きをつけて、けがをしないようにおしよ。」
|
77 |
-
とおばあさんも言いいました。
|
78 |
-
「なに、大丈夫だいじょうぶです、日本一にっぽんいちのきびだんごを持もっているから。」と桃太郎ももたろうは言いって、
|
79 |
-
「では、ごきげんよう。」
|
80 |
-
と元気げんきな声こえをのこして、出でていきました。おじいさんとおばあさんは、門もんの外そとに立たって、いつまでも、いつまでも見送みおくっていました。
|
81 |
-
|
82 |
-
三
|
83 |
-
|
84 |
-
桃太郎ももたろうはずんずん行きますと、大きな山の上に来きました。すると、草くさむらの中から、「ワン、ワン。」と声こえをかけながら、犬いぬが一ぴきかけて来きました。
|
85 |
-
桃太郎ももたろうがふり返かえると、犬いぬはていねいに、おじぎをして、
|
86 |
-
「桃太郎ももたろうさん、桃太郎ももたろうさん、どちらへおいでになります。」
|
87 |
-
とたずねました。
|
88 |
-
「鬼おにが島しまへ、鬼おにせいばつに行くのだ。」
|
89 |
-
「お腰こしに下さげたものは、何なんでございます。」
|
90 |
-
「日本にっぽん一のきびだんごさ。」
|
91 |
-
「一つ下ください、お供ともしましょう。」
|
92 |
-
「よし、よし、やるから、ついて来こい。」
|
93 |
-
犬いぬはきびだんごを一つもらって、桃太郎ももたろうのあとから、ついて行きました。
|
94 |
-
山を下おりてしばらく行いくと、こんどは森もりの中にはいりました。すると木の上から、「キャッ、キャッ。」とさけびながら、猿さるが一ぴき、かけ下おりて来きました。
|
95 |
-
桃太郎ももたろうがふり返かえると、猿さるはていねいに、お���ぎをして、
|
96 |
-
「桃太郎ももたろうさん、桃太郎ももたろうさん、どちらへおいでになります。」
|
97 |
-
とたずねました。
|
98 |
-
「鬼おにが島しまへ鬼おにせいばつに行くのだ。」
|
99 |
-
「お腰こしに下さげたものは、何なんでございます。」
|
100 |
-
「日本にっぽん一のきびだんごさ。」
|
101 |
-
「一つ下ください、お供ともしましょう。」
|
102 |
-
「よし、よし、やるから、ついて来こい。」
|
103 |
-
猿さるもきびだんごを一つもらって、あとからついて行きました。
|
104 |
-
山を下おりて、森もりをぬけて、こんどはひろい野原のはらへ出ました。すると空そらの上で、「ケン、ケン。」と鳴なく声こえがして、きじが一羽わとんで来きました。
|
105 |
-
桃太郎ももたろうがふり返かえると、きじはていねいに、おじぎをして、
|
106 |
-
「桃太郎ももたろうさん、桃太郎ももたろうさん、どちらへおいでになります。」
|
107 |
-
とたずねました。
|
108 |
-
「鬼おにが島しまへ鬼おにせいばつに行くのだ。」
|
109 |
-
「お腰こしに下さげたものは、何なんでございます。」
|
110 |
-
「日本一にっぽんいちのきびだんごさ。」
|
111 |
-
「一つ下ください、お供ともしましょう。」
|
112 |
-
「よし、よし、やるから、ついて来こい。」
|
113 |
-
きじもきびだんごを一つもらって、桃太郎ももたろうのあとからついて行きました。
|
114 |
-
犬いぬと、猿さると、きじと、これで三にんまで、いい家来けらいができたので、桃太郎ももたろうはいよいよ勇いさみ立たって、またずんずん進すすんで行きますと、やがてひろい海うみばたに出ました。
|
115 |
-
そこには、ちょうどいいぐあいに、船ふねが一そうつないでありました。
|
116 |
-
桃太郎ももたろうと、三にんの家来けらいは、さっそく、この船ふねに乗のり込こみました。
|
117 |
-
「わたくしは、漕こぎ手てになりましょう。」
|
118 |
-
こう言いって、犬いぬは船ふねをこぎ出だしました。
|
119 |
-
「わたくしは、かじ取とりになりましょう。」
|
120 |
-
こう言いって、猿さるがかじに座すわりました。
|
121 |
-
「わたくしは物見ものみをつとめましょう。」
|
122 |
-
こう言いって、きじがへさきに立たちました。
|
123 |
-
うららかないいお天気てんきで、まっ青さおな海うみの上には、波なみ一つ立たちませんでした。稲妻いなづまが走はしるようだといおうか、矢やを射いるようだといおうか、目のまわるような速はやさで船ふねは走って行きました。ほんの一時間じかんも走はしったと思おもうころ、へさきに立たって向むこうをながめていたきじが、「あれ、あれ、島しまが。」とさけびながら、ぱたぱたと高たかい羽音はおとをさせて、空そらにとび上あがったと思おもうと、スウッとまっすぐに風かぜを切きって、飛とんでいきました。
|
124 |
-
桃太郎ももたろうもすぐきじの立たったあとから向むこうを見みますと、なるほど、遠とおい遠とおい海うみのはてに、ぼんやり雲くものような薄うすぐろいものが見みえました。船ふねの進すすむにしたがって、雲くものように見みえていたものが、だんだんはっきりと島しまの形かたちになって、あらわれてきました。
|
125 |
-
「ああ、見みえる、見みえる、鬼おにが島しまが見みえる。」
|
126 |
-
桃太郎ももたろうがこういうと、犬いぬも、猿さるも、声こえをそろえて、「万歳ばんざい、万歳ばんざい。」とさけびました。
|
127 |
-
見みる見みる鬼おにが島しまが近ちかくなって、もう硬かたい岩いわで畳たたんだ鬼おにのお城しろが見みえました。いかめしいくろがねの門もんの前まえに見みはりをしている鬼おにの兵隊へいたいのすがたも見みえました。
|
128 |
-
そのお城しろのいちばん高たかい屋根やねの上に、きじがとまって、こちらを見みていました。
|
129 |
-
こうして何年なんねんも、何年なんねんもこいで行いかなければならないという鬼おにが島しまへ、ほんの目をつぶっている間まに来きたのです。
|
130 |
-
|
131 |
-
四
|
132 |
-
|
133 |
-
桃太郎ももたろうは、犬いぬと猿さるをしたがえて、船ふねからひらりと陸おかの上にとび上あがりました。
|
134 |
-
見みはりをしていた鬼おにの兵隊へいたいは、その見みなれないすがたを見みると、びっくりして、あわてて門もんの中に逃にげ込こんで、くろがねの門もんを固かたくしめてしまいました。その時とき犬いぬは門もんの前まえに立たって、
|
135 |
-
「日本にほんの桃太郎ももたろうさんが、お前まえたちをせいばいにおいでになったのだぞ���あけろ、あけろ。」
|
136 |
-
とどなりながら、ドン、ドン、扉とびらをたたきました。鬼おにはその声こえを聞きくと、ふるえ上あがって、よけい一生懸命いっしょうけんめいに、中から押おさえていました。
|
137 |
-
するときじが屋根やねの上からとび下おりてきて、門もんを押おさえている鬼おにどもの目をつつきまわりましたから、鬼おにはへいこうして逃にげ出だしました。その間まに、猿さるがするすると高たかい岩壁いわかべをよじ登のぼっていって、ぞうさなく門もんを中からあけました。
|
138 |
-
「わあッ。」とときの声こえを上あげて、桃太郎ももたろうの主従しゅじゅうが、いさましくお城しろの中に攻せめ込こんでいきますと、鬼おにの大将たいしょうも大おおぜいの家来けらいを引ひき連つれて、一人一人ひとりひとり、太ふとい鉄てつの棒ぼうをふりまわしながら、「おう、おう。」とさけんで、向むかってきました。
|
139 |
-
けれども、体からだが大きいばっかりで、いくじのない鬼おにどもは、さんざんきじに目をつつかれた上に、こんどは犬いぬに向むこうずねをくいつかれたといっては、痛いたい、痛いたいと逃にげまわり、猿さるに顔かおを引ひっかかれたといっては、おいおい泣なき出だして、鉄てつの棒ぼうも何なにもほうり出だして、降参こうさんしてしまいました。
|
140 |
-
おしまいまでがまんして、たたかっていた鬼おにの大将たいしょうも、とうとう桃太郎ももたろうに組くみふせられてしまいました。桃太郎ももたろうは大きな鬼おにの背中せなかに、馬乗うまのりにまたがって、
|
141 |
-
「どうだ、これでも降参こうさんしないか。」
|
142 |
-
といって、ぎゅうぎゅう、ぎゅうぎゅう、押おさえつけました。
|
143 |
-
鬼おにの大将たいしょうは、桃太郎ももたろうの大力だいりきで首くびをしめられて、もう苦くるしくってたまりませんから、大おおつぶの涙なみだをぼろぼろこぼしながら、
|
144 |
-
「降参こうさんします、降参こうさんします。命いのちだけはお助たすけ下ください。その代かわりに宝物たからものをのこらずさし上あげます。」
|
145 |
-
こう言いって、ゆるしてもらいました。
|
146 |
-
鬼おにの大将たいしょうは約束やくそくのとおり、お城しろから、かくれみのに、かくれ笠がさ、うちでの小こづちに如意宝珠にょいほうじゅ、そのほかさんごだの、たいまいだの、るりだの、世界せかいでいちばん貴とうとい宝物たからものを山のように車くるまに積つんで出だしました。
|
147 |
-
桃太郎ももたろうはたくさんの宝物たからものをのこらず積つんで、三にんの家来けらいといっしょに、また船ふねに乗のりました。帰かえりは行きよりもまた一そう船ふねの走はしるのが速はやくって、間まもなく日本にほんの国くにに着つきました。
|
148 |
-
船ふねが陸おかに着つきますと、宝物たからものをいっぱい積つんだ車くるまを、犬いぬが先さきに立たって引ひき出だしました。きじが綱つなを引ひいて、猿さるがあとを押おしました。
|
149 |
-
「えんやらさ、えんやらさ。」
|
150 |
-
三にんは重おもそうに、かけ声ごえをかけかけ進すすんでいきました。
|
151 |
-
うちではおじいさんと、おばあさんが、かわるがわる、
|
152 |
-
「もう桃太郎ももたろうが帰かえりそうなものだが。」
|
153 |
-
と言いい言いい、首くびをのばして待まっていました。そこへ桃太郎ももたろうが三にんのりっぱな家来けらいに、ぶんどりの宝物たからものを引ひかせて、さもとくいらしい様子ようすをして帰かえって来きましたので、おじいさんもおばあさんも、目も鼻はなもなくして喜よろこびました。
|
154 |
-
「えらいぞ、えらいぞ、それこそ日本一にっぽんいちだ。」
|
155 |
-
とおじいさんは言いいました。
|
156 |
-
「まあ、まあ、けががなくって、何なによりさ。」
|
157 |
-
とおばあさんは言いいました。
|
158 |
-
桃太郎ももたろうは、その時とき犬いぬと猿さるときじの方ほうを向むいてこう言いいました。
|
159 |
-
「どうだ。鬼おにせいばつはおもしろかったなあ。」
|
160 |
-
犬いぬはワン、ワンとうれしそうにほえながら、前足まえあしで立たちました。
|
161 |
-
猿さるはキャッ、キャッと笑わらいながら、白しろい歯はをむき出だしました。
|
162 |
-
きじはケン、ケンと鳴なきながら、くるくると宙返ちゅうがえりをしました。
|
163 |
-
空そらは青々あおあおと晴はれ上あが���て、お庭にわには桜さくらの花はなが咲さき乱みだれていました。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sample_data/練馬区年齢別人口.csv
DELETED
@@ -1,108 +0,0 @@
|
|
1 |
-
年齢[歳],合 計[人],男性合計[人],女性合計[人]
|
2 |
-
総 数,740410,358101,382309
|
3 |
-
0,4877,2467,2410
|
4 |
-
1,5161,2691,2470
|
5 |
-
2,5215,2700,2515
|
6 |
-
3,5482,2796,2686
|
7 |
-
4,5350,2730,2620
|
8 |
-
5,5773,2982,2791
|
9 |
-
6,5779,2915,2864
|
10 |
-
7,5808,2991,2817
|
11 |
-
8,6174,3121,3053
|
12 |
-
9,5844,2979,2865
|
13 |
-
10,5935,3034,2901
|
14 |
-
11,5731,2984,2747
|
15 |
-
12,6030,3090,2940
|
16 |
-
13,6017,3067,2950
|
17 |
-
14,5924,3005,2919
|
18 |
-
15,6107,3227,2880
|
19 |
-
16,5948,3086,2862
|
20 |
-
17,5757,2994,2763
|
21 |
-
18,6272,3165,3107
|
22 |
-
19,6704,3349,3355
|
23 |
-
20,7384,3778,3606
|
24 |
-
21,7855,3855,4000
|
25 |
-
22,8872,4313,4559
|
26 |
-
23,9817,4687,5130
|
27 |
-
24,9955,4735,5220
|
28 |
-
25,10560,4957,5603
|
29 |
-
26,10590,4940,5650
|
30 |
-
27,10394,4937,5457
|
31 |
-
28,10585,5036,5549
|
32 |
-
29,10576,5078,5498
|
33 |
-
30,10051,4750,5301
|
34 |
-
31,10165,4927,5238
|
35 |
-
32,10001,4860,5141
|
36 |
-
33,9913,4777,5136
|
37 |
-
34,9907,4849,5058
|
38 |
-
35,9901,4862,5039
|
39 |
-
36,9984,4935,5049
|
40 |
-
37,9873,4930,4943
|
41 |
-
38,10320,5145,5175
|
42 |
-
39,10588,5233,5355
|
43 |
-
40,10370,5184,5186
|
44 |
-
41,10188,5155,5033
|
45 |
-
42,10125,5093,5032
|
46 |
-
43,10478,5302,5176
|
47 |
-
44,10524,5315,5209
|
48 |
-
45,10590,5350,5240
|
49 |
-
46,10832,5389,5443
|
50 |
-
47,11185,5682,5503
|
51 |
-
48,11515,5819,5696
|
52 |
-
49,12151,6070,6081
|
53 |
-
50,12379,6181,6198
|
54 |
-
51,12037,5958,6079
|
55 |
-
52,11894,5959,5935
|
56 |
-
53,12058,6047,6011
|
57 |
-
54,11870,5952,5918
|
58 |
-
55,11698,5795,5903
|
59 |
-
56,11267,5730,5537
|
60 |
-
57,9580,4980,4600
|
61 |
-
58,10722,5531,5191
|
62 |
-
59,10146,5070,5076
|
63 |
-
60,9616,4892,4724
|
64 |
-
61,8807,4429,4378
|
65 |
-
62,8343,4212,4131
|
66 |
-
63,8184,4102,4082
|
67 |
-
64,7931,3987,3944
|
68 |
-
65,7284,3689,3595
|
69 |
-
66,7084,3517,3567
|
70 |
-
67,6646,3355,3291
|
71 |
-
68,6659,3326,3333
|
72 |
-
69,6306,3191,3115
|
73 |
-
70,6688,3295,3393
|
74 |
-
71,6688,3201,3487
|
75 |
-
72,7034,3378,3656
|
76 |
-
73,7650,3588,4062
|
77 |
-
74,8162,3820,4342
|
78 |
-
75,8180,3760,4420
|
79 |
-
76,7758,3526,4232
|
80 |
-
77,4776,2028,2748
|
81 |
-
78,5084,2194,2890
|
82 |
-
79,6204,2546,3658
|
83 |
-
80,5990,2493,3497
|
84 |
-
81,5974,2359,3615
|
85 |
-
82,5744,2242,3502
|
86 |
-
83,5124,1966,3158
|
87 |
-
84,4384,1639,2745
|
88 |
-
85,4477,1642,2835
|
89 |
-
86,4305,1569,2736
|
90 |
-
87,4266,1562,2704
|
91 |
-
88,3668,1289,2379
|
92 |
-
89,3132,1047,2085
|
93 |
-
90,2918,930,1988
|
94 |
-
91,2411,750,1661
|
95 |
-
92,1980,598,1382
|
96 |
-
93,1575,440,1135
|
97 |
-
94,1244,298,946
|
98 |
-
95,986,237,749
|
99 |
-
96,751,184,567
|
100 |
-
97,555,116,439
|
101 |
-
98,405,97,308
|
102 |
-
99,229,35,194
|
103 |
-
100,161,20,141
|
104 |
-
101,103,16,87
|
105 |
-
102,58,6,52
|
106 |
-
103,52,6,46
|
107 |
-
104歳以上,46,5,41
|
108 |
-
不詳者,0,0,0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|