Edited at

Pythonのテキスト作りました

●テキスト本体(PDF形式262ページ:2.96MB) 2019/08/21更新

 (→ミラーサイトからDL)

 言及している主なライブラリ:

 Kivy, socket, threading, concurrent, requests, BeautifulSoup,

 mpmath, subprocess, datetime, pickle, struct, base64, collections,

 wave, PyAudio, Tkinter

 →テキスト中のサンプルプログラム

 【学び方】 1,2章(最初の86ページ)を読みながら

  サンプルを実行しながら理解するのが良いと思います.

  (難しいと思ったところはスキップして大丈夫です)

  他の章は必要に応じてお読みください.

  テキスト中の実行例のバリエーションを作って試しながら

  進むと理解が深まります.

  既にある程度Pythonを知っている人は,文法や事例を

  調べるのに使うこともできると思います.

●ライブラリブック(PDF形式165ページ:2.99MB) 2019/08/13更新

 (→ミラーサイトからDL)

 (旧名称:Python3モジュールブック)

 言及しているライブラリ:

 OpenCV, Pillow, pygame, Eel, PyDub, NumPy, matplotlib,

 SciPy, SymPy, hashlib, passlib, Cython, Numba, ctypes,

 PyInstaller, JupyterLab, json, urllib, zenhan, jaconv

 →ライブラリブック中のサンプルプログラム

---------------------

Pythonを用いたゼミ活動の紹介をしています.

 →Pythonを応用した活動の紹介

---------------------

Pythonを盲信する人が出てくるといけませんので,Pythonの長所/短所について冷静に考えてほしくて記事を書いています.

 →Pythonの長所と短所についての考察

---------------------

【有用なリンク】

・Windows用コンパイル済みライブラリ

 PIPでインストールする形式のものです.標準的なインストール方法でだめな場合に重宝します.(自己責任でお願いします)

---------------------

【データ処理関連】

 Pythonでデータ処理するための基礎知識についてテキスト作っています.まだ試作品でして,ご意見やご助言いただきたいです.

→Pythonによるデータ処理のテキスト

---------------------

 

(2017/05/16)

学校でプログラミング教えています.

初心者に教えるためのPython3の入門テキストを作りました.

既に何かの言語を習得している人が迅速にPythonに慣れるための入門書というスタンスです.

 

GUIライブラリ「Kivy」を使ってアプリを作れるところまで一気に解説しています.(Kivyの入門)それと,Webスクレイピング用にrequests, BeautifulSoup4の入門的解説もしています.

(Tkinterに関しても基本的な解説をしています)

 

まだまだ完成度が低い状態ですが,教育現場で使いならがテキストも修正・アップデートしてゆきます.

無料で公開しますので,ご意見いただけたら嬉しいです.

(誤った箇所を見つけられましたら是非ご一報くださいませ)

紹介ページ

 

「これ使いたい」という方は大歓迎です.ご意見をいただきながら完成度を高めて行きたいです.

特に学校でプログラミングの指導をしておられる先生方に使っていただけたらと思います.現場から上がってきた要求やご指摘などいただけましたら幸いです.(可能な限りテキストに反映します)

テキストの内容をもっと要約したビデオ教材も配信しています.

 


補足(更新に関すること,ご案内など)

--------------

【補足】(2019/08/01-21)

 テキスト本体に加筆.例外を発生させるassertとraiseについて基本的な解説を載せました.それと辞書オブジェクトに関する解説の部分に追記.

 ライブラリブックに加筆.matplotlibで3次元の散布図を描く手順の例を掲載しました.あと,SciPyに関することも書き始めました.

訂正とお詫び:7/31版のライブラリブック掲載のサンプルプログラム scatter3d01.py には誤りがあります.訂正しましたので最新版に差し替えてください.

 

--------------

【補足】(2019/06/08-07/26)

 テキスト本体に加筆.NumPy使用の有無によって計算速度がどの程度変わるかを調べるサンプルプログラムを付録に載せました.あと,警告メッセージの表示を抑止する方法の解説と,Python処理系のメモリの使用量を調べる memory-profiler について紹介する内容を加えました.これらはJupyterLabでデータ処理する際に必要となってきます.

 

 ライブラリブックのNumPyの箇所に若干の加筆.行列演算の高速性の応用方法と,画像を配列データとして取り扱う方法について解説を加えました.また,matplotlibで2次元配列を表として描画するtable関数の解説を加えました.

訂正とお詫び:NumPyのFFTの解説の中で「振幅スペクトル」のことを「パワースペクトル」と誤記しておりました.申し訳ありません.修正しましたので差し替えてください.

--------------

【補足】(2019/05/21-06/06)

「モジュールブック」という名称は良くないかもしれませんね.配布している一連のテキストの内容の中で "モジュール","パッケージ","ライブラリ" といった用語の扱いに誤りが残っています.ぼちぼち直そうかと考え始めました.

名称を「Python3ライブラリブック」に変更します.

文部科学省のサイトによりますと,高校の情報科のプログラミングでPythonが使われるようなことが書かれています.

配布するテキストの内容にはかなり慎重な配慮が必要になる感じがしてきました.

--------------

【補足】(2019/05/01-18)

 テキスト本体に加筆.enumerateに関する解説を入れました.

Pythonは学ぶほどに「やりやすさのための小技の宝庫」と実感する言語ですね.

 モジュールブックに加筆.NumPyの部分に加筆しました.

PyDubモジュールの基本的な使用方法を載せました.それにOpenCV, PyGame関連も若干の加筆.

 そろそろモジュールブックを全体的にチェック(オーバーホール)しないといけない感じになってきました(ちょっとお待ち下さい)

--------------

【補足】(2019/04/06-30)

 テキスト本体に加筆.f-stringはとても便利な機能なので,基本的な使い方の説明を入れました.あと,Anacondaのcondaコマンドに関する簡単な説明を追加.

 モジュールブックに加筆.matplotlibでヒートマップを描画する方法,画像を画素の数値配列に変換する方法の解説を入れました.その他,NumPyの解説を若干追加と修正.

 

--------------

【補足】(2019/02/22-03/28)

 テキスト本体のメンテナンス.

* マルチプロセス実行に関するProcessPoolExecutorの解説に誤りあり

* zipオブジェクトに関する解説に誤りあり

利用者の方々にお詫びします.修正しましたので最新版に差し替えてください.

 

 テキスト本体にstructモジュールに関する基本的な解説を加えました.バイナリデータの生成と展開に必要になります.

 オブジェクト指向,関数定義の部分の解説に若干の追記.

 データ構造に付ける「スライス」を明にオブジェクトとして扱う「スライスオブジェクト」に関する基本的な解説を追加しました.普段はあまり使うことはありませんが,Pandasでデータ処理する場合に扱う機会が少し出てきますので解説しておきました.

 

 モジュールブックのメンテナンス.

NumPy, matplotlibの解説のところで若干の追記と修正.

 

--------------

【補足】(2019/01/01-02/21)

 テキスト本体の体裁を若干調整.それと,base64モジュールに関する基本的な解説,inf,nanに関する解説を追加.

 

最新のPythonでは「is」によるオブジェクトの比較の扱いが若干変わりましたので,それに伴う変更.(Python自体のバグ修正でしょうか…)

 

利用者の方から「all,any関数も重要では?」と助言いただきました.まさにデータ処理には便利な関数なので,早速追記しました.(助言くださった方に感謝)

 

Kivyでのフォントの扱いに関してサンプルプログラムを載せました.

 

 そろそろ年度末なので,テキストのメンテナンス作業します.新年度にかけて更新が多くなりそうです.

 

--------------

【補足】(2018/12/16-26)

 テキスト本体に加筆.

 with構文に関する基本的な解説を加えました.ファイルアクセスや通信といった処理をするプログラムをスッキリと仕上げるのにwith構文が役立ちます.

 データ構造にアクセスする際の処理時間に関する記述を加えました.Pythonでは「リスト」「セット」「辞書」が基本的なデータ構造ですが,使い方が適切でないと意外なくらい処理に時間がかかってしまうことがあります.その判断のための基礎知識になれば幸いです.

 fractionsモジュールの基本的な使い方の解説を載せました.分数の計算ができます.

(その他,若干の加筆と修正)

 

--------------

【補足】(2018/12/06-10)

 テキスト本体に加筆.ジェネレータについて基本的な解説を加えました.あと,リストの整列と反転に関する加筆(他,若干の修正)など.

 

--------------

【補足】(2018/11/26-12/05)

 テキスト本体に加筆.pickleモジュールに関して基本的な解説を加えました.Pythonで扱うデータ構造の内容をバイナリデータとしてファイルに保存するのに必要となります.pickleモジュールの機能によって保存されるバイナリデータには,対象データのデータ型やクラス定義の情報(メソッドの定義など)も含まれるので大変便利です.

あと,若干の追記.

 

--------------

【補足】(2018/10/24-11/02)

 テキスト本体に加筆.pathlibモジュールの解説に若干の追加をしました.また,このモジュールを応用してファイルをディレクトリの中から見つけ出す(再帰的に)サンプルプログラムを掲載しました.

あと,データ型を調べるtype関数についての解説を加えました.

 

 モジュールブックに加筆.jsonモジュールの基本的な使用方法について解説を加えました.

 

--------------

【補足】(2018/10/08-11)

 以前から時々いただく相談に「Pythonの演習問題などはないのか?」というのがあります.問題集みたいなものを作るのも1つの考えではあるのですが,効果的な学習方法としては「自分で演習問題を作る」というのが良いと思います.具体的には,テキスト中の実行例のバリエーション(変種)を自分で作ってやってみるのが良いと思います.

 

なかなか問題集を作るところまでは手が回らない状況にありますが,教育現場では,学生(受講生)の動きを見ながら,その場で小さな演習問題を作ってやってみてもらうというのが現状です.割と効果的ですので「テキストの実行例を弄る」というのをお勧めします.

 

 テキスト本体に加筆.複数のデータ列をまとめてイテレータにするzip関数について初歩的な解説を載せました.あと,functoolsモジュールについて紹介程度の記述.

 

 モジュールブックに若干の加筆.数式処理モジュールSymPyに関する内容.

式を検査する`is_'プロパティに関する簡単な解説と,パターンマッチの方法に関して解説を載せました.

 

--------------

【補足】(2018/09/22-25)

 テキスト本体に加筆.os.system関数で外部プログラムを起動する方法の解説を追加.

 

 モジュールブックに加筆.jaconvの使い方を書きました.

 

その他,若干の修正と追加.

 

--------------

【補足】(2018/09/16)

 テキスト本体に加筆.データ構造から部分を選択的に抽出する方法について簡単に解説しました.Pythonでは

  a,b = 2,3

などという代入文が書けますが,これは代入が並列に動作したと見るよりも「変数の並びに対応するデータ構造の部分が参照された」と見るべきです.これを応用すると,かなり複雑なデータ構造の解析が簡単に実現できます.Prologにおける「単一化」(unification)ほどではないのですが,「ちょっと嬉しい機能」です.

 

--------------

【補足】(2018/09/12-14)

 テキスト本体に若干の加筆.def文で定義した関数をdel文で削除できることを書きました.(加えて若干の修正)

 

Pythonには exec, eval もありますので「実行中に動的にプログラミングできる」ことになります.つまり「Lispにできることは,ほぼPythonでもできる」ということになります.このことは「AI開発環境として大きな強みとなる」わけです.

 PythonにはDNNのための強力なパッケージ群が揃っていますし,C/C++のライブラリを実行時にリンクできる.更にPrologとの連携も容易ですので,AI開発環境が整った感じがします.

 

 あと,モジュールブックに passlib,PyInstaller の基本的な使い方の解説を追加.それにPillowモジュールでEPSを読み込む際のラスタライズの設定の方法について簡単な解説を追加.(その他,若干の加筆・修正)

 

--------------

【補足】(2018/09/01-11)

 テキスト本体に加筆.モジュール読み込みの際の注意事項を書きました.ついつい

 「from モジュール名 import *」

とやってしまう人がいますが「名前の衝突事故」の元です.これをやる場合は慎重にしましょう.それと,パッケージを自作する際の '__init__.py' の書き方について若干の解説を追加しました.

更に,'is'によるオブジェクトの比較に関して若干の追記.

 

 モジュールブックに加筆.urllibを用いて多バイト文字をエンコード/デコードする方法について解説.WebのURLに含まれる多バイト文字を'%'付き文字コードにする(その逆も)方法です.

それと,文字列の全角⇔半角を変換するモジュールzenhanに関しても基本的な解説を載せました.

 

--------------

【補足】(2018/08/22-29)

 テキスト本体に加筆.Anaconda環境下のコマンド操作でPythonインタプリタを起動する方法について簡単な説明を加えました.(その他,若干の追加と修正)

 

私の周りではAnacondaユーザが増え始めています.PSF版Pythonの解説のみでは対応できない状況が出てきそうですね.

 

--------------

【補足】(2018/08/15-21)

 テキスト本体に加筆と修正.map関数の解説に若干の追記と修正,それに,Tkinterのメッセージボックス(messagebox)に関する解説を追加しました.

 

テキストのページ数がかなり多くなってきましたが,初心の方がはじめに読むべき部分はあまり多くありません.そういったことを「はじめに」の章に書きました.

 

あと,モジュールブックのSymPyの解説に若干の加筆.

 

--------------

【補足】(2018/07/25-08/11)

 クロスプラットフォームのアプリやモジュールを作る際に,計算機環境に関する情報を取得する必要が出てきます.それでplatformモジュールの基本的な使い方をテキスト本体に載せました.

 

strftimeの書式指定の解説に誤りがありました.お詫びします.

最新版に差し替えてくださいませ.

 

その他,些細な修正とアップデートしました.

(環境変数の参照,文字列の処理など)

 

 テキスト本体のサンプルプログラムはKivyやサウンドまで含めて,一応3.7で動作することを確認しました.でも,3.7を人に薦めるのはもうちょっと先にします.

 

--------------

【補足】(2018/07/25)

 「Kivyが動かなくなった」という相談を受けることが最近少し増えています.基本的には

「Kivy関連パッケージを全てアンインストールしてから再インストールしてください」

と助言していますが,それでも解決できないケースがありました.私が対応したケースでは「SDL2.dllのバージョン違い」が原因となっていました.対応策としてSDLの公式サイトから最新の安定版のSDL2.dllを入手してインストールしてから,Kivyのアンインストール&再インストールをしたところKivyが動作しました.(この件,テキスト本体にも載せました)

 

ご参考まで.

 

(更に補足)

 SDLに限らず,dllは必ず「正しい出処」から入手してくださいませ.一見して「公式サイト」や「正規の再配布サイト」に見えて,実はマルウェアが付いてくるところがありますのでご注意ください.

 

--------------

【補足】(2018/07/21)

 テキスト本体にAnacondaに関する概略的な紹介を載せました.Pythonをはじめるに当たって,PSFの純正ディストリビューションを使用するかAnacondaを使用するかで迷う人が多いようです.データ処理をやるにはAnacondaが良いですね.特にAnacondaは大量のライブラリ(モジュール)が予め付いている上にパッケージ管理もやりやすいので,学生さんにはおすすめです.各種モジュールのインストールで苦戦することが無くなると思います.

 

注意するべき点としては,

・PSF版とAnacondaを混在させるのはあまり良くない

・Anaconda環境下でのPIPは慎重に

というのがあります.最悪の場合はPython環境を破壊してしまい,再インストールする羽目になります.もちろん多くの場合はAnaconda環境下でPIPでモジュールをインストールしても「大体は大丈夫」ですが,常に注意してくださいませ.

 

 余談ですが,WindowsでPythonを使う場合,PSF版やAnacondaでもなくMSYS/MinGW環境の利用という選択肢があります.これはWindows環境でUNIXライクな開発環境(POSIX環境)を実現するものでして,VirtualBoxとか使ってシステムを仮想化するのとは全く違ったものです.こちらの場合でも,Python用のビルド済みパッケージが揃い始めていますので,選択肢が増えて良い感じだと思います.ただしMSYS/MinGWでのPython利用は学生にはお薦めできません.

 

--------------

【補足】(2018/07/17)

 Pythonとモジュール群を活発に利用し始めると,パッケージ管理が煩わしくなりますね.今のテキストでは,素のPythonのインストーラ(PSF版)によるインストール方法と,PIPによる基本的なパッケージ管理について解説していますが,そろそろAnacondaも無視できない感じがしています.

(自宅でPython使う学生はAnacondaを選ぶようです)

 

ちょっと考えてみます.

 

--------------

【補足】(2018/07/07-15)

 テキスト本体に加筆.collectionsモジュールのnamedtupleに関して基本的な解説を載せました.かなり便利なデータ構造です.「クラス定義するほどでもないんだけど…」というときにnamedtupleを使いましょう.

 

 テキストを公開してから1年以上になって内容が1段階そろった感がありますので,そろそろ全体の校正作業(クリーニング)を一度やった方がよいですね.

しばらく細かい修正を続けます.

 

 あと,Python3.7もウォッチし始めています.今の所,テキスト本体で紹介しているサンプルは大体動いていますが,私の環境ではKivyがまだダメですね…

3.7を実戦投入するのは今は控えたほうが安全です.各種モジュールが3.7に対応するにはもう少し時間がかかりそうです.

 

3.6と3.7を同時にインストールしておいて,起動時にバージョンを選ぶこともできますので,一応3.7も入れておいて動作を確認するのも良いかと思います.切り替え起動の方法についてもテキスト本体に解説を載せました.(2.7も同居可能です)

 

--------------

【補足】(2018/07/04-05)

 モジュールブックに Eel の基本的な使い方を載せました.HTML5の枠組みでGUIが構築できるのは大変にありがたいですね.しかも大変に手軽な使い勝手です.Eelは今後の発展が期待できますね.アプリ開発にPythonとJavaScriptが同時に利用できるので利便性の大きさははかり知れません.(EelのGUI基盤はGoogle Chromeです)

 

Eel使用上の注意点としては,Python⇔JavaScript間での値のやり取りがあります.互いに異なるプロセスですから,関数呼出しに引数を渡すことはできますが,素朴にreturnで値を返すことができません(不可能ではありませんが,ちょっと面倒な作業になります)ので,ちょっと独特の工夫(割と単純な)が必要になります.

 

でもHTML5に慣れた人にとっては,Eelの利用は最も手軽な形のGUIアプリ構築の手段となります.しかもHTML5ですからGUIの機能性,デザイン性共に抜群です.更に,JavaScriptの各種ライブラリが使えるので,大げさに表現しますと「どんなアプリでも作れる」感じで嬉しくなりますね.

 

JavaScriptのテキストも作っています.こちらはかなり「未完成感」が強いですが,またご意見くださいませ.

 

--------------

【補足】(2018/07/01-04)

 テキスト本体にexec関数,eval関数に関する基本的な解説を載せました.データをプログラムとして実行できる,とても便利な関数です.

 

 あと,TkinterとPillowを組み合わせて画像表示をする際,PhotoImageの扱いに意外な注意点がありますね… 「Tkinterで画像が表示されない…,原因がわからない…」そんなことになりそうな落とし穴がありますので,ご一読を.

 

--------------

【補足】(2018/06/18-07/01)

 テキスト本体にTkinterの基本的な解説載せました.

あと,用語の乱れ("関数"と"メソッド"の取り違え)をいくつか発見したので修正しました.

またしばらくはアップデート(修正)が続くと思います.

 

引き続き「感想」「誤りの指摘」「要望」くださいませ.

お待ちしています.

 

--------------

【訂正とお詫び】(2018/06/09)

 テキスト本体に重大な誤りがありました…

モジュールの作成方法の説明の中の誤りを修正しました.

 

使ってくださっている方々にお詫び申し上げます.最新版に差し替えてくださいませ.

 

ご指摘くださったM.K.さん,ありがとうございます.本当に助かります.

 

今後もご指摘いただけたら幸いです.

 

--------------

【補足】(2018/06/04)

 「Tkinterの解説はしないのか?」というメッセージがちらほら…(公開当初から…)

Kivyだけで良いかと思っていましたが,気軽さの面ではTkinterも無視はできないですね.検討します.

 

--------------

【補足】(2018/05/26-29)

 テキスト本体に加筆.datetimeの日付・時刻の書式整形方法(strftimeによる書式整形)の解説を追加しました.

 あと,リストの要素を並べ替えるsortメソッドに関して若干の加筆.

 

--------------

【補足】(2018/05/22-23)

 テキスト本体に加筆.Kivyのテキスト入力(TextInput)で,複数行を扱うかどうかの設定に関して説明を加えました.

それと「イテレータ」について初歩的な解説を入れました.入門書には必要ないかと考えていましたが,紹介くらいはしておかないと,学生が後々困るのではないかと感じた次第です.

 

 あと,ファイルサイズの取得方法の解説を追加して,更に,文字列検索の finditer に関する解説に誤りを見つけましたので修正しました.

 

その他,「関数」と「メソッド」の言葉の取り違えなど,用語の誤りをいくつか修正.ただし,用語がまだ怪しいところがありそうです…(修正つづく)

 

--------------

【ご案内】(2018/05/12)

 データ処理パッケージの基本的な使用方法についてテキスト(試作品)を公開しました.

Pythonによるデータ処理のテキスト

 「データ処理」は個別の目的があってはじめて意味を持ちますので「言語の解説」の範疇に収まりません.それで,自分が教える範囲のみのことを書いていますと,かなり偏狭な内容になりますので,是非ともまたアドバイスやご指摘いただきたくお願いいたします.

 

--------------

【補足】(2018/05/12)

 テキスト本体に加筆.sysモジュールによる標準入出力の使用の際に,エンコーディングを設定(文字コードを指定)する方法を追記しました.

 

--------------

【補足】(2018/05/05)

 テキスト本体に加筆.書式整形の方法とpathlibモジュールの使用方法に関して若干加筆しました.

 

--------------

【補足】(2018/05/01)

 テキスト本体に加筆.バイナリファイルから,指定したバイト数だけデータを読み込む方法について加筆しました.

 

「何故もっと早く説明を入れなかったのか?」と思う今日このごろです.この分で行くとまだ色々ありそうですね.

 

--------------

【ご案内】(2018/04/25)

 テキスト本体を入手してくださった方からご意見いただきました.

「量が多すぎますね」とのことですが,最初は1章,2章,4章だけ使っていただけば良いですよ.要するに,はじめに必要となるのは60ページ強です.

 

Kivy,サウンドなどは後回しにして,必要に応じてご使用ください.

PDFを紙に印刷出力する場合は「両面印刷」をお薦めします.

 

--------------

【補足】(2018/04/24)

 テキスト本体に加筆.「標準エラー出力」については何も触れていなかったので,今回加筆しました.

 

--------------

【ご案内】(2018/04/21)

 Jupyter関連モジュールが急に動作しなくなったと数人の方からご相談いただいています.

 

私の環境でも発生しましたが,関連パッケージを一旦アンインストールして,新たにインストールし直したら解決しました.

 

--------------

【補足】(2018/04/21)

 モジュールブックに加筆.Jupyter Notebook上でinput関数を使用した例を掲載しました.

 

--------------

【補足】(2018/04/11-16)

 テキスト本体に加筆.誤りを見つけて修正しました.

forなどの繰り返しでよく使用するrangeですが,これはrangeクラスのオブジェクトを返す関数であると見るわけですね.(ややこしい…)関数なのかオブジェクトなのかを間違えることがありそうです.

 

 これでなんとか新学期の素材準備ができたような感じです.しかし,アップデートは当分終わりそうにありません.

 

--------------

【補足】(2018/04/01-6)

 モジュールブックにJupyter Labに関して若干の加筆.数式処理モジュール(SymPy)使用時に数式をMathJaxで整形表示する方法と,サウンド再生に関する方法の基本的な解説を加筆しました.

 

--------------

【補足】(2018/03/22)

 テキスト本体に加筆.Python3では変数名に日本語が使えるのですね.完全に盲点でした.学生から「変数名に日本語使えるんですか?」と聞かれて,「だめ! 半角アルファベットで書き始めること!」とか言ってしまったような気がします.大変恥ずかしい…

 

--------------

【補足】(2018/03/16)

 モジュールブックに加筆.JupyterLabの基本的な使い方の解説を載せました.

 Pythonを対話モードで使う場合に表やグラフを扱うケースでは,やっぱりそれなりの見やすさと使いやすさが重要になりますね.特にデータ解析やモデリングなんかをやる場合はJupyterLabが良いと思います.

Pythonスクリプトをアプリとして実行するスタイルも重要ですが,「ワークベンチ」として対話的に使うスタイルも今後重要になると思います.JupyterLabがPython利用のインターフェースの標準になるような予感もありますね.

 統計解析と機械学習のテキストを執筆中ですが,作業を例示する部分は全てJupyterLabで書き直そうと思います…

 

 JupyterLabは今後頻繁にアップデートされそうですね.目が離せません.

 

--------------

【補足】(2018/03/09)

 テキスト本体に加筆.pipコマンドでパッケージ管理する場合,pipコマンドのディレクトリがコマンドサーチパスに登録されていない場合に,直接pipコマンドを実行することができません.その場合はPython処理系を介してpipを実行することになります.その方法について加筆しました.

 

--------------

【補足】(2018/02/19-20)

 テキスト本体に若干の加筆.Pythonでは関数定義の内外でのグローバル/ローカル変数の区別(変数のスコープ)が微妙な印象を与えます.慣れないうちは不思議な挙動に悩まされることもあります.

 うっかりすると見つけにくいバグをつくることになりますので,これに関して加筆しました.

 

 バイト列を文字列オブジェクトに変換する際に,文字コードの体系が分からない場合がありますが,それを識別するための chardet パッケージについても基本的な解説を加えました.

 

 春休みに入りますので,更新作業が増えます.

 

--------------

【補足】(2018/02/12-16)

 モジュールブックに加筆.pygameライブラリでスプライトを扱う方法について基本的な解説を加えました.ゲーム開発には必須の機能ですね.

 

 テキスト本体もメンテナンスはじめました.新学期に向けて何回かアップデートする予定です.

 サンプルプログラムのMacの環境における動作検証が甘いとのご指摘を頂きました.一度,全て検証しますのでちょっとお待ち下さい.

 

--------------

【補足】(2018/01/16)

 テキスト本体の条件判定の部分に加筆.条件式に特殊な値を与えた場合の挙動について解説.

 

真理値(True/False)以外の値の論理演算(and,or,not)はあまり使わない方が良いようです.といいますか,論理演算の結果どのよう値になるかについては個別に検証すべきだと思います.そうでないと見つけにくいバグを作ってしまうことにつながります.

 

 あと,テキスト中に掲載しているサンプルプログラムの一覧も公開しました.ダウンロード可能です.学生(初心者)向けに「かなり冗長に」作ったプログラムですので,そのへんご了解くださいませ.余分な変数を用意したり,余計に行を分割したりと「だらだら」しています.実際はもっと簡潔に書けますので,どうぞご自由に改良してください.良いトレーニングになると思います.

 

--------------

【補足】(2018/01/13-14)

 テキスト本体に加筆.「四捨五入はどうやるんですか?」という素朴な指摘が来ましたので加筆.

 モジュールブックにも加筆.NumPyでCSVデータを読み込む際に,見出し行をスキップする方法を加筆しました.

 

 pygameでスプライトが使えるのですね.ゲーム作りが楽しくなりそうです.使い方を調べてモジュールブックに加筆しようと思います.(春休みの課題ですね)

 

--------------

【補足】(2018/01/08)

 テキスト本体にケアレスミス発見… 修正しました.

パラパラ見ていただけでミスが見つかりました.このぶんでいくと,かなり変なところが点在してそうですね…

 

今度の春休みにはしっかりオーバーホールして新学期に備えようと思います.

(もちろん随時修正していきます)

 

--------------

【補足】(2018/01/01)

 新年,明けましておめでとうございます.みなさん,今年もよろしくお願いします.

 

テキスト本体,モジュールブック共,若干の加筆しました.今年もご指摘,ご意見いただけますようお願いいたします.

 

--------------

【補足】(2017/12/29)

 テキスト本体とモジュールブックに加筆.卒業研究もラストスパートとなって,指導しながら次々と具体的な追記項目が上がってきています.来月いっぱいは更新が多くなるかもしれません.

 

--------------

【補足】(2017/12/22-23)

 テキスト本体に加筆.文字列の置換方法,正規表現による文字列検索の部分に加筆.(その他,若干の加筆)

 

統計解析と機械学習に関するテキスト&教材の準備について現状報告.

統計学の最も基本的な部分(確率分布,推定,仮説検定など)の実演と解説ができた感じですが,モデリングや機械学習に関する部分はこれからです.

 

学校(職場)で使える形になるのは来年度中になりそうです.

 

--------------

【補足】(2017/11/08)

 テキスト本体に加筆.PyAudioとwaveモジュールに関する部分に,音声再生の終了検出や繰り返し再生の方法についての解説を追加.

 

--------------

【補足】(2017/11/04)

 モジュールブックに索引項目の追加.それに体裁の乱れを修正しました.

 

他大学の先生(友人)から問い合わせがありまして 「テキストの使用上の許諾とかどうなっているのか?」 とのことでした.

公開しているテキストは「フリーソフト」とします.著作権は保持していますが,商用/非商用問わず自由に使ってください.印刷と再配布もしていただいて構いませんが,内容は変更せずにお願いします.

 

そんなことより,修正依頼とかツッコミがいただける方がありがたいので奔放にやっております次第です.(ご指摘お待ちしております)

 

--------------

【補足】(2017/11/03)

 テキスト本体の誤りを修正しました.

今回もご指摘くださったY.N様,ありがとうございます.

 

--------------

【補足】(2017/11/01)

 テキスト本体に加筆.久しぶりにKivy関連です.

アプリケーションの開始時と終了時のハンドリング方法について加筆.

 

統計解析と機械学習に関するテキスト&教材の準備について現状報告.

作業は進んでいるのですが,取り扱う内容の射程が思っていたよりも広くて溜息が出ています…

 

要望としていただいているものとしては,各種パッケージの使い方をコンパクトに取りまとめて欲しいというのが多いですが,パッケージの数も多い上,この分野は基礎知識(統計学)が無いと学生にとっては全く意味不明になりますので,基礎的な統計学に関しても言及しはじめています…

 

というので,日の目を見るまでまだ時間がかかりそうです.

 

--------------

【補足】(2017/10/22)

 モジュールブックに加筆.

 

NumPyでユーザ定義関数を「ベクトル化」する方法について加筆しました.

データサイエンス・機械学習のための教材準備をしている最中ですが,多量のデータに対する処理の効率化が重要になってきますので,ベクトル化で処理を高速化する方法について書いた次第です.

 

データサイエンス・機械学習のための準備ですが,サンプルデータの用意と基礎理論の分かりやすい解説の思案に時間がかかっています…

 

また,学生を実験台にしながら…(笑)

 

--------------

【補足】(2017/10/21)

 モジュールブックに加筆.

 

SymPy(数式処理モジュール)のグラフ描画機能に関する説明を加えました.

 

--------------

【補足】(2017/10/19)

 Kivy利用時に発生するトラブルへの対処について,テキスト本体に加筆しました.(付録の章に加筆)

 

Kivyが使用するグラフィックAPIを選択設定できます.これがうまく設定されていないと,Kivyを使ったプログラムが動かないことがあります.

 

再度Y.N様からご指摘,ありがとうございます.

テキストの編集を私1人でやっている関係上,多くのケースを予めテストすることができない状況にありますので,ご指摘いただけると助かります.

 

別件で,matplotlibに関してモジュールブックも加筆しました.

グラフの見出しやラベルに日本語フォントを使用する方法の説明を加えました.

 

--------------

【補足】(2017/10/14)

 テキスト本体にあった誤字の修正.

 

ご指摘くださったY.N様,ありがとうございます.

 

現在,統計解析と機械学習に関するモジュールの使用方法について解説の準備をしています.(今度はかなり時間がかかりそうですが…)

ご指摘,ご要望お寄せいただけますと助かります.(To:皆様)

 

--------------

【補足】(2017/10/13)

 モジュールブックに加筆.

 

matplotlib で複数のグラフを1枚に描画する方法(subplotsの使用方法)について解説を加えました.

 

--------------

【補足】(2017/10/08)

 map, lambda, filter に関してテキスト本体に加筆.

 

Pythonらしいスッキリしたプログラムの記述に役立ちます.

「PythonはLISPみたい」という感想があります.この特徴は個人的に気に入っております.

 

--------------

【補足】(2017/10/04)

 テキスト本体,モジュールブック共に若干の修正・加筆.

 

・WAV音声をNumpyで読み込んだ際の左右の音声の格納順番

・Numpyで使える関数の紹介を少々

 

--------------

【補足】(2017/10/01)

 モジュールブックに ctypes の解説を加筆しました.

 

C言語&Pythonでしっかり開発できるように,データの受け渡し(引数と戻り値の扱い)の方法について説明を加えました.

 

--------------

【補足】(2017/09/29)

 モジュールブックに ctypes の使い方(導入的レベル)を加筆しました.

 

当然といいますか,最速です.(C言語ですので当たり前ですね)

 

今後は,Cython, Numba, ctypes をゼミ活動で使ってみて,得られたTipsを追記していこうと思います.

 

--------------

【補足】(2017/09/27)

 モジュールブックに Numba の使い方(導入的レベル)を加筆しました.

 

Cython, Numbaを触ってみた感触ですが,速度チューニングの「勘所」をしっかり把握しないといけない感じがあります.

 

やっぱり速度対策は「Cで書いてPythonから呼び出す」というのが確実かもしれません.

 

これに関しましても,是非ご意見いただきたいです.

 

次の速度対策は ctypes ですね.

 

--------------

【補足】(2017/09/24)

 Cythonの解説を書いた途端に他大学の先生方から助言いただきました.

「Numbaというのがありますよ」とか

「Cプログラムとつなげるにはctypesが良いですよ」とか…

大変ありがたいです.とても良さそうなので使い方を整理してみようと思います.

 

 Cythonは「独自の言語」という感じで,Pythonから少し離れてしまう感がありますね.それで「LLVMを応用したNumbaの方が良いのではないか」というご意見でした.元のPythonと互換性が高いならありがたい限りですね.調べてみます.

 

--------------

【補足】(2017/09/22)

 モジュールブックに Cython の使い方を書き始めました.

ゼミでPython使っていますが,そろそろ実行速度に対する不満の声が出始めています.C言語がまだ苦手な人に向けて,手軽にPythonプログラムを高速化する方法として紹介しています.

 

Cythonに関する解説はまだまだ加筆が続きそうです.

 

--------------

【補足】(2017/09/18)

 テキスト本体内の用語の表記を部分的に修正・加筆しました.

 

--------------

【補足】(2017/09/11)

 mpmathの使い方について,テキスト本体に若干の加筆.

 

--------------

【補足】(2017/09/10)

 モジュールブックに加筆.PillowでアニメーションGIFを作成する方法の簡単な解説を入れました.

 

--------------

【補足】(2017/09/07)

 「データベースへのアクセス方法も重要では?」と他大学の先生から助言あり.

すみません,体が1つしかないもので… でも自分の「やることリスト」には入れておきます.(SQLite と MySQL というところでしょうか)

 

今の優先順位からすると,機械学習に向けた方面を念頭に置いています.

 

--------------

【補足】(2017/09/06)

 本日,アクセス数が15,000を超えました.そろそろ責任が重くなってきました.テキストのほころびが怖くなってきます.

 

テキスト本体,モジュールブックの両方において,用語が少々怪しい感じのところがあります.

 

インポートして使用するライブラリにおいて,「クラス・メソッド」なのか「ライブリの関数」なのかはっきりしない書き方の部分が散見されますね.

 

もう少し我慢しておつきあいお願いします.

 

--------------

【補足】(2017/09/04)

 MacにKivyをインストールする方法を加筆.Macユーザの方からのリクエストがありましたので加筆しました.

 

--------------

【補足】(2017/09/01)

 やっぱりデータサイエンスのテーマを扱うためにpandasモジュールの使い方を教える用意をした方がよさそうですね.日本語処理の方法の整理が一段落したらこちらに取り掛かろうかと考えています.

 

結局この夏休みは,日本語音声の入出力と形態素解析の方法の整理に時間を費やした感じです.

 

--------------

【補足-2】(2017/08/31)

 知人のMacファンからお叱りを受けました.MacのOSの名称が誤っているとのことで,早速修正しました.

 

--------------

【補足】(2017/08/31)

 テキスト本体に,AppleのMac(OS X, mac OS)にPython3をインストールする方法を加筆.Macユーザからの相談があったので加筆しました.

 

Pythonインタプリタ,PIPコマンドの起動方法がWindowsとMacで少しだけ異なる点があります.

 

--------------

【補足】(2017/08/26)

 ファイルやフォルダ(空)を削除する方法についてテキスト本体に加筆.

あと,条件式の書き方についての説明が無かったので加筆.

 

--------------

【補足】(2017/08/25)

 テキスト本体に加筆.桁数の大きな数の計算をするために mpmath モジュールの使い方の簡単な説明を入れました.

 

マンデルブロ集合の画像をどこまでも拡大するというのをテーマに持つ学生に対応するためですが,実際には GMP を使って C で書くことになります.

Pythonの長所短所を理解することができるテーマですね.

 

あと,関数定義の内部で大域変数を扱う方法について加筆.といいますか,基礎事項の解説し忘れですね.

 

--------------

【補足】(2017/08/22)

 テキスト本体に申し訳ない誤植を発見.修正しました.

Kivyの解説の「ウィンドウサイズを固定(リサイズを禁止)する設定」のところでタイプミスしていました…

 

--------------

【補足】(2017/08/19)

 学生から質問を受けました.

「withってどういう構文なんですか?」

という質問です.

 

Pythonらしい部分だと思いますので加筆しようと思いますが,分かりやすい解説をうまく書けるかどうか,ちょっと時間をかけて考えてみます.

 

--------------

【補足】(2017/08/14)

 テキスト本体にconcurrent.futuresモジュールの基本的な使用方法を加筆.

サンプルプログラムを掲載して,マルチスレッドとマルチプロセスの間で実行時間の違いを調べる方法を例示しました.

 

CPUやコアの数が多い計算機環境でそのメリットが分かります.

 

--------------

【補足】(2017/08/13)

 subprocessモジュールに関してテキスト本体に加筆.外部プロセスの終了に同期する方法(waitメッソド)の説明を追加.

 

--------------

【補足】(2017/08/12)

 テキスト本体に若干の加筆.コマンド引数の取得方法の説明が抜けていました.

あと,pathlibも便利そうなので基本的な使用方法の解説を入れました.

 

他大学の先生から並列処理に関してご指摘いただきました.threadingモジュールではCPUコアの多いマシンの性能が活かせないとのこと.これは私の無知でした.

concurrent.futuresモジュールが良いとのことですので,色々と試行してからそのうちテキスト本体に加筆しようと思います.

 

--------------

【補足】(2017/08/11)

 Kivyに関してテキスト本体に加筆.一度登録したウィジェットを後から削除する方法の説明を追加.

 

アプリ作りについて具体的に試行錯誤する学生が出はじめました.

凝ったGUIの構築方法を模索するにつれ,今後Kivyの加筆が続く予感がします.

 

--------------

【補足】(2017/08/09)

 Kivyに関してテキスト本体に加筆.(スクロールビュー/ScrollViewの使用方法)

「サイズの大きなウィジェットをスクロール表示したい」という学生からの相談を受けて加筆しました.確かに重要な機能です.

 

--------------

【補足】(2017/08/05)

 テキスト本体に,例外処理に関する加筆.

 

私の主観かもしれませんが,Pythonを学ぶと「自分にもアプリが作れる」という意識を持つ学生が増えるような気がしています.

 

 一斉の授業ではJavaを使ってプログラミング系の教育をしていますが,ゼミでPythonやった場合の方が手応えがあるような感じがあります.

(現実的な教育成果が見られるのはまだ先ですが…)

 

--------------

【補足】(2017/08/02)

 モジュールブックのSymPyの解説に加筆.

 テキスト本体の例外処理の解説部分に若干の加筆.あと体裁修正と索引の追加.

 

--------------

【補足】(2017/07/31)

 添字の使い方に関する加筆.まだまだ基礎事項の加筆が止まりませんね.

 

--------------

【補足】(2017/07/30)

 近い将来ビッグデータを取り扱うことに備えて,ファイルのランダムアクセスの方法について加筆しました.といってもファイルのシークの方法程度です.

テキスト本体

 

--------------

【補足】(2017/07/29)

 家のPCでもPythonやりたいという学生が出てきました.大変良いことです.それでインストール方法に関する相談を受けるようになってきました.

ただ,Kivy に関する最新情報は本家の英語のサイトでないと見れません…

それで,テキスト本体に,Pythonのインストール方法とPIPコマンドの使い方,それにKivyのインストール方法を加筆しました.

テキスト本体

 

 http://www.lfd.uci.edu/~gohlke/pythonlibs/ に,コンパイル済みのwheelバッケージ(Windows用)がありますね.PIPでネットからの直接インストールが失敗する場合などに重宝します.「非公式」とありますので自己責任で…

 

 @dario_okazakiさんによる「Kivyドキュメントサイトの日本語翻訳」が一応出来上がったとのことです.

Kivyドキュメントサイト

大変ありがたいです.学生にも薦めます.

 

--------------

【補足-2】(2017/07/25)

 テキスト中の恥ずかしい間違いを見つけた学生は,鬼の首を取ったように喜びますね.

 

今のところクレーマーに噛みつかれたりしてはいませんが,ほころびへの対応をぼちぼちと…

 

あと,学生からではなく他大学の先生からのリクエストで「pandasの使い方まとめて欲しい」というのがあります.

 

成績の処理が終わって,夏休みに入ったらpandas触ってみようかと思います.(執筆はいつになるかわかりませんので念のため)

 

--------------

【補足】(2017/07/25)

 モジュールブックに pygame の導入的解説を入れました.

モジュールブック

 

モジュールの名前からしますと「ゲーム開発ライブラリ」という印象ですが,その実態は SDL をちょっとラップして使いやすくしたという感じですね.

特にゲーム開発に有利な機能が提供されているわけでもありません.(そのあたりはゲーム開発専用プラットフォームには全くかないません)

 

「とにかく簡単に使えて,軽快に動作するウィンドウ描画ライブラリが欲しい」という場合に適しています.「立派なGUIライブラリは不要!」という人にも良いと思います.

 

気になるのは,PygletやPySDLと今後どのような関係になるかです.

PygletやPySDL2がpygameに取って代わるような雰囲気もありますが,pygameの活気が衰えるかどうかもよくわかりません…

それぞれの住み分けになるかもしれませんが,今後各モジュールには注目すべきですね.

 

pygameの特徴は「とにかく簡単で高速」という点ですが,線の描画に関しては不満が残ると思います(笑) 使ってみるとわかります…

ベタ塗りの描画に関しては今のところ特に不満はありません.

 

Kivyは私も大好きでして今後注目なんですが,実験的な描画をPythonで迅速にやるにはpygameが圧倒的に有利だと思います.もちろんゲーム開発にも向いていると思います.(念のため)

Kivyは「ちゃんとしたアプリ」を作る場合にお薦めしています.

 

--------------

【補足】(2017/07/23)

 ウィンドウ描画とキーボード&マウスのハンドリングを高速に実行する必要が出てきたため,Pygameの使用方法についてまとめはじめました.

 

近々,モジュールブックに加筆しようと思います.

 

--------------

【補足】(2017/07/17)

 テキスト本体に加筆.辞書型オブジェクトの解説部分に,辞書にキーが存在するかどうかを検査する方法を追記しました.あと,データ型の変換についても追記.

意外なくらい初歩的な事柄の解説が抜けていると実感.やっぱり実際にテキストを使い始めるとほころびが次々と見つかりますね.

テキスト本体

 

--------------

【補足】(2017/07/16)

 モジュールブックにhashlibの導入解説を入れました.

モジュールブック

(暗号学的ハッシュ生成モジュール)

 パスワード文字列の秘匿化や,文書のデジタル署名作成に必要です.

 

--------------

【補足】(2017/07/15)

 テキスト本体の「forを使ったリストの生成」の部分の加筆,それに文字と文字コード相互の変換について加筆しました.

テキスト本体

 

学生に使わせはじめると,次々と加筆箇所が出てきます.

 

--------------

【補足】(2017/07/11)

 各テキストに「免責事項」加筆しました.

 

--------------

【補足】(2017/07/10)

 テキスト本体をほんの少し加筆しました.(サブプロセスの部分)

あと,文字列の連結方法の解説を追加しました.(重要な方法なのに解説を逃していました)

テキスト本体

 

--------------

【補足】(2017/07/08)

 テキスト本体の索引がお粗末だったので少しテコ入れしました.

テキスト本体

 

--------------

【補足】(2017/07/02)

 「pandasモジュールの解説はしないのか?」と質問(リクエスト?)をいただきました.

 

 ちょっと待ってくださいね.私も体が1つしかないもので… ただ,気にはしていましたので夏休みくらいには着手するかもしれません.実際に私のゼミ活動でも必要になるでしょうから…(いつになるか確約なしですが)

 

pandas は統計解析に便利そうですね.

 

--------------

【補足】(2017/06/27)

 モジュールブックに numpy, matplotlib の記述をはじめました.

モジュールブック

 

これからはゼミの活動に伴って,モジュールブックの加筆が増えそうです.

 

--------------

【補足】(2017/06/25)

 subprocess モジュールを使用して外部のプログラムを起動する方法について加筆しました.

テキスト本体

複数の外部プログラムを起動して,それらと非同期にパイプI/Oする方法についても解説しています.

 

asyncio モジュールに関しては「初心者」「入門」の域を超えそうなので,このテキストとは別の形で解説コンテンツにしようと考えています.(若干方針変更)

 

あとは,numpy, matplotlib モジュールの入門解説をモジュールブックに載せると,しばらくゼミの教材として使えそうな感じです.

 

あと,乱数生成の方法を加筆しました.(ゲーム作成には欠かせません)

 

--------------

【補足】(2017/06/18)

 Pythonで高速に数値演算するには numpy が定番ですね.ただ研究課題のあらゆる局面で numpy が万能というわけでもなく,任意に立てた微分方程式の数値解を得るにはやっぱり個別にシミュレーションプログラム書くことになります.

 

 numpy に関しては,その内モジュールブックに入門解説を記述しようと思いますが,うちのゼミのテーマに早く対応しないといけないので,しばらくはC言語でシミュレーションコード書くことにします.

 

ということで,Cで書いたプログラム(実行可能ファイル)をPythonから呼び出して,スピードを要する部分だけCに投げるという方策を取ります.

といいますか,多くのモジュールがそんな風に外部プログラム呼び出しているようですね.

 

というわけで,subprocess, asyncio モジュールの使い方を早急にまとめてテキスト本体に組み込むつもりです.

 

--------------

【補足】(2017/06/10)

 KivyのKV言語,初心者向けに情報整理しないといけないですね.

学生の学び方と,相談の仕方を見ていて思いました.

 

次のテーマですね.ちょっと時間いただいて,またテキスト修正・追加します…

 

--------------

【補足-2】(2017/06/08)

 Kivyのテキスト入力がWindows/Macの日本語入力メソッドに対応していないと学生から「落胆の声」が出ました.でも,まだこれからです.

 

入力中の表示が崩れたりしますが,一応はなんとか日本語入力できますね…

Kivyはまさに発展途上.「最も将来性が高くて,これから注目のUIですよ!」と学生を説得しています.個人的な期待も込めていますが,しばらくKivyと付き合って行きます.

その内,アップデートで大幅に改善されることは間違いないと思います.

 

--------------

【補足】(2017/06/08)

 Kivyドキュメントサイトの日本語翻訳が進んでいるようです.

Kivyドキュメントサイト

 

ありがたいことです.

詳細なリファレンスが必要なときに役立ちます.

 

--------------

【補足】(2017/06/06)

 モジュールブックにSymPyの導入解説を入れました.

モジュールブック

(数式処理モジュール)

MathematicaやMaximaみたいなことが可能になります.

 

「何でSymPy?」と思われるかもしれませんが,うちのゼミのテーマで「使いやすい数式処理システムのユーザインターフェースの提案」みたいなことをやってまして,そういう事情です.

 

SymPyはすごいパッケージでして,グラフィカルな機能を除けば商用システムと張り合うレベルですね(おそらく)

マニュアルもPDFで1,700ページ以上ありますし…

 

数式電卓として使うにはフリーのMaximaか,お金がある人はMathematicaが良いと思います.手軽に3次元プロットまでできますし.(無理してSymPyを素のまま数式電卓にするのは,私個人としてはあまりおすすめではありません.面倒くさいと思いますよ…)

 

SymPyは数式処理機能を組み込んだアプリ(教育系ソフトとか,思考サポートアプリとか)を開発する場合に威力を発揮すると思います.

 

--------------

【補足】(2017/06/03)

 Kivyについて:ActionBar(Kivy流のメニュー), ScreenManager, Carousel, TabbedPanel の基本的な使い方の解説を追加しました.(学生からの要望に応えました)

 

あと,Kivyで時間イベント(タイマー)のハンドリングをするのに必要なClockモジュールについても基礎解説を追加しました.

GUIアプリで,タイミングで起動する処理の繰り返しに for や while を使おうとする学生がいました.そうではなくて,タイマーを仕掛けるのです.

 

これで,一通りアプリ作りの指導ができるかと…

 

そろそろ,ほころびが気になりますが,時間をかけてつぶしていきます.

テキスト本体

まずいところありましたら,ご連絡いただけますと助かります.すぐに修正・アップロードさせていただきます. 

--------------

【補足-2】(2017/06/03)

 Kivyでアプリ作る際,KV言語を使うと,ちょっと初心者にはデバッグがしんどい感じですね…

 

Pythonプログラムで間違いやるとエラーメッセージが分かりやすいですが,KVの中で起こした間違いの検出がなかなかやりにくいですね…

要するに,「KV言語の何行目に○○○なエラーがある」というメッセージが出ないわけです.

 

熟達者にとっては開発効率の面でKV言語はありがたいでしょうが,初心者にとってKV言語は勉強の能率を落としてしまう可能性が大きいですね…

 

Kivyは慣れるまでは,普通にPythonでAPI書き並べた方が良いと思いますが,みなさんはどのように思われますでしょうか…

 

--------------

【補足】(2017/05/30)

 Kivyのフレームバッファ(FBO)の扱いについてご相談いただきましたので,解説を追加しました.

 普通のCanvas描画ではピクセル値を取り出すのが困難なようです.それでFBOを使用することになるわけです.

テキスト本体

 

--------------

【補足】(2017/05/29)

 モジュールブックにPillowの導入解説を入れました.

モジュールブック

(画像処理モジュール)

Photoshpみたいなことが可能になります.

 

--------------

【補足】(2017/05/24)

 公開日は7月にしていますが,早速「サウンドの使い方を教えてほしい」との声が来ていまして,内容追加しました.(wave, PyAudio)

その他にも学生からの相談を受けて,若干の追加や修正もしています.

 

「モジュールブック」作りはじめました.OpenCVモジュールの入門みたいな部分だけ書きました.(画像認識モジュール)

モジュールブック

 

モジュールに関しては公開されているものの種類が多すぎるので,私のゼミで使用方法を発掘したものを中心に書いてゆくことになると思います.

 


Udemy関連

 人文科学系(文系)学部出身の方(あるいは在籍中の方)が独学でプログラミングを学ぶのはかなり大変です.

無料公開しておりますPythonのテキストは,既に別の言語に通じた方が短時間でPythonを学ぶことを想定しています.

 

はじめてプログラミングを学ぶ場合は,具体的にどのような作業を行うのかについての詳細なガイドが必要になります.

実際に学校でPython言語に関する教育を受けておられる方や,Pythonに詳しい仲間をある程度の人数でお持ち方は,学びにおけるきめ細かいポイントが自然に了解できるのですが,そのような環境下にない方は学びにおいてかなり不利なものがあると考えています.

 

私も実際にプログラミングを教えていまして,これに関して強く実感しています.C++やJava,JavaScriptをある程度習得した方はPythonのテキストのみで自力で学んで行けるのですが,そうでない方はテキストのみでは早々に立ち往生してしまいます.そのような方に対しては,実際にPCを前にして操作のレベルで噛み砕いた説明をしてあげないといけません.

 

 

 昨今はPythonに関する優良なる教材(書籍,インターネットサイトなど)が有料・無料のものを含めて多く販売・公開されており,情報源を得ること自体に苦慮することは少なくなってきていると思います.ただ,先に述べましたような「操作上のきめ細かいポイント」を文字媒体から得ることは難しいと考えておりまして,これに関しては当面はビデオ教材で対応してゆくことを考えております.

 

今の所,Udemyでビデオコースを1つ配信しておりまして,ここに紹介させていただきます.無料配布していますテキスト「Python3入門」を更にコンパクトに要約した内容になっています.

 

無料のテキスト「Python3入門」やその他の書籍,インターネットサイトの情報のみでPythonを学んで行ける方にとっては全く必要のないビデオコースですので,どうかそのようにご理解くださいませ.

 

 Udemyのこのビデオ教材は,Pythonの自学自習に挫折を体験された方や,Pythonではじめてプログラミングを学ぶ方に向けて作成しました.(合計11時間)

 

>>> コースへのリンク

 

・Facebook

・Twitter


目次


【テキスト本体の目次】

1 はじめに --- 1 

  1.1 Pythonでできること --- 1 

  1.2 本書の内容 --- 1 

    1.2.1 本書の読み方 --- 2 

  1.3 処理系の導入(インストール)と起動の方法 --- 2 

    1.3.1 Python処理系のディストリビューション(配布形態) --- 2 

    1.3.2 Python処理系の起動 --- 2 

    1.3.3 対話モード --- 3 

  1.4 使用するGUIライブラリ --- 3 

  1.5 Pythonに関する詳しい情報 --- 3 

2 Pythonの基礎 --- 4 

  2.1 スクリプトの実行 --- 4 

    2.1.1 プログラム中に記述するコメント --- 4 

    2.1.2 プログラムのインデント --- 5 

  2.2 変数とデータの型 --- 5 

    2.2.1 変数の開放(廃棄) --- 6 

    2.2.2 数値 --- 6 

      2.2.2.1 浮動小数点数の丸め --- 8 

      2.2.2.2 数学関数 --- 8 

      2.2.2.3 特殊な値:inf, nan --- 9 

      2.2.2.4 多倍長精度の浮動小数点数の扱い --- 10 

      2.2.2.5 分数の扱い --- 12 

      2.2.2.6 乱数の生成 --- 13 

    2.2.3 文字列 --- 13 

      2.2.3.1 エスケープシーケンス --- 13 

      2.2.3.2 raw文字列(raw string) --- 14 

      2.2.3.3 複数行に渡る文字列 --- 14 

      2.2.3.4 文字列の分解と合成 --- 15 

      2.2.3.5 文字列の置換 --- 16 

      2.2.3.6 文字の置換 --- 16 

      2.2.3.7 大文字/小文字の変換と判定 --- 17 

      2.2.3.8 文字列の含有検査 --- 17 

      2.2.3.9 文字コード/文字の種別 --- 18 

    2.2.4 真理値 --- 19 

    2.2.5 ヌルオブジェクト --- 19 

    2.2.6 型の変換 --- 19 

    2.2.7 型の検査 --- 20 

    2.2.8 基数の変換 --- 20 

      2.2.8.1 n進数→10進数 --- 20 

      2.2.8.2 10進数→n進数 --- 21 

  2.3 データ構造 --- 21 

    2.3.1 リスト --- 21 

      2.3.1.1 リストの要素へのアクセス --- 21 

      2.3.1.2 リストの編集 --- 22 

      2.3.1.3 リストに対する検査 --- 25 

      2.3.1.4 例外処理 --- 26 

      2.3.1.5 要素の個数のカウント --- 26 

      2.3.1.6 要素の整列 (1): sortメソッド --- 27 

      2.3.1.7 要素の整列 (2): sorted関数 --- 28 

      2.3.1.8 要素の順序の反転 --- 28 

      2.3.1.9 リストの複製 --- 29 

    2.3.2 タプル --- 29 

      2.3.2.1 特殊なタプル --- 30 

    2.3.3 セット --- 30 

      2.3.3.1 集合論の操作 --- 31 

      2.3.3.2 frozenset --- 32 

    2.3.4 辞書型 --- 32 

    2.3.5 添字(スライス)の高度な応用 --- 33 

      2.3.5.1 スライスオブジェクト(参考) --- 34 

    2.3.6 データ構造の変換 --- 35 

    2.3.7 データ構造に沿った値の割当て --- 36 

      2.3.7.1 データ構造の選択的な部分抽出 --- 37 

    2.3.8 データ構造のシャッフル --- 37 

    2.3.9 データ構造へのアクセスの速度について --- 37 

  2.4 制御構造 --- 38 

    2.4.1 繰り返し(1): for --- 38 

      2.4.1.1 rangeオブジェクト --- 39 

      2.4.1.2 for文におけるelse --- 40 

      2.4.1.3 forを使ったデータ構造の生成(要素の内包表記) --- 40 

      2.4.1.4 イテレータ --- 41 

      2.4.1.5 zip関数とzipオブジェクト --- 42 

      2.4.1.6 enumerateによるインデックス情報の付与 --- 43 

    2.4.2 繰り返し(2): while --- 44 

    2.4.3 繰り返しの中断とスキップ --- 45 

    2.4.4 条件分岐 --- 45 

      2.4.4.1 条件式 --- 46 

      2.4.4.2 各種の「空」値に関する条件判定 --- 46 

      2.4.4.3 is'による比較 --- 48 

  2.5 入出力 --- 49 

    2.5.1 標準出力 --- 49 

      2.5.1.1 出力データの書式設定 --- 49 

      2.5.1.2 sysモジュールによる標準出力の扱い --- 51 

    2.5.2 標準入力 --- 52 

      2.5.2.1 sysモジュールによる標準入力の扱い --- 53 

    2.5.3 ファイルからの入力 --- 54 

      2.5.3.1 バイト列の扱い --- 57 

      2.5.3.2 バイト列のコード体系を調べる方法 --- 58 

      2.5.3.3 指定したバイト数だけ読み込む方法 --- 58 

      2.5.3.4 ファイルの内容を一度で読み込む方法 --- 58 

      2.5.3.5 ファイルをイテレータとして読み込む方法 --- 58 

    2.5.4 ファイルへの出力 --- 59 

    2.5.5 標準エラー出力 --- 59 

    2.5.6 パス(ファイル,ディレクトリ)の扱い --- 61 

      2.5.6.1 カレントディレクトリに関する操作 --- 61 

      2.5.6.2 ディレクトリ内容の一覧 --- 61 

      2.5.6.3 ファイルのサイズの取得 --- 61 

      2.5.6.4 ファイル,ディレクトリの検査 --- 62 

      2.5.6.5 ファイル,ディレクトリの削除 --- 62 

      2.5.6.6 実行中のスクリプトに関する情報 --- 62 

      2.5.6.7 パスを扱うための更に別の方法:pathlib --- 63 

    2.5.7 コマンド引数の取得 --- 65 

    2.5.8 入出力処理の際に注意すること --- 65 

  2.6 関数の定義 --- 66 

    2.6.1 仮引数について --- 66 

      2.6.1.1 引数の個数が不定の関数 --- 66 

      2.6.1.2 関数呼び出し時の引数に
*' を記述する方法 --- 67 

      2.6.1.3 キーワード引数 --- 67 

    2.6.2 変数のスコープ(関数定義の内外での変数の扱い) --- 68 

    2.6.3 定義した関数の削除 --- 69 

  2.7 オブジェクト指向プログラミング --- 70 

    2.7.1 クラスの定義 --- 70 

      2.7.1.1 コンストラクタ --- 70 

      2.7.1.2 メソッドの定義 --- 70 

      2.7.1.3 クラス変数 --- 71 

      2.7.1.4 属性の調査 --- 73 

  2.8 データ構造に則したプログラミング --- 73 

    2.8.1 map関数 --- 74 

      2.8.1.1 複数の引数を取る関数のmap --- 75 

      2.8.1.2 map関数にzipオブジェクトを与える方法 --- 76 

    2.8.2 lambdaと関数定義 --- 76 

    2.8.3 filter --- 78 

    2.8.4 3項演算子としての if~else… --- 78 

    2.8.5 all, anyによる一括判定 --- 79 

    2.8.6 高階関数モジュール:functools --- 81 

      2.8.6.1 reduce --- 81 

3 KivyによるGUIアプリケーションの構築 --- 82 

  3.1 Kivyの基本 --- 82 

    3.1.1 アプリケーションプログラムの実装 --- 82 

    3.1.2 GUI構築の考え方 --- 82 

      3.1.2.1 Widget(ウィジェット) --- 83 

      3.1.2.2 Layout(レイアウト) --- 84 

      3.1.2.3 Screen(スクリーン) --- 84 

    3.1.3 ウィンドウの扱い --- 85 

    3.1.4 マルチタッチの無効化 --- 85 

  3.2 基本的なGUIアプリケーション構築の方法 --- 86 

    3.2.1 イベント処理(導入編) --- 86 

      3.2.1.1 イベントハンドリング --- 86 

    3.2.2 アプリケーション構築の例 --- 87 

    3.2.3 イベント処理(コールバックの登録による方法) --- 90 

    3.2.4 ウィジェットの登録と削除 --- 91 

    3.2.5 アプリケーションの開始と終了のハンドリング --- 92 

  3.3 各種ウィジェットの使い方 --- 93 

    3.3.1 ラベル:Label --- 93 

      3.3.1.1 リソースへのフォントの登録 --- 95 

    3.3.2 ボタン:Button --- 96 

    3.3.3 テキスト入力:TextInput --- 96 

    3.3.4 チェックボックス:CheckBox --- 97 

    3.3.5 進捗バー:ProgressBar --- 97 

    3.3.6 スライダ:Slider --- 97 

    3.3.7 スイッチ:Switch --- 97 

    3.3.8 トグルボタン:ToggleButton --- 97 

    3.3.9 画像:Image --- 98 

      3.3.9.1 サンプルプログラム --- 98 

  3.4 Canvasグラフィックス --- 99 

    3.4.1 Graphicsクラス --- 100 

      3.4.1.1 Color --- 100 

      3.4.1.2 Line --- 100 

      3.4.1.3 Rectangle --- 100 

      3.4.1.4 Ellipse --- 101 

    3.4.2 サンプルプログラム --- 101 

      3.4.2.1 正弦関数のプロット --- 101 

      3.4.2.2 各種図形,画像の表示 --- 101 

    3.4.3 フレームバッファへの描画 --- 103 

      3.4.3.1 ピクセル値の取り出し --- 104 

      3.4.3.2 イベントから得られる座標位置 --- 105 

  3.5 スクロールビュー(ScrollView) --- 105 

    3.5.1 ウィジェットのサイズ設定 --- 106 

  3.6 ウィンドウサイズを固定(リサイズを禁止)する設定 --- 106 

  3.7 Kivy言語によるUIの構築 --- 107 

    3.7.1 Kivy言語の基礎 --- 107 

      3.7.1.1 サンプルプログラムを用いた説明 --- 107 

      3.7.1.2 PythonプログラムとKvファイルの対応 --- 109 

  3.8 時間によるイベント --- 110 

    3.8.1 時間イベントのスケジュール --- 110 

  3.9 GUI構築の形式 --- 110 

    3.9.1 スクリーンの扱い: ScreenとScreenManager --- 111 

      3.9.1.1 ScreenManager --- 111 

      3.9.1.2 Screen --- 111 

    3.9.2 アクションバー: ActionBar --- 113 

    3.9.3 タブパネル: TabbedPanel --- 114 

    3.9.4 スワイプ: Carousel --- 115 

4 実用的なアプリケーション開発に必要な事柄 --- 117 

  4.1 日付と時間に関する処理 --- 117 

    4.1.1 基本的な機能 --- 117 

      4.1.1.1 日付,時刻の書式整形 --- 118 

      4.1.1.2 datetimeのプロパティ --- 118 

    4.1.2 timeモジュールの利用 --- 119 

      4.1.2.1 時間の計測 --- 119 

      4.1.2.2 プログラムの実行待ち --- 120 

  4.2 文字列検索と正規表現 --- 120 

    4.2.1 パターンの検索 --- 120 

      4.2.1.1 正規表現を用いた検索 --- 122 

      4.2.1.2 正規表現を用いたパターンマッチ --- 123 

      4.2.1.3 行頭や行末でのパターンマッチ --- 124 

  4.3 マルチスレッドとマルチプロセス --- 125 

    4.3.1 マルチスレッド --- 125 

    4.3.2 マルチプロセス --- 126 

      4.3.2.1 ProcessPoolExecutor --- 126 

    4.3.3 マルチスレッドとマルチプロセスの実行時間の比較 --- 127 

  4.4 ジェネレータ --- 128 

    4.4.1 ジェネレータ関数 --- 128 

    4.4.2 ジェネレータ式 --- 129 

  4.5 モジュールの作成による分割プログラミング --- 130 

    4.5.1 モジュール --- 130 

      4.5.1.1 単体のソースファイルとしてのモジュール --- 130 

    4.5.2 パッケージ(ディレクトリとして構成するモジュール) --- 131 

      4.5.2.1 モジュールの実行 --- 132 

    4.5.3 モジュールが配置されているディレクトリの調査 --- 133 

    4.5.4 __init__.pyについて --- 133 

  4.6 ファイル内でのランダムアクセス --- 135 

    4.6.1 ファイルのアクセス位置の指定(ファイルのシーク) --- 135 

    4.6.2 サンプルプログラム --- 135 

  4.7 データオブジェクトの保存と読込み: pickleモジュール --- 137 

  4.8 バイナリデータの作成と展開: structモジュール --- 139 

    4.8.1 バイナリデータの作成 --- 139 

    4.8.2 バイナリデータの展開 --- 139 

    4.8.3 バイトオーダーについて --- 141 

  4.9 バイナリデータをテキストに変換する方法: base64モジュール --- 142 

  4.10 execとeval --- 144 

    4.10.1 名前空間の指定 --- 144 

    4.10.2 eval関数 --- 144 

  4.11 collectionsモジュール --- 145 

    4.11.1 namedtuple --- 145 

  4.12 エラーと例外の処理 --- 145 

  4.13 使用されているシンボルの調査 --- 146 

  4.14 with構文 --- 147 

  4.15 処理環境に関する情報の取得 --- 152 

    4.15.1 Pythonのバージョン情報の取得 --- 152 

    4.15.2 platformモジュールの利用 --- 152 

    4.15.3 環境変数の参照 --- 153 

5 TCP/IPによる通信 --- 155 

  5.1 socketモジュール --- 155 

    5.1.1 ソケットの用意 --- 155 

    5.1.2 サーバ側プログラムの処理 --- 156 

    5.1.3 クライアント側プログラムの処理 --- 156 

    5.1.4 送信と受信 --- 156 

    5.1.5 サンプルプログラム --- 156 

  5.2 WWWコンテンツ解析 --- 158 

    5.2.1 requestsモジュール --- 158 

      5.2.1.1 リクエストの送信に関するメソッド --- 158 

      5.2.1.2 取得したコンテンツに関するメソッド --- 159 

      5.2.1.3 Sessionオブジェクトに基づくアスセス --- 160 

    5.2.2 Beautiful Soupモジュール --- 160 

      5.2.2.1 BSにおけるHTMLコンテンツの扱い --- 161 

6 外部プログラムとの連携 --- 163 

  6.1 外部プログラムを起動する方法 --- 163 

    6.1.1 標準入出力の接続 --- 163 

      6.1.1.1 外部プログラムの標準入力のクローズ --- 166 

    6.1.2 非同期の入出力 --- 166 

    6.1.3 外部プロセスとの同期(終了の待機) --- 168 

    6.1.4 外部プログラムを起動する更に簡単な方法 --- 168 

7 サウンドの入出力 --- 170 

  7.1 基礎知識 --- 170 

  7.2 WAV形式ファイルの入出力:waveモジュール --- 170 

    7.2.1 WAV形式ファイルのオープンとクローズ --- 170 

      7.2.1.1 WAV形式データの各種属性について --- 171 

    7.2.2 WAV形式ファイルからの読込み --- 171 

    7.2.3 サンプルプログラム --- 171 

    7.2.4 読み込んだフレームデータの扱い --- 172 

    7.2.5 WAV形式データを出力する例 --- 173 

    7.2.6 サウンドのデータサイズに関する注意点 --- 175 

  7.3 サウンドの入力と再生:PyAudioモジュール --- 176 

    7.3.1 ストリームを介したサウンド入出力 --- 176 

    7.3.2 WAV形式サウンドファイルの再生 --- 177 

      7.3.2.1 サウンド再生の終了の検出 --- 179 

    7.3.3 音声入力デバイスからの入力 --- 179 

A Pythonに関する情報 --- 183 

  A.1 Pythonのインターネットサイト --- 183 

  A.2 Pythonのインストール作業の例 --- 183 

    A.2.1 PSF版インストールパッケージによる方法 --- 183 

    A.2.2 Anacondaによる方法 --- 184 

  A.3 Python起動のしくみ --- 184 

    A.3.1 PSF版Pythonの起動 --- 184 

    A.3.2 Anaconda Navigatorの起動 --- 185 

    A.3.3 Anaconda Promptの起動 --- 186 

      A.3.3.1 condaコマンドによるPython環境の管理 --- 187 

  A.4 PIPによるモジュール管理 --- 187 

    A.4.1 PIPコマンドが実行できない場合の解決策 --- 188 

B Kivyに関する情報 --- 189 

  B.1 Kivyのインストール作業の例 --- 189 

  B.2 Kivy利用時のトラブルを回避するための情報 --- 189 

    B.2.1 Kivyが使用する描画APIの設定 --- 189 

    B.2.2 SDLについて --- 190 

  B.3 GUIデザインツール --- 190 

C Tkinter:基本的なGUIツールキット --- 191 

  C.1 基本的な扱い方 --- 191 

    C.1.1 使用例 --- 192 

      C.1.1.1 ウィンドウサイズ変更の可否の設定 --- 193 

    C.1.2 ウィジェットの配置 --- 193 

  C.2 各種のウィジェット --- 195 

    C.2.1 チェックボタンとラジオボタン --- 195 

      C.2.1.1 Variableクラス --- 196 

    C.2.2 エントリー(テキストボックス)とコンボボックス --- 197 

      C.2.2.1 プログラムの終了 --- 199 

    C.2.3 リストボックス --- 199 

    C.2.4 テキスト(文字編集領域)とスクロールバー --- 200 

    C.2.5 スケール(スライダ)とプログレスバーバー --- 202 

      C.2.5.1 Vaviableクラスのコールバック関数設定 --- 203 

  C.3 メニューの構築 --- 203 

  C.4 Canvasの描画 --- 205 

    C.4.1 描画メソッド(一部) --- 205 

    C.4.2 図形の管理 --- 208 

  C.5 イベントハンドリング --- 210 

    C.5.1 時間を指定した関数の実行 --- 212 

  C.6 複数のウィンドウの表示 --- 213 

  C.7 ディスプレイやウィンドウに関する情報の取得 --- 214 

  C.8 メッセージボックス(messagebox) --- 215 

    C.8.1 アプリケーション終了のハンドリング --- 217 

D モジュールの取り扱いについて --- 218 

  D.1 モジュールの読込みに関すること --- 218 

    D.1.1 モジュール読込みにおける別名の付与 --- 218 

    D.1.2 接頭辞を省略するためのモジュール読込み --- 218 

      D.1.2.1 接頭辞を省略する際の注意(名前の衝突) --- 219 

  D.2 各種モジュールの紹介 --- 220 

E サンプルプログラム --- 221 

  E.1 リスト/セット/辞書のアクセス速度の比較 --- 221 

    E.1.1 スライスに整数のインデックスを与える形のアクセス --- 221 

    E.1.2 メンバシップ検査に要する時間 --- 222 

  E.2 pathlibの応用例 --- 225


【ライブラリブックの目次】

1 画像の入出力と処理 --- 1 

  1.1 OpenCV --- 1 

    1.1.1 動画像の入力 --- 2 

    1.1.2 ユーザインターフェース --- 2 

      1.1.2.1 動画ファイルからの入力 --- 3 

    1.1.3 フレームのファイルへの保存 --- 3 

    1.1.4 静止画像の読込み --- 4 

    1.1.5 色の分解と合成 --- 5 

    1.1.6 画像の類似性の検査 --- 6 

      1.1.6.1 AKAZE特徴量の算出 --- 6 

      1.1.6.2 特徴量データの照合 --- 6 

      1.1.6.3 サンプルプログラム --- 7 

  1.2 Pillow --- 9 

    1.2.1 画像ファイルの読込みと保存 --- 9 

      1.2.1.1 EPSを読み込む際の解像度 --- 10 

    1.2.2 Imageオブジェクトの新規作成 --- 10 

    1.2.3 画像の閲覧 --- 11 

    1.2.4 画像の編集 --- 11 

      1.2.4.1 画像の拡大と縮小 --- 11 

      1.2.4.2 画像の部分の取り出し --- 12 

      1.2.4.3 画像の複製 --- 12 

      1.2.4.4 画像の貼り付け --- 12 

      1.2.4.5 画像の回転 --- 12 

    1.2.5 画像処理 --- 13 

      1.2.5.1 色の分解と合成 --- 13 

    1.2.6 描画 --- 13 

    1.2.7 アニメーションGIFの作成 --- 15 

    1.2.8 Imageオブジェクトから画素の数値配列への変換 --- 15 

2 GUIとマルチメディア --- 16 

  2.1 pygame --- 16 

    2.1.1 基礎事項 --- 16 

      2.1.1.1 Surfaceオブジェクト --- 16 

      2.1.1.2 アプリケーションの実行ループ --- 16 

    2.1.2 描画機能 --- 18 

      2.1.2.1 描画のサンプルプログラム --- 21 

      2.1.2.2 回転,拡縮のサンプルプログラム --- 22 

    2.1.3 キーボードとマウスのハンドリング --- 24 

    2.1.4 音声の再生 --- 25 

      2.1.4.1 Soundオブジェクトを用いる方法 --- 26 

      2.1.4.2 SoundオブジェクトからNumPyの配列への変換 --- 27 

    2.1.5 スプライトの利用 --- 29 

  2.2 Eel --- 34 

    2.2.1 基礎事項 --- 34 

    2.2.2 Python/JavaScriptで記述した関数の呼出し --- 36 

      2.2.2.1 関数の戻り値について --- 37 

  2.3 メディアデータの変換: PyDub --- 38 

    2.3.1 音声ファイルの読込み --- 38 

    2.3.2 音声データからNumPyの配列への変換 --- 38 

    2.3.3 NumPyの配列から音声データへの変換 --- 39 

    2.3.4 音声ファイルの保存 --- 39 

      2.3.4.1 MP3形式ファイルとして保存 --- 39 

      2.3.4.2 WAV形式ファイルとして保存 --- 39 

3 科学技術系 --- 40 

  3.1 数値計算と可視化のためのライブラリ:NumPy / matplotlib --- 40 

    3.1.1 配列オブジェクトの生成 --- 40 

      3.1.1.1 真理値の配列 --- 41 

      3.1.1.2 データ列の生成(数列の生成) --- 41 

      3.1.1.3 多次元配列の生成 --- 42 

      3.1.1.4 配列の形状の調査 --- 42 

      3.1.1.5 配列の要素へのアクセス --- 43 

      3.1.1.6 指定した行,列へのアクセス --- 43 

      3.1.1.7 配列形状の変形 --- 44 

      3.1.1.8 型の変換 --- 44 

    3.1.2 配列の連結 --- 45 

      3.1.2.1 append,concatenateによる連結 --- 45 

      3.1.2.2 hstack,vstackによる連結 --- 46 

    3.1.3 配列の次元の拡大 --- 46 

    3.1.4 データの抽出 --- 47 

      3.1.4.1 真理値列によるマスキング --- 47 

      3.1.4.2 条件式による要素の抽出 --- 47 

      3.1.4.3 論理演算子による条件式の結合 --- 48 

    3.1.5 データ列に対する演算:1次元から1次元 --- 48 

    3.1.6 データの可視化:基本 --- 49 

      3.1.6.1 作図処理の基本的な手順 --- 49 

      3.1.6.2 2次元のプロット:折れ線グラフ --- 49 

      3.1.6.3 複数のグラフの作成 --- 52 

      3.1.6.4 日本語の見出し・ラベルの表示 --- 54 

      3.1.6.5 グラフを画像ファイルとして保存する方法 --- 56 

    3.1.7 乱数の生成 --- 56 

    3.1.8 データの可視化:ヒストグラム,散布図,棒グラフ --- 57 

    3.1.9 データ列に対する演算:(n)次元から1次元 --- 59 

    3.1.10 データの可視化:3次元プロット --- 60 

      3.1.10.1 ワイヤフレーム --- 60 

      3.1.10.2 面プロット(surface plot) --- 61 

    3.1.11 データの可視化:ヒートマップ --- 61 

    3.1.12 高速フーリエ変換(FFT) --- 63 

      3.1.12.1 時間領域から周波数領域への変換:フーリエ変換 --- 63 

      3.1.12.2 周波数領域から時間領域への変換:フーリエ変逆換 --- 63 

    3.1.13 データの可視化:棒グラフ,グラフのアスペクトについて --- 67 

      3.1.13.1 棒グラフのプロット --- 67 

      3.1.13.2 プロットのアスペクト比の指定 --- 67 

    3.1.14 フーリエ変換を使用する際の注意 --- 67 

    3.1.15 行列の計算 --- 68 

      3.1.15.1 行列の和と積 --- 68 

      3.1.15.2 単位行列,ゼロ行列,他 --- 68 

      3.1.15.3 行列の要素の編集 --- 68 

      3.1.15.4 行列式と逆行列 --- 69 

      3.1.15.5 固有値と固有ベクトル --- 69 

      3.1.15.6 行列のランク --- 70 

      3.1.15.7 複素共役行列 --- 70 

      3.1.15.8 エルミート共役行列 --- 70 

      3.1.15.9 ベクトルのノルム --- 71 

    3.1.16 入出力 --- 72 

      3.1.16.1 配列オブジェクトのファイルI/O --- 72 

    3.1.17 行列の比較 --- 74 

    3.1.18 配列を処理するユーザ定義関数の実装について --- 74 

    3.1.19 画像データの扱い --- 76 

      3.1.19.1 画素の配列から画像データへの変換(PILライブラリとの連携) --- 77 

      3.1.19.2 画像データから画素の配列への変換(PILライブラリとの連携) --- 78 

  3.2 数式処理ライブラリ: SymPy --- 79 

    3.2.1 モジュールの読込みに関する注意 --- 79 

    3.2.2 基礎事項 --- 79 

    3.2.3 基本的な数式処理機能 --- 82 

      3.2.3.1 式の型 --- 84 

    3.2.4 解析学的処理 --- 85 

      3.2.4.1 極限 --- 85 

      3.2.4.2 導関数 --- 85 

      3.2.4.3 原始関数 --- 86 

      3.2.4.4 級数展開 --- 87 

    3.2.5 各種方程式の求解 --- 87 

      3.2.5.1 代数方程式の求解 --- 87 

      3.2.5.2 微分方程式の求解 --- 88 

      3.2.5.3 階差方程式の求解(差分方程式,漸化式) --- 89 

    3.2.6 線形代数 --- 89 

    3.2.7 総和 --- 90 

    3.2.8 パターンマッチ --- 91 

    3.2.9 数値近似 --- 92 

    3.2.10 書式の変換出力 --- 92 

      3.2.10.1 \rm \LaTeX  --- 92 

    3.2.11 グラフのプロット --- 92 

      3.2.11.1 グラフを画像ファイルに保存する方法 --- 94 

4 セキュリティ関連 --- 95 

  4.1 hashlib --- 95 

    4.1.1 基本的な使用方法 --- 95 

  4.2 passlib --- 95 

    4.2.1 使用できるアルゴリズム --- 95 

5 プログラムの高速化/アプリケーション構築 --- 97 

  5.1 Cython --- 97 

    5.1.1 使用例 --- 97 

    5.1.2 高速化のための調整 --- 99 

  5.2 Numba --- 100 

    5.2.1 基本的な使用方法 --- 100 

    5.2.2 型指定による高速化 --- 101 

  5.3 ctypes --- 101 

    5.3.1 C言語による共有ライブラリ作成の例 --- 102 

    5.3.2 共有ライブラリ内の関数を呼び出す例 --- 102 

    5.3.3 引数と戻り値の扱いについて --- 103 

      5.3.3.1 配列データの受け渡し --- 105 

  5.4 PyInstaller --- 108 

    5.4.1 簡単な使用例 --- 108 

      5.4.1.1 単一の実行ファイルとしてビルドする方法 --- 109 

6 対話作業環境(JupyterLab) --- 110 

  6.1 基礎事項 --- 110 

    6.1.1 起動と終了 --- 111 

    6.1.2 表示領域の構成と操作方法 --- 111 

      6.1.2.1 ノートブックの使用例 --- 112 

      6.1.2.2 カーネル(Kernel)について --- 114 

    6.1.3 Notebookでのinput関数の実行 --- 114 

  6.2 Markdownによるコメント表示 --- 115 

  6.3 使用例 --- 116 

    6.3.1 MathJaxによるSymPyの式の整形表示 --- 116 

    6.3.2 IPython.displayモジュールによるサウンドの再生 --- 117 

7 その他 --- 119 

  7.1 json:データ交換フォーマットJSONの使用 --- 119 

    7.1.1 JSONの表記 --- 119 

    7.1.2 使用例 --- 119 

  7.2 urllib:URLに関する処理 --- 120 

    7.2.1 他バイト文字の扱い(`\%'エンコーディング) --- 120 

      7.2.1.1 文字コード系の指定 --- 120 

  7.3 zenhan:全角⇔半角変換 --- 121 

  7.4 jaconv:日本語文字に関する各種の変換 --- 121