Pythonのテキスト作りました

  • 522
    Like
  • 6
    Comment

Pythonのテキスト作りました

---------------------
・テキスト本体(PDF形式137ページ:1.8MB) 2017/09/18更新
 言及している主なモジュール:
 Kivy, socket, threading, concurrent, requests, BeautifulSoup,
 mpmath, subprocess, datetime, wave, PyAudio
・モジュールブック(PDF形式73ページ:1.95MB) 2017/09/27更新
 言及しているモジュール:
 OpenCV, Pillow, pygame, NumPy, matplotlib, SymPy, hashlib,
 Cython, Numba
---------------------
Pythonを用いたゼミ活動の紹介をしています.
→Pythonを応用した活動の紹介
---------------------
Pythonを盲信する学生が出てくるといけませんので,Pythonの長所/短所について冷静に考えてほしくて記事を書いています.
→Pythonの長所と短所についての考察
---------------------
 
(2017/05/16)
学生に教えるためのPython(3.6)の入門テキストを作りました.
既に何かの言語を習得している人が迅速にPythonに慣れるための入門書というスタンスです.
 
GUIライブラリ「Kivy」を使ってアプリを作れるところまで一気に解説しています.(Kivyの入門)
それと,Webスクレイピング用にrequests, BeautifulSoup4の入門的解説もしています.
 
まだまだ完成度が低い状態ですが,教えならがテキストも修正・アップデートしてゆきます.
無料で公開しますので,ご意見いただけたら嬉しいです.

紹介ページ
 
「これ使いたい」という方は大歓迎です.
ご意見をいただきながら完成度を高めて行きたいです.
 
--------------
【補足】(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モジュールの入門みたいな部分だけ書きました.(画像認識モジュール)
モジュールブック
 
モジュールに関しては公開されているものの種類が多すぎるので,私のゼミで使用方法を発掘したものを中心に書いてゆくことになると思います.
 

はじめまして、KV言語の解説記事を書いたりしているものです。
おっしゃる通りKV言語は公式でもサンプルがすくないせいもあり、学習コストは高いかと思います。

>Kivyは慣れるまでは,普通にPythonでAPI書き並べた方が良いと思いますが,みなさんはどのように思われますでしょうか…
目的がPythonとGUIの勉強ならばそれでもいいかと思われます。
ただ個人的にはKV言語を使わないのであればPythoのGUIであればKivyでなくてもPySideとかほかのライブラリーを使用してもよいかとは思いますが。

一案としてはたとえばUIのテンプレートみたいなものをKv言語で使って配布するとか、あとは起動時のオプションに「inspector」をつけるとwidgetのプロパティがわかるのでそれを参考にするとかでしょうか。

「inspector」の使い方の参考:http://qiita.com/gotta_dive_into_python/items/caa3e0f41ddfaedcdb95)

dario_okazaki さん,コメントありがとうございます.
早速検討して,初心者に学びやすい方法となるか考えてみたいと思います.
 
今後ともよろしくお願いいたします.

今さらですが「pandas」モジュールをPythonでやる価値はどのくらいあるのでしょうか…
 
学校でPython教えていますが,まだまだ私も蒙昧なもので…
 
モデリングや機械学習用に他のモジュールがありますが,pandasの強みが今ひとつ…
 
「Excelでやるのはだめなんですか?」
という気分なのですが,pandasファンの人おられましたら,ご意見いただけましたら幸いです.

はじめまして。機械学習系研究室に所属する学生です。
pandasのファンというわけではありませんが、私がpandasを利用する理由とpandasの欠点(と思うところ)を書いておきます。

利点
pandas.read_csv pandas.read_sql を用いることでcsv, tsv, sqlなどの様々なフォーマットのデータからデータを簡単にロードできる。文字コードやヘッダーも指定可能。カラムのデータ型も推論してくれる。
・indexingが強力。データベースで言うところのselect, update, delete, mergeが簡単にできる。
・ベースにはNumPyが使われており簡単にnumpy.ndarrayに変換できる。
DataFrame.groupby が用意されており集約処理が簡単。
・Rのdata.frameと通じるものがあり、Rユーザーの学習コストが低い(?)
pandas.melt pandas.pivot で簡単にデータ整形ができる。
・matplotlibと相性が良い。
・実数型において numpy.nan numpy.inf を扱うことができる(NumPyの機能)
to_csv to_sql で簡単に出力可能。

欠点(不満点)
・引数の対応が統一されていないものがある。例)read_csv to_csvdelimiter sep など…
・DataFrameとSeriesのデータ型が用意されていてindexingを意識して行わなければならない。
・ix, loc, iloc を適切に使い分ける必要がある。
・dplyr(R)で言うところのungroupがない。
・破壊的メソッドと非破壊的メソッドを意識しなければならない(基本非破壊的だが inplace=True を指定することで破壊的になるメソッドも多い)
・numpy.int型でNaNを扱うことができない(NumPyの問題)
・データベースを触ったことのない人、オブジェクトを意識できない人にとってはなかなか習得コストが高い。

「Excelでやるのはだめなんですか?」

上記のことをExcel(VBA)でやろうと思えばできなくはないのかもしれませんがなかなか険しそうです。

chlorochrule さん,ありがとうございます.こういうご意見が大変ありがたいです.
ぼちぼちと自分でもやってみます.
 
学生向けにコンパクトな解説をめざしています.

データサイエンスと機械学習について学ぶには,統計学とプログラミングの知識と技能が必要になります.
そのため,大学でも低学年の内は「難しい」という印象を持つ人が多いです.
 
もちろん馴染みのないモデリング手法に関しては,その必要性を理解するのに時間と労力を要することがあります.
 
ただ,Pythonにはとても良いパッケージが揃っているので,データサイエンス,機械学習を体験ベースで学ぶのに良い環境だと思います.
こんな恵まれた状況がありますので,データサイエンス,機械学習を学生が無理なく学べるようにできるのではないかと考えています.
 
各種ツールの使い方に関しては,インターネット上に優良なる解説記事も多くなってきていますし,統計学の学習に関しても書籍,ネット共に良いコンテンツが揃ってきているように思います.
あとは,基礎理論&ツールの使い方を織り交ぜて学生が無理なく学べるようにコンテンツを整備することが必要なのかと考えている今日このごろです.
 
それで,Python用の各種ツールの使い方と基礎理論を同時に学べるコンテンツができないかと思い巡らせています.
なかなか高い壁のようですが,チャレンジする甲斐があるのかなと考えている昨今です.
 
 
これに関してもご意見お持ちの方おられましたら,いただけますととても嬉しいです.