Python言語でプログラミングして、作業を効率化していく様子を紹介します。
Python言語は、非常に多くのライブラリがあるのが魅力ですが、その使い方を覚えるのは大変な労力です。ここでは、ChatGPTを活用して、サンプルとなるプログラムを作ってもらって、それを活用していく様子を紹介します。
事例としては、百春さんが直面した長唄の楽譜をPDF化するという作業を通して、プログラムで自動化できる部分をピックアップしながら、ChatGPTにプログラムを提示してもらい、作業を効率化していきます。
今まで、C/C++言語でゲームプログラミングを紹介してきた百春さんですが、とある作業をすることになりました。C/C++言語は、コンピュータを勉強したり、プログラミングの基礎を学んだりするには良いですが、実際の、業務を効率化する、という点では不便な言語です。業務効率化という面では、Python言語が向いています。
この動画では、どうのような作業をすることになったのかを紹介しています。
Python言語のプログラミング環境をインストールします。
開発環境としてJupyter Notebook、ライブラリとしてPandasが非常に便利だった経験があり、 Jupyter NotebookとPandasがPython言語と同梱されているディストリビューションであるAnacondaを利用することにしました。
この動画では、Anacondaをインストールして、Python言語でHelloWorldプログラムを作成するところまでを紹介しています。
作業効率化の事例は、楽譜をスキャンしてPDFファイルにしたものを、1冊単位にまとめる作業です。
どうやってスキャンしているのかを紹介しながら、複数のPDFファイルを結合して一つのPDFファイルにまとめるところを、プログラミングします。ただ、プログラムは、自分で作るのではなく、ChatGPTに作ってもらいます。
Jupyter Notebookを使ってプログラミングしていきますが、これを日本語化します。
また、プログラムは、ChatGPTの提示したプログラムを活用していきますが、この中で、importは重要な文法になります。importがどのようなものかを説明します。
ChatGPTの提示したプログラムを使って、コメントとオフサイドルールを説明します。
Python言語では、字下げ(インデント)が崩れると、文法エラーになります。ChatGPTの提示したプログラムの中で、どの様に字下げルール(オフサイドルール)が適用されているのかを説明します。
ChatGPTの提示したプログラムを活用していきますが、その中で関数がよく使われるので、関数の書き方と、関数がどのように動くのかを説明します。
あと、プログラミングで意識して欲しい「データ」と「入れ物」のイメージを説明します。また、作業効率化する時には、データをまとめて処理する事になるので、データのまとまりを扱うことのできる「リスト」についても少し触れます。
スキャンしたデータは、1冊単位に、楽譜IDの名前の付いたフォルダに格納しています。スキャンするデータは、何百冊もあるため、1冊単位にまとめる作業は自動化したいです。1冊にまとめたPDFファイルの名前も楽譜IDにするため、楽譜IDの名前のついたフォルダ名の一覧を自動的に採取したり、楽譜IDのフォルダの下に格納されている1ページずつのPDFファイルの一覧を自動的に採取する必要があります。ここでは、このファイルの一覧をリストとして取得する方法をChatGPTに聞いて、プログラムを作成します。
ファイルのリスト取得で作ったプログラムを元に、1冊単位にPDFをまとめる作業を、プログラムで自動化します。
この作業の中で、1冊のページ数も取得できるので、楽譜IDとその本のページ数を表示するプログラムに発展させてみます。
前回作成したプログラムに、1冊単位にまとめたPDFファイルのサイズも追加で表示するようにします。この時、一つずつをprintするのではなく、PDFファイルを結合している時は、リストの情報を格納し、PDFファイルの結合処理の繰り返しが終わった後、リストに入った情報をデータフレームという入れ物に入れるようにします。データフレームは、Pandasというライブラリが扱っていて、データ分析の分野で活用されているものです。データを分析するのに役立つ様々な機能を持っているので、覚えておくと役立つと思います。今回は、データフレームのExcel出力を行います。
1冊単位にまとめたPDFファイルを圧縮します。
楽譜は、変体仮名が含まれた手書きの文字が多く含まれたもので、文字データというより画像データなので、画像として圧縮を行うようにします。
今回は、一つのファイルだけを圧縮し、次回、まとめて圧縮するプログラムように、ステップを進めます。
PDFを画像に変換するなかで、Popplerというものを内部的に使用していることが判明したので、PopplerをGitHubからダウンロードしてセッティングするようにしています。
第9回と第10回で作成したプログラムをまとめることで、1冊単位に結合したPDFファイルを圧縮して保存していきます。
保存していく繰り返しの中で、ページ数とファイルサイズをリストに記録し、最後に、リストの情報をデータフレーム化してExcelファイルに出力します。
データフレームを使うことで、合計を求めるのも簡単に書くことができます。データの集計結果は、リスト出力したシートとは別のシートに作成して、Excel出力します。
パソコンのファイルをクラウドにアップロードして、そのリンクを取得するプログラムを作成します。
ここでは、まずファイルを1個だけ処理します。
クラウドはDropboxを使います。プログラムからクラウドを操作するため、アクセストークンというものをDropboxの開発者用サイトから取得します。このアクセストークンを使い、プログラムを通して、Dropboxへのファイルのアップロードと、アップロードしたファイルのリンクを取得します。
前回、パソコンのファイルをクラウドにアップロードして、そのリンクを取得するプログラムを作成したので、これをまとめて実施できるようにし、更に、取得したリンク情報は、ページ数やファイルサイズと一緒にExcelファイルに記録するようにします。
更に、今までChatGPTに作ってもらったプログラムを見直して、少しプログラムを整形します。この時、プログラムが読みやすくなるように、Pythonのコメントを使う他、NotebookのセルをMarkdownと呼ばれるタイプにセットして、Notebookの機能をつかった説明文も追加してみます。
前回作成したリンク情報の入ったExcelファイルと、事前に作成した曲名の入ったExcelファイルをマージして、新たに楽譜IDと曲名、よみ、ページ数の入ったExcelファイルを作成します。このExcelファイルの楽譜IDには、Dropboxにアップロードした時のURLをハイパーリンクでセットすることで、楽譜IDをクリックするとアップロードしたPDFファイルが見えるようにします。
今回で、一連の自動化の作業は終わりにします。