2023/08/02, 2023/08/03

 

①python 勉強

ChatGPTを勉強していくと、それだけだとできることに限りがあることが分かった。

つまり、自分が理想としている作業の効率化や自動化を実現するためには、根本的なプログラミングの学習が必要だと気づいたのである。

だったら何から勉強するか。

どうせ一から勉強するなら、自分がやりたい業務の効率化を一番実現しやすそうなPythonについて勉強する。

その勉強法について調べると東京大学が提供している「Pythonプログラミング入門」というサイトで勉強をするのが、もっとも基本的なステップから段階を追って学習することができそうだなと思い、このサイトを使うことにした。

ちなみにChatGPTに対して、スケジュール管理をしてほしいと依頼したところ、以下のように回答が返ってきた。

質問

ChatGPTを使って、東京大学が提供しているPythonプログラミング入門と連携し、毎日一時間の勉強スケジュールを管理する方法について説明してください。毎日の学習進行具合は視覚化で確認し、その日の学習内容に基づいたPythonのコード練習に関して新しい課題を提示してください。

回答

確かに、Pythonプログラミング入門の学習スケジュールを管理し、視覚化するための一例として、以下のようなアプローチが可能です。この例では、データ管理および視覚化のためにPython自体を使用しますが、他のツールを利用してもかまいません。

1. **スケジュールの設定と追跡**:
東京大学が提供しているPythonプログラミング入門の内容を一覧化し、それを時間ベースのスケジュールに変換します。このスケジュールは日毎の学習内容を示すとともに、各トピックが終了したかどうかを追跡することができます。例えば、Pythonの辞書やリストにこの情報を格納することができます。

2. **進行状況の視覚化**:
Pythonの`matplotlib`や`seaborn`などのライブラリを使用して、あなたの進行状況を視覚化できます。例えば、時間の経過とともに終了したトピックの数を表示する折れ線グラフや、まだ終了していないトピックをハイライトする棒グラフを作成することが可能です。

3. **コード練習の課題提示**:
毎日の学習内容に基づいたPythonのコード練習を設計します。これは関数の作成、データ構造の操作、条件分岐やループの利用など、その日に学んだトピックを強化するものです。また、ChatGPTを使って、練習問題を生成し、ある程度の解答も提供できます。

以下に、Pythonで進行状況を追跡し視覚化するためのシンプルなコードスニペットを示します。

“`python
import matplotlib.pyplot as plt

# 入門コースの各トピックとその学習状況を管理する辞書
topics = {
“Python Basics”: False,
“Data Structures”: False,
“Control Flow”: False,
“Functions”: False,
# 以下、他のトピック
}

def mark_completed(topic):
“””指定されたトピックを完了とマークします”””
if topic in topics:
topics[topic] = True

def visualize_progress():
“””進行状況を視覚化します”””
completed = [1 if status else 0 for status in topics.values()] plt.bar(topics.keys(), completed)
plt.xlabel(‘Topics’)
plt.ylabel(‘Completed’)
plt.show()
“`

以上のコードを使えば、`mark_completed(“Python Basics”)`のように関数を呼び出してトピックを完了とマークし、その後`visualize_progress()`を呼び出すことで進行状況の視覚化を確認できます。この視覚化は、Pythonプログラミング入門コースの全体像を把握し、どの程度進んでいるかを視覚的に理解するのに役立つでしょう。

Pythonの勉強をしたいのに、Pythonを使って管理する方法を進められてしまった。

本末転倒である。

 

②実際に勉強してみた

ただ、実際に東京大学が提供している「Pythonプログラミング入門」というサイトで勉強を始めるとChatGPTはスケジュール管理ではなく、アドバイザーとして使う方がよっぽど役に立つことが分かった。

質問

python における再帰とはどういう意味ですか?小学生にもわかるように説明してください

回答

再帰とは、ある問題を解決するために、その問題自体を小さくして同じ方法で解決することを繰り返すことを指します。

再帰を小学生にもわかるように説明するために、ドミノを使って例を出してみましょう。

あなたがドミノをたくさん並べて、一つ押すと全て倒れるようにセットアップしました。一番最初のドミノを押すと、次のドミノが倒れ、その次のドミノが倒れ、というように全てのドミノが倒れていきますね。

このとき、「全てのドミノを倒す」ためには、「最初のドミノを倒して、その次のドミノが倒れるのを待つ」ことを繰り返すだけで全てのドミノが倒れます。これが再帰の考え方に似ています。

Pythonでの再帰も同じで、大きな問題を小さな問題に分けて、その小さな問題を解決することで最終的に大きな問題を解決します。そして、その小さな問題を解決するためにも、さらにその問題を小さくして同じ方法で解決することを繰り返します。これをプログラム内で行うときに、自分自身の関数を呼び出すことになり、これが再帰的な関数と呼ばれます。

こんな風に、勉強を初めた自分が理解できずに躓いてしまい、やる気をなくし、途中で挫折をする可能性を減らす、そんな自分専属の24時間質問し放題のアドバイザーとしては滅茶苦茶優秀だと思った。

質問対応は完璧なので、あとは私がpythonを使って実現したいことを明確にする。

 

③ちょっと勉強してみて・・・

もういきなり実践に突入しよう!と思い、ChatGPTに僕がしたいことを可能にするコードを書いてくれと頼み、Pythonを動かしちゃおうとしました。

質問

“あなたはAIプログラムで、名前順に単語が記載されたPDFファイルの目次リストから情報を抽出します。その情報を①ページ毎にまとめたり、②目次リストに記載された情報ごとにまとめたりするスプレッドシートを作成し、図表も含めます。その後、この情報を基に、難易度を考慮した形で、穴埋め問題や記述問題など、参考書に対する理解を深めるための問題集を作成します。このプロセスをどのように最適化しますか?”

回答

ここでは、以下のステップに分けて作業を進めていくことを提案します。

  1. 情報の抽出: まずは、PDFファイルから情報を抽出します。PythonのPyPDF2やPDFMinerなどのライブラリを使用してPDFからテキストを抽出できます。目次は通常、ページ番号とタイトルの形式で記載されていますので、これを抽出してデータ構造に保存します。また、図表についても、それが記載されているページ番号とタイトルを抽出します。
  2. スプレッドシートの作成: 抽出した情報を用いてスプレッドシートを作成します。Pythonのpandasライブラリを使用してデータフレームを作成し、その後、pandasのto_excel関数を使用してスプレッドシートに出力します。
  3. 問題集の作成: 問題集を作成する際には、まず、参考書の内容について深く理解する必要があります。それぞれの章や節の重要なポイントやキーワードを抽出し、それらを基に問題を作成します。AIを活用すれば、自動的に問題を作成することも可能ですが、その質は人間が手作業で問題を作成するものと比較して劣る可能性があります。そのため、一部の問題については、人間が手作業で作成することをおすすめします。
  4. 難易度の調整: 問題の難易度を調整する際には、参考書の各章や節の内容の複雑さや深さ、そして学生の理解度を考慮する必要があります。簡単な問題から難しい問題へと順に進むように設定することで、学生が自分の理解度を確認しながら学習を進められるようにします。
  5. 問題集のレビューと改善: 最後に、作成した問題集をレビューし、必要に応じて改善します。学生からのフィードバックや教育者からの指導を基に、問題の質や難易度を調整します。

これらのステップを通じて、参考書に対する理解を深めるための問題集を効率的に作成することができます。

質問

それぞれのステップについて、ステップバイステップで具体的なコードも書きながら、小学生にも分かるように簡単に説明してください

回答

もちろんです。それぞれのステップについて、具体的なコードとともに説明します。

  1. 情報の抽出

PDFからテキストを抽出するためには、まずPythonのPDFMinerというライブラリを使います。これは、PDFの文章を読むためのツールの一つです。

以下略・・・

こんな感じで出だしは順調!

だったのですが、

質問

pip install pdfminer.six
File “<stdin>”, line 1
pip install pdfminer.six
^^^^^^^
SyntaxError: invalid syntax
>>>

と表示されました。この結果の意味を教えてください

回答

このエラーメッセージは、Pythonのインタープリタ(Pythonのコードを実行するプログラム)でpip install pdfminer.sixというコマンドを実行しようとしたときに表示されるものです。しかし、pip installはPythonのコードではなく、コマンドライン(ターミナルやコマンドプロンプト)で実行するコマンドです。Pythonのインタープリタはpip installをPythonのコードとして解釈しようとして混乱してしまったのです。

この問題を解決するには、Pythonのインタープリタ(>>>が表示されている状態)を終了して、コマンドラインに戻る必要があります。Pythonのインタープリタを終了するには、exit()と入力してEnterキーを押します。

その後、コマンドラインに戻ったら、再度pip install pdfminer.sixと入力してEnterキーを押します。すると、pdfminer.sixというライブラリがインストールされます。

ここで重要なのは、pip installコマンドはPythonのインタープリタではなく、コマンドライン(ターミナルやコマンドプロンプト)で実行することです。

質問

言っている意味がわかりません。小学生にも分かるように簡単に説明してください

回答

申し訳ありません、もっと簡単に説明しますね。

あなたが試そうとしていたpip install pdfminer.sixは、新しいおもちゃを手に入れるための特別な魔法の呪文のようなものです。この魔法の呪文を唱えるには、特定の場所で唱える必要があります。

コンピュータは、大きく分けて2つの場所があります。一つは「Pythonの国」、もう一つは「コマンドの国」です。’pip install pdfminer.six’は、「コマンドの国」で唱えるべき魔法の呪文なのです。

しかし、あなたがこの魔法の呪文を唱えたのは「Pythonの国」だったため、コンピュータは混乱してしまいました。だから、あなたに対して「これは私が理解できる言葉ではありません」と言っているのです。

では、どうすれば良いのでしょうか?まず、「Pythonの国」から出て、「コマンドの国」へ行く必要があります。これは、exit()と入力してEnterキーを押すことでできます。

そして、「コマンドの国」に到着したら、再度pip install pdfminer.sixと唱えてみてください。これで、魔法の呪文が正しく機能し、新しいおもちゃ(ここではpdfminer.sixというツール)を手に入れることができます。

この説明が理解しやすいものであれば幸いです。それでも何かわからないことがあれば、どんなことでもお気軽にお聞きください。

質問

def extract_text_from_pdf(pdf_path):
… return extract_text(pdf_path)

>>> # PDFファイルのパスを指定します
>>> pdf_path = ‘/path/to/your/pdf’
>>> text = extract_text_from_pdf(pdf_path)
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
File “<stdin>”, line 2, in extract_text_from_pdf
File “C:\Users\sarut\AppData\Roaming\Python\Python311\site-packages\pdfminer\high_level.py”, line 162, in extract_text
with open_filename(pdf_file, “rb”) as fp, StringIO() as output_string:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “C:\Users\sarut\AppData\Roaming\Python\Python311\site-packages\pdfminer\utils.py”, line 53, in __init__
self.file_handler: AnyIO = open(filename, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: ‘/path/to/your/pdf’
>>>

このエラーの意味を小学生にも分かるように簡単に説明してください

回答

もちろんです。このエラーメッセージを簡単に説明しますね。

コンピュータにはたくさんのファイルが保存されていますが、各ファイルには自分だけの特別な場所(パス)があります。それは、あなたが自分の家にたどり着くための道順や住所のようなものです。

このエラーメッセージは、コンピュータがPDFファイルを探しているのに、指定した場所(パス)にそのファイルがないと言っているものです。これは、あなたが友達の家に遊びに行こうとして、指定された住所に家がないときのようなものです。

このコードの場合、’/path/to/your/pdf’というパスは、例えばとして使っているだけで、実際のファイルの場所を指していません。そのため、このパスを実際のPDFファイルがある場所に書き換える必要があります。

たとえば、もしPDFファイルがデスクトップにあるなら、pdf_path = ‘/Users/あなたのユーザー名/Desktop/あなたのPDFファイル.pdf’のように書き換えます。ここで、あなたのユーザー名とあなたのPDFファイル.pdfは、実際のユーザー名とファイル名に書き換えてください。

これで、コンピュータはPDFファイルを見つけることができるはずです。

質問

def extract_text_from_pdf(pdf_path):
… return extract_text(pdf_path)

>>> # PDFファイルのパスを指定します
>>> pdf_path = ‘C:\Users\sarut\Desktop’
File “<stdin>”, line 1
pdf_path = ‘C:\Users\sarut\Desktop’
^
SyntaxError: (unicode error) ‘unicodeescape’ codec can’t decode bytes in position 2-3: truncated \UXXXXXXXX escape
>>> text = extract_text_from_pdf(pdf_path)
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
File “<stdin>”, line 2, in extract_text_from_pdf
File “C:\Users\sarut\AppData\Roaming\Python\Python311\site-packages\pdfminer\high_level.py”, line 162, in extract_text
with open_filename(pdf_file, “rb”) as fp, StringIO() as output_string:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “C:\Users\sarut\AppData\Roaming\Python\Python311\site-packages\pdfminer\utils.py”, line 53, in __init__
self.file_handler: AnyIO = open(filename, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: ‘/path/to/your/pdf’
>>>

このエラーの意味を小学生にも分かるように簡単に説明してください

という風に、ひたすらエラーを繰り返し、何度も何度もやり直しました。

結局30回以上エラーを繰り返し、テキストを一つも抽出できないまま、僕の始めての問題集作成プロジェクトは修了しました。

 

④結論

この二日間で分かったことがある。

一つ目はChatGPTだけではできることに限界があること
二つ目はChatGPTは非常に優秀な技術的アドバイザーになれること

自然言語を通じてChatGPTと対話的に問題解決ができるようになったというメリットは、自分一人で悩みを抱え撃沈してしまうリスクが減ったと言い換えることができる。

もちろん、悩みの種類によっては人と話しをした方が解決しやすいものが多いと思う(恋バナ、浮気、将来への不安など)

ただ「問題の解き方が分からずその回答を教えてほしい」という風な技術的なサポートにおいて、現状ChatGPTは最強のツールである。

このエントリーをはてなブックマークに追加