- 投稿日:2019-03-23T23:43:51+09:00
 
[報告]Python3 エンジニア認定基礎試験に合格したお話
背景
恥ずかしながら,情報系の大学院生であるにも関わらず,基本情報技術者の資格すら持っていない.
そっち系の就職を考えていないので,そもそも取る気もなかったのだが.
だが,Pythonの面白さにどっぷりハマり,少し調べたところ,通称「Python試験」なる試験があることがわかったので,受験することにした.Pythonを書ければ,MATLAB同様に統計解析に信号処理に,結構幅広く使えるので.
勉強方法
教材は主に公式のチュートリアルを使った.しかし,例外処理や正規表現,ワイルドカード表記など,初めて触れる部分もあったので,そこについてはもう少し重点的に書かれたゼロからわかる Python超入門を購入し,補足的に勉強した.
チュートリアルを1周終える度に,模擬試験β版を用いて学習内容を確認した.
ただ,ずっと何周もしているとマンネリ化してしまうので,出題範囲をもとに出題率の多い内容(気楽な入門,制御構造,データ構造,エラーと例外,標準ライブラリ)を重点的に行なった.
受けてみた感想
模擬試験とほぼ同じレベルかと思います.チュートリアルを隅々まで読んでいないと解けない問題が2,3問ほど出てきましたが,出題数から考えると合否に大きく影響を与えるようなものでもありません.
また,全ての問題について,一度解答した後ももう一度解答を確認できるようになっています.せっかく40分60問の4択という問題設定なので,一度とき終わった後ももう1周見直すとより正答率は上がるかと思います.(ちなみに,2周目で間違いを見つけた問題もありました.)
結果
バッチリでした!
入出力は1問しか出ないので0%ですが,基本中の基本の入出力が不正解だったのは少し恥ずかしいですね.
総評
Pythonは本家ではなくAnacondaから始めた人間なのですが,本家のパッケージ管理なども学べたのが個人的に最も勉強になりました.
とりあえずは基本文法は一定の基準(資格を取れるレベル)に達したので,不正解だった部分をもう一度復習しつつ,夏に開始されるデータ分析試験に向けて勉強を始めたいと思います.
Pythonと言われるとどうしても統計などに用いられるイメージが強いですが,MATLABと記法が似ていることもあって,信号処理にも強いので,就職後もマルチに使いこなせる人間になりたいなぁと思います.
何か質問があればコメントかTwitterに連絡いただければ,教えられる限り教えたいと思います.守秘義務もあるのでそこはご了承ください.
- 投稿日:2019-03-23T23:32:06+09:00
 
Flask-Migrateに関して自分の言葉で
TL;DR
最終的に長くなってしまったので。
- (Flask-)SQLAlchemyを使うと、Python上のモデル操作で、実際のデータベース構造を変更(参照)できる。
 - Flask-Migrateは通常イメージするデータベース間の「移行」ではなく、Python上のモデルから、実際のデータベースへの「変換」を行うモジュール。
 - Flask-Migrate(Alembic)を使うと、Python上のモデルと実際のデータベース構造の同期がとりやすい。
 Flask-Migrateとは
Flask-Migrate is an extension that handles SQLAlchemy database migrations for Flask applications using Alembic.
Alembicを使って、SQL Alchemyによるデータベースマイグレーションを扱うためのExtension。これだけ読んでも意味がわかりませんでしたが、使ってみると用途がわかりました。
ここでいうマイグレーションとは、通常イメージするデータベース間の「移行」ではなく、Python上のモデルから、実際のデータベースへの「変換」を表しているという理解です。
Python上のデータベースモデル(Flask-SQLAlchemyについて)
pythonでデータベースを扱う方法はいくつかありますが、その1つはSQLAlchemyです。これはORM(Object-Relational Mapping)の1つで、オブジェクト志向言語のオブジェクトを、そうでないもの(ここではRelational Database)に変換するためのモジュールになります。
ここではFlask内で扱うことを前提に、flaskの拡張であるflask-sqlalchemyを使用します。In[2]: from flask import Flask In[3]: from flask_sqlalchemy import SQLAlchemy # 最初にFlask自体をappという名前でインスタンス化します。 In[4]: app = Flask(__name__) # 次にいくつかパラメータを設定します。 # sqliteのデータベース(ファイル)をどこに配置するか指定します。 In[5]: app.config['SQLALCHEMY_DATABASE_URI'] ='sqlite:///C:\\temp\\flask\\app.db' # TRACK_MODIFICATIONという機能を無効化します。(後述) In[7]: app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # データベースをインスタンス化します。flaskの拡張であるflask-sqlalchemyを使用しているため、Flaskインスタンスを渡してデータベースを作っている点に注意です。 In[8]: db = SQLAlchemy(app) # テーブルは、dbがもつModelというクラスを継承させた、Pythonのクラスとして作成します。 In[9]: class User(db.Model): ...: id = db.Column(db.Integer, primary_key=True) ...: username = db.Column(db.String(64), index=True, unique=True) ...: email = db.Column(db.String(120), index=True, unique=True) ...: # 作成したクラス(テーブル)を実際にSQLite上に作成するのはcreate_allというメソッドです。 # この時点で、指定したディレクトリにapp.dbというファイルが作成されます。 In[13]: db.create_all() # テーブルの確認 # ※for_bindじゃないものがあってもよさそうですが、見た感じこれしかありません。 In[14]: db.get_tables_for_bind() Out[14]: [Table('user', MetaData(bind=None), Column('id', Integer(), table=<user>, primary_key=True, nullable=False), Column('username', String(length=64), table=<user>), Column('email', String(length=120), table=<user>), schema=None)] # テーブルの中身をクエリしてみます。(この時点では何もなし) In[15]: User.query.all() Out[15]: [] # エントリを作成します。エントリは対応するクラスのインスタンスとして表現されます。 In[16]: u = User(username='Alice', email='alice@example.jp') # DBへの追加の際はセッションを意識する必要があります。 # セッションを通して追加し(この追加は複数可能)、最後にcommitすることでデータベースに反映されます。 In[17]: db.session.add(u) In[18]: db.session.commit() # 内容の確認 In[19]: User.query.all() Out[19]: [<User 1>] In[21]: User.query.get(1).email Out[21]: 'alice@example.jp'ちなみに、
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Falseを指定しないと、以下のような警告が表示されます。In[6]: db = SQLAlchemy(app) C:\Users\ikedak2\PycharmProjects\TestSandbox\venv\lib\site-packages\flask_sqlalchemy\__init__.py:794: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True or False to suppress this warning. 'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and 'もう1つ補足として、クラスはUserなのに、実際にできるテーブルはuserです。これはSQLAlchemyが対応するクラスの名前に基づいて、自動的にテーブル名を付与するためです。規則はsnake caseで、全て小文字、かつ区切りはアンダースコアになります。これを指定したければ、モデルクラスの中で、tablenameを指定すればよいらしい。
Flask-Migrateによるデータベース操作、履歴管理
先の項目では、sqlalchemy(Flask-SQLAlchemy)によってデータベース、テーブルの作成を行いました。簡単な構成ではこれでも事足りますが、構成が複雑だったり、同じ構成を他で複製したい場合などは、毎回手動で作成するのは大変です。Flask-Migrateを使うと、モデル設計→実際のデータベース構成の変換が自動で実行され、さらに履歴も管理することができます。
先の項目ではPythonのコンソールから操作しましたが、ここからは上記のような使用例を考えて、アプリケーションをファイル化します。(githubとかで配布できる形を想定)下準備
以下のようなフォルダ構成をとります。
TestSandBox
├venv/
├.flaskenv
├test_flask-migrate.pyFlask-Migrateはflask db xxというflaskのサブコマンドで操作します。flaskコマンドを使用するにあたり、大元になるFlaskインスタンスがどこで定義されているか(app=Flask()がどこで実行されているか)を指定する必要があります。デフォルトはapp.pyまたはwsgi.pyのようです。
参考この指定はFLASK_APPという環境変数で行います。コンソールで実行する場合は、通常通り
set FLASK_APP='test.py'のように指定しますが、これをファイル化するにはpython-dotenvというモジュールを使用します。
まず実行している仮想環境などで、pip install python-dotenvを実行します。(venv) C:\Users\ikedak2\PycharmProjects\TestSandbox>pip install python-dotenvそのうえで、ルートディレクトリに.flaskenvというファイルを作成し、以下のように記載します。
.flaskenvFLASK_APP=test_flask-migrate.pyこれでflaskコマンドが実行されると、test_flask-migrate.pyが読み込まれます。
次に、前の項目でコンソールから実施した内容と同じようなことをファイルにします。
test_flask-migrate.py#!/usr/bin/env python # -*- coding: utf-8 -*- from flask import Flask import os from datetime import datetime from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate # 実行されるファイル(test_flask-migrate.py)の置き場所をbasedirに保存 basedir = os.path.abspath(os.path.dirname(__file__)) app = Flask(__name__) # データベースファイルは実行ファイルと同じ場所にapp.dbという名前で作成 app.config['SQLALCHEMY_DATABASE_URI'] ='sqlite:///' + os.path.join(basedir, 'app.db') app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) # migrateインスタンスを定義 migrate = Migrate(app, db) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(64), index=True, unique=True) email = db.Column(db.String(120), index=True, unique=True) password_hash = db.Column(db.String(128)) # この関数は、インタープリタ(コンソール)からこのクラス(からできたインスタンス)を読んだ際に、どのように表示されるかを定義している。ここではusernameを表示させている。 def __repr__(self): return '<User {}>'.format(self.username)マイグレーションレポジトリの作成
この状態で通常のプロンプトから、
flask db initを実行します。(venv) C:\Users\ikedak2\PycharmProjects\TestSandbox>flask db init Creating directory C:\Users\ikedak2\PycharmProjects\TestSandbox\migrations ... done Creating directory C:\Users\ikedak2\PycharmProjects\TestSandbox\migrations\versions ... done Generating C:\Users\ikedak2\PycharmProjects\TestSandbox\migrations\alembic.ini ... done Generating C:\Users\ikedak2\PycharmProjects\TestSandbox\migrations\env.py ... done Generating C:\Users\ikedak2\PycharmProjects\TestSandbox\migrations\README ... done Generating C:\Users\ikedak2\PycharmProjects\TestSandbox\migrations\script.py.mako ... done Please edit configuration/connection/logging settings in 'C:\\Users\\ikedak2\\PycharmProjects\\TestSandbox\\migrations\\alembic.ini' before proceeding.このコマンドを実行することで、ルートディレクトリにmigrationというフォルダが作成されます。
マイグレーションの実施
次に、
flask db migrateを実行し、マイグレーション用のスクリプトを生成します。
マイグレーションにはautomaticとmanualの2種類があり、automaticの場合、Python上でモデルに定義された形と、実際のDBのスキーマをAlembicが比較して、必要な差分を埋めるスクリプトを生成します。今回の場合、元のデータベースが存在しないので、データベース自体とUserテーブルを生成するスクリプトが作成されます。
※先ほど作成したデータベースとはディレクトリを使用しているので新規作成です。(venv) C:\Users\ikedak2\PycharmProjects\TestSandbox>flask db migrate -m "Create user table" INFO [alembic.runtime.migration] Context impl SQLiteImpl. INFO [alembic.runtime.migration] Will assume non-transactional DDL. INFO [alembic.autogenerate.compare] Detected added table 'user' INFO [alembic.autogenerate.compare] Detected added index 'ix_user_email' on '['email']' INFO [alembic.autogenerate.compare] Detected added index 'ix_user_username' on '['username']' Generating C:\Users\ikedak2\PycharmProjects\TestSandbox\migrations\versions\182c58313345_create_user_table.py ... doneuserというテーブルと、インデックスとなるフィールドがモデルの定義通りに認識されています。
この時点で、migration\versionsフォルダに、182c58313345_create_user_table.pyというファイルが作成されており、これが実際のSQL操作を実行するスクリプトです。ファイル名はバージョンを表しており、すなわちバージョン管理されています。
-mというオプションで、gitのコミットのように、バージョンに対して名前(コメント)を付けることができます。スクリプトの中には以下のように記載されており、「この変更をどのように実施するか(Upgrade)」と「どのように切り戻すか」(Downgrade)の2つが用意されています。
def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.create_table('user', sa.Column('id', sa.Integer(), nullable=False), sa.Column('username', sa.String(length=64), nullable=True), sa.Column('email', sa.String(length=120), nullable=True), sa.Column('password_hash', sa.String(length=128), nullable=True), sa.PrimaryKeyConstraint('id') ) op.create_index(op.f('ix_user_email'), 'user', ['email'], unique=True) op.create_index(op.f('ix_user_username'), 'user', ['username'], unique=True) # ### end Alembic commands ### def downgrade(): # ### commands auto generated by Alembic - please adjust! ### op.drop_index(op.f('ix_user_username'), table_name='user') op.drop_index(op.f('ix_user_email'), table_name='user') op.drop_table('user') # ### end Alembic commands ###履歴は以下のように確認できます。
(venv) C:\Users\ikedak2\PycharmProjects\TestSandbox>flask db history <base> -> 182c58313345 (head), Create user table履歴管理されているため、特定のバージョンに戻すことが可能みたいです。(未実施)
マイグレーションの実行
flask db upgradeを実行して、upgradeの内容(テーブル作成)を実行します。(venv) C:\Users\ikedak2\PycharmProjects\TestSandbox>flask db upgrade INFO [alembic.runtime.migration] Context impl SQLiteImpl. INFO [alembic.runtime.migration] Will assume non-transactional DDL. INFO [alembic.runtime.migration] Running upgrade -> 182c58313345, Create user table実際にできたかどうかは、コンソールから実施した際と同様です。
(venv) C:\Users\ikedak2\PycharmProjects\TestSandbox>python Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> from test_flask_migrate import db >>> db.get_tables_for_bind() [Table('user', MetaData(bind=None), Column('id', Integer(), table=<user>, primary_key=True, nullable=False), Column('username', String(length=64), table=<user>), Column('email', String(length=120), table=<user>), Column(' password_hash', String(length=128), table=<user>), schema=None)]この後は、Python側でモデルに変更を加えたときに、マイグレーションを実行することでデータベースの構成とモデルの同期をとることができます。
感想
今まではORM = PythonからSQLを実行するためのもの、くらいにしか認識していませんでしたが、ようやくORMとか何か、なんとなくわかったように思われます。
- 投稿日:2019-03-23T23:29:53+09:00
 
[Python] 45秒で東大数学(2019年 前期第1問)を解いてみた
Pythonを使って45秒で東大の入試問題を1問解けるのか検証してみました。
Sympyの
integrate(f, (x, a, b))を用いれば
関数fをxについてaからbまで積分計算することができます。では早速問題を見てみましょう。
問題:
2019年 東京大学 前期日程 数学(理科) 第1問
読売新聞オンラインより問題および解答部を引用
手計算での解法
まずは上記の式を展開して、
展開した第1項目から4項目までの定積分をそれぞれ計算して最後に
足し合わせます。
Sympyで解いてみる
まずはSympyをImportして変数xを定義
import.pyimport sympy as sym x = sym.Symbol('x')間違えないようにひたすら式を打ち込む
念の為、表示して確認。import.pyf = (x**2+x/sym.sqrt(1+x**2))*(1+x/((1+x**2)*sym.sqrt(1+x**2))) print(f)出力:(x*2 + x/sqrt(x2 + 1))(x/(x*2 + 1)*(3/2) + 1)
打ち間違えがなさそうなら
いよいよ0から1まで積分integrate.pyF = sym.integrate(f, (x, 0, 1)) print(F)出力:-35/12 + pi/8 + 5*sqrt(2)/2
解けました。
解答例と比べても合っているようです。結論
高速でタイプしてギリいける感じです。
ちなみに1回目は式に目が慣れていなかったので失敗。2分以上かかりました。
よって45秒以内に解を出すにはいかに早く打てるかが鍵となります。
特に途中でタイプミスがあると致命的。
リズムに乗るために本家の45秒を聴きながらやってみるのも良いでしょう。
- 投稿日:2019-03-23T23:29:53+09:00
 
[Python] 45秒で東大数学(2019年 前期第1問)を解いてみる
Pythonを使って45秒で東大の入試問題を1問解けるのか検証してみました。
Sympyの
integrate(f, (x, a, b))を用いれば
関数fをxについてaからbまで積分計算することができます。では早速問題を見てみましょう。
問題:
2019年 東京大学 前期日程 数学(理科) 第1問
読売新聞オンラインより問題および解答部を引用
手計算での解法
まずは上記の式を展開して、
展開した第1項目から4項目までの定積分をそれぞれ計算して最後に
足し合わせます。
Sympyで解いてみる
まずはSympyをImportして変数xを定義
import.pyimport sympy as sym x = sym.Symbol('x')間違えないようにひたすら式を打ち込む
念の為、表示して確認。import.pyf = (x**2+x/sym.sqrt(1+x**2))*(1+x/((1+x**2)*sym.sqrt(1+x**2))) print(f)出力:(x*2 + x/sqrt(x2 + 1))(x/(x*2 + 1)*(3/2) + 1)
打ち間違えがなさそうなら
いよいよ0から1まで積分integrate.pyF = sym.integrate(f, (x, 0, 1)) print(F)出力:-35/12 + pi/8 + 5*sqrt(2)/2
解けました。
解答例と比べても合っているようです。結論
45秒以内に解を出すにはいかに早く打てるかが鍵となります。
特に途中でタイプミスがあると致命的。
リズムに乗るために本家の45秒を聴きながらやってみるのも良いでしょう。
- 投稿日:2019-03-23T23:21:47+09:00
 
Amazonギフト券を自動で購入するスクリプトを作った
はじめに
ログイン情報を書いたり購入動作もあるので、使う場合は自己責任で。
Amazonギフト券を自動で買わせてみた
お勉強がてら、Seleniumを使ってAmazonギフト券を買わせてみた。
(少額で動作確認できるからしくじっても安心...?)環境
- Windows10 64bit
 - Python3.6
 - ChromeDriverダウンロード済
 - Seleniumインストール済
 ※環境準備については他の記事に譲ります
ソースコード
from selenium import webdriver def signin(driver, email, password): driver.get('https://carriercentral.amazon.co.jp/request') time.sleep(1) driver.find_element_by_id("ap_email").send_keys(email) driver.find_element_by_id("ap_password").send_keys(password) driver.find_element_by_id("signInSubmit").click() return def buy_gift_card(driver, amount, send_to): driver.get(r'https://www.amazon.co.jp/Amazon%E3%82%AE%E3%83%95%E3%83%88%E5%88%B8-2_JP_Email-Amazon%E3%82%AE%E3%83%95%E3%83%88%E5%88%B8-E%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%97-%E3%81%82%E3%82%8A%E3%81%8C%E3%81%A8%E3%81%86/dp/B004N3APDM/ref=lp_3128323051_1_2?s=gift-cards&ie=UTF8&qid=1553318863&sr=1-2') time.sleep(3) driver.find_element_by_id("gc-order-form-custom-amount").send_keys(amount) driver.find_element_by_name("emails").send_keys(send_to) driver.find_element_by_id("gc-buy-box-bn").click() # 「すぐに購入」 time.sleep(3) driver.find_element_by_id("continue-top").click() # 確認 time.sleep(3) driver.find_element_by_name("placeYourOrder1").click() # 注文確定 time.sleep(3) return if __name__ == "__main__": signin_email = 'Amazonサインインメールアドレス' signin_password = 'パスワード' amount = 100 # 購入金額 send_to = signin_email # ギフト券送付先メールアドレス driver = webdriver.Chrome(r'ChromeWebDriverの実行ファイルフルパス') signin(driver, signin_email, signin_password) buy_gift_card(driver, amount, send_to)
- 投稿日:2019-03-23T22:43:40+09:00
 
デコレーターのメモ
デコレーターの例。このデコレーターはある関数A内で使われている関数Bについて、
その関数Bの引数を{'関数B':*args, **kwargs}で指定して、関数Aの引数とすることで、関数B内で引き継がれるというもの。def search_args_kwargs(func): func_name=func.__name__ def wrapper(parent_kwargs, *args1, **kwargs1): if func_name in parent_kwargs: *args2, kwargs2=parent_kwargs[func.__name__] return func(*args1, *args2, **kwargs1, **kwargs2) else: return func(*args1, **kwargs1) return wrapper def detail1(*args, **kwargs): string='My age is {}.'.format(*args) print(string) string='I was born in {year}.'.format(**kwargs) print(string) def detail2(*args, **kwargs): string='Talking about My {} years old {} dog.'.format(*args) print(string) string='He was born in {year}, who likes {likes}.'.format(**kwargs) print(string) def greeting(*args, **kwargs): string='I am a {}. My pet is {}'.format(*args) print(string) kwargs.update({'type_pet':args[1]}) string='I am {me}. My {type_pet} is {pet}'.format(**kwargs) print(string) search_args_kwargs(detail1)(kwargs, 28, year=1991) search_args_kwargs(detail2)(kwargs, 3, year=2016) greeting('human','dog', me='Taro', pet='Kuro', detail2=('cute',{'likes':'milk'})) ''' >>I am a human. My pet is dog I am Taro. My dog is Kuro My age is 28. I was born in 1991. Talking about My 3 years old cute dog. He was born in 2016, who likes milk. '''こちらはデコレーターの簡単な例
def deco(func): def wrapper(*args, **kwargs): print('Decorated!') return func(*args, **kwargs) return wrapper @deco def f(i): return i+1 f(1) ''' >>Decorated! 2 '''
- 投稿日:2019-03-23T22:30:31+09:00
 
【保存版・初心者向け】独学でAIエンジニアになりたい人向けのオススメのAI勉強方法 (2019年改定版)
はじめに
我々は、AI Academyというサービスを通じて、これまで1500名以上の方々に、プログラミング(Python)、統計的機械学習、深層学習(Deep Learning)、機械学習のための数学、確率・統計などを教えてきました。
そんな中、サービスを通じて一人一人に最適な勉強方法を日々出会う初学者の方々に、私達なりの学習アドバイスを行なっていたのですが、1500名以上の初学者に教えていく中で、人工知能を勉強するにあたって、多くの『わからない』には、共通する点があることに気づきました。
この記事では、我々が解決してきた受講生の方々の共通の『わからない』を体系的にまとめることで、
これからAIエンジニアになりたいと考えている多くの初学者にとって、役に立てれるのではないかと思い記事にすることに致しました。
今回の記事を通して、1人でも多くの方に何か参考になることがありましたら幸いです。※この記事は以前書いた【保存版・初心者向け】独学でAIエンジニアになりたい人向けのオススメの勉強方法の改定版記事になります。
前回の内容で紹介していない書籍や、前回紹介していた書籍を今回は紹介していなかったりもします。
学習ロードマップも更新しましたので、最後までお読み頂けますと幸いです。この記事の対象者
この記事の対象者は次のような方達に向けて書いております。
・将来Pythonでデータ分析をしたいと考えているが、何から手をつけたら良いかわからないという方
・将来、人工知能に関連した業務に携わりたいと検討中の初学者の方
・未経験者からAIエンジニアになりたく、そのためにどのような知識が必要か知りたい方
・AIプログラミングスクールや専門学校に進学しようか考えているが、独学で勉強できる方法を知りたいという方
対象ではない方
・既に業務でデータ分析している方
・機械学習やディープラーニングを使ったWebアプリなどを作りたいと考えている方
・ディープラーニングの資格試験の勉強方法
などなどは対象としておりません。
AIエンジニアに最低限必要な知識
AIエンジニアに最低限必要な知識を大きく6つに分けて見ました。
ここでは、将来AIエンジニアとして業務を行うにあたり、大きく分けて6つの内容の基礎知識の全体像を把握してください。①プログラミングスキル
- Python
- numpy、pandas、matplotlib、scikit-learn、TensorFlowやkeras②数学
- 微分、線形代数、ベクトル、行列、確率など③統計の知識
- 標準偏差、分散、確率分布、推定、検定などなど④機械学習の基礎知識
- 教師あり学習と教師なし学習
 - 前処理、特徴量設計、学習と評価
 - 単回帰、重回帰分析、最小二乗法、パーセプトロン、ロジスティック回帰
 - 決定木、ランダムフォレスト、サポートベクトルマシン、K-means、etc..
 - ディープラーニングの実装スキル及び知識
 - scikit-learn
 - TensorFlowやKerasなどのフレームワークの知識
 - scikit-learnで学習済みモデルを作るまでの流れなど。
 
1.データの収集とデータの前処理欠損値の補完や外れ値の削除)
2.特徴量の設計(特徴量の選択)
3.モデル開発(モデルの選択と学習)
4.モデル評価・・・交差検証、混合行列など
⑤SQLを使ってデータベースを操作する知識
- select、insert、update、delete、where、like、limit、sum、avg、max、group by、having、order by、テーブル結合、ビュー、サブクエリ、caseなどなど⓺クラウドの知識
- AWSやGCPやAzureなどのクラウドインフラ回りの知識大きく6つもあり、意外と多いなと思われたかもしれませんが、一度に全てやるのではなく、まずは①と④の2つに絞ることをオススメします。
理由は、実際にプログラムを書き、目に見える形にすることで継続して学びやすくなるからです。
はじめに理論から入ると独学だと挫折してしまうので。
その後、③の統計や②の数学、⑤のSQL、⓺のクラウドを進めていきましょう。
- ①プログラミングスキル
 - ④機械学習の基礎知識
 - ③の統計、②の数学
 - ⑤のSQL、⓺のクラウド
 人工知能を独学で勉強するオススメの方法
必要な知識は前の節で紹介しましたが、どのようにそれらを学べば良いのでしょうか。
①から⑥を学ぶ上で、以下のような順で知識を身につけていくことをオススメしています。フェーズ1 pythonプログラミングと人工知能概論を学ぶ
フェーズ2 機械学習プログラミング
フェーズ3 Kaggleに挑戦
フェーズ4 SQL、スクレイピング、クラウドなどの技術も身につける。
フェーズ5 機械学習を活用したプロダクト制作をする
フェーズ6 教える
フェーズ7 専門分野を確立するこのフェーズごとに学んでいくことがもっとも自分自身に負荷をかけず、楽しく学ぶことができると考えています。
フェーズ1ではプログラミング初学者の方を指しております。
もし、プログラミングを初めてという方は是非フェーズ1から目を通してください。フェーズ2では実際にフェーズ1で学んだ内容をベースに、機械学習プログラミングに関する勉強方法を説明して参ります。
既にscikit-learnを使った機械学習プログラミングを行なっている方は飛ばして頂いても構いません。フェーズ3ではKaggleなどを利用し、実際にコンペに参加し、実践的な機械学習プログラミングを学ぶ方法を記述しています。
フェーズ4 機械学習をやる上で、データベースからデータを取り出すことは頻繁に行われますので、SQLの知識は必須です。ここでは、SQLの他にスクレイピング(データ収集用)、クラウド関連の内容に関して記述しています。
フェーズ5 機械学習スキルを活用してプロダクト制作に取り掛かりましょう。このレベルまで到達した方は、プロダクト制作を通じて学ぶという内容に関して記述しています。
フェーズ6 人に教えることで自分の分かっていなかったことが明確になることがあります。ですので、友人などに機械学習を教えて自分の理解を深めるという内容に関して記述しています。
フェーズ7 人工知能の領域は幅広く、画像認識や自然言語処理、音声認識などがあります。ここでは専門分野を確立する方法に関して記述しています。
以降、7つのフェーズごとに、どのようにこれらに取り組めば良いのか、オススメの書籍などを紹介しながら説明していきます。
フェーズ1 pythonプログラミングと人工知能概論を学ぶ
独学で、書籍を使って、
人工知能開発に最低限必要な知識は「機械学習の知識」と「Pythonの知識」と「機械学習のための数学と確率・統計学」です。このフェーズでは、「機械学習の知識」と「Pythonの知識」に絞り、一旦「機械学習のための数学と確率・統計学」は違うフェーズに回しても大丈夫です。
数学や確率がわからなくても、機械学習用のライブラリを使えば機械学習を体験でき、理論だけの学びよりモチベーションが保ち安いからです。(人によっては理論からの方が継続できる方もいるかと思いますので断言はしません。)
その後、ライブラリに頼った実装をした後に、中で何が行われているのか気になってから、一度立ち戻って数学・統計学などを学ぶことをオススメします。では、オススメ書籍を紹介していきます。
まず、プログラミング初心者または、Pythonの基本文法に自信がない方は下記書籍がオススメです。
2894円
こちらの書籍はpythonの基礎にあたる基本文法だけでなく、機械学習プログラミングに関する基礎も学べます。
この書籍を一通り読み終えることで、pythonプログラミングの基礎力と、機械学習プログラミングの体験が出来ます。また、pythonプログラミングを始める際には、開発環境いらずのブラウザかつ無料で使える、CPU/GPUの機械学習環境が整ったGoogle Colaboratoryを利用してPythonプログラミングをしていきましょう。
次に、人工知能の概要に関してさらっと学びたい方は下記の書籍をお勧めします。
・人工知能は人間を超えるか ディープラーニングの先にあるもの (角川EPUB選書) [単行本]
1512円
上記2冊はPythonの本を読み、出てくるプログラムを手を動かしながら進めてください。
さて、上記2冊で人工知能に関する知識及びPythonプログラミングの基礎が固まった方は、
機械学習の一連の流れと統計的機械学習のプログラミングを始めましょう。フェーズ2 機械学習プログラミング
・Pythonではじめる機械学習
こちらも手を動かしながらコードを書き、またその後コードを読む(写経)をおこなってください。
ただ本を読むだけより、手を動かしながら進める方が理解が深まります。3672円
もしくは
PythonによるAIプログラミング入門 ―ディープラーニングを始める前に身につけておくべき15の基礎技術
3672円
+α
http://amzn.asia/9EPUIpg
4320円もしくは
scikit-learnとTensorFlowによる実践機械学習
4860円
・数学
スバラシク実力がつくと評判の線形代数キャンパス・ゼミ―大学の数学がこんなに分かる!単位なんて楽に取れる!
もしくは、
2786円
機械学習の技術書を読み、数式アレルギーが出た方はキカガクさんの動画をオススメします。
手書きで講義で数学が学べ、何より説明がわかりやすいです。
数学がアレルギーの方は上記のほんと合わせて、2つの動画を利用することをオススメします。【キカガク流】人工知能・機械学習 脱ブラックボックス講座 - 初級編 - | Udemy
【キカガク流】人工知能・機械学習 脱ブラックボックス講座 - 中級編 - | Udemy
・数学+α
機械学習のアルゴリズムを数学を学びながら、Pythonで実装したい方は下記書籍はオススメです。機械学習のエッセンス -実装しながら学ぶPython,数学,アルゴリズム- (Machine Learning)
・統計学
3,024円
確率・統計学編
・データ前処理
前処理大全[データ分析のためのSQL/R/Python実践テクニック]http://amzn.asia/aa5dHB0
3240円次に、ライブラリを用いてDeep Learning(ディープラーニング)に関して勉強してみると良いでしょう。
(最近は、PyTorchも人気が出でおり、色々と試して使いやすいものを選ぶのが良いかと思います。)
初心者にオススメなのはKerasです。・Keras
PythonとKerasによるディープラーニング4190円
書籍以外にも、Udemyなどがオススメです。
次の動画も合わせてご利用してみてください。Pythonで機械学習:scikit-learnで学ぶ識別入門
フェーズ3 Kaggleに挑戦
さて、フェーズ1,2では書店で販売されている機械学習関連の書籍を紹介しました。
上記の書籍を順番に1〜3ヶ月ほど手を動かしながら進めると、機械学習の一連の流れや、自分で機械学習のモデルを読み書きできるレベルになっているはずです。ここでは、次のフェーズとしてKaggleやSIGNATE(旧 DeepAnalytics)を使って、実践します。
Kaggleは、世界中のデータサイエンティストが集まるコンペティションサイトです。
企業などが分析してほしいデータをここに載せて、ユーザーが分析をして、分析の精度を競います。
上位3位にはデータをあげた企業から賞金が出る場合もあります。
Kaggleのオススメの使い方としては、Kernels(カーネル)という機能を使うことです。
カーネルでは、各データセットに対して他のユーザーが構築したモデルのコードの説明などがわかりやすく書いてあります。Kaggleで実際にデータ解析を行うとわかりますが、データの前処理が大変重要です。
ここでのポイントとしては、pandasを上手く使いこなせるかが鍵になっております。pandasのデータ加工でわからないことがあれば、
pandas公式 チュートリアルから再度復習してみてください。書籍としてはPythonによるデータ分析入門がオススメです。
Pythonデータ分析/機械学習のための基本コーディング! pandasライブラリ活用入門
機械学習のための特徴量エンジニアリング ―その原理とPythonによる実践
フェーズ4 SQL、スクレイピング、クラウドなどの技術も身につける。
実データに関しては、Web上のデータであればデータベースに保存されていることが多いため、SQLの知識も必要になります。
SQLが使えると、自分でDBから必要なデータを抽出できますし、csvなどで書き出してpythonでそのままデータ分析に繋げることが出来ます。ここでは、SQLを使ってデータ分析をするための参考になる書籍を紹介します。
・ProgateのSQL編(SQL初級者向け)
Progate[プロゲート] SQL・AI Academy SQL編 (SQL初心者向け)
・AI Academy SQL編 (SQL中級者向け)・SQLを使って分析をする(SQL中級者向け)
ビッグデータ分析・活用のためのSQLレシピデータ収集はデータベースから行うこともあれば、スクレイピング等で行うこともあります。
スクレイピングはWebサイトに掲載されている情報を収集するための技術です。
ここでは、スクレイピングの技術習得のためにオススメの書籍を二冊紹介いたします。
・1冊目にオススメ
Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう・2冊目にオススメ
Pythonスクレイピングの基本と実践 データサイエンティストのためのWebデータ収集術 (impress top gear)
もしくは
Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド・クラウド
ここではGoogle Cloud Platform(GCP)の簡単な説明をします。Google Cloud Platformは、Googleが保有する膨大なインフラストラクチャや機械学習等といったサービスを使った分だけの支払いで利用することができるクラウドサービスの総称であり、GCPを使うことでサービスを開発する上でのインフラ周りや、高性能なデータ分析・機械学習サービスを各種APIを通じて利用が出来ます。
GCPとよく比較されるサービスとしてAmazonのAWS、Micro softのAzureなどがありますがそれらの違いは下記記事を参考にして見てください。Google Cloud Platform とAWS、Azureの違い
また、GCPのAPIをPythonで呼び出すことが出来ますが、下記画像にある通り画像認識・動画解析、音声認識、自然言語処理などのAPIが用意されています。
自分の作りたいものを作るときに、0からscikit-learnやKerasなどを使って自前で作るより、APIを使った方が簡単にかつ、精度の良いものを作ることが出来ます。
自分にあったAPIを探し、ドキュメントや、Googleで検索したり、qiitaで調べたりして出てきた記事を参考にすれば実装が出来たりします。GOOGLE CLOUD PLATFORM での PYTHON
フェーズ5 機械学習スキルを活用してプロダクト制作をする
フェーズ5まで、機械学習スキルやそれ以外の人工知能関連技術を学びました。
ほとんど最後のフェーズですが、次のフェーズとしてはプロダクト制作をすることをオススメします。プロダクトには様々な形があると思いますが、ひとまずWebアプリケーションが学習コストが少なく済むので、オススメです。
次に、モバイルのアプリなどに取り組んで見ても良いでしょう。
Webアプリケーション作成にはPyhonの他にも、HTML, CSS, JavaScriptの知識が必要です。
これらの知識はプロゲート, ドットインストールなどを利用して身につけましょう。・HTML, CSS, JavaScript
プロゲート
3分動画のドットインストール(dotinstall)また、PythonでのWebアプリケーション開発はDjango,Flaskなどのフレームワークが有効ですが、一人で学ぶには、Flaskが学びやすいです。
FlaskはUdemyの動画を参考にすると良いでしょう。
Udemy動画やテキストをただ見る、読むのはでなく、実際にプログラムを打ち込みながら手を動かして進めるのがオススメです。
また、学習済みモデルを組み込んだWeb APIをFlaskなどで作れるようになっておくと良いです。さらに、Web開発を身につけた方は、Google CloudのAPIなども合わせ学び、これまで学んだことを合わせてあなたのアイデアを形にしてみてください。
Google Cloudでは、画像・動画分析、音声認識、テキスト分析などを容易に扱うことが可能です。フェーズ6 教える
プログラミングや機械学習を学んだら、友人でも良いので誰かに教えることをオススメします。
教える方法としては、イベントやセミナーを行うのも良いですし、Skypeなどを使い、友人にマンツーマンレッスンを行なったり、カフェで直接教えたりするのが良いです。教える以外にもQiitaやブログに記事を書いたり、本を書くとかも良いかと思います。
AI Academyでは受講生の交流会やLT会もやっており、人前で教える機会も提供しておりますので、是非ご活用して見てください!フェーズ7 専門分野を確立する
人工知能の領域には、画像認識や自然言語処理、音声認識、強化学習などあります。
フェーズ6まで進めた方は、自分の専門分野を身につけていきましょう。・画像認識
・自然言語処理
深層学習による自然言語処理 (機械学習プロフェッショナルシリーズ)
・音声認識
・強化学習
機械学習スタートアップシリーズ Pythonで学ぶ強化学習 入門から実践まで
・深層学習(ディープラーニング)【理論と実装】
深層学習の理論と実装+Kerasを用いて、基礎からしっかり学びたい方は下記の3冊+αで、基礎から実践までカバーできます。
①ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
もしくは、
はじめてのディープラーニング -Pythonで学ぶニューラルネットワークとバックプロパゲーション- (Machine Learning)
②ゼロから作るDeep Learning ❷ ―自然言語処理編
③深層学習
+α
直感 Deep Learning ―Python×Kerasでアイデアを形にするレシピ
学習ロードマップ
さて、上記で色々と書籍をご紹介しましたが、上記のロードマップの書籍をベース進めることで、機械学習エンジニアに最低限必要なスキルを体系的に身につけることができます。
順番ですが、①の機械学習から始め、必要に応じて数学・統計を進めてください。
①と②が終わったら、次に深層学習を進めるのをお勧めします。
ただし、AIエンジニアになることが目的ではなく、画像認識で〇〇を作りたい。という作りたいものが明確な方は、『直感 Deep Learning ―Python×Kerasでアイデアを形にするレシピ』だけで十分な場合もあります。何度も記述していることですが、ポイントなのが、基本的に書籍に出てくるコードは実際に書いて進めることです。
例えば、英語などを勉強するときも教材を眺めるだけより、書いたり読み上げたり聞いたりすることが有効だったりします。
プログラミング言語も同様で、ただ本を眺めるだけより、実際に写経することでより理解が深まります。
ただし、どの教材も100%理解する必要はありません。
どのタイミングで、次の書籍へ進むかの判断基準ですが、書籍に書いてあること全て理解せずに、7割理解できたかなというレベルで十分です。
そこに到達したら次へ進みましょう。AIエンジニアとして就職・転職希望の方は上記の書籍の内容に加え、
上記でまとめたSQLの基礎的な内容の理解や、Kaggleのコンペもいくつかやったり、統計検定2級あたりを所持したり、普段から英語に慣れておくと良いかもしれません。まとめ
ここまでの流れをまとめます。
フェーズ1 pythonプログラミングと人工知能概論を学ぶ
フェーズ2 機械学習プログラミング
フェーズ3 Kaggleに挑戦
フェーズ4 SQL、スクレイピング、クラウドなどの技術も身につける。
フェーズ5 機械学習スキルを活用してプロダクト制作をする
フェーズ6 教える
フェーズ7 専門分野を確立する英語に自信がある方へ
ここまでは、学習方法やオススメの書籍などを紹介しましたが、英語に自信がある方にはオススメのサービスを紹介します。
※英語苦手だとしてもCoursera (コーセラ)の機械学習は是非受講することをオススメします。①Coursera (コーセラ)
Coursera Machine Laerning
コーセラは世界中の人に最高の教育を無料で提供するということを理念にしているオンライン教育サービスです。
特に機械学習のコースの講師はStanford Universityのアンドリュー・ウ(Andrew Ng)氏です。
アンドリュー氏は、人工知能の研究をしており、Google Brainの立ちあげやCouseraのファンダーでもあります。
シリコンバレーにあるBaiduの研究所で勤務しておられる方であり、機械学習を学ぶのに最も適した教材とも言え、機械学習の主要なアルゴリズムを直感的に理解し、実際にプログラミングできるように教えてくれます。
Andrew Ng氏は沢山褒めてくれるので、とても嬉しくなります笑
(※プログラミング言語はPythonではなく、Octave・MATLABです)②Learn with Google AI (ai.google education)
Learn with Google AIGoogle社内教育プログラムで無料で利用可能です。
コンテンツは、大変わかりやすい動画です。こちらもオススメ
Udacity「Intro to Machine Learning
Machine Learning with Python (YouTube)
本気でAIエンジニアを目指している方へ
上記内容を順に学んでいくことで、一定の基礎スキルが身につき、AIエンジニアとしての入り口に入れるかと思います。
ですが、実務でAIエンジニアとして活躍していくにはまだまだ知識的に足りない可能性があります。
その際には、以下に挙げる勉強法と、その書籍にも目を通していくことをオススメします。
- C++及びJava言語で機械学習のアルゴリズムも書けるようにする。
 - 『データ解析のための統計モデリング入門――一般化線形モデル・階層ベイズモデル・MCMC』以上の統計学の知識 と統計学入門 (基礎統計学Ⅰ)
 - 統計的学習の基礎 ―データマイニング・推論・予測
 ここで紹介した書籍をある程度読み、実際にプログラムを打つところまで終わったら、仕事を探してみましょう。
あなたが学生なら、実際にWantedlyなどで機械学習アルバイト・インターンを募集している会社に応募してみたり、社会人の方なら、社内の上司にデータ分析をしたいとお願いしてみるのも良いかもしれません。終わりに
ここまでお読みいただきありがとうございました!
これまで長々と書いておりましたが、上記した書籍を全て1から学ぶにはそれなりの学習コストがかかります。
僕が会社で運営しているAI Academyという、無料で学べる(一部有料)オンラインAIプログラミング学習サービスやAIスクールも是非ご利用ください!
本気で将来AIエンジニアを目指されている方はAI Academy Gymもご検討頂けると幸いです!
最後にこの記事が良かったら是非シェア頂けると嬉しいです!
この記事読んで頂いた方は、返信が遅れる場合もありますが、TwitterにてDM頂ければ色々とご相談も乗ります。
改めて、ここまでお読みいただきありがとうございました!この記事を書いた人
サイバーブレイン株式会社
代表取締役CEO 谷 一徳フォロー、参加お待ちしております!
人工知能研究コミュニティ
- 投稿日:2019-03-23T22:03:49+09:00
 
Anaconda仮想環境をVisual Studio Codeから指定する
Anacondaを使って構築した仮想環境を、VSCodeから指定する方法
※VSCodeにPython for VSCodeが導入されている場合1.ターミナルで仮想環境のアドレスを調べる
~$ conda info -e # conda environments: # base * /home/hoge/anaconda3 base2 /home/hoge/anaconda3/envs/base2例の場合
/home/hoge/anaconda3/envs/base2が指定したい環境2.VSCodeから仮想環境へのパスを設定する
ファイル→基本設定→設定を選択する
設定の検索にpython.pythonPathと入力すると現在使用している環境のパスが表示されるので、これを指定したい環境のパスに書き換える。
- 投稿日:2019-03-23T20:53:56+09:00
 
ALS_WR を Python で実装
はじめに
ALSはNetflix Prizeで精度が高かった事で知られるMF(Matrix-Factorization)の手法の1つで、レコメンドシステムの中では協調フィルタリングに分類されます。MFについてはこちらのサイトがとても分かり易いと思います。
このALSについて、1~5の評価値推定(rating-prediction)の例を用いて説明します。協調フィルタリング概要
協調フィルタリングは、各ユーザーに対応するアイテムの評価値行列(Rating行列)の類似度に基づいて推薦をする手法です。特にアイテムの類似度に基づく推薦をアイテムベース、ユーザーの類似度に基づく推薦をユーザーベースと言います。また、協調フィルタリングには推薦前にモデルを作成しておくモデルベースと推薦と同時にモデルを作成するメモリベース(近傍ベース)の2種類の方式があります。以下に協調フィルタリングの中でもモデルベース・メモリベースに特徴的な長所と短所を上げます。
- モデルベース方式
 
- 長所
 - ・推薦時に時間がかからない
 - ・次元圧縮によるコールドスタート問題解消
 - 短所
 - ・データの変化への対応性が低い(モデル構築に時間を要する)
 - メモリベース方式
 
- 長所
 - ・データの変化への適応性が高い
 - 短所
 - ・推薦時に多くの時間を要する
 - ・Rating行列が極端に疎である場合に各userとitem間の情報量が少なく、
 
類似度計算が上手く出来ず精度が出ない(コールドスタート問題)モデルベースとメモリベースが互いに短所を補い合う関係性であることがわかります。
今回は行列分解を用いて次元圧縮を行うALS_WRについて説明します。ALS_WR
図を用いた概説
ALS(Alternating-Least-Squares : 交互最小二乗法)はユーザーの数がm、アイテムの数がnのRating行列(m×n)を共通の長さを持つユーザーの特徴を持つU行列(r×m)と、アイテムの特徴を持つM行列(r×n)の行列積で再現する事を目標とします。
ここで気をつけないといけないのは、協調フィルタリングの問題においてRating行列内の欠損値が0で表されている事です。もし、Rating行列をそのまま学習させてしまうと、欠損値部分つまり予測値が0になるような学習結果になってしまいます。そのため、行列分解といってもそのまま分解するのではなく、評価値が入っているところのみを学習させます。
コスト関数と更新方法
論文 : Large-scale Parallel Collaborative Filtering for the Netflix Prizeを参考にしました。
ALS_WRはALSに正則化項を加えたもので、コスト関数 J は次の式で表されます。J(U,M) = \sum_{(i,j)\in I} \left(r_{ij} - {\bf u}_i^T {\bf m}_j\right)^2 + \lambda \left( \sum_i n_{u_i}\|{\bf u}_i\|^2 + \sum_j n_{m_j}\|{\bf m}_j\|^2\right)数式で用いられている記号
- $I$ : 評価値が格納されているインデックスの集合
 - $r_{ij}$ : Rating行列の $i$ 行 $j$ 番目の値 ( $i \in$ [1,m], $j \in$ [1,n] )
 - $\lambda$ : 正則化項の強さを指定する値
 - $n_{u_i}$ : $I$ の $i$ 行のランク ( ユーザー $i$ が評価したアイテムの数)
 - $n_{m_j}$ : $I$ の $j$ 列のランク ( アイテム $j$ を評価したユーザーの数)
 前述したように学習に用いる値は欠損値を除いて行うので、第1項での $i$ , $j$ は $I$ に含まれる元を用いています。
UとMの更新は他方を固定して行われます。ここでは特にUの更新について説明します(Mも同様に更新を行う事ができます)。
Uについてのコスト関数Jの微分を整理すると(1)の式になるので、Uの更新は(2)の式で表されます。\sum m_{kj}{\bf m}_j^T{\bf u}_i + \lambda n_{u_i}u_{ki} = \sum_{j\in I_i} m_{kj}r{ij}\,\,\,-(1) \\ {\bf u}_i = \left(M_{I_i}M_{I_i}^T+\lambda n_{u_i}E\right)^{-1})V_i\,\,\,-(2)
- $V_i : M_{I_i}R^T(i,I_i)$
 この更新を繰り返す事でUとMを学習します。
具体例
まず、次の表のように縦軸をuser、横軸をitemとして各ユーザーが評価した値の行列(4×5)を作成します。
user\item おしるこ お味噌汁 ヨーグルト チョコレート はちみつレモン A 5 0 2 0 0 B 0 0 0 4 5 C 4 5 0 0 0 D 0 2 0 5 0 この行列をALSを用いて2つの密行列U行列(4×2)とM行列(2×5)に行列分解します。
このU(4×2)とM(2×5)の行列積を計算すると、元の行列(4×5)の欠損値には値が補完され、評価値があった場所には近似値が入っている事がわかります。
user\item おしるこ お味噌汁 ヨーグルト チョコレート はちみつレモン A 4.87 3.99 1.98 2.09 3.57 B 5.92 5.30 3.85 3.98 4.95 C 4.01 4.81 6.41 6.49 4.97 D 0.85 2.15 4.88 4.89 2.56 ALS_WRの実装
- 実装に用いたデータ : MovieLensのMovieLens 100K Dataset
 - 実装環境 : python3.5.2
 common_len = 5 # 共通の長さを指定 noize_rate = 0.01 # 正則化項のlambdaの値を指定 epochs = 5 # epoch数の指定 # id_rating_lilにはscipy.sparse.lil_matrixで圧縮されたuser×itemの行列が入っています。 u_len, m_len = id_rating_lil.shape # Iにはid_rating_lilの中で評価されている場所を格納(bool値) I = id_rating_lil > 0 # U行列とM行列を1~5の間の値でランダムに初期値を設定 u = np.random.uniform(1, 5, u_len * common_len).reshape(u_len, common_len) m = np.random.uniform(1, 5, m_len * common_len).reshape(common_len, m_len) # 全データ数が100000でテスト用には各userのratingを1つだけ入れています。 training_len = 100000 - u_len test_len = u_len # training for epoch in range(5): # updata for i in range(u_len): I_i = np.array(I.getrow(i).todense())[0] u[i] = np.dot(np.linalg.inv(np.dot(m[:, I_i], m[:, I_i].T) + noize_rate * I[i].sum() * np.eye(common_len)), np.dot(m[:, I_i], id_rating_lil[i, I_i] .transpose().todense())).transpose() # 非負行列にするために0以下のものは強制的に0に変換 u[u<0] = 0 for j in range(m_len): I_j = np.array(I.transpose().getrow(j).todense())[0] m[:, j] = np.squeeze(np.array(np.dot(np.linalg.inv(np.dot(u[I_j].T, u[I_j]) + noize_rate * I[:, j].sum() * np.eye(common_len)), np.dot(u[I_j].transpose(), id_rating_lil[I_j, j].todense())))) m[m<0] = 0 # predict pred = np.dot(u, m) # rmse算出 loss = np.sqrt((np.power((id_rating_lil - pred) [np.array(I.todense())], 2).sum() / training_len)) # test_loss test_loss = 0 for pair in rating_test_pair: true_rating = rating_test_pair[pair] test_loss += ((true_rating - pred[pair[0] - 1, pair[1] - 1])**2) / test_len print('epoch : {0:>3}, loss : {1:.7f}, test_loss : {2:.7f}' .format(epoch + 1, loss, np.sqrt(float(test_loss))))参考
- Y. Zhou, D. Wilkinson, R. Schreiber, and R. Pan, Large-scale parallel collaborative filtering for the netflix prize, 2008
 - X. Su and T. M. Khoshgoftaar, A Survey of Collaborative Filtering Techniques, 2009
 - http://blog.echen.me/2011/10/24/winning-the-netflix-prize-a-summary/
 - https://www.slideshare.net/hamukazu/introduction-to-behavior-based-recommendation-system
 - http://qiita.com/ysekky/items/c81ff24da0390a74fc6c
 
- 投稿日:2019-03-23T20:06:13+09:00
 
カメラ好きのためにレンズ設計シミュレーションの紹介
はじめに
カメクラ+プログラマー->光学シミュレーション
ってことでオープンソースの光学シミュレーションライブラリopticspyの紹介です。
http://opticspy.org/
光学シミュレーションは、ZEMAX OpticStudio等の有料のものはありますが無料のものは珍しいみたいですね。レンズ構成図
スポットダイアグラム1
収差図2
なんかが作れます。他にも光学系の計算に使用するゼルニケ多項式や波長や位相差を測定する干渉計が使える模様(光学に関してド素人なのでそっちは触ってません)。
環境
- Python3.6
 - Jupyter Notebook
 導入
PyPIからだと2.x用がインストールされてしまうので
github Sterncat/opticspy から3.x用をクローン# pip install git+git://github.com/Sterncat/opticspy.git@masterとしたいところですが今回のチュートリアルが完了できないバグがあります。
修正してプルリクエスト済みですが、マージされるまでは以下を使ってください。
github HijiriIshi/opticspy# pip install git+git://github.com/HijiriIshi/opticspy.git@masterJupyter Notebookはrootで起動しないとダメ。
# jupyter notebook --allow-rootglass_databaseに関して
ガラス素材の材質をymlで定義することができます。
基本的な材質はglass_databaseに用意されています。しかしながら、執筆時点でSterncat/opticspyだとinstallパッケージにglass_databaseは含まれません。
https://github.com/Sterncat/opticspy/tree/master/opticspy/ray_tracing/glass_databaseそのためチュートリアルを行うにはリポジトリからフォルダをコピーする必要があります。
場所はパッケージインストール先のopticspy/ray_tracing/glass_databaseです。# pip show opticspy Name: opticspy Version: 0.2.1 Summary: Python optics module Home-page: http://opticspy.org Author: Xing Fan Author-email: marvin.fanxing@gmail.com License: MIT License Location: /usr/lib/python3.6/site-packages Requires: numpy, matplotlib, unwrap Required-by:上記の場合は
/usr/lib/python3.6/site-packages/opticspy/ray_tracing/glass_databaseとなります。この位置やめたほうが良くない?とは思いますが、参照先を定義している
opticspy\opticspy\ray_tracing\glass_function\refractiveIndex.pyが修正途中のようなのでノータッチ。パッケージに含めることの是非はおいといてHijiriIshi/opticspyではglass_databaseを含めています。
レンズデザインのチュートリアル
チュートリアルが公式サイトに用意されています。
光学専門用語が含まれるので取っつきやすいようにReal ray tracing and Lens DesignよりExample 1: Basic functions introductionの冒頭部分と見出しを和訳しました。Opticspyは解析だけではなくレイトレーシングモジュール、単焦点レンズ設計モジュールを提供します。
1. レンズ面、波長、フィールドを追加してレンズ系を構築する
2. 光線追跡、レンズ系の描画
3. レンズ系の解析:スポットダイアグラムと収差図(レイファンプロットダイアグラム)
4. システムを通したレイトレーシング
5. ABCD行列モジュールによるLens paraxial information(収差を出さない理想レンズ? 直訳: レンズ近軸情報)の計算
次に示すのが、opticspyのレイトレーシングモジュールを使用して最大視野角20度のF/5トリプレット3を構築する例です。レンズ系のスポットダイアグラムと収差図が表示されます。
1. 表面、波長、フィールドを追加することにより、レンズ系を構築する。
2. レイトレーシングを行いレンズ系を描画する(最初にrefresh_paraxial関数で入射瞳位置4を見つける)
3. レンズ系解析:スポットダイアグラムと収差図
Opticspyは3種類のトレーシンググリッドを提供します
* 格子状: n本の光線が軸に沿った配置で入射瞳を通過します
* 円形状: n本の光線が円環を描いた配置で入射瞳を通過します
* ランダム: n本の光線がランダムな配置で入射瞳を通過します
4. システムを介したレイトレーシング:ユーザはレイトレーシングを行うにあたり(入射瞳に対する)光線の位置、視野および波長を指定することができる。ユーザは、出力形式を選択することができ、また、線位置出力X、Y、Z及び光線方向出力K、M、L、ならびに開始および終了面を指定することができる。
5. ABCDマトリックスモジュールによるレンズ近軸情報の計算:像位置、有効焦点距離、後側焦点距離、入射瞳位置と直径、射出瞳位置、面xからyまでの焦点距離、2面間の厚さなど。おわりに
Real ray tracing and Lens Designの他のチュートリアルに関して触れると、
* Example 2: A double gauss lens example : Example 1のダブルガウス版
* Example 3: Build a Petzval lens with codev seq file : レンズ構成を定義した.seqファイルの読込
* Example 4: Build a microscope lens with codev seq file : Example 3のマイクロスコープ版
チュートリアルで使用する.seqファイルはこちらにあります。参考リンクに有名なレンズ構成が紹介されているサイトや、光学の基礎が学べるサイトへのリンクを載せました。
いろんなレンズを作って遊ぼう!参考リンク
- 光学入門
 
光学総合サイト - CYBERNET- 光学用語集 レンズ設計光学講座 - 株式会社レンズ設計支援
 - レンズ構成とOpticStudio用の光学データの公開
 
○○○レンズ屋:業務用単品レンズの設計・製造○○○ - 株式会社レンズ屋
光源から像面まで多数の光線追跡を行い、像面上の光線到達位置をプロットしたものがスポットダイアグラムです。集光度合いや収差の幾何光学的な振る舞いを視覚的に把握するのに適しています。(スポットダイアグラム:光学総合サイト:サイバネット) ↩
収差図を見るとレンズの性能だけでなくボケの味などもおおざっぱに分かるようになります。(・球面収差と縦収差図の見かた:虹色の旋律) ↩
3群3枚の写真レンズの構成様式 ↩
開口絞り(絞り面参照)より物体側の光学系で結像された開口絞りの像を入射瞳と呼びます。また、物体空間上での主光線をそのまま延長し、光軸と交わる位置が入射瞳位置になります。(入射瞳:光学総合サイト:サイバネット) ↩
- 投稿日:2019-03-23T19:55:33+09:00
 
公式ドキュメントリンク集(Python,JS,API)
延々と足して行く。増えたら分類する
Dev tools(ざっくりだな。。)
名称 説明 URL git 使いにくい https://git-scm.com/doc vagrant virtualbox上にたてて使ってる https://www.vagrantup.com/docs/ docker 負荷試験ぐらいでしか使えてない https://docs.docker.com/ Python
名称 説明 URL pip パッケージ https://pip.pypa.io/en/stable/ pycurl curlできる http://pycurl.io/docs/latest/ hashlib CTFでよくつかう https://docs.python.org/ja/3/library/hashlib.html JavaScript
名称 説明 URL npm パッケージ https://docs.npmjs.com/ yarn パッケージ https://yarnpkg.com/lang/en/docs/ React コンポ https://reactjs.org/docs/getting-started.html AngularJS https://docs.angularjs.org/guide Babel なまえすごい https://babeljs.io/docs/en/ gulp ビルド https://gulpjs.org/ browserify https://github.com/browserify/browserify#usage Elastic Stack
名称 説明 URL Elasticsearch 検索 https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html Logstash 処理 https://www.elastic.co/guide/en/logstash/current/index.html Kibana 表示 https://www.elastic.co/guide/en/kibana/current/index.html REST API
名称 説明 URL Virustotal マルウェアのあれ https://www.virustotal.com/ja/documentation/public-api/ Game
名称 説明 URL cocos2d-x ゲームエンジン https://docs.cocos2d-x.org/api-ref/ 
- 投稿日:2019-03-23T19:55:33+09:00
 
公式ドキュメントリンク集(Python,JS,API,Security)
延々と足して行く。増えたら分類する
Dev tools(ざっくりだな。。)
名称 説明 URL git 使いにくい https://git-scm.com/doc vagrant virtualbox上にたてて使ってる https://www.vagrantup.com/docs/ docker 負荷試験ぐらいでしか使えてない https://docs.docker.com/ Python
名称 説明 URL pip パッケージ https://pip.pypa.io/en/stable/ pycurl curlできる http://pycurl.io/docs/latest/ hashlib CTFでよくつかう https://docs.python.org/ja/3/library/hashlib.html JavaScript
名称 説明 URL npm パッケージ https://docs.npmjs.com/ yarn パッケージ https://yarnpkg.com/lang/en/docs/ React コンポ https://reactjs.org/docs/getting-started.html AngularJS https://docs.angularjs.org/guide Babel なまえすごい https://babeljs.io/docs/en/ gulp ビルド https://gulpjs.org/ browserify https://github.com/browserify/browserify#usage Elastic Stack
名称 説明 URL Elasticsearch 検索 https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html Logstash 処理 https://www.elastic.co/guide/en/logstash/current/index.html Kibana 表示 https://www.elastic.co/guide/en/kibana/current/index.html REST API
名称 説明 URL Virustotal マルウェアのあれ https://www.virustotal.com/ja/documentation/public-api/ Security
名称 説明 URL pfSense OSSのFW/router https://docs.netgate.com/pfsense/en/latest/index.html VyOS OSSのrouter https://wiki.vyos.net/wiki/User_Guide Game
名称 説明 URL cocos2d-x ゲームエンジン https://docs.cocos2d-x.org/api-ref/ 
- 投稿日:2019-03-23T19:36:15+09:00
 
『カメラを止めるな!』の視聴者ツイートを徹底的に調べてみた
先日、『カメラを止めるな!』がテレビで放映されました。僕は上映時に映画館で観たのですが、本当に面白く、そしてあれほど映画館全体が笑いに包まれる体験は初めてで、心から感動しました。まさか、ゾンビ映画を撮っていたらゾンビに襲われるなんてねぇ…。まだの人は是非見てほしいです。
視聴率は11.9%、今年の金曜ロードショーでは最高だそうです。個人視聴率1%につき約40万8000人らしいので(関東地区)、11.9%なら500万人近くが視聴したことになります。これは映画を観た人の2~3倍とのこと。
ということで今回は、『カメラを止めるな』のツイートを集計して色々調べてみました。この作品のツイート分析については軽く触れている記事もありましたが、テレビ視聴にフォーカスした記事は見たことなく、個人的に興味があったので。
『カメラを止めるな』ツイート抽出
ツイートの抽出には以前に作成したコードを使います。
検索APIでワード「カメラを止めるな」が入っているツイートを抽出。1人1人の純粋な感想ツイートを調査したいので、RTは除きます(公式/引用共に)。
※放送終了の1週間後ぐらいに取得しておいたデータを使いました。ツイート数推移
放送時間は21:00~23:04なので、まずは前後含む19:00〜25:00のツイート数の推移(15分単位)を見てみます。
放送開始直後(21:00)と放送終了直後(23:00)のツイートが圧倒的に増えています。
開始時にこれほど増えているのは少し意外でした。初回放送だけに「今から見る!」や「みんなも見て!」という強い思いと、「開始40分間ノーカット」が話題になったことあたりが理由でしょうか。そしてその期待を超えるように、放送終了時に盛り上がってます。試しに昨晩の金曜ロードショー『名探偵コナン 世紀末の魔術師』と比較(5分単位)してみると、これだけの差がありました。(「世紀末の魔術師」を含むツイート数との比較)
総ツイート数
上記時間内のツイート数合計は68368件。
その中から、放送開始以降(21:00~)に絞ると60277件でした。
以降は、実際にテレビを見た感想をツイートしている人に注目するため21:00~のツイートを対象にします。
延べツイート人数
放送開始以降(21:00~25:00)にツイートしたユーザ数(同一ユーザを除く)の合計は、52083人。
テレビ視聴者のツイート割合
ということは、仮にテレビ視聴者が500万人とすると、視聴者のうちTwitterで1回でもツイートした人数の割合は
52083/5000000 ≒ 0.01
となり、約 1 %となります。つまり100人に1人。映画鑑賞者は74%の人がTwitter利用していたらしいですが、テレビは1%。Twitterをよく使う人にとっては意外な数字かも?
ツイートの感情分析
単純にツイートと言っても、「面白かった」「つまらなかった」と意見は分かれます。そこで、1つ1つのツイート内容がポジティブなのかネガティブなのかを調べてみます。(ハッシュタグは分析対象外)
分析には、Googleの感情分析API(Cloud Natural Language API)を使ってみます。
このAPIでは、-1.0(ネガティブ)~1.0(ポジティブ)のスコアで感情が表されます。
※実際の結果は -0.9 ~ 0.9 の範囲でした。
ここやここを見ながら作れば簡単。無料体験期間でない人は課金されるので要注意。#Cloud Natural Language API 呼び出し # content(文章)のスコアを返却する def analyze_sentiment(content): client = language_v1.LanguageServiceClient() if isinstance(content, six.binary_type): content = content.decode('utf-8') type_ = enums.Document.Type.PLAIN_TEXT document = {'type': type_, 'content': content} response = client.analyze_sentiment(document) sentiment = response.document_sentiment return sentiment.score analyze_sentiment('分析したい文章を入れる')例えばこんなポジティブなツイートは0.9点に。
・カメラを止めるな結構いやかなり面白かった!!!!好き!!!
・カメラを止めるな、思ってた何倍もおもろい、感動。めちゃおもしろかった?
・カメラを止めるなは映画を見に行ったことあるけど面白すぎて死にそうになった逆にこんなネガティブなツイートはマイナス0.9点になります。
・カメラを止めるな、私には合わなかった
・カメラを止めるな全然面白くなかった
・ホラーの耐性すかすかなのでカメラを止めるなまじで無理です……感情がうまく判定できない文章や、複数の文章になっていてトータルで打ち消し合うものは0点になることもあります。例えばこんなやつ。
・カメラを止めるな!は録画しました。
・カメラを止めるな、もちろん録画してるけど、まだジブリポジションな映画じゃねーんだかんなっ!
・カメラを止めるな!は確かに序盤はあれだけどメイキング好きなあたしとしては結構面白かった 逆に行うと、合わない人はとことん合わないな と思った様々なツイートのスコアをザッと見てみたところ、「感情のスコア」という意味では、感覚的にはほぼ違和感のない数値が出ていました。人の感情も簡単に読み取れちゃう時代なんですね。
ポジティブ/ネガティブの割合
全てのツイートのポジティブ/ネガティブの割合はこうになりました。赤系がプラス、青系がマイナスです。
トータルではプラス寄りですが、話題になり過ぎたことや、前半の耐える時間帯のせいか、マイナスもそこそこあります。何も知らない人が、あの前半40分間をテレビの前で見続けるのは忍耐力が要るでしょうからね。。
ただ実際は、「映画の内容」に対してではなく、「番組を視聴できなかったこと」や「途中から視聴してしまったこと」などに対するネガティブなツイートもマイナスになっていたりするので、映画に対する感情という意味では、正確にはもっとプラスになりそうです。
例えば下のようなツイートも、前半の「期待してない」「つまらん」などの単語のせいか、最終的には褒めているのに全体としてはマイナス(この場合は-0.1)と判定されています。特にスコア「-0.3 ~ -0.1」のツイートにはこのようなパターンが凄く多いのですが、この辺は課題としてしばらく残り続けそうなので一旦許容します。
前半→後半 の感情の変化
この映画は、前半と後半のギャップが非常に強いのが特徴です。前半はネガティブ、後半はポジティブなコメントが多いことが予想されます。なので、時間帯によってポジティブ/ネガティブの数がどの程度変わってくるのか調べてみました。結果はこんな感じ。(ツイートの多い23:15までを抜粋)
やはり前半はマイナス(青系)のツイートが多く、後半になるに連れてプラス(赤系)のツイートが急激に増えていくのがわかります。見終わったときの感情がこの映画の価値だと思うので、そういう意味では最後の棒グラフに視聴者の感動が現れています。ある程度予想通りだけど、こうして数値として目に見えると面白い。
ちなみに最後の棒グラフの23:00~23:15だけに絞ったツイートのスコア割合を見てみるとこうなります。
「いいね」ランキング
これで調べたいことは調べられたので満足なのですが、最後はおまけ程度に、最も「いいね」を集めたツイートのトップ5を載せておきます。
カメラを止めるな、ワンカットの前半の方が「リアル」で、ドラマパートの後半は何回もリテイクしたり編集で繋ぎまくった嘘だらけの「虚構」なんだけど、観てる方は逆に感じてしまうんですよね。この辺が本当に映画のマジックで、この映画って映画の魔法を可視化してくれるんですよね。だから面白いんだ
— BWTT (@BoyWithTheThorn) 2019年3月8日家に着いたので、カメラを止めるなを観る☺️(何回目)
— 指原 莉乃 (@345__chan) 2019年3月8日カメラを止めるなは映画館で観たけど、素晴らしく裏方愛に溢れてて好きでした。全てのエンターテイメントはカメラの手前や、ステージの後ろ側にいるたくさんの裏方さんの情熱で成り立ってます。
— GEN (@04GENLS) 2019年3月8日夢見りあむは『カメラを止めるな!』の最初の40分だけ見て「つまんなwゴミじゃんw」とつぶやき、翌日カメ止め談義で盛り上がる同僚の輪に入れず独りごつ盛りコーン味噌ラーメンをすすっていたことがある
— デレマス㊙️情報 (@Szt3C0errM580yy) 2019年3月8日金曜ロードSHOW!『カメラを止めるな!』ご覧頂いた皆さん、有難うございます!!DVDなども発売&レンタル中なので気に入ってくれた方は是非2度3度楽しんで頂けると嬉しいです!生副音声も楽しかったー!ありがとー!#カメ止め金ロー #カメラを止めるな #カメ止め pic.twitter.com/pbX0mC8W0a
— 上田慎一郎 (@shin0407) 2019年3月8日1位のツイートはなんか深い。多くの称賛ツイートの中で、監督自身のツイートもこれだけ伸びています。製作者が視聴者から直に認められるのが見えて良いですね。
あと指原莉乃のあまりに普通すぎるツイートがこれほどファボられるのを見ると、改めて芸能人の影響力の強さを感じます。
あとがき
こうして見ると、まだテレビが(落ち目と言われつつも)こうしてトレンドを作る影響力を持っていることや、ツイートだけで素直な感情の動きが読み取れることやその課題などを感じられて面白かったです。あと、この映画そのものは、本当に素敵な作品なので、この記事がまだ観ていない人が観るきっかけになることがあれば嬉しいです。
※ちなみに後から思いましたが略称の「カメ止め」は抽出していないので、それも含めると実際のツイートはもう少し増えますね。
何かあればTwitterまで。
面白かった!と思ってくださった方は、PayPayで好きな金額を投げ銭してもいいよ!
- 投稿日:2019-03-23T19:26:33+09:00
 
Qulacsで量子位相推定を試す
はじめに
この記事では、前回と同じくQulacsを使って、量子位相推定(Quantum Phase Estimation, QPE)を試します。
QPEとは、ユニタリー行列の固有値を量子ビット上に得るアルゴリズムです。より正確には、ユニタリー行列の固有値は絶対値が1なので、その偏角(argument)が得られれば、固有値を得たことになります。QPEはその2進展開を量子ビット上に実現します。
今回はエルミート行列 $A\in\mathbb{R}^{d\times d}$ に対して、$e^{-itA}$ の固有値を求める、というのを試したいと思います。ここで、
u\colon \mathbb{R}\ni t\mapsto e^{-itA}u(0)\in\mathbb{R}^dは、シュレディンガー方程式
i\frac{du}{dt}=Au, \quad t\in\mathbb{R}を満たします。
さて、なぜこれをやるのかというと、$A$ の固有展開
A=\sum_j \lambda_j P_jに対し、
e^{-itA}=\sum_j e^{-it\lambda_j}P_jであり1、$e^{-itA}$ の固有値の偏角を量子ビット上に得るということは、それはすなわち $A$ の固有値そのものを得るということになるからです。このことは、線型方程式を量子的に解くアルゴリズムとして知られているHHLアルゴリズムにおいて重要な役割を果たします。それも見据えてこの部分を動かしてみようというのが目的です。
今回の設定
今回は簡単にして、2次元のエルミート行列
A= \begin{pmatrix} 0 & -i\frac{3\pi}{4} \\ i\frac{3\pi}{4} & 0 \end{pmatrix}で考えます。固有値と固有ベクトルは対応順にそれぞれ $\pm\frac{3\pi}{4}$、$\frac{1}{\sqrt{2}}(1,\pm i)^\text{T}=\frac{|0\rangle\pm i|1\rangle}{\sqrt{2}}$ です。ただし、通常よく用いられるように、
|0\rangle := \begin{pmatrix} 1 \\ 0 \end{pmatrix}, \quad |1\rangle := \begin{pmatrix} 0 \\ 1 \end{pmatrix}です。このとき、
U:=\left. e^{-itA} \right|_{t=1}=\frac{1}{\sqrt{2}} \begin{pmatrix} -1 & -1 \\ 1 & -1 \end{pmatrix}に対してQPEを行います。
$U$ の固有値は $e^{-i3\pi/4}=e^{i2\pi 0.101}$ と $e^{i3\pi/4}=e^{i2\pi 0.011}$ です。ただし、小数は2進小数です。よって、レジスタービット数を3とすれば、QPEでそれぞれ $|101\rangle$ と $|011\rangle$が(確率1で)得られるはずです。
Qulacsで使える基本的なゲートについて
ここでは、Qulacsの基本的なゲートについて、備忘録的に記載しておきたいと思います。
- アダマールゲート
 \begin{align*} H &:= \frac{1}{\sqrt{2}} \begin{pmatrix} 1 & 1 \\ 1 & -1 \end{pmatrix} \end{align*}
- パウリゲート
 \begin{align*} X &:= \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}, \quad Y := \begin{pmatrix} 0 & -i \\ i & 0 \end{pmatrix}, \quad Z := \begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix} \end{align*}
- ブロッホ球上の回転
 Qulacsの動作を見ていると、通常2の $R_X,R_Y,R_Z$ ゲートとは異なり、角度 $\theta$ に対して逆に定義されているようです。
\begin{align*} R_X(\theta) &:= e^{i\frac{\theta}{2}X} = \begin{pmatrix} \cos\frac{\theta}{2} & i\sin\frac{\theta}{2} \\ i\sin\frac{\theta}{2} & \cos\frac{\theta}{2} \end{pmatrix}, \\[.5em] R_Y(\theta) &:= e^{i\frac{\theta}{2}Y} = \begin{pmatrix} \cos\frac{\theta}{2} & \sin\frac{\theta}{2} \\ -\sin\frac{\theta}{2} & \cos\frac{\theta}{2} \end{pmatrix}, \\[.5em] R_Z(\theta) &:= e^{i\frac{\theta}{2}Z} = \begin{pmatrix} e^{i\frac{\theta}{2}} & 0 \\ 0 & e^{-i\frac{\theta}{2}} \end{pmatrix} \end{align*}QPE回路図
量子回路図は次のようになります。
I-QFTは、逆量子フーリエ変換 (Inverse Quantum Fourier Transform) です。
ただし、\begin{align*} |\psi\rangle_\pm = \frac{|0\rangle\pm i|1\rangle}{\sqrt{2}} \end{align*}であり、
\begin{align*} R^*_1 &= e^{-i\frac{\pi}{4}}R_Z\left( \frac{\pi}{2} \right), \quad R^*_2 = e^{-i\frac{\pi}{8}}R_Z\left( \frac{\pi}{4} \right) \end{align*}です。
上の回路図では 初期状態として $|\psi\rangle_\pm$ を描きましたが、プログラムではこれを用意してやらねばなりません。$R_X(\pm\pi/2)|0\rangle=|\psi\rangle_\pm$なので、初期状態を $|0000\rangle$ として、$R_X(\pm\pi/2)$ ゲートを入れて $|000\rangle \otimes |\psi\rangle_\pm$ を作ります。
プログラム
勉強のため、for文等使わず、回路図の通り愚直に書いています。
import numpy as np from qulacs import QuantumState from qulacs import QuantumCircuit from qulacs import Observable from qulacs.gate import DenseMatrix from qulacs.gate import H from qulacs.gate import RX from qulacs.gate import RZ from qulacs.gate import merge from qulacs.gate import to_matrix_gate # 量子状態の設定 # 量子ビット数を3(固有値用)+1(固有ベクトル用)=4で n_qbits = 4 state = QuantumState(n_qbits) state.set_zero_state() # 量子回路 circuit = QuantumCircuit(n_qbits) # A = [[0,-i3π/4],[i3π/4,0]] # からユニタリー U = e^{-iA}とする sqr2 = np.sqrt(2) U = [ [-1.0 / sqr2, -1.0 / sqr2], [+1.0 / sqr2, -1.0 / sqr2] ] # ========== 前半QPE部 ========== # |000>⊗|ψ>を準備。|ψ>はUの固有状態。 # H⊗H⊗H⊗RX(±π/2)|0000>=(H⊗H⊗H|000>)⊗|ψ> # *** U=e^{-iA}の固有値と固有ベクトル情報 *** # 固有状態:RX(+π/2)|0>=(|0>+i|1>)/√2, 固有値:exp(-i3π/4)=exp(i5π/4)→0.101 # 固有状態:RX(-π/2)|0>=(|0>-i|1>)/√2, 固有値:exp(+i3π/4)→0.011 # * RX(Θ)=exp(iΘX/2) gate_list = [H(1), H(2), H(3)] angle = np.pi / 2.0 # (☆) ±π/2 gate_list.append(RX(0, angle)) # controlled-U達のゲート ctrl_U1_gate = DenseMatrix(0, U) ctrl_U1_gate.add_control_qubit(3, 1) ctrl_U2_gate = DenseMatrix(0, U) ctrl_U2_gate.add_control_qubit(2, 1) ctrl_U3_gate = DenseMatrix(0, U) ctrl_U3_gate.add_control_qubit(1, 1) # controlled gatesをリストに登録 # 1回 gate_list.append(ctrl_U1_gate) # 2回 gate_list.append(ctrl_U2_gate) gate_list.append(ctrl_U2_gate) # 4回 gate_list.append(ctrl_U3_gate) gate_list.append(ctrl_U3_gate) gate_list.append(ctrl_U3_gate) gate_list.append(ctrl_U3_gate) # ========== 後半、I-QFT部 ========== # 量子ビット1にHゲート追加 gate_list.append(H(1)) # 量子ビット2に制御R_1^*を追加、Hゲート追加 ctrl_adjoint_R1_gate = RZ(2, np.pi / 2.0) ctrl_adjoint_R1_gate = to_matrix_gate(ctrl_adjoint_R1_gate) ctrl_adjoint_R1_gate.multiply_scalar(np.exp(-1j * np.pi / 4.0)) ctrl_adjoint_R1_gate.add_control_qubit(1, 1) gate_list.append(ctrl_adjoint_R1_gate) gate_list.append(H(2)) # 量子ビット3に制御R_2^*、制御R_3^*、Hゲート追加 ctrl_adjoint_R2_gate = RZ(3, np.pi / 4.0) ctrl_adjoint_R2_gate = to_matrix_gate(ctrl_adjoint_R2_gate) ctrl_adjoint_R2_gate.multiply_scalar(np.exp(-1j * np.pi / 8.0)) ctrl_adjoint_R2_gate.add_control_qubit(1, 1) ctrl_adjoint_R3_gate = RZ(3, np.pi / 2.0) ctrl_adjoint_R3_gate = to_matrix_gate(ctrl_adjoint_R3_gate) ctrl_adjoint_R3_gate.multiply_scalar(np.exp(-1j * np.pi / 4.0)) ctrl_adjoint_R3_gate.add_control_qubit(2, 1) gate_list.append(ctrl_adjoint_R2_gate) gate_list.append(ctrl_adjoint_R3_gate) gate_list.append(H(3)) # ゲートをマージして回路に追加 merged_gate = merge(gate_list) circuit.add_gate(merged_gate) # 状態の更新 circuit.update_quantum_state(state) # 状態のベクトル表示 print(state.get_vector()) # 量子ビット1~3と固有ベクトル|ψ>=(|0>±i|1>)/2の測定 coeff = 1.0 observable3 = Observable(n_qbits) observable2 = Observable(n_qbits) observable1 = Observable(n_qbits) observable_eigen = Observable(n_qbits) observable3.add_operator(coeff, 'Z 3') observable2.add_operator(coeff, 'Z 2') observable1.add_operator(coeff, 'Z 1') observable_eigen.add_operator(coeff, 'Y 0') value3 = observable3.get_expectation_value(state) value2 = observable2.get_expectation_value(state) value1 = observable1.get_expectation_value(state) value_eigen = observable_eigen.get_expectation_value(state) print('3:', value3) print('2:', value2) print('1:', value1) print('eigen state:', value_eigen)結果
- 初期状態を $|000\rangle\otimes|\psi\rangle_+$ としたとき
 固有値は $e^{-i3\pi/4}=e^{i5\pi/4}$ なので、0.101、つまり $|101\rangle$ が得られるはずです。
[ 2.77555756e-17-1.38777878e-17j 1.38777878e-17+2.77555756e-17j 0.00000000e+00+1.96261557e-17j -1.96261557e-17+0.00000000e+00j 2.77555756e-17+1.38777878e-17j -1.38777878e-17+2.77555756e-17j 1.96261557e-17+5.55111512e-17j -5.55111512e-17+1.96261557e-17j 2.77555756e-17+6.93889390e-17j -6.93889390e-17+2.77555756e-17j 7.07106781e-01-1.96261557e-17j 1.96261557e-17+7.07106781e-01j 2.77555756e-17-6.93889390e-17j 6.93889390e-17+2.77555756e-17j 1.96261557e-17-5.55111512e-17j 5.55111512e-17+1.96261557e-17j] 3: -0.9999999999999989 2: 0.9999999999999989 1: -0.9999999999999989 eigen state: 0.9999999999999989この測定はオブザーバブルの固有値が得られるので、$1$ は $|0\rangle$、$-1$ は $|1\rangle$ に対応します。なので、ちゃんと $|101\rangle$ が得られてることが分かります。また、初期状態もちゃんと設定されていることが分かります。
- 初期状態を $|000\rangle\otimes|\psi\rangle_-$ としたとき
 固有値は $e^{i3\pi/4}$ なので、0.011、つまり $|011\rangle$ が得られるはずです。計算はプログラムの(☆)部分に"-"を付ければできます。
[ 2.77555756e-17+1.38777878e-17j 1.38777878e-17-2.77555756e-17j 1.96261557e-17+5.55111512e-17j 5.55111512e-17-1.96261557e-17j 2.77555756e-17+6.93889390e-17j 6.93889390e-17-2.77555756e-17j 7.07106781e-01-1.96261557e-17j -1.96261557e-17-7.07106781e-01j 2.77555756e-17-6.93889390e-17j -6.93889390e-17-2.77555756e-17j 1.96261557e-17-5.55111512e-17j -5.55111512e-17-1.96261557e-17j 2.77555756e-17-1.38777878e-17j -1.38777878e-17-2.77555756e-17j 0.00000000e+00+1.96261557e-17j 1.96261557e-17+0.00000000e+00j] 3: 0.9999999999999996 2: -0.9999999999999996 1: -0.9999999999999996 eigen state: -0.9999999999999996ちゃんと、$|011\rangle$ になっています。初期状態もちゃんと $|\psi\rangle_-$ ですね。
まとめ
今回は簡単な例でQPEを試してみました。結論としてはちゃんと理論通りに固有値の2進小数が得られました。もっと桁が欲しい場合はレジスター量子ビットを増やして同様にすれば、固有値を得られます。
さて、実際の問題において $A$ のエルミート性を仮定しても一般性を失わない状況を考えます。正定値あるいは負定値であることが分かっていないときは、固有値は正負入り乱れている状況です。今回の結果を見ると分かりますが、得られる固有値の情報は $2\pi$ で規格化した偏角 $\theta\in [0,1)$ です。このアルゴリズムだと元の $A$ の固有値の符号までは区別がつきません。今後調べる必要がありそうです。
- 投稿日:2019-03-23T18:09:59+09:00
 
Pythonを使ってターミナルサーバ経由でNW機器を操作する方法
はじめに
Cisco IOSなどのNW機器を初期設定する際、USBコンソールケーブル経由で行うのが一般的かと思います。
他の方法として、以下の通りターミナルサーバ経由でSSH/Telnet接続し、「オンライン」の機器とほぼ同じ要領で初期設定することも可能です。[ 作業PC ] - ( Ethernet ) - [ ターミナルサーバ ] - ( コンソール ) - [ NW機器 ]
ただし、オンライン接続といくつか異なる点があり、スクリプトがそのまま使えなかったりします。
- ユーザ名/パスワードの入力方法の違い
 
ターミナルサーバの設定で入力が省略できたり、プロンプトがターミナルサーバ側の仕様に依存するため、ユーザ名のプロンプトがlogin:になったりする。
(IOSの場合はUsername:やusername:)- プロンプト表示の違い
 
オンライン接続の場合、ログイン時、自動的にプロンプトが表示されますが、ターミナルサーバの場合、明示的にEnterキーを押す必要がある。NW機器を操作するためのPythonライブラリである
netmikoは、ターミナルサーバ経由のログインもサポートしており、今回はログインしてshowコマンド実行までの例をご紹介します。事前準備
あらかじめ、以下コマンドで
netmikoをインストールします。pip install netmikoPythonコード
補足はコード内に記載していますが、ポイントは以下の3点です。
device_typeをterminal_serverに指定 (SSHでターミナルサーバへ接続)- 途中で改行コードを送信
 - ログイン後、Redispatchという処理を行う
 terminal_server.pyfrom netmiko import ConnectHandler from netmiko import redispatch import time # デバイス情報を指定 device = { 'device_type': 'terminal_server', # 'cisco_ios'ではなく必ずこの値に指定 'ip': '192.168.100.200', # terminal serverのIPアドレス 'port': 3001, # NW機器に割り当てられたTCPポート番号 'username': 'admin', # terminal serverのユーザ名 'password': 'password', # terminal serverのパスワード 'secret': 'test', # NW機器のenableパスワード } # terminal server経由でNW機器に接続 net_connect = ConnectHandler(**device) # 改行コードを送信し、後続処理のためにプロンプトを表示させる net_connect.write_channel("\r") time.sleep(1) net_connect.write_channel("\r") time.sleep(1) # device_typeを`cisco_ios`に変更し、これ以降Cisco IOS用のクラスを使って処理を行う redispatch(net_connect, device_type='cisco_ios') # enableパスワードを入力 net_connect.enable() # showコマンドを送信 output = net_connect.send_command('show run') print(output) # 切断 net_connect.disconnect()実行結果
send_commandで指定した、show runの出力結果が表示されます。'Building configuration...\n\nCurrent configuration : 2601 bytes\n! (省略)
- 投稿日:2019-03-23T17:15:55+09:00
 
PyQt5.12でWebEngineWidgetsが分離された
PyQt5
PyQtはアプレット等GUIを作るのに便利なモジュールである。これの良いところは依存関係が少ないところ(現状2019年3月現在、
PyQt5-sipだけ)で、クローズドな環境でも導入しやすい。
また、PyQt5さえ入れておけば、かなりのmoduleを呼び出せたのでお気に入りだった。PyQt5からmoduleの分離
バージョンを5.12にあげたころから、下記のエラーが出るようになった。
>>> import PyQt5.WebEngineWidgets ModuleNotFoundError: No module named 'PyQt5.QtWebEngineWidgets'5.11までで通っていたので、何やら変更があった模様である。
結論から述べると、WebEngineWidgetsが別のmoduleとして扱われるようになった。
なので、以下のlibraryをインストールすれば良い。$ pip install PyQtWebEngine Successfully installed PyQtWebEngine-5.12.1 $ pip show PyQtWebEngine Name: PyQtWebEngine Version: 5.12.1 Summary: Python bindings for the Qt WebEngine framework Home-page: https://www.riverbankcomputing.com/software/pyqtwebengine/ Author: Riverbank Computing Limited Author-email: info@riverbankcomputing.com License: GPL v3 Location: /Users/hikaru/.pyenv/versions/3.6.1/lib/python3.6/site-packages Requires: PyQt5 Required-by:2つ目のコマンドは、パッケージ情報の確認である。
確かに、これでWebEngineWidgetsが使えるようになった。この変更についてask ubuntuでも質問されている。
PyQt5.12の仕様変更について
公式を見ると、PyQt5.12リリースに合わせて、PyQtWebEngine以外にも複数のlibraryがリリースされたことがわかる。
PyQtWebEngineに移されたmoduleについては、パッケージが変わっただけで、アプリ側の実装には影響しないとのこと。
しかし、この変更の理由自体はよくわからず。
確かにPyQt5パッケージ自体は軽量化されたが、公式見解について記載があると嬉しい。
- 投稿日:2019-03-23T17:01:53+09:00
 
【厳選49個】Pythonの参考本や勉強サイトなど、学べる分野と金額と特色を徹底網羅してみた【最新2019年版】
今回は『Pythonの参考書とか勉強サイトとか、多すぎてよくわからない!』という方の為に
- 参考本
 - 動画学習サイト
 - テキスト学習サイト
 - その他、無料で転がっている有益な資料
 を、各10個ずつ、海外サイトやYoutubeも含めて徹底網羅しました!
客観的に学べる分野と金額と特色を整理しています。
Pythonに興味ある人は是非御覧ください!参考本10選
上位10選一覧
初心者向 <--- ---> 専門性高 【プログラムすらよくわからない本気の初心者レベルなら】 - 12歳からはじめる ゼロからのPythonゲームプログラミング教室
サムネ 題名 料金 12歳からはじめる ゼロからのPythonゲームプログラミング教室 2255円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
ゲーム開発
▼特色
「難しい知識はそこそこに、とりあえずゲームを作って楽しもう」というコンセプトだが
他の入門書に比べても、図解と根幹のアルゴリズムの解説が際立ってしっかりしてわかりやすい。
今流行のVSCodeの使い方も学べるのが良い。【色々練習はしたレベルの入門者レベルなら】 - 独学プログラマー Python言語の基本から仕事のやり方まで
サムネ 題名 料金 独学プログラマー Python言語の基本から仕事のやり方まで 2376円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
パッケージ管理、仕事の見つけ方/実践方法
▼特色
他のPython入門書にはない、「仕事の見つけ方、はじめ方」を付録している。
プログラマーとして未経験の人間なら必ず気をつけないといけない、いくつかの項目が書いてあるのが良い。【基本から発展まで 中級者レベルなら】 - 退屈なことはPythonにやらせよう
サムネ 題名 料金 退屈なことはPythonにやらせよう 3996円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
エクセル/ワード/CSV操作、ファイルから電話番号のみ抜き取る正規表現、ファイル操作、PDF操作、メール操作、画像操作、マウス操作
▼特色
Python使いなら一度は見たことあるであろう、圧倒的なボリュームを持つ名著。
基礎知識の辞書としても使えるし、簡単なファイル操作のアルゴリズムを学んで実践の訓練もできる。【実践編 Pythonの強力なデータ解析入門なら】 - PythonユーザのためのJupyter[実践]入門
サムネ 題名 料金 PythonユーザのためのJupyter[実践]入門 3564円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
Jupyter Notebookによるデータ分析、pandasによるデータ処理、Matplotlibによるグラフ描画、Bokehによるグラフ操作
▼特色
Jupyter Notebookとは、実行結果を確認しながら開発ができるツールです。
グラフを描画したり、機械学習用の計算ができたりと多機能で、ブラウザ上で開発できるので見た目もわかりやすいです。
その利便性から多くのPython開発者に用いられており、特にPythonの強みである計算/分析系では必須となります。【実践編 これ一冊でスクレイピングと機械学習を動かせる】 - Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう
サムネ 題名 料金 Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう 3456円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:自然言語処理、画像認識
同著者による『すぐに使える! 業務で実践できる! Pythonによる AI・機械学習・深層学習アプリのつくり方』も非常に有用。【実践編 PythonでモダンなWEBフレームワークをマスターするなら】 - 現場で使える Django の教科書《基礎編》
サムネ 題名 料金 現場で使える Django の教科書《基礎編》 1728円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:webサーバーの立ち上げ、PyCharmの使い方
【実践編 一つのコードでiOS/Android/Mac/Windowsアプリを作れる】 - Kivyプログラミング ―Pythonで作るマルチタッチアプリ
サムネ 題名 料金 Kivyプログラミング ―Pythonで作るマルチタッチアプリ 3456円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:一つのコードで、スマホとパソコン両方で動くアプリ作成フレームワークkivy
実際にスマホにビルドする方法の詳細はこちらの記事の方が詳しい。
[iOS]https://myenigma.hatenablog.com/entry/2016/05/07/160606
[Android]https://qiita.com/dario_okazaki/items/4f6373051afb70b794d9【実践編 Pythonで株トレード/金融アルゴリズムを勉強するなら】 - アルゴリズムトレードの道具箱 ──VBA、Python、トレードステーション、アミブローカーを使いこなすために
サムネ 題名 料金 アルゴリズムトレードの道具箱 ──VBA、Python、トレードステーション、アミブローカーを使いこなすために 10584円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:トレーディングアルゴリズムの実現
【実践編 Pythonでラズパイを動かしたいなら】 - やさしくはじめるラズベリー・パイ 電子工作でガジェット&簡易ロボットを作ってみよう
サムネ 題名 料金 やさしくはじめるラズベリー・パイ 電子工作でガジェット&簡易ロボットを作ってみよう 2678円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:ラズパイ入門、ラズパイ開発 LED点滅/webカメラ作成/音声認識センサー/温度感知センサー/ラジコンカー
【実践編 機械学習の名著 AIを専門的に勉強するなら】 - ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
サムネ 題名 料金 ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装 3678円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:機械学習実装、ディープラーニング実装
動画学習サイト10選
上位10選一覧
初心者向 <--- ---> 専門性高 【入門編 直感的に分かる、書ける プログラミング自体が初心者なら】 - Progate
サムネ 題名 料金 Progate ・基本無料 
・[応用/実践]月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:twitterでprogate学習者の集いが活発。仲間が多いと向上心が高まりやすい。
【入門から機械学習までほとんどの講座が永久無料 動画は少なめ とにかく色々学びたいなら】 - AI Academy
サムネ 題名 料金 AI Academy ・基本無料 
・[応用/実践]月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:最初に5つ質問され、解答に合わせて自分用のコースがカスタマイズされる。
【入門編 Pythonに関してはほんの触りだけ 他の言語も学びたいなら】 - ドットインストール
サムネ 題名 料金 ドットインストール ・基本無料 
・[応用/実践][ソースコード閲覧]月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:無料会員にはコピー可能なソースコードは貰えないので注意。
【入門編 Pythonに関してはほんの触りだけ 資格求人などの情報も学びたいなら】 - Paizaラーニング
サムネ 題名 料金 Paizaラーニング ・基本無料 
・[応用/実践]
- 単月契約月額980円
- 6ヶ月契約月額680円
- 1年契約月額600円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:資格試験用のカリキュラムや、求人情報が充実している。
【入門編 Pythonに関してはほんの触りだけ 副業などの情報も学びたいなら】 - Schoo
サムネ 題名 料金 Schoo ・初月のみお試し無料 
・基本月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:講師による不定期生放送は無料視聴可能。
【実践編 スクレイピングや機械学習やDjangoなど幅広く実践を学びたいなら】 - PyQ
サムネ 題名 料金 PyQ ・ライトプラン月額2980円 
・スタンダートプラン月額7980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:表操作、データ操作 1000問以上の実践的な課題を収録
【実践編 機械学習の言語処理、IoT実装、未来予測など本格的に学びたいなら】 - Aidemy
サムネ 題名 料金 Aidemy ・Freeプラン チケットx0 
・Petitプラン 月額1880円 チケットx1
・Smallプラン チケットx2
・Mediumプラン チケットx3
・Largeプラン チケットx4
※チケットが1講座を無料で見れる
チケットが無い場合、最低980円からの購入
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:自然言語処理、IoT実装、時系列解析、画像認識、Numpy/Pandas/Matplotlib学習、ブロックチェーン
【実践編 基礎から機械学習をメンターにみっちり付いてもらい学びたいなら】 - Tech Academy
サムネ 題名 料金 Tech Academy ・4週間プラン 139,000円 
・8週間プランプラン 189,000円
・12週間プランプラン 239,000円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:メンターがつきっきりでオンライン講座してくれる
【実践編 英語が出来るなら学位も取れるGoogleお墨付きの世界最強サイト でも高額】 - Udacity
サムネ 題名 料金 Udacity ・コース買切 無料もあり 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:ブロックチェーン
【実践編 手頃な値段で教授やプロのコースを字幕/サンプル付で受講可能 pythonだけで1700コース以上】 - Udemy
サムネ 題名 料金 Udemy ・コース買切 常時クーポン有 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:ブロックチェーン、自然言語処理、時系列解析、画像認識、Numpy/Pandas/Matplotlib学習、セキュリティなど他多数
また、元値は高いが大体97%オフとかでクーポンが発生している。実質10時間以上の高品質な講座を1200円とかで購入可能。テキスト学習サイト10選
上位10選一覧
初心者向 <--- ---> 専門性高 【入門編 Python公式サイト】 - Python Japan
サムネ 題名 料金 Python Japan ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:Python公式サイトなので、活発なコミュニティがある。
https://www.python.jp/pages/community.html【入門編 老舗Python入門サイト】 - Python-izm
サムネ 題名 料金 Python-izm ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:エクセル/PDF/画像操作、データ解析、GUI
【入門編 シンプルに基礎関数を全て網羅】 - Python入門
サムネ 題名 料金 Python入門 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:最終更新が2014年と古いので注意
【入門編 コンソール画面付きで丁寧に解説】 - Let's プログラミング Python入門
サムネ 題名 料金 Let's プログラミング Python入門 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:コンソール画面付きでわかりやすい
【実践編 基礎から、データベース、メール、ウェブなど幅広く応用を網羅】 - Python学習講座
サムネ 題名 料金 Python学習講座 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:画像処理、データ分析、メール処理、NoSQL操作、サーバー立ち上げ
【実践編 自分にあったPythonの分野、ツールを見つけて勉強できるロードマップ付】 - 侍エンジニア
サムネ 題名 料金 侍エンジニア ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:月額168,000のスクール有
【実践編 Pythonでゲーム制作】 - Pythonでゲーム制作入門
サムネ 題名 料金 Pythonでゲーム制作入門 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:2Dゲーム開発、3Dゲーム開発
【実践編 PythonでWebフレームワーク開発】 - Django Girls
サムネ 題名 料金 Django Girls ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:Djangoに特価
【実践編 Pythonのありとあらゆる名サイトやサンプルなどを集めた世界的学習ページ】 - Awesome Python
サムネ 題名 料金 Awesome Python ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:ほぼ全分野の良資料/サンプルが有。ほぼ全て英語の為注意。
【実践編 Githubで最も人気のあるWeb学習サイトのPython版】 - Free Code Camp Python
サムネ 題名 料金 Free Code Camp Python ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:ウェブ特化なので、他のライブラリの勉強もできる(Reactなど)。
その他、ネット上の超お得無料資料
【データサイエンティストなら】オライリー社の「Python Data Science Handbook」英語版が完全無料公開
サムネ リンク https://jakevdp.github.io/PythonDataScienceHandbook/ 【機械学習の必要な数学知識から、実践的な学習まで無料公開中】メディカルAI専門コース オンライン講義資料
サムネ リンク https://japan-medical-ai.github.io/medical-ai-course-materials/ 【勉強会を探しているなら】日本中の勉強会を集約しているTechPlayで無料勉強会に参加
サムネ リンク https://techplay.jp/tag/python 【日本の機械学習の権威が、学生用資料を無料公開中】東京大学松尾研究室
サムネ リンク https://weblab.t.u-tokyo.ac.jp/gci_contents/ 【2018年末、突如無料公開されたAmazonの社内学習用機械学習コース ほぼ英語】AWS トレーニング
サムネ リンク https://aws.amazon.com/jp/training/course-descriptions/machine-learning/ 【ゲームをしながら学べる!英語版のみ】CheckiO
サムネ リンク https://checkio.org/ 【ゲームをしながら学べる!日本語版も有り!】CodeMonkey
サムネ リンク https://www.playcodemonkey.com/hour-of-code/trivia-chatbot/course#1 Youtubeチャンネル
サムネ チャンネル名 伊沢剛 Able Programming PyConJP Programming with Mosh freeCodeCamp.org その他情報収集にオススメ
githubのトレンド
https://github.com/trending/pythonqiitaのトレンド
https://qiita.com/tags/pythonフリーランス案件情報
https://www.okworks.me/jobs?skill_ids%5B%5D=4みんなのPython勉強会発表資料(スライドでまとめられてる)
http://www.tsjshg.info/slides.htmlまとめ
淡々と勉強サイトや参考本をまとめてみました。(qiitaのpython系アカウントは多すぎてまとめられませんでした)
ピンと来る情報はありましたか?(`o´)「そもそも勉強法がわかんないよ!」
という方向けに、
私が「未経験/学歴無」からPythonエンジニアになれた勉強法に関する記事を、
近い内に作成したいと思います(知りたい項目などがあればコメントで教えてください)。その他、ご質問があるという方は、
ここのコメントか、私のTwitter / Facebookでメッセージを頂ければ返答/追記していきますのでお気軽にご連絡ください。
- 投稿日:2019-03-23T17:01:53+09:00
 
【2019年版】Pythonの参考本や勉強サイトなど、ほぼ全部(49個)の学べる分野と金額と特色を徹底網羅してみた
今回は『Pythonの参考書とか勉強サイトとか、多すぎてよくわからない!』という方の為に
- 参考本
 - 動画学習サイト
 - テキスト学習サイト
 - その他、無料で転がっている有益な資料
 を、各10個ずつ、海外サイトやYoutubeも含めて徹底網羅しました!
客観的に学べる分野と金額と特色を整理しています。
Pythonに興味ある人は是非御覧ください!参考本10選
上位10選一覧
初心者向 <--- ---> 専門性高 【プログラムすらよくわからない本気の初心者レベルなら】 - 12歳からはじめる ゼロからのPythonゲームプログラミング教室
サムネ 題名 料金 12歳からはじめる ゼロからのPythonゲームプログラミング教室 2255円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
ゲーム開発
▼特色
「難しい知識はそこそこに、とりあえずゲームを作って楽しもう」というコンセプトだが
他の入門書に比べても、図解と根幹のアルゴリズムの解説が際立ってしっかりしてわかりやすい。
今流行のVSCodeの使い方も学べるのが良い。【色々練習はしたレベルの入門者レベルなら】 - 独学プログラマー Python言語の基本から仕事のやり方まで
サムネ 題名 料金 独学プログラマー Python言語の基本から仕事のやり方まで 2376円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
パッケージ管理、仕事の見つけ方/実践方法
▼特色
他のPython入門書にはない、「仕事の見つけ方、はじめ方」を付録している。
プログラマーとして未経験の人間なら必ず気をつけないといけない、いくつかの項目が書いてあるのが良い。【基本から発展まで 中級者レベルなら】 - 退屈なことはPythonにやらせよう
サムネ 題名 料金 退屈なことはPythonにやらせよう 3996円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
エクセル/ワード/CSV操作、ファイルから電話番号のみ抜き取る正規表現、ファイル操作、PDF操作、メール操作、画像操作、マウス操作
▼特色
Python使いなら一度は見たことあるであろう、圧倒的なボリュームを持つ名著。
基礎知識の辞書としても使えるし、簡単なファイル操作のアルゴリズムを学んで実践の訓練もできる。【実践編 Pythonの強力なデータ解析入門なら】 - PythonユーザのためのJupyter[実践]入門
サムネ 題名 料金 PythonユーザのためのJupyter[実践]入門 3564円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
Jupyter Notebookによるデータ分析、pandasによるデータ処理、Matplotlibによるグラフ描画、Bokehによるグラフ操作
▼特色
Jupyter Notebookとは、実行結果を確認しながら開発ができるツールです。
グラフを描画したり、機械学習用の計算ができたりと多機能で、ブラウザ上で開発できるので見た目もわかりやすいです。
その利便性から多くのPython開発者に用いられており、特にPythonの強みである計算/分析系では必須となります。【実践編 これ一冊でスクレイピングと機械学習を動かせる】 - Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう
サムネ 題名 料金 Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう 3456円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:自然言語処理、画像認識
同著者による『すぐに使える! 業務で実践できる! Pythonによる AI・機械学習・深層学習アプリのつくり方』も非常に有用。【実践編 PythonでモダンなWEBフレームワークをマスターするなら】 - 現場で使える Django の教科書《基礎編》
サムネ 題名 料金 現場で使える Django の教科書《基礎編》 1728円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:webサーバーの立ち上げ、PyCharmの使い方
【実践編 一つのコードでiOS/Android/Mac/Windowsアプリを作れる】 - Kivyプログラミング ―Pythonで作るマルチタッチアプリ
サムネ 題名 料金 Kivyプログラミング ―Pythonで作るマルチタッチアプリ 3456円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:一つのコードで、スマホとパソコン両方で動くアプリ作成フレームワークkivy
実際にスマホにビルドする方法の詳細はこちらの記事の方が詳しい。
[iOS]https://myenigma.hatenablog.com/entry/2016/05/07/160606
[Android]https://qiita.com/dario_okazaki/items/4f6373051afb70b794d9【実践編 Pythonで株トレード/金融アルゴリズムを勉強するなら】 - アルゴリズムトレードの道具箱 ──VBA、Python、トレードステーション、アミブローカーを使いこなすために
サムネ 題名 料金 アルゴリズムトレードの道具箱 ──VBA、Python、トレードステーション、アミブローカーを使いこなすために 10584円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:トレーディングアルゴリズムの実現
【実践編 Pythonでラズパイを動かしたいなら】 - やさしくはじめるラズベリー・パイ 電子工作でガジェット&簡易ロボットを作ってみよう
サムネ 題名 料金 やさしくはじめるラズベリー・パイ 電子工作でガジェット&簡易ロボットを作ってみよう 2678円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:ラズパイ入門、ラズパイ開発 LED点滅/webカメラ作成/音声認識センサー/温度感知センサー/ラジコンカー
【実践編 機械学習の名著 AIを専門的に勉強するなら】 - ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
サムネ 題名 料金 ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装 3678円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:機械学習実装、ディープラーニング実装
動画学習サイト10選
上位10選一覧
初心者向 <--- ---> 専門性高 【入門編 直感的に分かる、書ける プログラミング自体が初心者なら】 - Progate
サムネ 題名 料金 Progate ・基本無料 
・[応用/実践]月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:twitterでprogate学習者の集いが活発。仲間が多いと向上心が高まりやすい。
【入門から機械学習までほとんどの講座が永久無料 動画は少なめ とにかく色々学びたいなら】 - AI Academy
サムネ 題名 料金 AI Academy ・基本無料 
・[応用/実践]月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:最初に5つ質問され、解答に合わせて自分用のコースがカスタマイズされる。
【入門編 Pythonに関してはほんの触りだけ 他の言語も学びたいなら】 - ドットインストール
サムネ 題名 料金 ドットインストール ・基本無料 
・[応用/実践][ソースコード閲覧]月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:無料会員にはコピー可能なソースコードは貰えないので注意。
【入門編 Pythonに関してはほんの触りだけ 資格求人などの情報も学びたいなら】 - Paizaラーニング
サムネ 題名 料金 Paizaラーニング ・基本無料 
・[応用/実践]
- 単月契約月額980円
- 6ヶ月契約月額680円
- 1年契約月額600円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:資格試験用のカリキュラムや、求人情報が充実している。
【入門編 Pythonに関してはほんの触りだけ 副業などの情報も学びたいなら】 - Schoo
サムネ 題名 料金 Schoo ・初月のみお試し無料 
・基本月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:講師による不定期生放送は無料視聴可能。
【実践編 スクレイピングや機械学習やDjangoなど幅広く実践を学びたいなら】 - PyQ
サムネ 題名 料金 PyQ ・ライトプラン月額2980円 
・スタンダートプラン月額7980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:表操作、データ操作 1000問以上の実践的な課題を収録
【実践編 機械学習の言語処理、IoT実装、未来予測など本格的に学びたいなら】 - Aidemy
サムネ 題名 料金 Aidemy ・Freeプラン チケットx0 
・Petitプラン 月額1880円 チケットx1
・Smallプラン チケットx2
・Mediumプラン チケットx3
・Largeプラン チケットx4
※チケットが1講座を無料で見れる
チケットが無い場合、最低980円からの購入
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:自然言語処理、IoT実装、時系列解析、画像認識、Numpy/Pandas/Matplotlib学習、ブロックチェーン
【実践編 基礎から機械学習をメンターにみっちり付いてもらい学びたいなら】 - Tech Academy
サムネ 題名 料金 Tech Academy ・4週間プラン 139,000円 
・8週間プランプラン 189,000円
・12週間プランプラン 239,000円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:メンターがつきっきりでオンライン講座してくれる
【実践編 英語が出来るなら学位も取れるGoogleお墨付きの世界最強サイト でも高額】 - Udacity
サムネ 題名 料金 Udacity ・コース買切 無料もあり 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:ブロックチェーン
【実践編 手頃な値段で教授やプロのコースを字幕/サンプル付で受講可能 pythonだけで1700コース以上】 - Udemy
サムネ 題名 料金 Udemy ・コース買切 常時クーポン有 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:ブロックチェーン、自然言語処理、時系列解析、画像認識、Numpy/Pandas/Matplotlib学習、セキュリティなど他多数
また、元値は高いが大体97%オフとかでクーポンが発生している。実質10時間以上の高品質な講座を1200円とかで購入可能。テキスト学習サイト10選
上位10選一覧
初心者向 <--- ---> 専門性高 【入門編 Python公式サイト】 - Python Japan
サムネ 題名 料金 Python Japan ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:Python公式サイトなので、活発なコミュニティがある。
https://www.python.jp/pages/community.html【入門編 老舗Python入門サイト】 - Python-izm
サムネ 題名 料金 Python-izm ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:エクセル/PDF/画像操作、データ解析、GUI
【入門編 シンプルに基礎関数を全て網羅】 - Python入門
サムネ 題名 料金 Python入門 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:最終更新が2014年と古いので注意
【入門編 コンソール画面付きで丁寧に解説】 - Let's プログラミング Python入門
サムネ 題名 料金 Let's プログラミング Python入門 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:コンソール画面付きでわかりやすい
【実践編 基礎から、データベース、メール、ウェブなど幅広く応用を網羅】 - Python学習講座
サムネ 題名 料金 Python学習講座 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:画像処理、データ分析、メール処理、NoSQL操作、サーバー立ち上げ
【実践編 自分にあったPythonの分野、ツールを見つけて勉強できるロードマップ付】 - 侍エンジニア
サムネ 題名 料金 侍エンジニア ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:月額168,000のスクール有
【実践編 Pythonでゲーム制作】 - Pythonでゲーム制作入門
サムネ 題名 料金 Pythonでゲーム制作入門 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:2Dゲーム開発、3Dゲーム開発
【実践編 PythonでWebフレームワーク開発】 - Django Girls
サムネ 題名 料金 Django Girls ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:Djangoに特価
【実践編 Pythonのありとあらゆる名サイトやサンプルなどを集めた世界的学習ページ】 - Awesome Python
サムネ 題名 料金 Awesome Python ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:ほぼ全分野の良資料/サンプルが有。ほぼ全て英語の為注意。
【実践編 Githubで最も人気のあるWeb学習サイトのPython版】 - Free Code Camp Python
サムネ 題名 料金 Free Code Camp Python ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:ウェブ特化なので、他のライブラリの勉強もできる(Reactなど)。
その他、ネット上の超お得無料資料
【データサイエンティストなら】オライリー社の「Python Data Science Handbook」英語版が完全無料公開
サムネ リンク https://jakevdp.github.io/PythonDataScienceHandbook/ 【機械学習の必要な数学知識から、実践的な学習まで無料公開中】メディカルAI専門コース オンライン講義資料
サムネ リンク https://japan-medical-ai.github.io/medical-ai-course-materials/ 【勉強会を探しているなら】日本中の勉強会を集約しているTechPlayで無料勉強会に参加
サムネ リンク https://techplay.jp/tag/python 【日本の機械学習の権威が、学生用資料を無料公開中】東京大学松尾研究室
サムネ リンク https://weblab.t.u-tokyo.ac.jp/gci_contents/ 【2018年末、突如無料公開されたAmazonの社内学習用機械学習コース ほぼ英語】AWS トレーニング
サムネ リンク https://aws.amazon.com/jp/training/course-descriptions/machine-learning/ 【ゲームをしながら学べる!英語版のみ】CheckiO
サムネ リンク https://checkio.org/ 【ゲームをしながら学べる!日本語版も有り!】CodeMonkey
サムネ リンク https://www.playcodemonkey.com/hour-of-code/trivia-chatbot/course#1 Youtubeチャンネル
サムネ チャンネル名 伊沢剛 Able Programming PyConJP Programming with Mosh freeCodeCamp.org その他情報収集にオススメ
githubのトレンド
https://github.com/trending/pythonqiitaのトレンド
https://qiita.com/tags/pythonフリーランス案件情報
https://www.okworks.me/jobs?skill_ids%5B%5D=4みんなのPython勉強会発表資料(スライドでまとめられてる)
http://www.tsjshg.info/slides.htmlまとめ
淡々と勉強サイトや参考本をまとめてみました。(qiitaのpython系アカウントは多すぎてまとめられませんでした)
ピンと来る情報はありましたか?(`o´)「そもそも勉強法がわかんないよ!」
という方向けに、
私が「未経験/学歴無」からPythonエンジニアになれた勉強法に関する記事を、
近い内に作成したいと思います(知りたい項目などがあればコメントで教えてください)。その他、ご質問があるという方は、
ここのコメントか、私のTwitter / Facebookでメッセージを頂ければ返答/追記していきますのでお気軽にご連絡ください。
- 投稿日:2019-03-23T17:01:53+09:00
 
【2019年版】Pythonの参考本や勉強サイトなど、49個の学べる分野と金額と特色を徹底網羅してみた
今回は『Pythonの参考書とか勉強サイトとか、多すぎてよくわからない!』という方の為に
- 参考本
 - 動画学習サイト
 - テキスト学習サイト
 - その他、無料で転がっている有益な資料
 を、各10個ずつ、海外サイトやYoutubeも含めて徹底網羅しました!
参考書以外はほぼ世に出てる情報を網羅できていると思います。
Pythonに興味ある人は是非御覧ください!参考本10選
上位10選一覧
初心者向 <--- ---> 専門性高 【プログラムすらよくわからない本気の初心者レベルなら】 - 12歳からはじめる ゼロからのPythonゲームプログラミング教室
サムネ 題名 料金 12歳からはじめる ゼロからのPythonゲームプログラミング教室 2255円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
ゲーム開発
▼特色
「難しい知識はそこそこに、とりあえずゲームを作って楽しもう」というコンセプトだが
他の入門書に比べても、図解と根幹のアルゴリズムの解説が際立ってしっかりしてわかりやすい。
今流行のVSCodeの使い方も学べるのが良い。【色々練習はしたレベルの入門者レベルなら】 - 独学プログラマー Python言語の基本から仕事のやり方まで
サムネ 題名 料金 独学プログラマー Python言語の基本から仕事のやり方まで 2376円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
パッケージ管理、仕事の見つけ方/実践方法
▼特色
他のPython入門書にはない、「仕事の見つけ方、はじめ方」を付録している。
プログラマーとして未経験の人間なら必ず気をつけないといけない、いくつかの項目が書いてあるのが良い。【基本から発展まで 中級者レベルなら】 - 退屈なことはPythonにやらせよう
サムネ 題名 料金 退屈なことはPythonにやらせよう 3996円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
エクセル/ワード/CSV操作、ファイルから電話番号のみ抜き取る正規表現、ファイル操作、PDF操作、メール操作、画像操作、マウス操作
▼特色
Python使いなら一度は見たことあるであろう、圧倒的なボリュームを持つ名著。
基礎知識の辞書としても使えるし、簡単なファイル操作のアルゴリズムを学んで実践の訓練もできる。【実践編 Pythonの強力なデータ解析入門なら】 - PythonユーザのためのJupyter[実践]入門
サムネ 題名 料金 PythonユーザのためのJupyter[実践]入門 3564円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
Jupyter Notebookによるデータ分析、pandasによるデータ処理、Matplotlibによるグラフ描画、Bokehによるグラフ操作
▼特色
Jupyter Notebookとは、実行結果を確認しながら開発ができるツールです。
グラフを描画したり、機械学習用の計算ができたりと多機能で、ブラウザ上で開発できるので見た目もわかりやすいです。
その利便性から多くのPython開発者に用いられており、特にPythonの強みである計算/分析系では必須となります。【実践編 これ一冊でスクレイピングと機械学習を動かせる】 - Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう
サムネ 題名 料金 Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう 3456円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
自然言語処理、画像認識
▼特色
スクレイピング、機械学習の基礎入門は勿論、
スクレイピングしたデータを機械学習で、ジャンル分けや画像認識を行う方法などが記載されている。
同著者による『すぐに使える! 業務で実践できる! Pythonによる AI・機械学習・深層学習アプリのつくり方』も非常に有用。【実践編 PythonでモダンなWEBフレームワークをマスターするなら】 - 現場で使える Django の教科書《基礎編》
サムネ 題名 料金 現場で使える Django の教科書《基礎編》 1728円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
webサーバーの立ち上げ、PyCharmの使い方
▼特色
Ruby on Rails, Laravelと並び三大ウェブフレームワークと呼ばれているDjangoを学習できます。
Djangoは豊富なPythonライブラリを使用できる強みがあり、カスタマイズ性の高いウェブを作成する事ができます。【実践編 一つのコードでiOS/Android/Mac/Windowsアプリを作れる】 - Kivyプログラミング ―Pythonで作るマルチタッチアプリ
サムネ 題名 料金 Kivyプログラミング ―Pythonで作るマルチタッチアプリ 3456円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
一つのコードで、スマホとパソコン両方で動くアプリ作成フレームワークkivy
▼特色
スマホとパソコン両方で動けるアプリを、クロスプラットフォームアプリいいます。
特に最も人気がありデザインが洗練されているKivyというクロスプラットフォームフレームワークを紹介しています。
実際にスマホにビルドする方法の詳細はこちらの記事の方が詳しい。
[iOS]https://myenigma.hatenablog.com/entry/2016/05/07/160606
[Android]https://qiita.com/dario_okazaki/items/4f6373051afb70b794d9【実践編 Pythonで株トレード/金融アルゴリズムを勉強するなら】 - アルゴリズムトレードの道具箱 ──VBA、Python、トレードステーション、アミブローカーを使いこなすために
サムネ 題名 料金 アルゴリズムトレードの道具箱 ──VBA、Python、トレードステーション、アミブローカーを使いこなすために 10584円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:トレーディングアルゴリズムの実現
【実践編 Pythonでラズパイを動かしたいなら】 - やさしくはじめるラズベリー・パイ 電子工作でガジェット&簡易ロボットを作ってみよう
サムネ 題名 料金 やさしくはじめるラズベリー・パイ 電子工作でガジェット&簡易ロボットを作ってみよう 2678円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:ラズパイ入門、ラズパイ開発 LED点滅/webカメラ作成/音声認識センサー/温度感知センサー/ラジコンカー
【実践編 機械学習の名著 AIを専門的に勉強するなら】 - ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
サムネ 題名 料金 ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装 3678円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:機械学習実装、ディープラーニング実装
動画学習サイト10選
上位10選一覧
初心者向 <--- ---> 専門性高 【入門編 直感的に分かる、書ける プログラミング自体が初心者なら】 - Progate
サムネ 題名 料金 Progate ・基本無料 
・[応用/実践]月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:twitterでprogate学習者の集いが活発。仲間が多いと向上心が高まりやすい。
【入門から機械学習までほとんどの講座が永久無料 動画は少なめ とにかく色々学びたいなら】 - AI Academy
サムネ 題名 料金 AI Academy ・基本無料 
・[応用/実践]月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:最初に5つ質問され、解答に合わせて自分用のコースがカスタマイズされる。
【入門編 Pythonに関してはほんの触りだけ 他の言語も学びたいなら】 - ドットインストール
サムネ 題名 料金 ドットインストール ・基本無料 
・[応用/実践][ソースコード閲覧]月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:無料会員にはコピー可能なソースコードは貰えないので注意。
【入門編 Pythonに関してはほんの触りだけ 資格求人などの情報も学びたいなら】 - Paizaラーニング
サムネ 題名 料金 Paizaラーニング ・基本無料 
・[応用/実践]
- 単月契約月額980円
- 6ヶ月契約月額680円
- 1年契約月額600円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:資格試験用のカリキュラムや、求人情報が充実している。
【入門編 Pythonに関してはほんの触りだけ 副業などの情報も学びたいなら】 - Schoo
サムネ 題名 料金 Schoo ・初月のみお試し無料 
・基本月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:講師による不定期生放送は無料視聴可能。
【実践編 スクレイピングや機械学習やDjangoなど幅広く実践を学びたいなら】 - PyQ
サムネ 題名 料金 PyQ ・ライトプラン月額2980円 
・スタンダートプラン月額7980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:表操作、データ操作 1000問以上の実践的な課題を収録
【実践編 機械学習の言語処理、IoT実装、未来予測など本格的に学びたいなら】 - Aidemy
サムネ 題名 料金 Aidemy ・Freeプラン チケットx0 
・Petitプラン 月額1880円 チケットx1
・Smallプラン チケットx2
・Mediumプラン チケットx3
・Largeプラン チケットx4
※チケットが1講座を無料で見れる
チケットが無い場合、最低980円からの購入
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:自然言語処理、IoT実装、時系列解析、画像認識、Numpy/Pandas/Matplotlib学習、ブロックチェーン
【実践編 基礎から機械学習をメンターにみっちり付いてもらい学びたいなら】 - Tech Academy
サムネ 題名 料金 Tech Academy ・4週間プラン 139,000円 
・8週間プランプラン 189,000円
・12週間プランプラン 239,000円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:メンターがつきっきりでオンライン講座してくれる
【実践編 英語が出来るなら学位も取れるGoogleお墨付きの世界最強サイト でも高額】 - Udacity
サムネ 題名 料金 Udacity ・コース買切 無料もあり 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:ブロックチェーン
【実践編 手頃な値段で教授やプロのコースを字幕/サンプル付で受講可能 pythonだけで1700コース以上】 - Udemy
サムネ 題名 料金 Udemy ・コース買切 常時クーポン有 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:ブロックチェーン、自然言語処理、時系列解析、画像認識、Numpy/Pandas/Matplotlib学習、セキュリティなど他多数
また、元値は高いが大体97%オフとかでクーポンが発生している。実質10時間以上の高品質な講座を1200円とかで購入可能。テキスト学習サイト10選
上位10選一覧
初心者向 <--- ---> 専門性高 【入門編 Python公式サイト】 - Python Japan
サムネ 題名 料金 Python Japan ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:Python公式サイトなので、活発なコミュニティがある。
https://www.python.jp/pages/community.html【入門編 老舗Python入門サイト】 - Python-izm
サムネ 題名 料金 Python-izm ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:エクセル/PDF/画像操作、データ解析、GUI
【入門編 シンプルに基礎関数を全て網羅】 - Python入門
サムネ 題名 料金 Python入門 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:最終更新が2014年と古いので注意
【入門編 コンソール画面付きで丁寧に解説】 - Let's プログラミング Python入門
サムネ 題名 料金 Let's プログラミング Python入門 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:コンソール画面付きでわかりやすい
【実践編 基礎から、データベース、メール、ウェブなど幅広く応用を網羅】 - Python学習講座
サムネ 題名 料金 Python学習講座 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:画像処理、データ分析、メール処理、NoSQL操作、サーバー立ち上げ
【実践編 自分にあったPythonの分野、ツールを見つけて勉強できるロードマップ付】 - 侍エンジニア
サムネ 題名 料金 侍エンジニア ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:月額168,000のスクール有
【実践編 Pythonでゲーム制作】 - Pythonでゲーム制作入門
サムネ 題名 料金 Pythonでゲーム制作入門 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:2Dゲーム開発、3Dゲーム開発
【実践編 PythonでWebフレームワーク開発】 - Django Girls
サムネ 題名 料金 Django Girls ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:Djangoに特価
【実践編 Pythonのありとあらゆる名サイトやサンプルなどを集めた世界的学習ページ】 - Awesome Python
サムネ 題名 料金 Awesome Python ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:ほぼ全分野の良資料/サンプルが有。ほぼ全て英語の為注意。
【実践編 Githubで最も人気のあるWeb学習サイトのPython版】 - Free Code Camp Python
サムネ 題名 料金 Free Code Camp Python ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:ウェブ特化なので、他のライブラリの勉強もできる(Reactなど)。
その他、ネット上の超お得無料資料
【データサイエンティストなら】オライリー社の「Python Data Science Handbook」英語版が完全無料公開
サムネ リンク https://jakevdp.github.io/PythonDataScienceHandbook/ 【機械学習の必要な数学知識から、実践的な学習まで無料公開中】メディカルAI専門コース オンライン講義資料
サムネ リンク https://japan-medical-ai.github.io/medical-ai-course-materials/ 【勉強会を探しているなら】日本中の勉強会を集約しているTechPlayで無料勉強会に参加
サムネ リンク https://techplay.jp/tag/python 【日本の機械学習の権威が、学生用資料を無料公開中】東京大学松尾研究室
サムネ リンク https://weblab.t.u-tokyo.ac.jp/gci_contents/ 【2018年末、突如無料公開されたAmazonの社内学習用機械学習コース ほぼ英語】AWS トレーニング
サムネ リンク https://aws.amazon.com/jp/training/course-descriptions/machine-learning/ 【ゲームをしながら学べる!英語版のみ】CheckiO
サムネ リンク https://checkio.org/ 【ゲームをしながら学べる!日本語版も有り!】CodeMonkey
サムネ リンク https://www.playcodemonkey.com/hour-of-code/trivia-chatbot/course#1 Youtubeチャンネル
サムネ チャンネル名 伊沢剛 Able Programming PyConJP Programming with Mosh freeCodeCamp.org その他情報収集にオススメ
githubのトレンド
https://github.com/trending/pythonqiitaのトレンド
https://qiita.com/tags/pythonフリーランス案件情報
https://www.okworks.me/jobs?skill_ids%5B%5D=4みんなのPython勉強会発表資料(スライドでまとめられてる)
http://www.tsjshg.info/slides.htmlまとめ
淡々と勉強サイトや参考本をまとめてみました。(qiitaのpython系アカウントは多すぎてまとめられませんでした)
ピンと来る情報はありましたか?(`o´)「そもそも勉強法がわかんないよ!」
という方向けに、
私が「未経験/学歴無」からPythonエンジニアになれた勉強法に関する記事を、
近い内に作成したいと思います(知りたい項目などがあればコメントで教えてください)。その他、ご質問があるという方は、
ここのコメントか、私のTwitter / Facebookでメッセージを頂ければ返答/追記していきますのでお気軽にご連絡ください。
- 投稿日:2019-03-23T17:01:53+09:00
 
【2019年版】Pythonの参考本や勉強サイトなど49個の、学べる分野と金額と特色を徹底網羅してみた
今回は『Pythonの参考書とか勉強サイトとか、多すぎてよくわからない!』という方の為に
- 参考本
 - 動画学習サイト
 - テキスト学習サイト
 - その他、無料で転がっている有益な資料
 を、各10個ずつ、海外サイトやYoutubeも含めて徹底網羅しました!
参考書以外はほぼ世に出てる情報を網羅できていると思います。
Pythonに興味ある人は是非御覧ください!参考本10選
上位10選一覧
初心者向 <--- ---> 専門性高 【プログラムすらよくわからない本気の初心者レベルなら】 - 12歳からはじめる ゼロからのPythonゲームプログラミング教室
サムネ 題名 料金 12歳からはじめる ゼロからのPythonゲームプログラミング教室 2255円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
ゲーム開発
▼特色
「難しい知識はそこそこに、とりあえずゲームを作って楽しもう」というコンセプトだが
他の入門書に比べても、図解と根幹のアルゴリズムの解説が際立ってしっかりしてわかりやすい。
今流行のVSCodeの使い方も学べるのが良い。【色々練習はしたレベルの入門者レベルなら】 - 独学プログラマー Python言語の基本から仕事のやり方まで
サムネ 題名 料金 独学プログラマー Python言語の基本から仕事のやり方まで 2376円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
パッケージ管理、仕事の見つけ方/実践方法
▼特色
他のPython入門書にはない、「仕事の見つけ方、はじめ方」を付録している。
プログラマーとして未経験の人間なら必ず気をつけないといけない、いくつかの項目が書いてあるのが良い。【基本から発展まで 中級者レベルなら】 - 退屈なことはPythonにやらせよう
サムネ 題名 料金 退屈なことはPythonにやらせよう 3996円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
エクセル/ワード/CSV操作、ファイルから電話番号のみ抜き取る正規表現、ファイル操作、PDF操作、メール操作、画像操作、マウス操作
▼特色
Python使いなら一度は見たことあるであろう、圧倒的なボリュームを持つ名著。
基礎知識の辞書としても使えるし、簡単なファイル操作のアルゴリズムを学んで実践の訓練もできる。【実践編 Pythonの強力なデータ解析入門なら】 - PythonユーザのためのJupyter[実践]入門
サムネ 題名 料金 PythonユーザのためのJupyter[実践]入門 3564円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
Jupyter Notebookによるデータ分析、pandasによるデータ処理、Matplotlibによるグラフ描画、Bokehによるグラフ操作
▼特色
Jupyter Notebookとは、実行結果を確認しながら開発ができるツールです。
グラフを描画したり、機械学習用の計算ができたりと多機能で、ブラウザ上で開発できるので見た目もわかりやすいです。
その利便性から多くのPython開発者に用いられており、特にPythonの強みである計算/分析系では必須となります。【実践編 これ一冊でスクレイピングと機械学習を動かせる】 - Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう
サムネ 題名 料金 Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう 3456円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
自然言語処理、画像認識
▼特色
スクレイピング、機械学習の基礎入門は勿論、
スクレイピングしたデータを機械学習で、ジャンル分けや画像認識を行う方法などが記載されている。
同著者による『すぐに使える! 業務で実践できる! Pythonによる AI・機械学習・深層学習アプリのつくり方』も非常に有用。【実践編 PythonでモダンなWEBフレームワークをマスターするなら】 - 現場で使える Django の教科書《基礎編》
サムネ 題名 料金 現場で使える Django の教科書《基礎編》 1728円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
webサーバーの立ち上げ、PyCharmの使い方
▼特色
Ruby on Rails, Laravelと並び三大ウェブフレームワークと呼ばれているDjangoを学習できます。
Djangoは豊富なPythonライブラリを使用できる強みがあり、カスタマイズ性の高いウェブを作成する事ができます。【実践編 一つのコードでiOS/Android/Mac/Windowsアプリを作れる】 - Kivyプログラミング ―Pythonで作るマルチタッチアプリ
サムネ 題名 料金 Kivyプログラミング ―Pythonで作るマルチタッチアプリ 3456円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
一つのコードで、スマホとパソコン両方で動くアプリ作成フレームワークkivy
▼特色
スマホとパソコン両方で動けるアプリを、クロスプラットフォームアプリいいます。
特に最も人気がありデザインが洗練されているKivyというクロスプラットフォームフレームワークを紹介しています。
実際にスマホにビルドする方法の詳細はこちらの記事の方が詳しい。
[iOS]https://myenigma.hatenablog.com/entry/2016/05/07/160606
[Android]https://qiita.com/dario_okazaki/items/4f6373051afb70b794d9【実践編 Pythonで株トレード/金融アルゴリズムを勉強するなら】 - アルゴリズムトレードの道具箱 ──VBA、Python、トレードステーション、アミブローカーを使いこなすために
サムネ 題名 料金 アルゴリズムトレードの道具箱 ──VBA、Python、トレードステーション、アミブローカーを使いこなすために 10584円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
トレーディングアルゴリズムの実現
▼特色
Pythonを用いた金融アルゴリズムの自動化の方法を紹介している。
アルゴリズムの原理から解説しているのと、サンプルが多めなので、Pythonと金融どちらも初心者の方でも読める。【実践編 Pythonでラズパイを動かしたいなら】 - やさしくはじめるラズベリー・パイ 電子工作でガジェット&簡易ロボットを作ってみよう
サムネ 題名 料金 やさしくはじめるラズベリー・パイ 電子工作でガジェット&簡易ロボットを作ってみよう 2678円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
ラズパイ入門、ラズパイ開発 LED点滅/webカメラ作成/音声認識センサー/温度感知センサー/ラジコンカー
▼特色
ミニパソコンであるラズベリーパイを、簡単な操作からラジコン操作にするまで色々楽しめる。
ロボットが好きだったりする人にオススメ。【実践編 機械学習の名著 AIを専門的に勉強するなら】 - ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
サムネ 題名 料金 ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装 3678円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
機械学習実装、ディープラーニング実装
▼特色
ベストセラーにもなった名著。機械学習を始めるならまずこの本で概要を学ぶべし。
数学について知識がない人にもわかるように記載されている。動画学習サイト10選
上位10選一覧
初心者向 <--- ---> 専門性高 【入門編 直感的に分かる、書ける プログラミング自体が初心者なら】 - Progate
サムネ 題名 料金 Progate ・基本無料 
・[応用/実践]月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:twitterでprogate学習者の集いが活発。仲間が多いと向上心が高まりやすい。
▼その他学習項目
特になし
▼特色
Pythonに関しては基本的な内容で、料理注文システムを完成させるまでしかない。
だがProgateは学習者がたくさんおり、Twitterで#progateで探せばたくさん仲間を見つけられる。
プログラム自体初めてで、モチベーションを保ちたい人にはオススメの選択だろう。【入門から機械学習までほとんどの講座が永久無料 動画は少なめ とにかく色々学びたいなら】 - AI Academy
サムネ 題名 料金 AI Academy ・基本無料 
・[応用/実践]月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
深層学習、時系列解析、自然言語処理、画像認識、クラウドの使用方法
▼特色
無料で学べる範囲がかなり大きい。
最初に5つ質問され、解答に合わせて自分用のコースがカスタマイズされるので、コースの選択で悩む必要が全く無い。【入門編 Pythonに関してはほんの触りだけ 他の言語も学びたいなら】 - ドットインストール
サムネ 題名 料金 ドットインストール ・基本無料 
・[応用/実践][ソースコード閲覧]月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
特になし
▼特色
無料会員にはコピー可能なソースコードは貰えないので注意。
正直Python目当てではあまりオススメしないが、網羅の為一覧。
他の言語とかが大量にあるので、全部含めて初めて価値がでる。【入門編 Pythonに関してはほんの触りだけ 資格求人などの情報も学びたいなら】 - Paizaラーニング
サムネ 題名 料金 Paizaラーニング ・基本無料 
・[応用/実践]
- 単月契約月額980円
- 6ヶ月契約月額680円
- 1年契約月額600円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
特になし
▼特色
まんべんなく勉強は可能だが、ざっくりと軽くしか触れない。
paizaはこういう学習系より、コードガールこれくしょんで勉強するのが最高でしょう。
可愛すぎて1日眺められます。【入門編 Pythonに関してはほんの触りだけ 副業などの情報も学びたいなら】 - Schoo
サムネ 題名 料金 Schoo ・初月のみお試し無料 
・基本月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
特になし
▼特色
SchooのPython講座は大量にある講義動画のうちの一つに過ぎず、ガッツリ勉強したい人向けではない。【実践編 スクレイピングや機械学習やDjangoなど幅広く実践を学びたいなら】 - PyQ
サムネ 題名 料金 PyQ ・ライトプラン月額2980円 
・スタンダートプラン月額7980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
表操作、データ操作 1000問以上の実践的な課題を収録
▼特色
Python専門のサイトで、かなりの量のサンプルと課題を用意している。
料金は高めだが、集中してガッツリ勉強したい人にはオススメ。【実践編 機械学習の言語処理、IoT実装、未来予測など本格的に学びたいなら】 - Aidemy
サムネ 題名 料金 Aidemy ・Freeプラン チケットx0 
・Petitプラン 月額1880円 チケットx1
・Smallプラン チケットx2
・Mediumプラン チケットx3
・Largeプラン チケットx4
※チケットが1講座を無料で見れる
チケットが無い場合、最低980円からの購入
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
自然言語処理、IoT実装、時系列解析、画像認識、Numpy/Pandas/Matplotlib学習、ブロックチェーン
▼特色
プロや企業向けに、機械学習に特化した講義を公開している。
特に数値未来予測やIoT実装はかなり実務よりの内容となっている。【実践編 基礎から機械学習をメンターにみっちり付いてもらい学びたいなら】 - Tech Academy
サムネ 題名 料金 Tech Academy ・4週間プラン 139,000円 
・8週間プランプラン 189,000円
・12週間プランプラン 239,000円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
特になし
▼特色
メンターがつきっきりでオンライン講座してくれる。
入門者向けで160時間を目安に終わる講義となっている為、突っ込んだ内容までは行わないが十分実務に入れるまでの訓練にはなる。
そういう就職支援も含めた総合サポートが特色のスクールという感じ。【実践編 英語が出来るなら学位も取れるGoogleお墨付きの世界最強サイト でも高額】 - Udacity
サムネ 題名 料金 Udacity ・コース買切 無料もあり 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
ブロックチェーン
▼特色
学位が取れるという点が最大の強み。
講義は勿論、有名大学の教授などが行っている。
ただし全て英語で、かなりプロ並みの内容な上一つの授業が長いので非常に難しい。【実践編 手頃な値段で教授やプロのコースを字幕/サンプル付で受講可能 pythonだけで1700コース以上】 - Udemy
サムネ 題名 料金 Udemy ・コース買切 常時クーポン有 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
ブロックチェーン、自然言語処理、時系列解析、画像認識、Numpy/Pandas/Matplotlib学習、セキュリティなど他多数
▼特色
あらゆる講義が揃っている。実質最強な動画講座サイト。
日本人講師による動画も大量にあるので、英語に困る事がない。
また、元値は高いが大体97%オフとかでクーポンが発生している。実質10時間以上の高品質な講座を1200円とかで購入可能。テキスト学習サイト10選
上位10選一覧
初心者向 <--- ---> 専門性高 【入門編 Python公式サイト】 - Python Japan
サムネ 題名 料金 Python Japan ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
特になし
▼特色
その他:Python公式サイトなので、活発なコミュニティがある。
https://www.python.jp/pages/community.html【入門編 老舗Python入門サイト】 - Python-izm
サムネ 題名 料金 Python-izm ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
エクセル/PDF/画像操作、データ解析、GUI
▼特色
Python入門者なら一度は見たことがあるであろう老舗勉強サイト。
応用編に、エクセル操作やデータ解析やGUIなど大量のサンプルがあるのがオススメ【入門編 シンプルに基礎関数を全て網羅】 - Python入門
サムネ 題名 料金 Python入門 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
特になし
▼特色
最終更新が2014年と古いので注意
他サイトと比較してこのサイトを使うメリットは特に無い【入門編 コンソール画面付きで丁寧に解説】 - Let's プログラミング Python入門
サムネ 題名 料金 Let's プログラミング Python入門 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
特になし
▼特色
コンソール画面付きでわかりやすい【実践編 基礎から、データベース、メール、ウェブなど幅広く応用を網羅】 - Python学習講座
サムネ 題名 料金 Python学習講座 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
画像処理、データ分析、メール処理、NoSQL操作、サーバー立ち上げ
▼特色
応用編に、機械学習の基礎となるデータ分析の講座があるので役に立つ【実践編 自分にあったPythonの分野、ツールを見つけて勉強できるロードマップ付】 - 侍エンジニア
サムネ 題名 料金 侍エンジニア ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
特になし
▼特色
最終的にはこのサイトでしっかり説明するのではなくて、他の参考サイトに飛ばすのだが
自分の勉強したい内容を見つけるにはオススメ。
月額168,000のスクール有【実践編 Pythonでゲーム制作】 - Pythonでゲーム制作入門
サムネ 題名 料金 Pythonでゲーム制作入門 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
2Dゲーム開発、3Dゲーム開発
▼特色
無料にも関わらず、Pythonを用いたゲーム開発についてかなり突っ込んだ内容まで勉強できる。
パソコンとスマホ両方で動くゲームを開発できる。【実践編 PythonでWebフレームワーク開発】 - Django Girls
サムネ 題名 料金 Django Girls ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
特になし
▼特色
Djangoに特化したサイト
Djangoは2018年まで日本語情報が圧倒的に少なかったので、皆このサイトを見ていた。
たまに情報が古い部分があるので注意。【実践編 Pythonのありとあらゆる名サイトやサンプルなどを集めた世界的学習ページ】 - Awesome Python
サムネ 題名 料金 Awesome Python ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
ほぼ全分野の良資料/サンプルが有。ほぼ全て英語の為注意。
▼特色
良資料/サンプルのリンク集。
awesomeシリーズはpython言語以外にも多くのリンク集があるが、その中でもpythonはかなりコンテンツの質が高い。【実践編 Githubで最も人気のあるWeb学習サイトのPython版】 - Free Code Camp Python
サムネ 題名 料金 Free Code Camp Python ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
特になし
▼特色
FreeCodeCampは世界で一番人気のあるGithubリポジトリでもある。
ウェブ特化なので、他のライブラリの勉強もできる(Reactなど)。その他、ネット上の超お得無料資料
【データサイエンティストなら】オライリー社の「Python Data Science Handbook」英語版が完全無料公開
サムネ リンク https://jakevdp.github.io/PythonDataScienceHandbook/ 【機械学習の必要な数学知識から、実践的な学習まで無料公開中】メディカルAI専門コース オンライン講義資料
サムネ リンク https://japan-medical-ai.github.io/medical-ai-course-materials/ 【勉強会を探しているなら】日本中の勉強会を集約しているTechPlayで無料勉強会に参加
サムネ リンク https://techplay.jp/tag/python 【日本の機械学習の権威が、学生用資料を無料公開中】東京大学松尾研究室
サムネ リンク https://weblab.t.u-tokyo.ac.jp/gci_contents/ 【2018年末、突如無料公開されたAmazonの社内学習用機械学習コース ほぼ英語】AWS トレーニング
サムネ リンク https://aws.amazon.com/jp/training/course-descriptions/machine-learning/ 【ゲームをしながら学べる!英語版のみ】CheckiO
サムネ リンク https://checkio.org/ 【ゲームをしながら学べる!日本語版も有り!】CodeMonkey
サムネ リンク https://www.playcodemonkey.com/hour-of-code/trivia-chatbot/course#1 Youtubeチャンネル
サムネ チャンネル名 伊沢剛 Able Programming PyConJP Programming with Mosh freeCodeCamp.org その他情報収集にオススメ
githubのトレンド
https://github.com/trending/pythonqiitaのトレンド
https://qiita.com/tags/pythonフリーランス案件情報
https://www.okworks.me/jobs?skill_ids%5B%5D=4みんなのPython勉強会発表資料(スライドでまとめられてる)
http://www.tsjshg.info/slides.htmlまとめ
淡々と勉強サイトや参考本をまとめてみました。(qiitaのpython系アカウントは多すぎてまとめられませんでした)
ピンと来る情報はありましたか?(`o´)「そもそも勉強法がわかんないよ!」
という方向けに、
私が「未経験/学歴無」からPythonエンジニアになれた勉強法に関する記事を、
近い内に作成したいと思います(知りたい項目などがあればコメントで教えてください)。その他、ご質問があるという方は、
ここのコメントか、私のTwitter / Facebookでメッセージを頂ければ返答/追記していきますのでお気軽にご連絡ください。
- 投稿日:2019-03-23T17:01:53+09:00
 
【最新2019年版】Pythonの参考本や勉強サイトを49個、学べる分野と金額と特色で徹底比較してみた
今回は『Pythonの参考書とか勉強サイトとか、多すぎてよくわからない!』という方の為に
- 参考本
 - 動画学習サイト
 - テキスト学習サイト
 - その他、無料で転がっている有益な資料
 を、各10個ずつ、海外サイトやYoutubeも含めて徹底網羅しました!
参考書以外はほぼ世に出てる情報を網羅できていると思います。
Pythonに興味ある人は是非御覧ください!参考本10選
上位10選一覧
初心者向 <--- ---> 専門性高 【プログラムすらよくわからない本気の初心者レベルなら】 - 12歳からはじめる ゼロからのPythonゲームプログラミング教室
サムネ 題名 料金 12歳からはじめる ゼロからのPythonゲームプログラミング教室 2255円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
ゲーム開発
▼特色
「難しい知識はそこそこに、とりあえずゲームを作って楽しもう」というコンセプトだが
他の入門書に比べても、図解と根幹のアルゴリズムの解説が際立ってしっかりしてわかりやすい。
今流行のVSCodeの使い方も学べるのが良い。【色々練習はしたレベルの入門者レベルなら】 - 独学プログラマー Python言語の基本から仕事のやり方まで
サムネ 題名 料金 独学プログラマー Python言語の基本から仕事のやり方まで 2376円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
パッケージ管理、仕事の見つけ方/実践方法
▼特色
他のPython入門書にはない、「仕事の見つけ方、はじめ方」を付録している。
プログラマーとして未経験の人間なら必ず気をつけないといけない、いくつかの項目が書いてあるのが良い。【基本から発展まで 中級者レベルなら】 - 退屈なことはPythonにやらせよう
サムネ 題名 料金 退屈なことはPythonにやらせよう 3996円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
エクセル/ワード/CSV操作、ファイルから電話番号のみ抜き取る正規表現、ファイル操作、PDF操作、メール操作、画像操作、マウス操作
▼特色
Python使いなら一度は見たことあるであろう、圧倒的なボリュームを持つ名著。
基礎知識の辞書としても使えるし、簡単なファイル操作のアルゴリズムを学んで実践の訓練もできる。【実践編 Pythonの強力なデータ解析入門なら】 - PythonユーザのためのJupyter[実践]入門
サムネ 題名 料金 PythonユーザのためのJupyter[実践]入門 3564円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
Jupyter Notebookによるデータ分析、pandasによるデータ処理、Matplotlibによるグラフ描画、Bokehによるグラフ操作
▼特色
Jupyter Notebookとは、実行結果を確認しながら開発ができるツールです。
グラフを描画したり、機械学習用の計算ができたりと多機能で、ブラウザ上で開発できるので見た目もわかりやすいです。
その利便性から多くのPython開発者に用いられており、特にPythonの強みである計算/分析系では必須となります。【実践編 これ一冊でスクレイピングと機械学習を動かせる】 - Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう
サムネ 題名 料金 Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう 3456円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
自然言語処理、画像認識
▼特色
スクレイピング、機械学習の基礎入門は勿論、
スクレイピングしたデータを機械学習で、ジャンル分けや画像認識を行う方法などが記載されている。
同著者による『すぐに使える! 業務で実践できる! Pythonによる AI・機械学習・深層学習アプリのつくり方』も非常に有用。【実践編 PythonでモダンなWEBフレームワークをマスターするなら】 - 現場で使える Django の教科書《基礎編》
サムネ 題名 料金 現場で使える Django の教科書《基礎編》 1728円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
webサーバーの立ち上げ、PyCharmの使い方
▼特色
Ruby on Rails, Laravelと並び三大ウェブフレームワークと呼ばれているDjangoを学習できます。
Djangoは豊富なPythonライブラリを使用できる強みがあり、カスタマイズ性の高いウェブを作成する事ができます。【実践編 一つのコードでiOS/Android/Mac/Windowsアプリを作れる】 - Kivyプログラミング ―Pythonで作るマルチタッチアプリ
サムネ 題名 料金 Kivyプログラミング ―Pythonで作るマルチタッチアプリ 3456円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
一つのコードで、スマホとパソコン両方で動くアプリ作成フレームワークkivy
▼特色
スマホとパソコン両方で動けるアプリを、クロスプラットフォームアプリいいます。
特に最も人気がありデザインが洗練されているKivyというクロスプラットフォームフレームワークを紹介しています。
実際にスマホにビルドする方法の詳細はこちらの記事の方が詳しい。
[iOS]https://myenigma.hatenablog.com/entry/2016/05/07/160606
[Android]https://qiita.com/dario_okazaki/items/4f6373051afb70b794d9【実践編 Pythonで株トレード/金融アルゴリズムを勉強するなら】 - アルゴリズムトレードの道具箱 ──VBA、Python、トレードステーション、アミブローカーを使いこなすために
サムネ 題名 料金 アルゴリズムトレードの道具箱 ──VBA、Python、トレードステーション、アミブローカーを使いこなすために 10584円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
トレーディングアルゴリズムの実現
▼特色
Pythonを用いた金融アルゴリズムの自動化の方法を紹介している。
アルゴリズムの原理から解説しているのと、サンプルが多めなので、Pythonと金融どちらも初心者の方でも読める。【実践編 Pythonでラズパイを動かしたいなら】 - やさしくはじめるラズベリー・パイ 電子工作でガジェット&簡易ロボットを作ってみよう
サムネ 題名 料金 やさしくはじめるラズベリー・パイ 電子工作でガジェット&簡易ロボットを作ってみよう 2678円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
ラズパイ入門、ラズパイ開発 LED点滅/webカメラ作成/音声認識センサー/温度感知センサー/ラジコンカー
▼特色
ミニパソコンであるラズベリーパイを、簡単な操作からラジコン操作にするまで色々楽しめる。
ロボットが好きだったりする人にオススメ。【実践編 機械学習の名著 AIを専門的に勉強するなら】 - ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
サムネ 題名 料金 ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装 3678円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
機械学習実装、ディープラーニング実装
▼特色
ベストセラーにもなった名著。機械学習を始めるならまずこの本で概要を学ぶべし。
数学について知識がない人にもわかるように記載されている。動画学習サイト10選
上位10選一覧
初心者向 <--- ---> 専門性高 【入門編 直感的に分かる、書ける プログラミング自体が初心者なら】 - Progate
サムネ 題名 料金 Progate ・基本無料 
・[応用/実践]月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:twitterでprogate学習者の集いが活発。仲間が多いと向上心が高まりやすい。
▼その他学習項目
特になし
▼特色
Pythonに関しては基本的な内容で、料理注文システムを完成させるまでしかない。
だがProgateは学習者がたくさんおり、Twitterで#progateで探せばたくさん仲間を見つけられる。
プログラム自体初めてで、モチベーションを保ちたい人にはオススメの選択だろう。【入門から機械学習までほとんどの講座が永久無料 動画は少なめ とにかく色々学びたいなら】 - AI Academy
サムネ 題名 料金 AI Academy ・基本無料 
・[応用/実践]月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
深層学習、時系列解析、自然言語処理、画像認識、クラウドの使用方法
▼特色
無料で学べる範囲がかなり大きい。
最初に5つ質問され、解答に合わせて自分用のコースがカスタマイズされるので、コースの選択で悩む必要が全く無い。【入門編 Pythonに関してはほんの触りだけ 他の言語も学びたいなら】 - ドットインストール
サムネ 題名 料金 ドットインストール ・基本無料 
・[応用/実践][ソースコード閲覧]月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
特になし
▼特色
無料会員にはコピー可能なソースコードは貰えないので注意。
正直Python目当てではあまりオススメしないが、網羅の為一覧。
他の言語とかが大量にあるので、全部含めて初めて価値がでる。【入門編 Pythonに関してはほんの触りだけ 資格求人などの情報も学びたいなら】 - Paizaラーニング
サムネ 題名 料金 Paizaラーニング ・基本無料 
・[応用/実践]
- 単月契約月額980円
- 6ヶ月契約月額680円
- 1年契約月額600円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
特になし
▼特色
まんべんなく勉強は可能だが、ざっくりと軽くしか触れない。
paizaはこういう学習系より、コードガールこれくしょんで勉強するのが最高でしょう。
可愛すぎて1日眺められます。【入門編 Pythonに関してはほんの触りだけ 副業などの情報も学びたいなら】 - Schoo
サムネ 題名 料金 Schoo ・初月のみお試し無料 
・基本月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
特になし
▼特色
SchooのPython講座は大量にある講義動画のうちの一つに過ぎず、ガッツリ勉強したい人向けではない。【実践編 スクレイピングや機械学習やDjangoなど幅広く実践を学びたいなら】 - PyQ
サムネ 題名 料金 PyQ ・ライトプラン月額2980円 
・スタンダートプラン月額7980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
表操作、データ操作 1000問以上の実践的な課題を収録
▼特色
Python専門のサイトで、かなりの量のサンプルと課題を用意している。
料金は高めだが、集中してガッツリ勉強したい人にはオススメ。【実践編 機械学習の言語処理、IoT実装、未来予測など本格的に学びたいなら】 - Aidemy
サムネ 題名 料金 Aidemy ・Freeプラン チケットx0 
・Petitプラン 月額1880円 チケットx1
・Smallプラン チケットx2
・Mediumプラン チケットx3
・Largeプラン チケットx4
※チケットが1講座を無料で見れる
チケットが無い場合、最低980円からの購入
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
自然言語処理、IoT実装、時系列解析、画像認識、Numpy/Pandas/Matplotlib学習、ブロックチェーン
▼特色
プロや企業向けに、機械学習に特化した講義を公開している。
特に数値未来予測やIoT実装はかなり実務よりの内容となっている。【実践編 基礎から機械学習をメンターにみっちり付いてもらい学びたいなら】 - Tech Academy
サムネ 題名 料金 Tech Academy ・4週間プラン 139,000円 
・8週間プランプラン 189,000円
・12週間プランプラン 239,000円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
特になし
▼特色
メンターがつきっきりでオンライン講座してくれる。
入門者向けで160時間を目安に終わる講義となっている為、突っ込んだ内容までは行わないが十分実務に入れるまでの訓練にはなる。
そういう就職支援も含めた総合サポートが特色のスクールという感じ。【実践編 英語が出来るなら学位も取れるGoogleお墨付きの世界最強サイト でも高額】 - Udacity
サムネ 題名 料金 Udacity ・コース買切 無料もあり 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
ブロックチェーン
▼特色
学位が取れるという点が最大の強み。
講義は勿論、有名大学の教授などが行っている。
ただし全て英語で、かなりプロ並みの内容な上一つの授業が長いので非常に難しい。【実践編 手頃な値段で教授やプロのコースを字幕/サンプル付で受講可能 pythonだけで1700コース以上】 - Udemy
サムネ 題名 料金 Udemy ・コース買切 常時クーポン有 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
ブロックチェーン、自然言語処理、時系列解析、画像認識、Numpy/Pandas/Matplotlib学習、セキュリティなど他多数
▼特色
あらゆる講義が揃っている。実質最強な動画講座サイト。
日本人講師による動画も大量にあるので、英語に困る事がない。
また、元値は高いが大体97%オフとかでクーポンが発生している。実質10時間以上の高品質な講座を1200円とかで購入可能。テキスト学習サイト10選
上位10選一覧
初心者向 <--- ---> 専門性高 【入門編 Python公式サイト】 - Python Japan
サムネ 題名 料金 Python Japan ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
特になし
▼特色
その他:Python公式サイトなので、活発なコミュニティがある。
https://www.python.jp/pages/community.html【入門編 老舗Python入門サイト】 - Python-izm
サムネ 題名 料金 Python-izm ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
エクセル/PDF/画像操作、データ解析、GUI
▼特色
Python入門者なら一度は見たことがあるであろう老舗勉強サイト。
応用編に、エクセル操作やデータ解析やGUIなど大量のサンプルがあるのがオススメ【入門編 シンプルに基礎関数を全て網羅】 - Python入門
サムネ 題名 料金 Python入門 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
特になし
▼特色
最終更新が2014年と古いので注意
他サイトと比較してこのサイトを使うメリットは特に無い【入門編 コンソール画面付きで丁寧に解説】 - Let's プログラミング Python入門
サムネ 題名 料金 Let's プログラミング Python入門 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
特になし
▼特色
コンソール画面付きでわかりやすい【実践編 基礎から、データベース、メール、ウェブなど幅広く応用を網羅】 - Python学習講座
サムネ 題名 料金 Python学習講座 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
画像処理、データ分析、メール処理、NoSQL操作、サーバー立ち上げ
▼特色
応用編に、機械学習の基礎となるデータ分析の講座があるので役に立つ【実践編 自分にあったPythonの分野、ツールを見つけて勉強できるロードマップ付】 - 侍エンジニア
サムネ 題名 料金 侍エンジニア ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
特になし
▼特色
最終的にはこのサイトでしっかり説明するのではなくて、他の参考サイトに飛ばすのだが
自分の勉強したい内容を見つけるにはオススメ。
月額168,000のスクール有【実践編 Pythonでゲーム制作】 - Pythonでゲーム制作入門
サムネ 題名 料金 Pythonでゲーム制作入門 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
2Dゲーム開発、3Dゲーム開発
▼特色
無料にも関わらず、Pythonを用いたゲーム開発についてかなり突っ込んだ内容まで勉強できる。
パソコンとスマホ両方で動くゲームを開発できる。【実践編 PythonでWebフレームワーク開発】 - Django Girls
サムネ 題名 料金 Django Girls ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
特になし
▼特色
Djangoに特化したサイト
Djangoは2018年まで日本語情報が圧倒的に少なかったので、皆このサイトを見ていた。
たまに情報が古い部分があるので注意。【実践編 Pythonのありとあらゆる名サイトやサンプルなどを集めた世界的学習ページ】 - Awesome Python
サムネ 題名 料金 Awesome Python ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
ほぼ全分野の良資料/サンプルが有。ほぼ全て英語の為注意。
▼特色
良資料/サンプルのリンク集。
awesomeシリーズはpython言語以外にも多くのリンク集があるが、その中でもpythonはかなりコンテンツの質が高い。【実践編 Githubで最も人気のあるWeb学習サイトのPython版】 - Free Code Camp Python
サムネ 題名 料金 Free Code Camp Python ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 ▼その他学習項目
特になし
▼特色
FreeCodeCampは世界で一番人気のあるGithubリポジトリでもある。
ウェブ特化なので、他のライブラリの勉強もできる(Reactなど)。その他、ネット上の超お得無料資料
【機械学習の必要な数学知識から、実践的な学習まで無料公開中】メディカルAI専門コース オンライン講義資料
サムネ リンク https://japan-medical-ai.github.io/medical-ai-course-materials/ ▼特色
機械学習のセミナー会社が公開している、数学の講義からディープラーニングの実装まで一気通貫で無料公開しているとんでもない資料。
これを元にセミナーにコンバージョンしているのだろうが、エンジニアからしたらヨダレ物の資料です。【データサイエンティストなら】オライリー社の「Python Data Science Handbook」英語版が完全無料公開
サムネ リンク https://jakevdp.github.io/PythonDataScienceHandbook/ ▼特色
データサイエンティストとして統計学や分析学を学びたい人なら必見。英語版を読む苦労と日本語版4000円の出費、どちらを取るか・・・【勉強会を探しているなら】日本中の勉強会を集約しているTechPlayで無料勉強会に参加
サムネ リンク https://techplay.jp/tag/python ▼特色
勉強会を探す時にconpassとか色々探すの面倒ですよね。
techplayはそういったサイト全てから情報を収集しているので一覧化できます。【日本の機械学習の権威が、学生用資料を無料公開中】東京大学松尾研究室
サムネ リンク https://weblab.t.u-tokyo.ac.jp/gci_contents/ ▼特色
日本の機械学習の父、松尾先生の学生向け講座が無料公開。
機械学習だけでなく、データサイエンティストなど色々な分野の講座が揃っている。【2018年末、突如無料公開されたAmazonの社内学習用機械学習コース ほぼ英語】AWS トレーニング
サムネ リンク https://aws.amazon.com/jp/training/course-descriptions/machine-learning/ ▼特色
昨年末ひっそりと無料公開されて、一部のメディアが「え、何それすごい・・・」みたいにひっそりと話題になっていたAWSトレーニングコースの機械学習版。
大量の動画を見ながら勉強できる。【ゲームをしながら学べる!英語版のみ】CheckiO
サムネ リンク https://checkio.org/ ▼特色
英語なので子供にはきついかもしれない
でも結構楽しいのでオススメ【ゲームをしながら学べる!日本語版も有り!】CodeMonkey
サムネ リンク https://www.playcodemonkey.com/hour-of-code/trivia-chatbot/course#1 ▼特色
子供でも楽しめるゲーム感覚で勉強できるサービスYoutubeチャンネル
サムネ チャンネル名 伊沢剛 Able Programming PyConJP Programming with Mosh freeCodeCamp.org ▼特色
youtubeで勉強したい人用。その他情報収集にオススメ
githubのトレンド
https://github.com/trending/pythonqiitaのトレンド
https://qiita.com/tags/pythonフリーランス案件情報
https://www.okworks.me/jobs?skill_ids%5B%5D=4みんなのPython勉強会発表資料(スライドでまとめられてる)
http://www.tsjshg.info/slides.htmlまとめ
淡々と勉強サイトや参考本をまとめてみました。(qiitaのpython系アカウントは多すぎてまとめられませんでした)
ピンと来る情報はありましたか?(`o´)「そもそも勉強法がわかんないよ!」
という方向けに、
私が「未経験/学歴無」からPythonエンジニアになれた勉強法に関する記事を、
近い内に作成したいと思います(知りたい項目などがあればコメントで教えてください)。その他、ご質問があるという方は、
ここのコメントか、私のTwitter / Facebookでメッセージを頂ければ返答/追記していきますのでお気軽にご連絡ください。
- 投稿日:2019-03-23T17:01:53+09:00
 
(※一旦非公開)Pythonの参考本や勉強サイトを49個、学べる分野と金額と特色で徹底比較してみた
Qiitaのpython系アカウントもまとめようと思ったので、一旦非公開します。
月曜朝に再投稿します!
- 投稿日:2019-03-23T17:01:53+09:00
 
【Python入門/実践】参考本や勉強サイトや無料資料など、上位10個ずつ淡々と徹底網羅してみた【最新2019年版】
今回は『Pythonの参考書とか勉強サイトとか多すぎてよくわからない!』という方の為に
- 参考本
 - 動画学習サイト
 - テキスト学習サイト
 - その他、無料で転がっている有益な資料
 を、各10個ずつ、海外サイトやYoutubeも含めて徹底網羅しました!
個人評は入れず、客観的な情報だけを徹底的に整理していきます。
Pythonに興味ある人は是非御覧ください!参考本10選
上位10選一覧
初心者向 <--- ---> 専門性高 【プログラムすらよくわからない本気の初心者レベルなら】 - 12歳からはじめる ゼロからのPythonゲームプログラミング教室
サムネ 題名 料金 12歳からはじめる ゼロからのPythonゲームプログラミング教室 2255円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:ゲーム開発
【色々練習はしたレベルの入門者レベルなら】 - 独学プログラマー Python言語の基本から仕事のやり方まで
サムネ 題名 料金 独学プログラマー Python言語の基本から仕事のやり方まで 2376円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:パッケージ管理、仕事の見つけ方/実践方法
【基本から発展まで 中級者レベルなら】 - 退屈なことはPythonにやらせよう
サムネ 題名 料金 退屈なことはPythonにやらせよう 3996円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:エクセル/ワード/CSV操作、ファイルから電話番号のみ抜き取る正規表現、ファイル操作、PDF操作、メール操作、画像操作、マウス操作
【実践編 Pythonの強力なデータ解析入門なら】 - PythonユーザのためのJupyter[実践]入門
サムネ 題名 料金 PythonユーザのためのJupyter[実践]入門 3564円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:Jupyter Notebookによるデータ分析、pandasによるデータ処理、Matplotlibによるグラフ描画、Bokehによるグラフ操作
【実践編 これ一冊でスクレイピングと機械学習を動かせる】 - Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう
サムネ 題名 料金 Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう 3456円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:自然言語処理、画像認識
同著者による『すぐに使える! 業務で実践できる! Pythonによる AI・機械学習・深層学習アプリのつくり方』も非常に有用。【実践編 PythonでモダンなWEBフレームワークをマスターするなら】 - 現場で使える Django の教科書《基礎編》
サムネ 題名 料金 現場で使える Django の教科書《基礎編》 1728円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:webサーバーの立ち上げ、PyCharmの使い方
【実践編 一つのコードでiOS/Android/Mac/Windowsアプリを作れる】 - Kivyプログラミング ―Pythonで作るマルチタッチアプリ
サムネ 題名 料金 Kivyプログラミング ―Pythonで作るマルチタッチアプリ 3456円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:一つのコードで、スマホとパソコン両方で動くアプリ作成フレームワークkivy
実際にスマホにビルドする方法の詳細はこちらの記事の方が詳しい。
[iOS]https://myenigma.hatenablog.com/entry/2016/05/07/160606
[Android]https://qiita.com/dario_okazaki/items/4f6373051afb70b794d9【実践編 Pythonで株トレード/金融アルゴリズムを勉強するなら】 - アルゴリズムトレードの道具箱 ──VBA、Python、トレードステーション、アミブローカーを使いこなすために
サムネ 題名 料金 アルゴリズムトレードの道具箱 ──VBA、Python、トレードステーション、アミブローカーを使いこなすために 10584円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:トレーディングアルゴリズムの実現
【実践編 Pythonでラズパイを動かしたいなら】 - やさしくはじめるラズベリー・パイ 電子工作でガジェット&簡易ロボットを作ってみよう
サムネ 題名 料金 やさしくはじめるラズベリー・パイ 電子工作でガジェット&簡易ロボットを作ってみよう 2678円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:ラズパイ入門、ラズパイ開発 LED点滅/webカメラ作成/音声認識センサー/温度感知センサー/ラジコンカー
【実践編 機械学習の名著 AIを専門的に勉強するなら】 - ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
サムネ 題名 料金 ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装 3678円 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:機械学習実装、ディープラーニング実装
動画学習サイト10選
上位10選一覧
初心者向 <--- ---> 専門性高 【入門編 直感的に分かる、書ける プログラミング自体が初心者なら】 - Progate
サムネ 題名 料金 Progate ・基本無料 
・[応用/実践]月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:twitterでprogate学習者の集いが活発。仲間が多いと向上心が高まりやすい。
【入門から機械学習までほとんどの講座が永久無料 動画は少なめ とにかく色々学びたいなら】 - AI Academy
サムネ 題名 料金 AI Academy ・基本無料 
・[応用/実践]月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:最初に5つ質問され、解答に合わせて自分用のコースがカスタマイズされる。
【入門編 Pythonに関してはほんの触りだけ 他の言語も学びたいなら】 - ドットインストール
サムネ 題名 料金 ドットインストール ・基本無料 
・[応用/実践][ソースコード閲覧]月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:無料会員にはコピー可能なソースコードは貰えないので注意。
【入門編 Pythonに関してはほんの触りだけ 資格求人などの情報も学びたいなら】 - Paizaラーニング
サムネ 題名 料金 Paizaラーニング ・基本無料 
・[応用/実践]
- 単月契約月額980円
- 6ヶ月契約月額680円
- 1年契約月額600円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:資格試験用のカリキュラムや、求人情報が充実している。
【入門編 Pythonに関してはほんの触りだけ 副業などの情報も学びたいなら】 - Schoo
サムネ 題名 料金 Schoo ・初月のみお試し無料 
・基本月額980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:講師による不定期生放送は無料視聴可能。
【実践編 スクレイピングや機械学習やDjangoなど幅広く実践を学びたいなら】 - PyQ
サムネ 題名 料金 PyQ ・ライトプラン月額2980円 
・スタンダートプラン月額7980円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:表操作、データ操作 1000問以上の実践的な課題を収録
【実践編 機械学習の言語処理、IoT実装、未来予測など本格的に学びたいなら】 - Aidemy
サムネ 題名 料金 Aidemy ・Freeプラン チケットx0 
・Petitプラン 月額1880円 チケットx1
・Smallプラン チケットx2
・Mediumプラン チケットx3
・Largeプラン チケットx4
※チケットが1講座を無料で見れる
チケットが無い場合、最低980円からの購入
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:自然言語処理、IoT実装、時系列解析、画像認識、Numpy/Pandas/Matplotlib学習、ブロックチェーン
【実践編 基礎から機械学習をメンターにみっちり付いてもらい学びたいなら】 - Tech Academy
サムネ 題名 料金 Tech Academy ・4週間プラン 139,000円 
・8週間プランプラン 189,000円
・12週間プランプラン 239,000円
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:メンターがつきっきりでオンライン講座してくれる
【実践編 英語が出来るなら学位も取れるGoogleお墨付きの世界最強サイト でも高額】 - Udacity
サムネ 題名 料金 Udacity ・コース買切 無料もあり 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:ブロックチェーン
【実践編 手頃な値段で教授やプロのコースを字幕/サンプル付で受講可能 pythonだけで1700コース以上】 - Udemy
サムネ 題名 料金 Udemy ・コース買切 常時クーポン有 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:ブロックチェーン、自然言語処理、時系列解析、画像認識、Numpy/Pandas/Matplotlib学習、セキュリティなど他多数
また、元値は高いが大体97%オフとかでクーポンが発生している。実質10時間以上の高品質な講座を1200円とかで購入可能。テキスト学習サイト10選
上位10選一覧
初心者向 <--- ---> 専門性高 【入門編 Python公式サイト】 - Python Japan
サムネ 題名 料金 Python Japan ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:Python公式サイトなので、活発なコミュニティがある。
https://www.python.jp/pages/community.html【入門編 老舗Python入門サイト】 - Python-izm
サムネ 題名 料金 Python-izm ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:エクセル/PDF/画像操作、データ解析、GUI
【入門編 シンプルに基礎関数を全て網羅】 - Python入門
サムネ 題名 料金 Python入門 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:最終更新が2014年と古いので注意
【入門編 コンソール画面付きで丁寧に解説】 - Let's プログラミング Python入門
サムネ 題名 料金 Let's プログラミング Python入門 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:コンソール画面付きでわかりやすい
【実践編 基礎から、データベース、メール、ウェブなど幅広く応用を網羅】 - Python学習講座
サムネ 題名 料金 Python学習講座 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:画像処理、データ分析、メール処理、NoSQL操作、サーバー立ち上げ
【実践編 自分にあったPythonの分野、ツールを見つけて勉強できるロードマップ付】 - 侍エンジニア
サムネ 題名 料金 侍エンジニア ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:月額168,000のスクール有
【実践編 Pythonでゲーム制作】 - Pythonでゲーム制作入門
サムネ 題名 料金 Pythonでゲーム制作入門 ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:2Dゲーム開発、3Dゲーム開発
【実践編 PythonでWebフレームワーク開発】 - Django Girls
サムネ 題名 料金 Django Girls ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:Djangoに特価
【実践編 Pythonのありとあらゆる名サイトやサンプルなどを集めた世界的学習ページ】 - Awesome Python
サムネ 題名 料金 Awesome Python ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:ほぼ全分野の良資料/サンプルが有。ほぼ全て英語の為注意。
【実践編 Githubで最も人気のあるWeb学習サイトのPython版】 - Free Code Camp Python
サムネ 題名 料金 Free Code Camp Python ・無料 
- 基礎/文法
 - スクレイピング
 - 機械学習
 - Webアプリケーション
 - その他
 その他:ウェブ特化なので、他のライブラリの勉強もできる(Reactなど)。
その他、ネット上の超お得無料資料
【データサイエンティストなら】オライリー社の「Python Data Science Handbook」英語版が完全無料公開
サムネ リンク https://jakevdp.github.io/PythonDataScienceHandbook/ 【機械学習の必要な数学知識から、実践的な学習まで無料公開中】メディカルAI専門コース オンライン講義資料
サムネ リンク https://japan-medical-ai.github.io/medical-ai-course-materials/ 【勉強会を探しているなら】日本中の勉強会を集約しているTechPlayで無料勉強会に参加
サムネ リンク https://techplay.jp/tag/python 【日本の機械学習の権威が、学生用資料を無料公開中】東京大学松尾研究室
サムネ リンク https://weblab.t.u-tokyo.ac.jp/gci_contents/ 【2018年末、突如無料公開されたAmazonの社内学習用機械学習コース ほぼ英語】AWS トレーニング
サムネ リンク https://aws.amazon.com/jp/training/course-descriptions/machine-learning/ 【ゲームをしながら学べる!英語版のみ】CheckiO
サムネ リンク https://checkio.org/ 【ゲームをしながら学べる!日本語版も有り!】CodeMonkey
サムネ リンク https://www.playcodemonkey.com/hour-of-code/trivia-chatbot/course#1 Youtubeチャンネル
サムネ チャンネル名 伊沢剛 Able Programming PyConJP Programming with Mosh freeCodeCamp.org その他情報収集にオススメ
githubのトレンド
https://github.com/trending/pythonqiitaのトレンド
https://qiita.com/tags/pythonフリーランス案件情報
https://www.okworks.me/jobs?skill_ids%5B%5D=4みんなのPython勉強会発表資料(スライドでまとめられてる)
http://www.tsjshg.info/slides.htmlまとめ
淡々と勉強サイトや参考本をまとめてみました。(qiitaのpython系アカウントは多すぎてまとめられませんでした)
ピンと来る情報はありましたか?(`o´)「そもそも勉強法がわかんないよ!」
という方向けに、
私が「未経験/学歴無」からPythonエンジニアになれた勉強法に関する記事を、
近い内に作成したいと思います(知りたい項目などがあればコメントで教えてください)。その他、ご質問があるという方は、
ここのコメントか、私のTwitter / Facebookでメッセージを頂ければ返答/追記していきますのでお気軽にご連絡ください。
- 投稿日:2019-03-23T16:52:12+09:00
 
Pythonの状態遷移パッケージ(transitions)を理解する【状態編2】
Pythonで状態遷移を実装したり動作確認をしたい方に、Pythonの状態遷移パッケージ「transitions」の使い方を説明していきたいと思います。
transitionsはPythonで状態遷移を実現するためのパッケージで、状態遷移そのものは組込みとか制御などでよく使われるものですが、それをPythonで実現したい場合にこのパッケージが有用かと思います。
その他、transitionsの概要やインストール方法、当記事で作成している状態遷移図といったグラフ表示機能の導入(GraphMachine)や設定については準備編の記事を参照頂けたらと思います。今回の話
「状態編1」ではtransitionsの「状態」に関するクラスやメソッドを紹介しました。
今回はtransitionsの拡張機能(transiitions.extensions)を使って、状態に関するより複雑な機能を実現する方法を紹介します。主に以下の内容になりますが、基本的に全て状態に設定される内容になります。
- 各状態へのタグ付与 (タグ機能/Tagsクラス)
 - 不許可の終端状態における例外 (終端状態例外/Errorクラス)
 状態に関する応用的な機能になるので、初めての方はまずtransitionsの基本的な使い方であるチュートリアルや準備編、遷移編1をご参照頂けたらと思います。
各状態へのタグ付与 (タグ機能/Tagsクラス)
各状態(state)を定義する際、その状態名の他にタグを付けることができます。
タグを付けた状態は「is_タグ名」で確認することができます。
以下、タグを付けた状態に関するステートマシンの定義例になります。タグ機能をつけたステートマシンの定義例from transitions import Machine from transitions.extensions.states import add_state_features, Tags # タグを使う場合はadd_state_featuresをつけて引数にTagsを指定し新たにCustomMachineクラスを定義 @add_state_features(Tags) class CustomMachine(Machine): pass # 状態の定義(タグ機能付き) states = [{'name': 'A', 'tags': ['TagA', 'Init']}, # 状態AにTagAとInitというタグを付ける {'name': 'B', 'tags': 'TagB'}, # 状態BにTagBというタグを付ける {'name': 'C'}] class Model(object): pass model = Model() machine = CustomMachine(model=model, states=states, initial=states[0]['name'], auto_transitions=False, ordered_transitions=True,)これをGraphMachineで図示すると以下の通りになります。
Machineでインスタンス作成時に ordered_transitions=Trueを設定していますので順序遷移が有効になっている点に注意下さい。
このステートマシンに各状態でのタグ有無を確認してみます。タグ機能を付けたステートマシンのタグ確認(状態A)>>> model.state # まずは現在の状態を確認 'A' >>> machine.get_state(model.state).is_Init # Initタグの確認 True >>> machine.get_state(model.state).is_TagA # TagAタグの確認 True >>> machine.get_state(model.state).is_TagB # TagBタグの確認 False次に状態Bに遷移して各タグを確認したいと思います。
タグ機能を付けたステートマシンのタグ確認(状態B)>>> model.next_state() # 次の状態に遷移 True >>> model.state # 現在の状態を確認 'B' >>> machine.get_state(model.state).is_Init # Initタグの確認 False >>> machine.get_state(model.state).is_TagA # TagAタグの確認 False >>> machine.get_state(model.state).is_TagB # TagBタグの確認 True次に状態Cに遷移して各タグを確認したいと思います。
タグ機能を付けたステートマシンのタグ確認(状態C)>>> model.next_state() # 次の状態に遷移 True >>> model.state # 現在の状態を確認 'C' >>> machine.get_state(model.state).is_Init # Initタグの確認 False >>> machine.get_state(model.state).is_TagA # TagAタグの確認 False >>> machine.get_state(model.state).is_TagB # TagBタグの確認 Falseこれで大体分かったと思いますが、is_タグ名でタグの付けた状態にいることを判定できます。
タグのついていない状態の場合、is_タグ名でエラーにはならずFalseが返ります。なお、TagsクラスはStateクラスの派生クラスなので以下のように宣言することが可能で、辞書形式の宣言と混在させることが可能です。
states = [Tags(name='A', tags=['TagA', 'Init']), # Tagsクラスでタグを宣言 {'name':'B', 'tags':'TagB'}, # 辞書でタグを宣言 Tags(name='C')] # Tagsクラスでタグの無い状態を宣言タグの操作
繰り返しになりますがTagsクラスはStateクラスの派生クラスなので、Stateクラスと同様な操作や設定が可能です。(詳細は状態編1へ)
それに加え、ある状態が持つタグの確認やタグの追加/変更も可能です。タグの確認
状態に付与されたタグは各状態のtagsメンバ変数で確認可能です。
冒頭の「タグ機能をつけたステートマシンの定義例」について付与されたタグを確認してみます。状態Aが持つタグの確認>>> model.state 'A' >>> machine.get_state(model.state).tags #状態Aが持つタグの確認 ['TagA', 'Init']前述のとおり複数タグを付与することは可能ですが、その場合はリストでtagsに指定することになります。
一方でタグを一つしか持たない場合はstr型になる点にご注意ください。状態Bが持つタグの確認model.state 'B' machine.get_state(model.state).tags #状態Bが持つタグの確認 'TagB'もちろんリスト形式でタグを1つだけ付与することも可能です。後述するタグの追加を考えると状態宣言時、タグが1つだけの場合であってもリスト形式の方が安全かもしれません。
タグの追加/変更
tagsメンバ変数で各状態に現在付与されているタグを確認することができますが、このメンバ変数はゲッターではないのでそのまま追加することも可能です。
ただし元のタグがリスト形式で付与されているのか、str形式で付与されているのか注意が必要です。状態Aへのタグの追加>>> machine.get_state(model.state).tags.append('TagNew') #タグの追加 >>> machine.get_state(model.state).tags ['TagA', 'Init', 'TagNew']もちろん追加したタグはis_タグ名で確認できます。
状態Aに追加したタグの確認>>> machine.get_state(model.state).is_TagNew True一方で状態Bは状態宣言時にタグをstr型で付与しており、このままでは直接追加できません。
そこで、元のタグも含めリスト形式に変更して新たなタグを付与することでタグの追加を実現できます。状態Bへのタグ追加>>> machine.get_state(model.state).tags 'TagB' >>> machine.get_state(model.state).tags = (['TagB', 'TagNew']) #リスト形式に変更して追加 >>> machine.get_state(model.state).tags ['TagB', 'TagNew']前述の通り、状態Aと同様にappendで追加できるようにするならば、以下の通り状態定義時にTagBをリスト形式で宣言しておけ良いかと思います
{'name':'B', 'tags':['TagB']}タグの応用(複数の状態へのタグ付け)
タグは一つの状態にだけでなく、複数の状態に対して付けることができるので「この状態とこの状態にいる時は別の処理をする」という事が容易にできるようになります。
またModelクラス外部ではmodel.get_stateメソッドを使ってStateクラスを取得しなければなりませんでしたが、Modelクラス内部であればEventDataの機能を使うともう少し簡単にStateクラスを取得できます。(EventDataについてはコールバック編2をご参照ください)タグの応用定義例(複数の状態へのタグ付け)from transitions import Machine from transitions.extensions.states import add_state_features, Tags @add_state_features(Tags) class CustomMachine(Machine): pass tag_name = 'hoge' states = ['A', 'B', {'name': 'C', 'tags':tag_name }, {'name': 'D', 'tags':tag_name }] class Model(object): def action_finalize(self, event): print('state {}'.format(self.state)) # self.stateはstr型 if getattr(event.state, 'is_' + tag_name): # event.stateはTags(State継承クラス)型, タグの付いた状態のみ処理を実施 print('特別なhogehoge') model = Model() machine = CustomMachine(model=model, states=states, initial=states[0], auto_transitions=False, ordered_transitions=True, send_event=True, finalize_event='action_finalize')GraphMachineで生成されたステートマシンにタグを記すと以下の通りです。
実際に動作させてみて動きをみてみます。タグの応用動作例(複数の状態へのタグ付け)>>> model.state # 現在の状態を確認 'A' >>> model.next_state() # 次の状態に遷移 state B True >>> model.next_state() # 次の状態に遷移 state C 特別なhogehoge True >>> model.next_state() # 次の状態に遷移 state D 特別なhogehoge True >>> model.next_state() # 次の状態に遷移 state A Trueこのようにタグをつけた状態CとDのみで処理を分けることができました。
もちろんaction_event内で「if (self.state == 'C') and (self.state == 'D')」と記載しても同じ動作を実現可能ですが、タグを使った方が状態名を変えた時や新たに条件分岐に状態を加えたい時に保守性が多少あがります。
なお、タグを使わなくても以下の通りタグによる条件分岐の処理を別のコールバックにして、状態Cと状態Dに割り当てると上記と同じような動作をさせることができます。タグを使わずコールバックで応用例を実施from transitions import Machine tag_name = 'hoge' states = ['A', 'B', {'name': 'C', 'on_exit':'action_hoge'}, {'name': 'D', 'on_exit':'action_hoge'}] class Model(object): def action_before(self): print('state {}'.format(self.state)) def action_hoge(self): print('特別なhogehoge') model = Model() machine = Machine(model=model, states=states, initial=states[0], auto_transitions=False, ordered_transitions=True, before_state_change='action_before')ただしコールバック編1にもあるとおり、コールバックには優先順位や実施順位があり、複数のコールバックが登録されている場合では実施順序や実施タイミングが変わるので注意が必要です。
今回の例であればあまり問題ありませんが、例えばガード判定などを入れた場合はon_exitコールバックは実施されない可能性もあり、タグで実装したものをコールバックのみで実現するよう実装を変更した際は注意が必要です。
また、タグの効果としては「Modelクラス外部で(タグ付けした)特定の状態であることを確認できる」ことなので、その辺りも加味して使われると良いかもしれません。不許可の終端状態における例外 (終端状態例外/Errorクラス)
まず終端状態の定義について説明します。
例えば以下のようなステートマシンがあったとします。この場合A/B状態のときendトリガーイベントが起こると状態ENDにいきますが、このEND状態のように遷移するべきトリガーイベントの定義されていない状態を終端状態と呼ぶことにします。
当然のことながら、通常のステートマシンであればこの終端状態であるEND状態へは何のおとがめもなく遷移することが可能です。
終端状態(END)への遷移(Errorクラス未使用)>>> model.state 'A' >>> model.end() # 終端状態へ遷移(例外発生無し) True >>> model.state 'END'一方で状態遷移の実装において、特定の終端状態に遷移した際例外を発生させたい場合があります。ここで役立つのがこのErrorクラス(終端状態例外)になります。
終端状態例外の簡単な例
それではまずは簡単な終端状態に対する例外発生について試してみます。
以下のコードは冒頭の「終端状態ENDを持つステートマシン」をErrorクラスを用いて実現した例になります。Errorクラスを使った終端状態例外の定義例from transitions import Machine from transitions.extensions.states import add_state_features, Error # Errorを使う場合はadd_state_featuresをつけて引数にErrorを指定し新たにCustomMachineクラスを定義 @add_state_features(Error) class CustomMachine(Machine): pass # 状態の定義(終端状態例外機能付き) states = ['A', 'B', 'END'] # 遷移の定義 transitions = [ {'trigger':'next', 'source':'A', 'dest': 'B'}, {'trigger':'next', 'source':'B', 'dest': 'A'}, {'trigger':'end', 'source':['A', 'B'], 'dest': 'END'},] class Model(object): pass model = Model() machine = CustomMachine(model=model, transitions=transitions, states=states, initial=states[0], auto_transitions=False, ordered_transitions=False)こちらを冒頭の例同様に終端状態へ遷移してみたいと思います。
終端状態(END)への遷移(Errorクラス使用)>>> model.state 'A' >>> model.end() # 終端状態への遷移(例外が発生) Traceback (most recent call last): ~略~ transitions.core.MachineError: "Error state 'END' reached!" >>> model.state # 終端状態へは遷移している 'END'このようにErrorクラスを用いて状態を定義すると終端状態であるENDに遷移した際にMachineError例外が発生します。
例外理由についても"Error state 'END' reached!"とあり、Error状態(不許可の終端状態)のENDに到達したことを知らせています。なお、当然のことながら終端状態ではない状態Aや状態Bへは例外発生なく遷移できます。
終端状態ではない状態への遷移>>> model.state 'A' >>> model.next() # 次の状態(終端遷移ではない)に遷移 True >>> model.state 'B' >>> model.next() # 次の状態(終端遷移ではない)に遷移 True >>> model.state 'A'終端状態例外(Errorクラス)使用時の注意点
終端状態例外(Errorクラス)を使う上での注意点は以下になります。
- Machine定義時、全状態遷移無効時(auto_transitions=False)のみ有効
 - add_state_features宣言時にErrorとTagsと同時宣言しないこと
 使用時には上記には留意ください。
終端状態例外の除外とタグ
ここでは終端状態例外に実施できる設定を説明します。
まず終端状態例外の除外についてになります。冒頭の例では終端状態に到達した場合必ずMachineError例外が発生してしまいますので、複数の終端状態があった場合に全ての終端状態で例外が発生してしまいます。これでは使い勝手が悪いので終端状態によるMachineError例外を発生させたくない終端状態をacceptedキーを使って除外することができます。
またタグについてですが、ErrorクラスはTagsクラスの継承クラスであり、同時にタグを付けることができます。上記の終端状態例外の除外とタグを付与した例を以下に示します。
終端状態例外の除外とタグ定義例from transitions import Machine from transitions.extensions.states import add_state_features, Error @add_state_features(Error) class CustomMachine(Machine): pass # 状態の定義(終端状態例外、タグ機能付き) states = ['start', 'processing', # (遷移のある状態なので例外発生なし) 'error', # 終端状態例外あり {'name':'warn', 'accepted':True}, # 終端状態例外なし {'name':'exit', 'tags':['accepted', 'Compleat']}] # 終端状態例外なし+Compleatタグ # 遷移の定義 transitions = [ {'trigger':'run', 'source':'start', 'dest': 'processing'}, {'trigger':'cancel', 'source':'processing', 'dest': 'warn'}, {'trigger':'success', 'source':'processing', 'dest': 'exit'}, {'trigger':'trouble', 'source':'processing', 'dest': 'error'},] class Model(object): def action_finalize(self, event): if event.state.is_Compleat: print('Compleat!') model = Model() machine = CustomMachine(model=model, transitions=transitions, states=states, initial=states[0], auto_transitions=False, ordered_transitions=False, send_event=True, finalize_event='action_finalize')こちらをGraphMachineで画像出力し、各終端状態例外の設定状況、タグについて記載したものが以下になります。
はじめにproessing状態に遷移し各動作の確認をしていきたいと思います。>>> model.run() Trueまずは終端状態例外のあるerrorに遷移してみます。
終端状態例外の除外とタグ定義例(終端状態例外の確認)>>> model.state 'processing' >>> model.trouble() # error状態へ遷移するトリガーイベント Traceback (most recent call last): ~略~ transitions.core.MachineError: "Error state 'error' reached!" >>> model.state 'error'きちんと終端状態例外の発生を確認しました。
次に同様にprocessing状態から終端状態例外およびタグ設定のないwarn状態への遷移をしてみたいと思います。終端状態例外の除外とタグ定義例(終端状態例外の除外確認)>>> model.state 'processing' >>> model.cancel() # warn状態へ遷移するトリガーイベント True >>> model.state 'warn'このようにwarn状態ではacceptedキーにTrueを設定しているのでMachineError例外発生せずに終端状態へ遷移することができました。
次にCompleatタグの付与されたexit状態への遷移を確認します。終端状態例外の除外とタグ定義例(終端状態例外の除外+タグ確認)>>> model.state 'processing' >>> model.success() # exit状態へ遷移するトリガーイベント Compleat! True >>> model.state 'exit'exit状態の定義においては、tagsキーでacceptedを付与することで終端状態例外の除外を行っています。
加えてtagsキーにリストでCompleatタグを付与しており、Modelクラスのaction_finalizeメソッド内において、タグ確認(is_Compleat)がTrueになっていることも確認できました。
ちなみにErrorクラスにおいて、acceptedキーにTrueを指定した状態はtags内にacceptedタグが割り振られます。つまりErrorクラスにおいてacceptedタグが付いていると終端状態例外が除外されるという事になります。>>> machine.get_state('warn').tags ['accepted'] >>> machine.get_state('exit').tags ['accepted', 'Compleat']なおこの終端状態例外を実現するErrorクラスは以下のように定義することができ、辞書形式での定義とも混在させることが可能です。
Errorクラスを使った定義states = ['start', 'processing', # (遷移のある状態なので例外発生なし) Error(name='error'), # 終端状態例外あり Error(name='warn', accepted=True), # 終端状態例外なし Error(name='exit', tags=['accepted', 'Compleat'])] # 終端状態例外なし+Compleatタグ終端状態例外(Errorクラス)の補足
ここから先は補足的な話になるので、実装する際に参考にされると良いレベルの話を記載しておきます。
ここではステートマシンに特に言及がない場合、「終端状態例外の除外とタグ定義例」のコードを実行済みという前提で話を進めます。TagsクラスおよびStateクラスとの混在定義
前述の通り状態定義(states)において終端状態例外はErrorクラスによる宣言でも実現できる事を示しました。
一方で「終端状態例外の除外」をTagsやStateクラスで実現することができます。
※もちろんadd_state_features(Error)をCustomMachineに付与していることが前提です。TagsクラスおよびStateクラスによる状態定義例外の除外定義states = ['start', 'processing', # (遷移のある状態なので例外発生なし) Error(name='error'), # 終端状態例外あり Tags(name='warn') # 終端状態例外なし Tags(name='exit', tags=['Compleat'])] # 終端状態例外なし+Compleatタグこのように終端状態例外を実現したステートマシンに対しTagsクラスを使う事でaccepted=Trueにしたことと同様の効果が得られます。
また、もしもコード内でis_タグ名による確認を使わなければtransitions.Stateクラスで実現することも可能です。
ただ前述の通りErrorクラスにおいて終端状態例外を除外したものにはacceptedタブが付くのですが、Tabsクラスを混在させた場合問題が生じます。例えば以下のような状態を持つステートマシンがあったとします。(CustomMachineにはErrorクラスを付与したMahineカスタムクラスとします)
machine = CustomMachine(states=[Error('A'), Tags('B')], auto_transitions=False)このステートマシンのもつ状態クラスとタグを確認してみます。
>>> machine.get_state('A') <Error('A')@2316392704936> >>> machine.get_state('A').tags [] >>> machine.get_state('B') <Tags('B')@2316392705104> >>> machine.get_state('B').tags []これはつまり状態AはErrorクラスでtagsは空、状態BはTabクラスでtagsは空となります。
これの何が問題かというと、状態Aと状態Bが共に終端状態であった場合、それぞれ挙動が異なることを意味します。
つまり「状態AはErrorクラスなので、タグが空=acceptedタグがない=終端状態例外が発生。一方で状態Bはタグが空だがTabsクラスなので状態遷移例外は発生しない」ということを意味します。
従って、ErrorクラスとTabs/Stateクラスを混在させた場合、acceptedタグ有無だけでは終端状態例外の有効/無効を判定できないということを意味します。
このような状況も含め終端状態例外の有無を確認する方法について次で説明します。終端状態と終端状態例外の確認
終端状態例外の機能において、「その状態が終端状態例外が発生するか否か」というのを確認するのはメソッドが用意されておらず少々手間をかける必要があります。
まずは終端状態の判定をしてみましょう。
終端状態は特定状態で「別の状態への遷移が無い」ことを確認すれば良いので、「遷移」を持っているか否かで確認可能です。終端状態の確認コードfor state_name in machine.states: is_end = (not machine.get_triggers(state_name)) print('state: {:<10}\t 終端状態?: {}'.format(state_name, is_end))これを実行すると以下が得られます。
終端状態の確認結果state: start 終端状態?: False state: processing 終端状態?: False state: error 終端状態?: True state: warn 終端状態?: True state: exit 終端状態?: Trueこれを元に、次に終端状態例外が発生するかを判定してみます。
終端状態例外が発生する条件としては「Errorクラスであること」「遷移が無いこと」「acceptedタグが設定されていないこと」になります。終端状態例外の確認コードfor state_name in machine.states: state = machine.get_state(state_name) is_err = (isinstance(state, Error)) and \ (not machine.get_triggers(state_name)) and \ (not state.is_accepted) print('state: {:<10}\t 終端状態例外あり?: {}'.format(state_name, is_err))これを実行すると以下が得られます。
どうでしょう。状態定義の意図一致していることを確認できたかと思います。終端状態例外の確認結果state: start 終端状態例外あり?: False state: processing 終端状態例外あり?: False state: error 終端状態例外あり?: True state: warn 終端状態例外あり?: False state: exit 終端状態例外あり?: FalseこちらはもちろんTagsクラスやStateクラスが混在した状態定義(states)に対しても実施可能です。
なおコード中にis_errで状態がErrorクラスであることを確認していますが、これは状態定義(states)にStateクラスによる定義が混在していた場合is_acepted確認で例外が発生することを避けているためです。終端状態例外ハッセージのコールバックについて
状態編ではコールバックについて説明してませんが、transitionsパッケージには様々な種類のコールバックを複数設定することが可能です。(詳細はコールバック編1へ)
一方でこのコールバックですがトリガーイベント実施中に例外が発生すると中断される場合があるのでそれについて言及しておきます。コールバック編1によると、ガード判定も含め状態遷移前から状態遷移後に向かっていくつかのコールバックが発生します。
一方で、ある状態から終端状態例外の発生する状態に遷移した場合、実施されるコールバックは以下のとおりなります。
定義名 定義先 状態 状態遷移例外発生時も実施 prepare_event machine source YES prepare transitions source YES conditions transitions source YES unless transitions source YES before_state_change machine source YES before transitions source YES on_exit state source YES --- 状態変化 --- on_enter state dest NO after transitions dest NO after_state_change machine dest NO finalize_event machine source/dest YES このように終端状態例外の発生する状態へ遷移した際、状態変化後(dest状態)で実施される予定のコールバックはfinalize_event以外に実施されない点にご注意ください。
なおユーザの定義したon_enterコールバックは実施されないものの、終端状態例外そのものはon_enter内で発生します。確認コードは長いので以下にしまっておきます。
確認に使用したコードと実行例はここをクリックして下さい。
終端状態例外発生時のコールバック確認用ステートマシン定義import sys from transitions import Machine from transitions.extensions.states import add_state_features, Error @add_state_features(Error) class CustomMachine(Machine): pass states = [Error(name='A', on_exit='action_on_exit', on_enter='action_on_enter'), 'END'] #状態の定義 transitions = [ {'trigger':'event', 'source':'A', 'dest':'END', 'prepare' :'action_prepare', 'conditions' :'action_conditions', 'unless' :'action_unless', 'before' :'action_before', 'after' :'action_after'} ] class Model(object): # defined machine def action_prepare_event(self): print('do "{}" on state ({})'.format(sys._getframe().f_code.co_name, self.state)) # defined transitions def action_prepare(self): print('do "{}" on state ({})'.format(sys._getframe().f_code.co_name, self.state)) # defined transitions def action_conditions(self): print('do "{}" on state ({})'.format(sys._getframe().f_code.co_name, self.state)) return True # defined transitions def action_unless(self): print('do "{}" on state ({})'.format(sys._getframe().f_code.co_name, self.state)) return False # defined machine def action_before_state_change(self): print('do "{}" on state ({})'.format(sys._getframe().f_code.co_name, self.state)) # defined transitions def action_before(self): print('do "{}" on state ({})'.format(sys._getframe().f_code.co_name, self.state)) # defined states def action_on_exit(self): print('do "{}" on state ({})'.format(sys._getframe().f_code.co_name, self.state)) ### --- change state --- # defined states def action_on_enter(self): print('do "{}" on state ({})'.format(sys._getframe().f_code.co_name, self.state)) # defined transitions def action_after(self): print('do "{}" on state ({})'.format(sys._getframe().f_code.co_name, self.state)) # machine def action_after_state_change(self): print('do "{}" on state ({})'.format(sys._getframe().f_code.co_name, self.state)) # machine def action_finalize_event(self): print('do "{}" on state ({})'.format(sys._getframe().f_code.co_name, self.state)) model = Model() machine = CustomMachine(model=model, states=states, transitions=transitions, initial=states[0], auto_transitions=False, ordered_transitions=False) machine.prepare_event.append('action_prepare_event') machine.before_state_change.append('action_before_state_change') machine.after_state_change.append('action_after_state_change') machine.finalize_event.append('action_finalize_event')以下、上記定義の動作確認結果です。
終端状態例外発生時のコールバック確認用ステートマシン動作例>>> model.event() do "action_prepare_event" on state (A) do "action_prepare" on state (A) do "action_conditions" on state (A) do "action_unless" on state (A) do "action_before_state_change" on state (A) do "action_before" on state (A) do "action_on_exit" on state (A) do "action_finalize_event" on state (END) Traceback (most recent call last): ~略~ transitions.core.MachineError: "Error state 'END' reached!"まとめ
今回は状態(State)の派生クラスであるTagsクラスとErrorクラスを紹介しました。
Tagsクラスは1つまたは複数の状態にタグを付けられ、それぞれタグの付いた状態が確認できることを示しました。
Errorクラスでは終端状態においてMahineError例外を発生できることと、終端状態例外発生の除外について説明しました。
これらは状態の拡張機能でありカスタムステートと呼ばれるものですが、実はまだ2つほどカスタムステートがあります。今回は思ったよりも長くなってしまったので、次回に残りのカスタムステート(状態に関する拡張機能)について説明したいと思います。
ここまで読んでいただきありがとうございました。少しでもご参考になれば幸いです。
- 投稿日:2019-03-23T16:41:18+09:00
 
スクレイピングした結果が文字化けしてしまったときの解決策
スクレイピングには様々なやり方があると思います。
個人的にはurllibとBeautifulSoupを使うことが多いです。response = urllib.request.urlopen(url) parsed_html = BeautifulSoup(response, 'html.parser')こんな感じ。
ただ、これだけでは文字化けしてしまうことがあります。
文字化け対策を考えたものがコチラ。
response = urllib.request.urlopen(url) html = response.read().decode(response.headers.get_content_charset(), errors='ignore') parsed_html = BeautifulSoup(html, 'html.parser')
response.headers.get_content_charset()にてどの文字コードで書かれているのかを把握し、decode()で変換。参考元:python - How to handle response encoding from urllib.request.urlopen() - Stack Overflow
これだけやっても、文字によっては「デコードできませんが…」というエラーが発生することがあります。
そうしたエラーに対しこの例では、error='ignore'で無視することに。実際には以下のような処理になるとのこと。
'ignore'を指定すると「結果となる Unicode から単に文字を除く」ということができます。
参考元:Python3でUnicodeDecodeErrorに躓く - Qiita
- 投稿日:2019-03-23T15:59:13+09:00
 
FLASK 文法1 FLASKを呼び出す・ルーティン化
-FLASKの呼び出し
from Frask import Flask
app=Flask(__name__)-Flask ルーティン化
@app.route("/")
def hello_world():
____return "Hello World!"
- 投稿日:2019-03-23T14:50:41+09:00
 
Tensorflow 2.0を試してみる
はじめに
正式リリース前ですがTensorflow 2.0少しだけ試してみます。
ソースコードTensorflow 2.0で変わること
2.0で大きく変わることは
- Eager executionがdefaultになる
 - 重複したAPIを統一(
 tf.layersとtf.keras.layersなど)- Contribが一掃される
 で、一番の目玉は「Eager executionがdefaultになる」だと思います。
今回はEager executionとkeras実装での学習を比較してみます。
基本的な実装は公式のチュートリアルを参考にしています。Eager executionとは
Tensorflowはdefine and runという方式で動くライブラリでしたが
Eager executionでは、pytorchやchainerのようにdefine by runで実行されます。
計算グラフを定義しながら実行するdefine by runではモデルを柔軟に定義することができるためRNNなどの実装では好まれていますし、最近のpytorchの勢いからして今後の主流になっていきそうです。やること
- Tensorflow 2.0.0-alpha0 を使ってみる
 - Mnistのサンプルコードを動かす
 - Eager executionとkeras実装で学習を比較する
 実行環境
- tensorflow-datasets==1.0.1
 - tensorflow==2.0.0-alpha0
 モデルの定義
trainer.pyfrom tensorflow.keras.layers import Dense, Flatten, Conv2D from tensorflow.keras import Model class MyModel(Model): def __init__(self): super(MyModel, self).__init__() self.conv1 = Conv2D(32, 3, activation='relu') self.flatten = Flatten() self.d1 = Dense(128, activation='relu') self.d2 = Dense(10, activation='softmax') def call(self, x): x = self.conv1(x) x = self.flatten(x) x = self.d1(x) return self.d2(x)モデルは簡単なCNNです。kerasのModelクラスを継承してモデルを定義することができるようになったみたいです。(kerasの少し前のバージョンからできたみたいですが全然気づかなかった)
pytorchやchainerを使ったことがある人は馴染みのある書き方で、個人的にもわかりやすいと思うのでこの書き方に慣れた方がいいと思います。Trainer
EagerTrainer
trainer.pyclass EagerTrainer(object): def __init__(self): self.model = MyModel() self.loss_object = tf.keras.losses.SparseCategoricalCrossentropy() self.optimizer = tf.keras.optimizers.Adam() self.train_loss = tf.keras.metrics.Mean(name='train_loss') self.train_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name='train_accuracy') self.test_loss = tf.keras.metrics.Mean(name='test_loss') self.test_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name='test_accuracy') @tf.function def train_step(self, image, label): with tf.GradientTape() as tape: predictions = self.model(image) # 順伝播の計算 loss = self.loss_object(label, predictions) # lossの計算 gradients = tape.gradient(loss, self.model.trainable_variables) # 勾配の計算 self.optimizer.apply_gradients(zip(gradients, self.model.trainable_variables)) # パラメータの更新 self.train_loss(loss) self.train_accuracy(label, predictions) @tf.function def test_step(self, image, label): predictions = self.model(image) t_loss = self.loss_object(label, predictions) self.test_loss(t_loss) self.test_accuracy(label, predictions) def train(self, epochs, training_data, test_data): template = 'Epoch {}, Loss: {:.5f}, Accuracy: {:.5f}, Test Loss: {:.5f}, Test Accuracy: {:.5f}, elapsed_time {:.5f}' for epoch in range(epochs): start = time.time() for image, label in tqdm(training_data): self.train_step(image, label) elapsed_time = time.time() - start for test_image, test_label in test_data: self.test_step(test_image, test_label) print(template.format(epoch + 1, self.train_loss.result(), self.train_accuracy.result() * 100, self.test_loss.result(), self.test_accuracy.result() * 100, elapsed_time))
EagerTrainerはEager executionのtrainerです。
コードを見るとだいたいどんな操作をしているかわかると思います。KerasTrainer
trainer.pyclass KerasTrainer(object): def __init__(self): self.model = MyModel() self.model.compile(optimizer=tf.keras.optimizers.Adam(), loss=tf.keras.losses.SparseCategoricalCrossentropy(), metrics=['accuracy']) def train(self, epochs, training_data, test_data): self.model.fit(training_data, epochs=epochs, validation_data=test_data)
KerasTrainerはEagerTrainerと全く同じ学習をするように書いています。
シンプルなモデルだと圧倒的にコードの量が少なくできるのでkerasの偉大さがわかります。Training
main.pyimport argparse import tensorflow as tf import tensorflow_datasets as tfds from trainer import EagerTrainer, KerasTrainer def convert_types(image, label): image = tf.cast(image, tf.float32) image /= 255 return image, label def main(): parser = argparse.ArgumentParser(description='Train Example') parser.add_argument('--trainer', type=str, default='eager') args = parser.parse_args() dataset, info = tfds.load('mnist', with_info=True, as_supervised=True) mnist_train, mnist_test = dataset['train'], dataset['test'] mnist_train = mnist_train.map(convert_types).shuffle(10000).batch(32) mnist_test = mnist_test.map(convert_types).batch(32) if args.trainer.lower() == 'eager': trainer = EagerTrainer() else: trainer = KerasTrainer() trainer.train(epochs=5, training_data=mnist_train, test_data=mnist_test) if __name__ == '__main__': main()
--trainerのオプションでどちらのTrainerを使うか選べるようにしています。
実際に実行してみるとCPU上では若干Eager executionの方が速い結果になりました。
Tensorflow 1系ではEager executionだと激おそになるという噂がありましたが、改善されているかもしれません。(GPUでもっと実用的なモデルを動かしてみないとわかりませんが)実行結果(Eager execution)
$ python main.py 2019-03-23 14:27:42.698962: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA 0it [00:00, ?it/s]2019-03-23 14:27:43.063703: W ./tensorflow/core/framework/model.h:202] Encountered a stop event that was not preceded by a start event. 1875it [00:34, 54.75it/s] Epoch 1, Loss: 0.13644, Accuracy: 95.91666, Test Loss: 0.06534, Test Accuracy: 97.75000, elapsed_time 34.25085 0it [00:00, ?it/s]2019-03-23 14:28:19.570435: W ./tensorflow/core/framework/model.h:202] Encountered a stop event that was not preceded by a start event. 1875it [00:32, 56.85it/s] Epoch 2, Loss: 0.08982, Accuracy: 97.28416, Test Loss: 0.06335, Test Accuracy: 97.89000, elapsed_time 32.98253 0it [00:00, ?it/s]2019-03-23 14:28:54.483842: W ./tensorflow/core/framework/model.h:202] Encountered a stop event that was not preceded by a start event. 1875it [00:34, 75.77it/s] Epoch 3, Loss: 0.06759, Accuracy: 97.94389, Test Loss: 0.06064, Test Accuracy: 98.03667, elapsed_time 34.02746 0it [00:00, ?it/s]2019-03-23 14:29:30.609697: W ./tensorflow/core/framework/model.h:202] Encountered a stop event that was not preceded by a start event. 1875it [00:34, 54.66it/s] Epoch 4, Loss: 0.05404, Accuracy: 98.35125, Test Loss: 0.05985, Test Accuracy: 98.14000, elapsed_time 34.30574 0it [00:00, ?it/s]2019-03-23 14:30:06.853807: W ./tensorflow/core/framework/model.h:202] Encountered a stop event that was not preceded by a start event. 1875it [00:32, 70.69it/s] Epoch 5, Loss: 0.04531, Accuracy: 98.61067, Test Loss: 0.05936, Test Accuracy: 98.18999, elapsed_time 32.76600実行結果(keras)
$ python main.py --trainer keras 2019-03-23 14:35:22.782574: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA Epoch 1/5 2019-03-23 14:35:23.047235: W ./tensorflow/core/framework/model.h:202] Encountered a stop event that was not preceded by a start event. 1875/1875 [==============================] - 49s 26ms/step - loss: 0.1304 - accuracy: 0.9271 - val_loss: 0.0000e+00 - val_accuracy: 0.0000e+00 Epoch 2/5 2019-03-23 14:36:12.005254: W ./tensorflow/core/framework/model.h:202] Encountered a stop event that was not preceded by a start event. 1875/1875 [==============================] - 42s 23ms/step - loss: 0.0415 - accuracy: 0.9861 - val_loss: 0.0530 - val_accuracy: 0.9828 Epoch 3/5 2019-03-23 14:36:54.346357: W ./tensorflow/core/framework/model.h:202] Encountered a stop event that was not preceded by a start event. 1875/1875 [==============================] - 42s 22ms/step - loss: 0.0219 - accuracy: 0.9927 - val_loss: 0.0632 - val_accuracy: 0.9811 Epoch 4/5 2019-03-23 14:37:36.479987: W ./tensorflow/core/framework/model.h:202] Encountered a stop event that was not preceded by a start event. 1875/1875 [==============================] - 39s 21ms/step - loss: 0.0124 - accuracy: 0.9959 - val_loss: 0.0633 - val_accuracy: 0.9826 Epoch 5/5 2019-03-23 14:38:15.134248: W ./tensorflow/core/framework/model.h:202] Encountered a stop event that was not preceded by a start event. 1875/1875 [==============================] - 39s 21ms/step - loss: 0.0089 - accuracy: 0.9966 - val_loss: 0.0665 - val_accuracy: 0.9836
- 投稿日:2019-03-23T14:17:15+09:00
 
Windowsでpsychopy.visualを使えるようにする
はじめに
私は普段macユーザーなのですが、研究のための実験課題をwindowsで作らなければならない自体に遭遇しました。(よくあることですが。。)
その時psychopy.visualを使って刺激提示をおこなおうとしたところ、だいぶ苦労したので解決方法を載せておきます。
*半ば強引に解決したので良い解決方法を知っている方は教えてください。やりたいこと
psychopy.visualを使えるようにしたい。
開発環境
- windows10
 - python3.7(Anaconda)
 anacondaからpythonのインストール
macで作ったプログラムをwindowsに転送し、実行しようとしたところpythonすら入っていなかったのでanaconda経由でpythonをインストール。
こちらのリンクからダウンロードし、インストールをおこないます。この際、パスを通すチェック欄にチェックを入れておくと後々便利です。
(今回はスクショがないので詳細は省略)psychopyのインストール
このあとエラーを吐かれるとは知らず、なにも考えず通常通りpsychopyのインストール
$ pip install psychopy
Cannot uninstall 'imageio'. It is ~~~なんかimageioがインストールできなかったみたい。。。
imageioインストール
よくわからないがとりあえずpipコマンドを使ってimageioのみインストールしてみた
$ pip install imageio
Requirement already satisfied: imageio in c:¥users¥〇〇¥anaconda3¥liv¥site-packages(2.4.1)ちゃんといるみたい。。
imageio再インストール
そこでちょっとビビりながらもすでにインストールされているのを無視して再インストールしてみた
$ pip install --ignore-installed imageio念の為もう一度psychopyをインストールしてみる
$ pip install psychopyすでにインストール済みとの表記が出たので一件落着。
psychopy.visualをインポート
いよいよプログラム上で
from psychopy import visual
ImportError: Something is wrong with the numpy installation. While importing we detected an older version of numpy in 〇〇. One method of fixing this is to repeatedly uninstall numpy until none is found, then reinstall this version
またもやエラーが。。。
よく読んでみるとnumpyのバージョンが古いらしい。
いまインストールしたのに古いとは?って感じですが...
エラーを解決するためにnumpyをアンインストールして全部消して入れなおせとおっしゃっております。ビビり倒しながら全部アンインストールして入れなおすことにしました。
numpyのアンインストール
$ pip uninstall numpyヒヤヒヤしながら上記のコメントを実行し、まず一つnumpyをアンインストールしました。
再びプログラム上で
from psychopy import visualとすると今度は
ModuleNotFoundError: No module named 'numpy.fft'
なんでnumpy.fftがここで登場したのか定かではありませんが、
先ほど言われた通りもう一回numpyのアンインストールを実行しました。これで全てのnumpyをアンインストールしました。
numpyのインストール
そこでもう一度numpyをインストール。
$ pip install numpyその後3度目の正直で魂を込めて
from psychopy import visualやっとこさうまくいきました!!!
こうして無事。実験課題が作れたとさ。めでたしめでたし。
結論
windowsにanaconda経由でpythonを入れ、psychopy.visualを使うときに詰まった時の対処法は以下の通り。
1. imageioのインストール
2. numpy1.16のアンインストール
3. numpy1.15のアンインストール
4. numpy1.16の再インストールなんでこれがエラーになったのか。なんでこれで解決したのか正直よくわかりません。
もしわかる方いたら教えていただけると幸いです。なお、numpyのアンインストール等でおかしなことになっても私は一切責任を持てませんのでご了承ください。
- 投稿日:2019-03-23T13:34:48+09:00
 
X-meansとボロノイ図描写をPythonで試してみる
TL;DR
- k-meansは計算が軽く、stacking用の特徴量生成なんかでも使える。
 - でもクラスタ数を決めるのが悩ましい。グリッドサーチ的なこともいいけど、どうやらクラスタ数を勝手に決めてくれるX-meansというものがあるらしいので試してみる。
 - また、K-meansの可視化でちらほら見かけるボロノイ図のPythonでの描画の仕方について試してみる。
 まえおき
統計とか数学とか機械学習とかの専門家ではないので、勘違いやミスなどあるかもしれませんがご容赦ください
(勉強目的の記事です)
K-meansは計算が早く便利だけど・・
K-means自体はシンプルで計算が早く、またその値を別のシンプルなモデルでstackingさせることで、最終的なモデルをシンプルなものにして、ある程度の精度を維持しつつAPIなんかでの遂次での処理に役立てたりもできます。
教師無しでも扱えるという点も、使いやすいモデルとしては魅力的な点です。しかし一方で、最適なKの数を決めづらいという問題があります。
少なすぎても精度面で良くないですし、多すぎても困ってしまいます。
2次元や3次元であれば可視化して適切なKを選択できますが、さらに高次元になってくると難しくなってきます。また、システムを組んで自動で回したりを検討する際にも、なるべくは人の手を介さずに自動で扱いたいものです。
様々なハイパーパラメーター調整用の手法を用いて適切なKを算出することもできますが、そこに至るまでの計算コストを考えると、K-meansの軽さの魅力が薄れてしまいます。そこで、適切なKの数を高いパフォーマンスで決めてくれるX-meansというものがあるらしいので調べたりスクリプトを書いて試してみました。
X-meansの論文内容のメモ
- X-means: Extending K-means with Efficient Estimation of the Number of Clusters(論文PDFリンク)
 - クラスター数を自動決定するk-meansアルゴリズムの拡張について(PDF論文リンク)
 
- 論文自体は約20年くらい前のもの。
 - K-meansを何度も実行して最適化していくよりも大分早く対応ができる。
 - 少ない数のクラスター分割からはじめて、それらをさらに分割してみて、分割が妥当であれば分割、そうでなければそこで止めてKの数が決定される。
 
- 判定時にはBIC(Bayesian Information Criterion: ベイズ情報量基準)という情報量基準が使われる。
 - 後者の日本語の論文の方が少し後発で、前者の論文をさらに改善した内容になっている。
 - K-means単体の計算コストの2倍強程の計算コストで、X-meansの計算が行える。
 Pythonで動かしてみる
ネットで調べた感じ、自前で組んでいらっしゃる方と、ライブラリを使っている方がいらっしゃるようです。
まずは手っ取り早く試すために、ライブラリを使ってみましょう。どうやらpyclusteringというライブラリで使えるそうで。
pipでインストールします。$ pip install pyclustering以下のような環境を今回使っています。
- Windows10
 - Python3.7
 - pyclustering==0.8.2
 - numpy==1.15.4
 - matplotlib==3.0.2
 ダミーデータとして、4種類の分布のランダムな値を用意します。
まずは可視化しやすい2次元(x, y)で設定します。import pyclustering from pyclustering.cluster import xmeans import numpy as np import matplotlib import matplotlib.pyplot as plt %matplotlib inline arr_1 = np.random.normal(scale=1.0, size=(1000, 2)) arr_2 = np.random.normal(scale=2.0, size=(3000, 2)) arr_3 = np.random.normal(scale=1.5, size=(2000, 2)) arr_4 = np.random.normal(scale=1.2, size=(500, 2)) arr_2[:, 0] += 10 arr_3[:, 0] += 4 arr_3[:, 1] += -7 arr_4[:, 0] += 11 arr_4[:, 1] += -9 X = np.concatenate([ arr_1, arr_2, arr_3, arr_4, ])X.shape(6500, 2)
6500個の、ランダムなxとyの座標を持った行列です。
プロットすると以下のようになっています。
plt.scatter(x=X[:, 0], y=X[:, 1])人が見れば4つのクラスターが必要そうだ、ということが分かります。
X-meansのモデルを組んでいきましょう。
initializer = xmeans.kmeans_plusplus_initializer(data=X, amount_centers=2)初期化用のインスタンスを用意しました。
amount_centersの引数には、最初のクラスター数を設定します。
論文では普通に2で良さそうな記述があったので、特に理由がなければ2を設定します。
2から開始され、BICで妥当だと判定される限り分割されてクラスター数が増えていきます。それらを使って処理します。
initial_centers = initializer.initialize() xm = xmeans.xmeans(data=X, initial_centers=initial_centers) xm.process()xmeansの引数で、最大のKの制限や判定の閾値などを調整できるようです。今回はデフォルトのまま使います。
結果は、そのままライブラリでプロット用の機能が用意されているのでそちらを使います。
clusters = xm.get_clusters() pyclustering.utils.draw_clusters(data=X, clusters=clusters)Kを指定しなくても、よさげな感じにクラスを分けてくれました。
おまけで、3次元で試してみる
3次元まではそのままライブラリで同じような感じでプロットできるようなので試してみます。
arr_1 = np.random.normal(scale=1.0, size=(1000, 3)) arr_2 = np.random.normal(scale=2.0, size=(3000, 3)) arr_3 = np.random.normal(scale=1.5, size=(2000, 3)) arr_4 = np.random.normal(scale=1.2, size=(500, 3)) arr_1[:, 2] += 13 arr_2[:, 0] += 10 arr_2[:, 1] += 3 arr_2[:, 2] += -15 arr_3[:, 0] += 4 arr_3[:, 1] += -7 arr_3[:, 2] += 5 arr_4[:, 0] += 11 arr_4[:, 1] += -9 arr_4[:, 2] += 10 X = np.concatenate([ arr_1, arr_2, arr_3, arr_4, ]) initializer = xmeans.kmeans_plusplus_initializer(data=X, amount_centers=2) initial_centers = initializer.initialize() xm = xmeans.xmeans(data=X, initial_centers=initial_centers) xm.process() clusters = xm.get_clusters() ax = pyclustering.utils.draw_clusters(data=X, clusters=clusters)それっぽい感じに分けられました。
現実問題だと、特徴量を大分多く扱う必要があったりして、PCAなんかを使わないとうまいことK-meansやX-meansなどが動作してくれない気配もしていますが、そのあたりはちょっと今良さそうなデータセットがさくっと見つからなかったので今回は見送ります。仕事でも少し試しているので、もし有益そうなら後日記事にします。
いままで知らなかったのだが、常套手段らしい。
...
どう解決するか?
あらかじめ、別の空間に射影しておき、その空間でクラスターに分離してしまえばよい。つまり、PCAで新しい軸ではられる空間に射影しておき、その空間上でkmeansクラスタリングを行うのだ。
PCAとkmeansを組み合わせた分析ボロノイ図
こちらもおまけ気味ですが、少しボロノイ図について調べたり動かしてみたりしていたのでメモとして記載しておきます。
ボロノイ図ってなんだ
平面においては、複数個の点に対して、それ以外の他の点がどの点に近いかによって領域分けされた図がボロノイ図。領域の境界線は各々の点の二等分線の一部となる。
Python, SciPy, Matplotlibでドロネー図・ボロノイ図をプロットボロノイ分割はK-meansなんかのアルゴリズムで使われ、それぞれのクラスターの中心点同士の境界線を表したのがボロノイ図となります。
Pythonで描いてみる
SciPyを使うと簡単に描写できるようです。
使う環境(都合により先ほどとは別の環境で試しています) :
- Ubuntu環境
 - Python 3.6.1 :: Anaconda 4.4.0 (64-bit)
 - numpy==1.16.2
 - scipy==1.2.1
 - matplotlib==2.0.2
 適当な6個のxとyの座標を格納した行列を用意します。
import matplotlib import matplotlib.pyplot as plt import numpy as np import scipy from scipy.spatial import voronoi_plot_2d, Voronoi %matplotlib inline plt.style.use('ggplot') point_arr = np.array([ [10, 10], [50, 30], [60, 40], [30, 80], [20, 40], [80, 40], ]) point_arr.shape(6, 2)
散布図でプロットすると以下のようになっています。
_ = plt.scatter(x=point_arr[:, 0], y=point_arr[:, 1])ボロノイ図を描写します。
といっても、座標の行列をSciPyのVornoiクラスに放り込んで、vornoi_plot_2d関数に入れるだけでプロットは終わりです。vor = Voronoi(points=point_arr) _ = voronoi_plot_2d(vor=vor)図の青い点の座標は、vertices属性に行列で格納されています。
vor.verticesarray([[ 150. , -220. ], [-435. , 175. ], [ 30. , 20. ], [ 70. , 78.75], [ 70. , 20. ], [ 40. , 56.25], [ 40. , 50. ]])※最初の2行の座標は、プロット外の見えないところにあります。
特に悩むこともなく、シンプルでいいですね。
参考
- 機械学習のための特徴量エンジニアリング ―その原理とPythonによる実践の本を参考にさせていただきました。別のドメインからやってきた人間なので、知らない古典的な手法など、いろいろ知ることができました。
 - X-means: Extending K-means with Efficient Estimation of the Number of Clusters(論文PDFリンク)
 - クラスタ数を自動推定するX-means法を調べてみた
 - クラスター数を自動決定するk-meansアルゴリズムの拡張について(PDF論文リンク)
 - x-meansでクラスタリング【python】
 - PCAとkmeansを組み合わせた分析
 - Python, SciPy, Matplotlibでドロネー図・ボロノイ図をプロット
 
- 投稿日:2019-03-23T12:41:34+09:00
 
tqdm の表示の見方
Python でプログレスバーといえば、
tqdm。基本的な使い方は、
Python: tqdm で処理の進捗状況をプログレスバーとして表示する
あたりを参照。
from tqdm import tqdm import time for i in tqdm(range(10)): time.sleep(3)とかしたときに、
40%|████████████████████████████████ | 4/10 [00:12<00:18, 3.00s/it]とか表示されるのだが、
00:12<00:18の意味がわからなかった。ネットを調べても出てこなかった。
実験してみた結果、
<の左側 (00:12): 現在までの経過時間<の右側 (00:18): 完了までの予想時間とわかった。
なるほど。
<は砂時計のくびれの部分のイメージなのかもしれない。00:12<00:18を反時計回りに90度回転させると、砂時計になるイメージだ。





















































































































