LogoMark.png

Python のバックアップの現在との差分(No.3)


#author("2021-10-29T22:08:47+09:00;2021-10-29T22:02:02+09:00","default:inoue.ko","inoue.ko")
#author("2021-11-26T08:27:04+09:00","default:inoue.ko","inoue.ko")
*Python
https://www.python.org/
~

Pythonはさまざまな分野のアプリケーションで使われているインタープリタ型のプログラミング言語です。クリーンで読みやすい文法、手続き型のコードによる自然な表現、直感的なオブジェクト指向、事実上すべてのタスクをこなせる広範な標準ライブラリとサードパーティのモジュール、アプリケーションに組み込んでスクリプトインタフェースとして利用することが可能・・など様々な利点があります。
 Google社においても C++、 java と並ぶ3大言語のひとつとして位置づけられていて、Googleが公開している人工知能のAPI [[TensorFlow>Google:TensorFlow]] も Python のライブラリのひとつとして位置付けられています。

Google社においても C++、 java と並ぶ3大言語のひとつとして位置づけられていて、Googleが公開している人工知能のAPI [[TensorFlow>Google:TensorFlow]] も Python のライブラリのひとつとして位置付けられています。

開発環境を含めて[[オープンソース>OpenSource]]です。無償でダウンロード>インストールして利用することができます。

~

***Python の現在
-言語としてのランキング情報は以下
--[[PYPL|PopularitY of Programming Language index>http://pypl.github.io/PYPL.html]] &small(言語の動向);
--[[RedMonk>https://redmonk.com/sogrady/2020/02/28/language-rankings-1-20/]] &small(JavaScript, Java等と並んで最上位に);
--[[IEEE|Top Programming Languages>https://spectrum.ieee.org/top-programming-languages/]]
--[[PYPL|PopularitY of Programming Language index>http://pypl.github.io/PYPL.html]]
--[[RedMonk|Language Rankings>https://redmonk.com/sogrady/2021/08/05/language-rankings-6-21/]]
--[[Stack Overflow|Tags>https://stackoverflow.com/tags?]]

-以下のようなサイト(Webアプリ)が Python で構築されています。
 Youtube / Instagram / Pinterest / Dropbox
~

***CONTENTS
#contents2_1
~
~


**はじめに
このページでは、一般的な Python プログラミングの導入について説明しています。[[データサイエンス>DataScience]]の学習等で初めて Python を使う方には、このページに記載の環境を準備するよりも、GoogleColaboratory の利用をお勧めします。
> __[[GoogleColaboratory]]__
~

***各種配布元
-''Python'' https://www.python.org/
-Python Japan https://www.python.jp/

-関連ツール
--Anaconda https://www.anaconda.com/
--Jupyter Notebook http://jupyter.org/
--Google Corabolatery https://colab.research.google.com/
~

***公式サイト上でPythonを試す
[[公式サイト>https://www.python.org/]] の画面上で黄色のボタンをクリックすると(左下図)、仮想コンソールが起動します。右下図のように、その動作を試すことができます。
&image(pythonSC01.jpg,,35%); &image(pythonSC02.jpg,,50%);
~

***入門サイト
-[[Pytohnチュートリアル>https://docs.python.jp/3/tutorial/index.html]]
-[[PythonWeb>https://www.pythonweb.jp/]]
-[[ドットインストール Python3>https://dotinstall.com/lessons/basic_python_v3]]
-[[Pythonでゲーム制作入門>http://gamepro.blog.jp/python/introduction]]
~
~

**開発環境の準備

***前提の確認
Pythonには、2系と3系があって、これらは互換性がありません。

-Python2系
Macの場合はすでにインストール済みです。
[[ターミナル>Terminal]]から、いきなり試すことができます。

-''Python3系''
これから学習する方は、3系のインストールをおすすめします。
--https://www.python.org/downloads/ 基本 IDE含む
--https://www.anaconda.com/ データサイエンス関連ライブラリ統合
~

***様々な開発環境
以下のような開発環境があります。ローカルPC上で複数の開発環境を混在させるとシステムプログラムの衝突が生じるので、いずれかを選択することをお勧めします([[GoogleColaboratory]] はクラウド環境なので、PCのローカル環境とは無関係に採用できます)。
-Mac の Terminal(Windows のコンソール)から利用
-Python IDLE の利用
-Anaconda  統合開発環境の利用

-IPython(対話型 Python)
--Jupyter Notebook / Jupyter Lab
--[[GoogleColaboratory]] 

以下、順に解説します。

~


**Python の環境

***Mac の Terminal
Macには標準で Python 2.7(Catalina以降は Python3)がインストールされているので、[[Terminal]] を起動すれば、すぐに体験することができます。開発に必要なのは、プログラムを書くための[[テキストエディタ>TextEditor]]のみです。あとは Terminal からコマンドを打てば動きます。以下、手順の例です。

-1) テキストエディタで Python のプログラムを書く
-2) sample.py として保存(場所は Terminal のカレントディレクトリ)
-3) Terminal から、以下のようにコマンド入力するとプログラムが動きます。
 $ python sample.py
 $ python3 sample.py(Python3 の場合)

以下のページに、もう少し具体的な説明を記載しています。
[[Python/Sample]]

~

***Python IDLE
[[公式サイト>https://www.python.org/]]で配布されている標準的な開発環境(IDLE)です。ダウンロード・インストールすると(Win / Macとも)アプリケーションメニューに Pythonフォルダ が追加され、''IDLE''のダブルクリックで開発環境が起動します。配布元は以下。
https://www.python.org/
-https://www.python.org/downloads/
-[[Google:Python IDLE 使い方]]

-Terminalで確認すると以下の場所に存在することがわかります。
Terminalで確認すると以下の場所に存在することがわかります。
 $ whitch python3  ← Terminal でコマンドの所在を確認
 /Library/Frameworks/Python.framework/Versions/3.8/bin/python3

-ライブラリ等の追加は Terminal から pip3 コマンドを使って行う前提です。
ライブラリ等の追加は Terminal から pip3 コマンドを使って行う前提です。

-ウインドウの中のプロンプト等は、Terminalで見えるものと同様ですが、ウインドウには専用のメニューが並びます。インタラクティブモード、スクリプトモード、同様に使えます。カレントディレクトリを意識することなく、普通にファイルを開いて走らせることができるので、Terminalの利用よりもハードルが下がります。
ウインドウの中のプロンプト等は、Terminalで見えるものと同様ですが、ウインドウには専用のメニューが並びます。インタラクティブモード、スクリプトモード、同様に使えます。カレントディレクトリを意識することなく、普通にファイルを開いて走らせることができるので、Terminalの利用よりもハードルが下がります。

~

***Anaconda
Anaconda はデータサイエンス向けの統合開発環境で、科学技術計算などを中心とした数多くのモジュールやツールが独自の形式でパッケージされています。ソースコードエディターはもちろん、Python 2系、3系を仮想環境を分けて利用できるなど、様々な活用が可能です(ディスク領域は1GB以上使います)。

-公式サイト
https://www.anaconda.com/
-以下に、インストール情報があります。
--https://www.python.jp/install/anaconda/index.html
--[[Google:Anaconda インストール]]

-メニューの Environments から 3系を使う環境、2系を使う環境、Rを使う環境など、目的に応じた仮想環境をつくることができます。仮装環境ごとに各種開発パッケージやターミナルの起動が可能です。

-Python は様々なライブラリーを活用するのが前提です。Anaconda があれば、Environments のメニューから、環境にあったライブラリをインストールする作業が簡単に実行できます。

-GUI画面で必要なライブラリが見つからない場合は、Environments の ▶︎ から Open Terminal で[[ターミナル>Terminal]]を開いて(pip コマンドは使わず)conda コマンドでパッケージをインストールします。以下、例です。
//#image(pip.png,right,30%)
 $ conda install [ ライブラリ名 ]
#clear

-Anaconda での基本コマンド
Environments の ▶︎ から Open Terminal で、専用ターミナルを開いてから以下のコマンドが使えます。
--Anaconda自体のアップデート
 $ conda update -n base conda
--Anacondaの全パッケージのアップデート
 $ conda update --all
--Anacondaの特定のパッケージ(例:pandas)のアップデート
 $ conda update pandas

-''注意点''
--&color(red){Terminal環境を利用する方、また、シンプルに学習したい場合は、Anaconda のインストールは控えた方がいいかもしれません。以下のとおり、無難に扱うには、それなりに学習コストがかかります。};
--&color(blue){Terminal環境を利用する方、また、シンプルに学習したい場合は、Anaconda のインストールは控えた方がいいかもしれません。以下のとおり、無難に扱うには、それなりに学習コストがかかります。};
--Anaconda のインストール先は、ホームディレクトリ直下です。
 /user/(ユーザ名)/anaconda3
インストール時に「自分専用にインストール」を選んでください。
「この場所にはインストールできません」と出て、「続ける」が押下できないことがありますが、「自分専用」のところを再度クリックすると、警告が消えてインストールできます。
--Anaconda は一部に独自技術を使用しているため、公式パッケージにはあっても Anaconda では利用できないものがあります。また標準的な Pythonの 仮想環境を利用しないため、通常であれば pip コマンドでインストールする作業も、Anaconda を使用する場合は、専用の Conda コマンド を使う必要があります。
--OS がデフォルトで提供する機能に干渉したり、Homebrew との相性が悪いなどの問題もあるので、Anaconda と Terminal環境の併用は避けるのが賢明です。
参考:http://onoz000.hatenablog.com/entry/2018/02/11/142347
~
~

**IPython の環境
IPython(アイパイソン)は Python を対話的に実行するためのシェルで、Python の機能の一部(対話処理)に、対話を強化する各種機能を追加したもの・・というイメージです。統計処理(データ読む>分析する>結果をグラフで表示する)など、作業を逐次的に進めていくプログラムの開発に向いています。

~

***Jupyter Notebook / Jupyter Lab
Jupyter Notebook / Jupyter Lab は、IPython というカーネルと、Notebook または Lab という Web UI をセットにした開発環境で、ブラウザ上でデータ処理とコメントなどを順次ノート形式で記録できるようにしたものです。ブラウザを動作基盤とした Webアプリケーションなので、環境に依存しない開発が可能です。 

-''Terminalからのインストールは''
 $ pip3 install jupyter(2系の場合はpip)

-''Terminalからの起動は''
 $ jupyter notebook 

-''Webブラウザが開発基盤となります''
jupyter notebook は、起動と同時にローカルサーバーとブラウザが同時に起動して、以下のようなアドレスで接続表示されます。
 http://localhost:8888/tree (Xampp デフォルトのローカルポート)
ブラウザ自体が開発環境となり、[QUIT] で終了するまで、Terminalの方は「音信不通」の状態になります。

注)''.html''拡張子 に対するアプリケーションの割付が「ブラウザ」になっていることが必要です。.html のダブルクリックでエディタが開くような割付設定を行なっていると、Notebookがうまく起動できないので注意して下さい。
~

***Google Colaboratory
[[GoogleColaboratory]] とは、Googleの仮想マシン上で動くIPythonの実行環境で、[[Jupyter Notebook>https://jupyter.org]] を利用します。Googleアカウントがあれば、ブラウザから誰でも無料で利用できます。
https://colab.research.google.com

記事を独立させました。> [[GoogleColaboratory]] 
~

***参考:Jupyter Notebookの公開について
分析の結果(JupyterNotebook)を他者に見せたい場合はどうするか・・
 JupyterNotebook のデータ(.ipynb)ファイルは、[[JSON]] 形式のテキストファイルなので、そのままだと意味不明の状態です。これを開発中のノート形式と同様に閲覧できるようにするには・・・

-GitHub にファイルを置く
https://github.com/koichi-inoue/JupyterNotebook/blob/master/DataVisualization02.ipynb
-[[GitHub]] にファイルを置く
GitHub には、.ipynb をレンダリングする機能があるので、リポジトリに置かれたファイルはノート形式で閲覧できます(ただし現状では時々エラー)

-nbviewer でGitHub のファイルをレンダリング
-[[nbviewer>https://nbviewer.org/]] でGitHub のファイルをレンダリング
nbviewer のレンダリングは優秀なので、こちらのサイトに誘導してリンク公開するとスムーズです。
https://nbviewer.jupyter.org/github/koichi-inoue/JupyterNotebook/blob/master/DataVisualization02.ipynb

#&aname(Library);
&aname(Library);
~
~

**Python ツール・ライブラリ
***ツール・ライブラリ等のインストール
Terminal からのインストールには、pip3(2系は pip)を使います。以下のように、コマンド入力はいたって簡単です。
 $ pip3 install pygame ← ゲーム開発用のライブラリ
 $ pip3 install pyopengl ← 3DCG用のグラフィックライブラリ
 $ pip3 install jupyter ← jupyter notebook
 $ pip3 install orange3 ← データマイニングツール Orange3
~

***ライブラリ紹介
-''Webアプリケーション''
--[[Django>https://www.djangoproject.com/]]:The web framework for perfectionists with deadlines.
[[Django Girls チュートリアル>https://tutorial.djangogirls.org/ja/]]

-''データ解析/分析'':以下のようなツールやライブラリがあります。
--[[NumPy>http://www.numpy.org/]]:行列演算等の数値計算モジュール(修正BSD)
--[[SciPy>https://www.scipy.org/]]:NumPyベースの数値解析(New BSD)
--[[Pandas>https://pandas.pydata.org/]]:データ解析用ライブラリ(BSD)
--[[matplotlib>https://matplotlib.org/]]:NumPyのためのグラフ描画ライブラリ(BSD)
--[[seaborn>https://seaborn.pydata.org/]]:matplotlibベースのビジュアライゼーションライブラリ(BSD)
--[[graph-tool>https://graph-tool.skewed.de/]]:グラフの操作および統計解析(GPL)
--[[scikit-learn>http://scikit-learn.org/stable/]]:NumPy, Matplotlib 互換の機械学習ライブラリ(BSD)
詳細:[[scikit-learn]]
--[[TensorFlow>https://www.tensorflow.org/]]:機械学習用ライブラリ(Apache License 2.0 by Google)
--[[Keras>https://keras.io/ja/]]:ニューラルネットワークライブラリ(MIT)

-''人工知能'':以下のようなツールやライブラリがあります。
--TensorFlow https://www.tensorflow.org/
--Keras https://keras.io/ja/
--Chainer http://chainer.org/
--Caffe http://caffe.berkeleyvision.org/
--Theano http://deeplearning.net/software/theano/index.html
--Torch http://torch.ch/
--scikit-learn http://scikit-learn.org/stable/
--PyML http://pyml.sourceforge.net/
--Pylearn2 http://deeplearning.net/software/pylearn2/
--PyBrain http://pybrain.org/pages/home

-''Game'':プログラミングを楽しく体験
--Pygame https://www.pygame.org/
--Pygame Zero https://pygame-zero.readthedocs.io/ja/latest/index.html

~

***インストール済みライブラリの確認
以下のコマンドで確認できます
 $ pip3 list
 Package            Version
 ------------------ -----------
 ipykernel          5.3.0
 ipython            7.16.1
 jupyter            1.0.0
 jupyter-client     6.1.5
 jupyter-console    6.1.0
 jupyter-core       4.6.3
 matplotlib         3.2.2
 notebook           6.0.3
 numpy              1.19.0
 pandas             1.0.5
 pip                20.1.1
  :
~

***ライブラリ・パッケージ・モジュール
-モジュールとは Pythonファイル(.py)のことで、ここでは最小単位です。
保存された.pyファイルは、他のPythonのプログラムから import で呼び出して使うことも出来ます。通常、このモジュールの中には、いくつかのクラスや関数が含まれています。
 
-パッケージとは、そのモジュールをいくつか集めてまとめたものです。
 
-ライブラリとは、いくつかのパッケージをまとめて一つのライブラリとしてインストールできるようにしたものです。

-''import 文の書き方''
--import pandas as pd
--import matplotlib.pyplot as plt
--from matplotlib import pyplot as plt
~
~

**APPENDIX
***Python 禅
Python 禅(The Zen of Python)は、Pythonプログラマが持つべき心構えを簡潔にまとめたものです。"Zen"は日本語の「禅」。Pythonインタプリタ環境で import コマンドを以下のようにタイプするとその文章を読むことができます。 
 $ python3
 Python 3.8.2・・・
 >>> import this
 The Zen of Python, by Tim Peters
 
 Beautiful is better than ugly.
 Explicit is better than implicit.
 Simple is better than complex.
 Complex is better than complicated.
 Flat is better than nested.
 Sparse is better than dense.
 Readability counts.
 Special cases aren't special enough to break the rules.
 Although practicality beats purity.
 Errors should never pass silently.
 Unless explicitly silenced.
 In the face of ambiguity, refuse the temptation to guess.
 There should be one-- and preferably only one --obvious way to do it.
 Although that way may not be obvious at first unless you're Dutch.
 Now is better than never.
 Although never is often better than *right* now.
 If the implementation is hard to explain, it's a bad idea.
 If the implementation is easy to explain, it may be a good idea.
 Namespaces are one honking great idea -- let's do more of those!
~
~