Python3.7で高速化・性能向上した要素(ドキュメントの確認)

Python3.7になって、ずいぶんと速度が高速化されたらしい! そう聞いて、何がどう高速化したのか、まずは公式ドキュメントで高速化の対象を調べてみました。

 

しかし、現時点ではほぼ英語情報で、文章も長く、知らない機能もてんこ盛りで、自分の技術力・英語力レベルでは、なんだか頭にすんなり入って来ません。。。

 

バクっと何が改善されたのか、もう少し簡単につかめないか?

そこで、日本語の短文で見出しをつけて、短文で理解できた形で意訳して、頭に一次記憶としてなんとか残せそうな形式にした、自分用のメモを記録することにしました。

 

 

◆Python3.7の新機能:

 

▼参照したサイト

本家  Python3.7リリースに関するサイト

www.python.org


日本語の公式サイト Python3.7の新機能

https://docs.python.org/ja/3/whatsnew/3.7.html

 

 

 

◆Python3.7の新機能(最適化 Optimization部分):

 

高速化については、「最適化(Optimizations)」の項にまとめられているようです。

日本語の公式サイト中の「最適化」の項 (日本語サイトだがほぼ英語)

https://docs.python.org/ja/3/whatsnew/3.7.html#optimizations

 

まずは、この部分について、日本語メモをつくることにしました。

 

 

▼日本語短文の見出し(理解のためにメモ)

  

1.[性能向上] Cで実装された各種関数の呼び出し処理


2.[時間短縮] Pythonの起動時間(Linuxで10%短縮、Macで最大30%短縮)


3.[速度向上] メソッド呼び出し(最大20%高速化)

4.[性能向上] asyncioモジュール


5.[時間短縮]  キーボードから入力する処理

6.[速度向上] ソート処理(最大40%~75%高速化)

7.[速度向上] dict.copy()処理(最大5.5倍の高速化)

8.[速度向上] hasattr() と getattr() 処理(約4倍の高速化)

9.[速度向上] 特定のUnicode文字の検索処理が遅い問題の改善(通常より最大25倍遅延から3倍遅延への改善)

10.[速度向上] named tupleの作成(4倍から6倍の高速化)

11.[速度向上] date.fromordinal() と date.fromtimestamp()の処理(最大30%の高速化)

12.[速度向上] os.fwalk() functionの処理(最大2倍の高速化)

13.[速度向上] shutil.rmtree() functionの処理(20%から40%の高速化)

14.[速度向上] 大文字と小文字を区別しないマッチングや正規表現の検索処理(最大20倍の高速化)

15.[速度向上] re.compile()でflagをintオブジェクトに変換する処理(Pytyon3.6より約10%の高速化)

16.[速度向上] 高負荷環境における、各種selectorsクラスのmodify() methodsの処理(約10%の高速化)

17.[性能向上] より一貫したコンパイラ最適化(AST optimizerによる整数畳み込み)

18.[性能向上] クラス生成や呼び出しの高速化と起動時間の短縮(クラス生成や呼び出しが1.5倍高速化、Python起動が最大10%短縮)

19.[速度向上] datetime.date と datetime.datetimeのインスタンス生成速度の目覚ましい高速化

20.[速度向上] array.arrayインスタンスの比較処理の高速化(10倍から70倍の高速化)

21.[速度向上] math.erf() と math.erfc() functionsの高速化(高速なCライブラリにより実装)

 

 

 

▼最適化(Optimization)の日本語メモ
 (理解のための短文メモ)

 

 
1.[性能向上] Cで実装された各種関数の呼び出し処理


Cで実装された標準ライブラリのメソッドを呼び出すときのオーバーヘッドが劇的に削減されました。これは、新しい呼び出し規約であるMETH_FASTCALL規約を使用するように、より多くのコードを移植することによって実現しました。

 

The overhead of calling many methods of various standard library classes implemented in C has been significantly reduced by porting more code to use the METH_FASTCALL convention
(Contributed by Victor Stinner in bpo-29300, bpo-29507, bpo-29452, and bpo-29286.)

 

 
※METH_FASTCALL規約は、Python3.6から導入された新しい呼び出し規約で、Python3.7で適用範囲を拡大することによってさらに性能を向上させたようです。

dsas.blog.klab.org

従来は、PythonからCの関数を呼び出すときには、順序引数をタプルでキーワード引数をdictで渡していましたが、Python3.6より、タプルの代わりにただの配列の先頭ポインタと順序引数の数を渡す、新しい呼び出す規約が登場し呼び出し側がスタックに積んだ引数をタプルに詰めなくても、そのまま渡せるようになったようです。

 

 

2.[時間短縮] Pythonの起動時間(Linuxで10%短縮、Macで最大30%短縮)

 

さまざまな最適化によりPythonの起動時間が短縮されました。
Linuxでは10%短縮して、MacOSでは最大30%まで短縮されました。

 

Various optimizations have reduced Python startup time by 10% on Linux and up to 30% on macOS.
(Contributed by Victor Stinner, INADA Naoki in bpo-29585, and Ivan Levkivskyi in bpo-31333.)

 

 

3.[速度向上] メソッド呼び出し(最大20%高速化)

 

メソッド呼び出しが最大20%高速になりました。
これは、バインドされたメソッドインスタンスの作成を避けるよう、バイトコードを変更したことで実現しています。

 

Method calls are now up to 20% faster due to the bytecode changes which avoid creating bound method instances.
(Contributed by Yury Selivanov and INADA Naoki in bpo-26110.)

 


4.[性能向上] asyncioモジュール

 

asyncioモジュールのよく利用される関数に対して、以下のとおり、目覚ましい最適化が行われました。:

 

・asyncio.get_event_loop()関数は、C言語で再実装されることにより、最大15倍の高速化が実現されました。
・asyncio.Futureのコールバック管理が最適化されました。
・asyncio.gather() が最大15%高速化されました。
・asyncio.sleep() は、delay argumentがzeroかnegativeの時に、最大2倍高速化されました。

 

The asyncio module received a number of notable optimizations for commonly used functions:

 

・The asyncio.get_event_loop() function has been reimplemented in C to make it up to 15 times faster.
 (Contributed by Yury Selivanov in bpo-32296.)
・asyncio.Future callback management has been optimized.
  (Contributed by Yury Selivanov in bpo-32348.)
・asyncio.gather() is now up to 15% faster.
  (Contributed by Yury Selivanov in bpo-32355.)
・asyncio.sleep() is now up to 2 times faster when the delay argument is zero or negative.
  (Contributed by Andrew Svetlov in bpo-32351.)
・The performance overhead of asyncio debug mode has been reduced.
  (Contributed by Antoine Pitrou in bpo-31970.)

 

 

5.[時間短縮]  キーボードから入力する処理

 

PEP 560 の成果により、キーボードからタイプした情報のインポート時間は削減されました。これは7番目の要素 ( 7.[速度向上] dict.copy()処理の高速化(最大5.5倍高速化)のことでしょうか? )によって、実現しています。よって、多くのキーボードをタイピングする処理(言語に応じた辞書変換も含むのでしょうか?)は、より高速化しました。

 

As a result of PEP 560 work, the import time of typing has been reduced by a factor of 7, and many typing operations are now faster. (Contributed by Ivan Levkivskyi in bpo-32226.)

 

 

6.[速度向上] ソート処理(最大40%~75%高速化)

 

sorted() と list.sort()は、通常のケースにおいて最大40%から70%の高速化が実現するように、最適化されました。

 

sorted() and list.sort() have been optimized for common cases to be up to 40-75% faster. (Contributed by Elliot Gorokhovsky in bpo-28685.)

 

 

7.[速度向上] dict.copy()処理(最大5.5倍の高速化)

 

dict.copy()は最大5.5倍の高速化が実現しました。

 

dict.copy() is now up to 5.5 times faster. (Contributed by Yury Selivanov in bpo-31179.)

 

 

8.[速度向上] hasattr() と getattr() 処理(約4倍の高速化)

 

hasattr() と getattr()は、特定の条件下で、約4倍の高速化が実現しました。
その条件とは、
 1.nameが検知されないこと  かつ
 2.objが、以下のいずれかによってoverrideされないこと
   ・object.__getattr__()
   ・object.__getattribute__()

 

hasattr() and getattr() are now about 4 times faster when name is not found and obj does not override object.__getattr__() or object.__getattribute__(). (Contributed by INADA Naoki in bpo-32544.)

 

 

9.[速度向上] 特定のUnicode文字の検索処理が遅い問題の改善(通常より最大25倍遅延から3倍遅延への改善)

 

特定のUnicode文字(例えば、ウクライナ語で使われる大文字のЄなど)が文字列に含まれる場合の検索処理は、従来は他の文字の検索と比較して最大25倍遅かったのですが、最悪の場合でも3倍遅いレベルに改善しました。

 

Searching for certain Unicode characters (like Ukrainian capital "Є") in a string was up to 25 times slower than searching for other characters. It is now only 3 times slower in the worst case. (Contributed by Serhiy Storchaka in bpo-24821.)

 

 

10.[速度向上] named tupleの作成(4倍から6倍の高速化)

 

collections.namedtuple() factoryの再実装により、named tupleの生成処理は4倍から6倍の高速化が実現しました。

 

The collections.namedtuple() factory has been reimplemented to make the creation of named tuples 4 to 6 times faster. (Contributed by Jelle Zijlstra with further improvements by INADA Naoki, Serhiy Storchaka, and Raymond Hettinger in bpo-28638.)

 


11.[速度向上] date.fromordinal() と date.fromtimestamp()の処理(最大30%の高速化)

 

date.fromordinal() と date.fromtimestamp()は、一般的なケースにおいて、最大30%高速化しました。

 

date.fromordinal() and date.fromtimestamp() are now up to 30% faster in the common case. (Contributed by Paul Ganssle in bpo-32403.)

 


12.[速度向上] os.fwalk() functionの処理(最大2倍の高速化)

 

os.fwalk() ファンクションの処理速度は、最大2倍、高速化しました。
これは、os.scandir()ファンクションの使用により実現しました。

 

The os.fwalk() function is now up to 2 times faster thanks to the use of os.scandir(). (Contributed by Serhiy Storchaka in bpo-25996.)

 

 

13.[速度向上] shutil.rmtree() functionの処理(20%から40%の高速化)

 

shutil.rmtree() ファンクションの処理速度は、20%から40%高速化しました。
これは、os.scandir()ファンクションの使用により実現しました。

 

The speed of the shutil.rmtree() function has been improved by 20--40% thanks to the use of the os.scandir() function. (Contributed by Serhiy Storchaka in bpo-28564.)

 


14.[速度向上] 大文字と小文字を区別しないマッチングや正規表現の検索処理(最大20倍の高速化)

 

大文字と小文字を区別しないマッチング処理や正規表現の検索処理の最適化を行いました。いくつかのパターンの検索処理では、20倍の高速化を実現しています。

 

Optimized case-insensitive matching and searching of regular expressions. Searching some patterns can now be up to 20 times faster. (Contributed by Serhiy Storchaka in bpo-30285.)

 


15.[速度向上] re.compile()でflagをintオブジェクトに変換する処理(Pytyon3.6より約10%の高速化)

 

re.compile()は、flagパラメータがRegexFragである場合に、intオブジェクトに変換します。それによって、Python3.5と同等の処理速度を実現し、変換のパターンによるもののPython3.6より約10%の高速化を実現しています。

 

re.compile() now converts flags parameter to int object if it is RegexFlag. It is now as fast as Python 3.5, and faster than Python 3.6 by about 10% depending on the pattern. (Contributed by INADA Naoki in bpo-31671.)

 


16.[速度向上] 高負荷環境における、各種selectorsクラスのmodify() methodsの処理(約10%の高速化)

 

以下のクラスのmodify()メソッドは、高負荷環境において約10%の高速化が実現しました。
・selectors.EpollSelector
・selectors.PollSelector
・selectors.DevpollSelector

 

The modify() methods of classes selectors.EpollSelector, selectors.PollSelector and selectors.DevpollSelector may be around 10% faster under heavy loads. (Contributed by Giampaolo Rodola' in bpo-30014)

 

 

17.[性能向上] より一貫したコンパイラ最適化(AST optimizerによる整数畳み込み)

 

コンパイラ最適化手法である)定数畳み込み機能の実装は、peehole optimizer から、新しい AST optimizerにかわりました。これにより、性能最適化がより一貫性のあるものになりました。

 

Constant folding has been moved from the peephole optimizer to the new AST optimizer, which is able perform optimizations more consistently. (Contributed by Eugene Toder and INADA Naoki in bpo-29469 and bpo-11549.)

 

参考: 定数畳み込み

定数畳み込み - Wikipedia

 


18.[性能向上] クラス生成や呼び出しの高速化と起動時間の短縮
 (クラス生成や呼び出しが1.5倍高速化、Python起動が最大10%短縮)

 

abcに含まれる主なファンクションやメソッドは(より高速な)C言語で書き換えられました。それによって、isinstance() と issubclass()の呼び出しは1.5倍ほど高速になりました。さらに、Pythonの起動時間も最大10%短縮されました。

 

Most functions and methods in abc have been rewritten in C. This makes creation of abstract base classes, and calling isinstance() and issubclass() on them 1.5x faster. This also reduces Python start-up time by up to 10%. (Contributed by Ivan Levkivskyi and INADA Naoki in bpo-31333)

 

 

19.[速度向上] datetime.date と datetime.datetimeのインスタンス生成速度の目覚ましい高速化

 

datetime.date と datetime.datetimeは、新たなコントラクタ(インスタンス生成機能)により処理速度が目覚ましく向上しました。これは、サブクラスを生成しない場合に、fast-pathコントラクタを使用することによって実現しました。

 

Significant speed improvements to alternate constructors for datetime.date and datetime.datetime by using fast-path constructors when not constructing subclasses. (Contributed by Paul Ganssle in bpo-32403)

 


20.[速度向上] array.arrayインスタンスの比較処理の高速化(10倍から70倍の高速化)

 

array.arrayインタンスの比較は、特定のケースでかなり処理速度が向上しました。
配列が保持する値が同じinteger型の場合は、10倍から70倍高速化しました。

 

The speed of comparison of array.array instances has been improved considerably in certain cases. It is now from 10x to 70x faster when comparing arrays holding values of the same integer type. (Contributed by Adrian Wielgosik in bpo-24700.)

 


21.[速度向上] math.erf() と math.erfc() functionsの高速化(高速なCライブラリにより実装)

 

math.erf() と math.erfc() functionsは、主なプラットフォーム上で、より高速なCライブラリで実装されました。

 

The math.erf() and math.erfc() functions now use the (faster) C library implementation on most platforms. (Contributed by Serhiy Storchaka in bpo-26121.)

 

今日はここまで!

 

Python3.6 & 3.7の比較環境をつくる(Linux Ubuntu18.04LTS)機械学習&ファイナンス

Python3.7になってずいぶんと高速化されたらしいと聞いて、

実際、どのように速くなったのか比較して試してみようと、

まずは比較環境を作りました。

 

自分用のメモとして記録します。

 

以下の記事で作ったWindows10環境の上にVirtualBoxを入れて

Linux環境を作りました。

fuku-mame.hatenablog.com

 

◆環境:

 OS: Linux (Ubuntu18.04LTS)(64bit環境)

 

VirtualBoxUbuntuのインストール:

 

 

Pythonの環境構築(Anacondaの場合):

 

▼1.anaconda (python3.7対応) をインストール

 

ダウンロードサイトLinux

www.anaconda.com

1)ダウンロード

画面上部で download for の右のアイコンでLinuxのアイコンが選択されて

いることを確認(未選択ならLinuxをクリック)

画面下部で Pytrhon 3.7 version と記載のある左下の download ボタンをクリック

 

2)ダウンロードの確認とディレクトリの移動

ダウンロードフォルダにファイル(Anaconda3-5.3.1-Linux-x86_64.sh)がダウンロードされたことを確認して、ディレクトリを移動する

 

端末(terminal)を起動して、以下のように実行

$ pwd

/home/[ユーザー名]であることを確認。違ったらそのディレクトリに移動。

$ cd ダウンロード

※日本語版のUbuntuを入れた場合のコマンドです。

 ダウンロードフォルダの名称を指定して移動してください。

$ ls

Anaconda3-5.2.0-Linux-x86_64.sh が返ってくることを確認

 

3)インストール

$ bash Anaconda3-5.2.0-Linux-x86_64.sh

 

 

▼2.インストール時のオプション

以下はインストール時のパラメータの指定内容です。参考までに。

 

1) Enterキーを押して開始
In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
>>>

 

2)ライセンスに合意して継続
Do you accept the license terms? [yes|no]
[no] >>> yes

 

3) インストール先のフォルダを指定

Anaconda3 will now be installed into this location:
/home/fuku-mame/anaconda3

- Press ENTER to confirm the location
- Press CTRL-C to abort the installation
- Or specify a different location below

 

ー 初期値を採用する場合(そのままEnter)

[/home/[ユーザー名]/anaconda3] >>>

 ー インストール先を変える場合(パスを入力してEnter)

[/home/[ユーザー名]/anaconda3] >>> /home/[ユーザー名]/anaconda3_7
PREFIX=/home/[ユーザー名]/anaconda3_7

 

(参考1)

わたしは、既にAnacondaを入れていたので、インストール先を変えてインストールしました。

そのままパスを指定しないでEnterすると既にインストールされているので、以下の警告が出たためです。

ERROR: File or directory already exists: '/home/[ユーザー名]/anaconda3'
If you want to update an existing installation, use the -u option.

 

(参考2)

既にAnacondaを入れている場合、以下のようにアップデートでも、最新のPythonのバージョン(Python3.7対応)の環境が作れました。

$ conda update conda

$ conda update anaconda

 

ー ほかにも、パッケージ一式のアップデートをする場合は
conda update --all

※pipインストールされたものはアップデートされないので注意
 別途アップデートする必要あり


ー ほかにも、Pythonだけをアップデートする場合は

Python3.X系から3.7系の場合
conda install python=3.7

3.X.1 → 3.X.6というように、マイナーバージョンアップで最新化する場合
conda update python

 

4)インストール完了のメッセージ

インストールの完了のメッセージが表示されます。

installation finished.

。。。が、そのあとも、以下のようにオプションを聞かれます。

 

5)bashの初期値を読み込むパスを通すかの質問

yesを選択すると、既存のファイルはバックアップが取得される

ターミナルを再起動すると変更が反映されるとメッセージが表示される

 

Do you wish the installer to initialize Anaconda3
in your /home/[ユーザー名]/.bashrc ? [yes|no]
[no] >>> yes

 

Initializing Anaconda3 in /home/[ユーザー名]/.bashrc
A backup will be made to: /home/[ユーザー名]/.bashrc-anaconda3.bak


For this change to become active, you have to open a new terminal.

Thank you for installing Anaconda3!

 

6)ターミナルを再起動

端末(terminal) を再起動する

 

7)Microsoft VBCodeをインストールするオプション

Microsoft VSCodeをインストールするか聞かれるので no を選択

 

Anaconda is partnered with Microsoft! Microsoft VSCode is a streamlined
code editor with support for development operations like debugging, task
running and version control.

To install Visual Studio Code, you will need:
- Administrator Privileges
- Internet connectivity

Visual Studio Code License: https://code.visualstudio.com/license

Do you wish to proceed with the installation of Microsoft VSCode? [yes|no]
>>> no

 

8)Anacondaインストール後のバージョン確認

$ anaconda -V
anaconda Command line client (version 1.7.2)
$ python -V
Python 3.7.0

 

これでAnacondaのインストールが本当に完了です!

 

  

▼3.Python3.6環境&3.7環境を作る

  
1.環境の作成 & 基本パッケージのインストール

ー Python3.6環境 (環境名:Pytyon36)

$ conda create -n python36 python=3.6 spyder pandas jupyter matplotlib numpy

ー Python3.7環境 (環境名:Pytyon37)

$ conda create -n python37 python=3.7 spyder pandas jupyter matplotlib numpy

 

2.環境のアクティベート(  それぞれ切り替えて使う時に実行 )

ー Python3.6環境 (環境名:Pytyon36)

$ conda activate python36
もしくは

$ source activate python36

ー Python3.7環境 (環境名:Pytyon37)

$ conda activate python37

もしくは

$ source activate python37

 

→ プロンプトが以下のように変わります!

([環境名]) [ユーザー名]@[ユーザー名称]-VirtualBox:~$

 

 

▼4.Ta-Libのインストール

 ================================================

※ 結構はまりました。Windowsの方が簡単だったかも。

================================================

 

そこで以下のサイトを参考にしてインストールしました。

qiita.com


それ以外に参考になったサイトや本家サイトは以下です。

 

本家サイト

mrjbq7.github.io

本家サイトのGitHub

github.com

参考になった日本語サイト。

GitHubじゃ!Pythonじゃ! ~ ta-lib – TA-Lib用のPythonラッパー( )

上のサイトをわかりやすく解説 してくださっていました。 

 

1)Python3.6環境をアクティベートする

$ source activate python36

 

)Ta-Libのパッケージをダウンロードして解凍 (python3.6,3.7共通の手順)

$ wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz

$ tar -zxvf ta-lib-0.4.0-src.tar.gz

 

ディレクトリ移動してインストール準備(python3.6,3.7共通の手順)

$ cd ta-lib

$ ./configure --prefix=/usr

$ make

$ sudo make install
ここでパスワードを聞かれるので入力

 

)不要になったファイルを消す(python3.6,3.7共通の手順)

$ cd ../

$ rm -rf ta-lib-0.4.0-src.tar.gz
$ rm -rf ta-lib

 

)pipインストール(python3.6)

$ pip install TA-Lib

 

最終的には、pip install Ta-Lib で以下の表示がされてインストール完了

 

Collecting TA-Lib
Downloading https://files.pythonhosted.org/packages/90/05/d4c6a778d7a7de0be366bc4a850b4ffaeac2abad927f95fa8ba6f355a082/TA-Lib-0.4.17.tar.gz (717kB)
100% |████████████████████████████████| 727kB 1.8MB/s
Requirement already satisfied: numpy in ./.local/lib/python3.6/site-packages (from TA-Lib) (1.14.5)
Building wheels for collected packages: TA-Lib
Running setup.py bdist_wheel for TA-Lib ... done
Stored in directory: /home/[ユーザー名]/.cache/pip/wheels/2a/2e/ec/71c565b2e0091e03a2b56abfbfd062f14a01a8d7b20ffe8bd5
Successfully built TA-Lib
Installing collected packages: TA-Lib
Successfully installed TA-Lib-0.4.17

 

6)Python3.7環境をアクティベートする

$ source activate python37

 

)pipインストール(python3.7)

$ pip install TA-Lib


以下の表示がされてインストール完了

 

Collecting TA-Lib
Using cached https://files.pythonhosted.org/packages/90/05/d4c6a778d7a7de0be366bc4a850b4ffaeac2abad927f95fa8ba6f355a082/TA-Lib-0.4.17.tar.gz
Requirement already satisfied: numpy in ./anaconda3_7/envs/python37/lib/python3.7/site-packages (from TA-Lib) (1.15.4)
Building wheels for collected packages: TA-Lib
Running setup.py bdist_wheel for TA-Lib ... done
Stored in directory: /home/[ユーザー名]/.cache/pip/wheels/2a/2e/ec/71c565b2e0091e03a2b56abfbfd062f14a01a8d7b20ffe8bd5
Successfully built TA-Lib
Installing collected packages: TA-Lib
Successfully installed TA-Lib-0.4.17

 

8)Ta-Libの動作確認

 

(1)python3.6環境のアクティベート(python3.6の動作確認の場合)

$ source activate python36

 

(2)近い価格の単純な移動平均を計算する

 

参考サイト

GitHubじゃ!Pythonじゃ! ~ ta-lib – TA-Lib用のPythonラッパー( )

本家サイトのGitHub

実際に動作確認した時の端末(terminal)は、こんな感じです。


$ Python
Python 3.6.6 |Anaconda, Inc.| (default, Oct 9 2018, 12:34:16)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy

>>> import talib
>>> close = numpy.random.random(100)
>>> output = talib.SMA(close)
>>> print(output)
[ nan nan nan nan nan nan
nan nan nan nan nan nan
nan nan nan nan nan nan
nan nan nan nan nan nan
nan nan nan nan nan 0.50597988
0.49044813 0.49192655 0.49559913 0.47946239 0.48674336 0.48211822
0.47985632 0.48429696 0.4746675 0.47774222 0.47824029 0.47340558
0.469014 0.4819389 0.48668217 0.48349569 0.47026358 0.44020191
0.447766 0.4460756 0.43121233 0.41272225 0.41114152 0.4170304
0.42175526 0.43029523 0.45176909 0.45352472 0.44949747 0.43464676
0.42674871 0.424492 0.43359302 0.44601602 0.44016894 0.45327379
0.45378707 0.45341031 0.47127507 0.48154042 0.47335366 0.47372136
0.46919924 0.46859492 0.45091091 0.44817057 0.45985506 0.4712786
0.45748822 0.45124931 0.44238178 0.46153089 0.48887961 0.5070039
0.51768552 0.50048442 0.47609657 0.48909284 0.5153108 0.51840888
0.54738771 0.5189149 0.53406168 0.52755714 0.5158188 0.4967529
0.49741568 0.50008176 0.50618635 0.50459144]
>>> exit()

 

 

▼5.TensorFlow , Kerasのインストール 

================================================

※ 2018/12/12現在、残念ながら Python3.7に未対応でした。

 

Install TensorFlow with pip  |  TensorFlow

requiredには、Python3.4, 3.5, 3.6 と記載があり。

試しにやってみましたが Kerasも含めてエラーになりました。

調べてみても、うまく行ったケースはなさそう。。。

 

比較環境はつくれなかったのですが、Python3.6用には

インストールしたので、メモまでに記録します。

================================================

 

1)python3.6環境のアクティベート

$ source activate python36

 

)インストール

$ pip install tensorflow

$ pip install keras

 

)動作確認

python3.6環境がアクティブなままで以下の操作

$ python

$ import tensorflow as tf

$ import keras

 

実際に動作確認した時の端末(terminal)は、こんな感じです。

 

$ python
Python 3.6.6 |Anaconda, Inc.| (default, Oct 9 2018, 12:34:16)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.

>>> import tensorflow as tf
>>> import keras
Using TensorFlow backend.
>>> exit()

 

今日はここまで!

 

Python3.6 & 3.7の比較環境をつくる(Windows10)機械学習&ファイナンス

この投稿は PyLadies Advent Calendar 2018 の10日目の記事です。

adventar.org

Python3.7になって、ずいぶんと速度が高速化されたらしい!

そう聞いて、勉強がてら比較をしてみようと取り組みました。

 

最終的には、高速化の対象を調べて、実際に計って比較

、、、と思いましたが、そちらは時間切れで。

まずは比較用の環境準備について、メモを記録します。

 

◆Python3.7の新機能(特に高速化):

 

▼参照したサイト

本家  Python3.7リリースに関するサイト

www.python.org


日本語の公式サイト Python3.7の新機能

https://docs.python.org/ja/3/whatsnew/3.7.html

 

なお、高速化については、「最適化(Optimizations)」の項にまとめられているようです。上記の中の「最適化」の項 (日本語サイトだがほぼ英語)

https://docs.python.org/ja/3/whatsnew/3.7.html#optimizations


以下のエントリで、上のリンク先のほぼ英文の内容を、理解のために、日本語短文の自分用メモにしました。

fuku-mame.hatenablog.com

 

◆環境:

 OS: Windows10(64bit環境)

 

 VirtualBoxを入れて、Linux環境もつくったので

 そちらの手順はここに書いています。 

fuku-mame.hatenablog.com

 

 

Pythonの環境構築(Anacondaの場合):

 

▼1.anaconda (python3.7対応) をインストール

 

ダウンロードサイト 

www.anaconda.com

 

画面上部で download for の右のアイコンでWindowsのアイコンをクリック
画面下部で Pytrhon 3.7 version と記載のある左下の download ボタンをクリック

 

ダウンロードフォルダにファイル(Anaconda3-5.3.1-Windows-x86_64.exe)がダウンロードされるので、ダブルクリックしてインストール

 

  

▼2.Python3.6環境&3.7環境を作る

 

1.Anaconda Promptを起動

プロンプトは以下の共通が表示されている
(base) C:\Users\[ユーザー名]>

 
2.環境の作成 & 基本パッケージのインストール

ー Python3.6環境 (環境名:Pytyon36)

> conda create -n python36 python=3.6 spyder pandas jupyter matplotlib numpy

ー Python3.7環境 (環境名:Pytyon37)

> conda create -n python37 python=3.7 spyder pandas jupyter matplotlib numpy

 

3.環境のアクティベート(  それぞれ切り替えて使う時に実行 )

ー Python3.6環境 (環境名:Pytyon36)

> conda activate python36

もしくは単に

> activate python36

ー Python3.7環境 (環境名:Pytyon37)

> conda activate python37

もしくは単に

> activate python37

 

→ プロンプトが以下のように変わります!

([環境名]) C:\Users\[ユーザー名]>

 

 

▼3.Ta-Libのインストール

================================================

※ 結構はまりました。

最初 anaconda のサイトを検索してやってみたのですが

以下のインストールコマンドでは失敗してしまいました。
(python2.7ベースの環境に上書きされてしまった。。。)

conda install -c quantopian ta-lib

================================================

 

そこで以下のサイトを参考にしてインストールしました。

qiita.com


それ以外に参考になったサイトや本家サイトは以下です。

 

本家サイト

mrjbq7.github.io

本家サイトのGitHub

github.com

参考になった日本語サイト。

GitHubじゃ!Pythonじゃ! ~ ta-lib – TA-Lib用のPythonラッパー( )

上のサイトをわかりやすく解説 してくださっていました。 

 

 


1)下記サイトからダウンロード

Python Extension Packages for Windows - Christoph Gohlke

ー Python3.6   Windows  64bitOS用

TA_Lib-0.4.17-cp36-cp36m-win_amd64.whl

ー Python3.7   Windows  64bitOS用

TA_Lib-0.4.17-cp37-cp37m-win_amd64.whl

 

 

2)ダウンロードフォルダからAnaconda Promptの
 カレントフォルダに移動(エクスプローラーで操作)

C:\Users\[ユーザー名] の下に、それぞれ以下を移動

ー Python3.6   Windows  64bitOS用 

TA_Lib-0.4.17-cp36-cp36m-win_amd64.whl

ー Python3.7   Windows  64bitOS用 

TA_Lib-0.4.17-cp37-cp37m-win_amd64.whl

 

 

3)ダウンロードしたモジュールをインストール

ー Python3.6   Windows  64bitOS用 

> pip install TA_Lib-0.4.17-cp36-cp36m-win_amd64.whl

ー Python3.7   Windows  64bitOS用 

> pip install TA_Lib-0.4.17-cp37-cp37m-win_amd64.whl

 

 

4)Ta-Libの動作確認

 

(1)環境の確認

 → python3.6環境のアクティベート(python3.6の動作確認の場合)

 

> conda info -e

> activate python36

 

実際のコンソール(Anaconda Prompt)はこんな感じです。

 

base) C:\Users\[ユーザー名]>conda info -e

# conda environments:
#
base * C:\Users\[ユーザー名]\Anaconda3
python36 C:\Users\[ユーザー名]\Anaconda3\envs\python36
python37 C:\Users\[ユーザー名]\Anaconda3\envs\python37

 

(base) C:\Users\[ユーザー名]>activate python36
(python36) C:\Users\[ユーザー名]>

 

(2)近い価格の単純な移動平均を計算する

 

参考サイト

GitHubじゃ!Pythonじゃ! ~ ta-lib – TA-Lib用のPythonラッパー( )

本家サイトのGitHub

実際に動作確認した時のコンソール(Anaconda Prompt)は

こんな感じです。


(python36) C:\Users\[ユーザー名]>python
Python 3.6.7 |Anaconda, Inc.| (default, Oct 28 2018, 19:44:12) [MSC v.1915 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> import talib
>>> close = numpy.random.random(100)
>>> output = talib.SMA(close)
>>> print(output)
[ nan nan nan nan nan nan
nan nan nan nan nan nan
nan nan nan nan nan nan
nan nan nan nan nan nan
nan nan nan nan nan 0.42058578
0.43538653 0.42973615 0.42508598 0.4215827 0.42356416 0.42471856
0.43832043 0.44084937 0.4415762 0.44457021 0.44658056 0.44122067
0.45208208 0.47320482 0.46119184 0.45207382 0.46179371 0.46316077
0.45467707 0.46386639 0.47922845 0.46816254 0.47533541 0.49443223
0.49067489 0.50372368 0.50325981 0.50256258 0.52438143 0.54619321
0.54916505 0.56229398 0.56174102 0.56850604 0.591752 0.57385095
0.54647481 0.54753489 0.53408042 0.53761784 0.52303637 0.52926954
0.52791146 0.50881954 0.51222114 0.53135242 0.54022545 0.5458612
0.56032248 0.53384055 0.53282046 0.54131443 0.54668749 0.53821992
0.52913253 0.52573472 0.52052138 0.52208508 0.5263485 0.51232275
0.49042578 0.49637916 0.51297331 0.51488893 0.51838888 0.51529496
0.5464814 0.56466809 0.57562973 0.59345636]
>>> exit()

 

 

▼4.TensorFlow , Kerasのインストール

================================================

※ 2018/12/12現在、残念ながら Python3.7に未対応でした。

 

Install TensorFlow with pip  |  TensorFlow

requiredには、Python3.4, 3.5, 3.6 と記載があり。

試しにやってみましたが Kerasも含めてエラーになりました。

調べてみても、うまく行ったケースはなさそう。。。

 

比較環境はつくれなかったのですが、Python3.6用には

インストールしたので、メモまでに記録します。

================================================

 

1)python3.6環境のアクティベート

> activate python36

 

)インストール

> pip install tensorflow

> pip install keras

 

)動作確認

python3.6環境がアクティブなままで以下の操作

> python

>>> import tensorflow as tf

>>> import keras

 

実際に動作確認した時のコンソール(Anaconda Prompt)は

こんな感じです。

 

(python36) C:\Users\[ユーザー名]>python
Python 3.6.7 |Anaconda, Inc.| (default, Oct 28 2018, 19:44:12) [MSC v.1915 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> import keras
Using TensorFlow backend.
>>> exit()

 

 

今日はここまで!