スタートページJavaScript他言語    →Python単体の文法

Python

Google Colaboratry環境でのPythonプログラミングに関する個人的メモです。
「ちょっと Python でもかじってみるか」というかたの参考にもなるかと思い公開しました。
Googleドライブのアカウントを取得するだけで、無料で自分のPCには何もインストールせずに使えるのですから。


基本編

Python単体

Pythonの文法
他のライブラリを利用しないときのPython単体の文法。これがすべての基本になります。
文法の網羅的解説ではなく、他言語の基礎があることを前提に Python の特徴を示します。
配列の扱いや文字列の扱い、出力命令での print() 関数に関しては別途とします。
文字列の取扱とprint関数
文字列の結合、分割などの操作
出力関数 print() では、改行や数値編集など、他言語とはかなり異なる機能を持っています。

配列の取扱

配列には、Python の list、NumPy の ndarray、Pandas の DataFrame があり、それぞれ異なる特徴があり、それに関する関数も異なります。Python のプログラミングでは、これをよく理解することがポイントになります。

配列の生成と要素表現
list、ndarray、DataFrame の入力方法と構造、要素の表現形式、それら配列間の変換を扱います。
配列の部分指定と行・列の追加
配列[i, j] の i, j を [ ] でくくり、特殊な表記をすることにより、部分指定できます。
  ・リスト形式  [k1, k2, k3, …] 列挙した行・列だけを取り出す
  ・スライス形式 [kmin: kmax: dk] 等間隔でで行・列を指定する
  ・条件指定方式 df[df.c1 > 30]    条件に合致した行・列を取り出す
  ・削除指定方式 df.drop([2, 4]) 条件に合致したものを削除(合致しないものを取り出す)
配列の計算
NumPy の nrdata, Pandas の DataFrame では、np.sqrt(marray) により全要素が平方根になりますし、marray = 100 とするだけで、marray の全要素が 100 になります。
配列間の加減乗除、行列の積、配列を扱う基本的な関数、ソート関数などについて実例と注意事項をまとめました。
DataFrame のSQLライクな操作
DataFrameはRDBと似た構造をもっており、Pandas はSQLの SELECT文に類似した機能があります。ここでは、RDB-SQLの観点から、DataFrame の操作をまとめました。

応用編

グラフ

棒グラフ・折線グラフ
グラフを描画するには、 Matplotlib のコンポーネント matplotlib.pyplot を用います。
ここでは、NumPyによる通常の配列と、Pandas の DataFrame から棒グラフと折線グラフを作成することを通して、Matplotlib の基本的な機能を理解します。
特に plot では、任意の陽関数 y = f(x) のグラフを描画することにも利用できます。
ヒストグラム
上の特別な形状であるヒストグラムを扱います。
散布図
散布図は、統計で広く用いられます。

統計・機械学習

Python の用途は多彩ですが、ここでは統計的分析の分野をまとめました。後述のAIへの橋渡しでもあります。

相関・回帰直線・信頼区間・重相関
基本統計量、共分散、回帰直線、相関係数、信頼区間、t分布、重相関
np.cov()、df.corr()
scikit-learn(sklearn)、linear_model、linear_model.LinearRegression()
統計分布関数 scipy
正規分布、二項分布、カイ二乗検定、t検定など scipy の紹介
classification, clustering, regression, dimensionality reduction
scikit-learn(sklearn)の紹介
代表的な機械学習のライブラリである scikit-learn の紹介(体系)
classification, clustering, regression, dimensionality reduction
主成分分析
相関行列の計算 np.corrcoef(m), df.corr()
固有値、固有ベクトルの計算 np.linalg.eig(相関行列)
主成分分析 scikit-learn(sklearn)FactorAnalysis FA
因子負荷量の計算 fa.components_, fa.fit_transform
判別分析
判別分析(フィッシャーの判別関数 numpy.linalg np.linalg.inv()
クラスター分析
非階層型クラスタリング「k-means法」from sklearn.cluster import KMeans
階層型クラスタリングの「ウォード法」
  from scipy.cluster.hierarchy import linkage, dendrogram, fcluster
ロジスティック回帰
各種要因からある事象が発生する確率を計算する手法
ナイーブベイズ分類器
あるデータがどのカテゴリーに属するものなのか判定する、ベイズの定理に基づく、機械学習の手法
  ・GBernoulliNB ベルヌーイモデル
  ・MultinomialNB 多項分布モデル
  ・GaussianNB ガウスモデル

ニューロンネットワーク

Python の拡張モジュールにはAIに関係するものが豊富にあり、AIモデルの開発には Python 系の言語を習得するのが適切だとされています。ここでは、ニューロンネットワークを用いた「教師あり学習」での最も初歩的な(私が何とか理解した)二つの例を掲げます。

二値分類モデル
最もシンプルな構造として、2つの特性値(x1,x2)を持つ組から、2つの出力値(1,-1)のいずれであるかを判別するモデルを作成して、ニューロンネットワークの基本的な概念を理解します。
パターン認識
パターン認識は、AI(人工知能)の応用分野の主流の一つになっています。ここでは、最も単純な例として、手書き数字を読み取る(0~9のいずれであるかを認識する)ことを取り上げました。

利用環境の設定

Webに多くの解説がありますので、ここでは省略します。

私へのメモ
  Google Chrome → 右上■ → ドライブ → python

Python の特徴

汎用目的の軽量インタプリタ言語
小規模な技術計算、事務処理、統計処理など多様な用途に利用できます。近年はAIのベース言語としても注目されています。
インタプリタで、画面に1行入力して実行すれば結果が表示されます。一連のプログラムをコピーアンドペーストして連続して処理できます。R言語と似た操作になります。
しかし、Javascript のようにHTML内に記述して、ブラウザで起動することはできません。
豊富な拡張モジュールとの連携
高度な汎用言語とは異なり、Python 自体は豊富な機能をもっていません。
後述のように、Python をベースにした多様な拡張モジュール(プレコンパイラのように動作する)が公開提供されており、それらを組み合わせてプログラムします。
プラットフォームが提供されている。
Python 関連ソフトは、Javascript や Java などと異なり、OSに標準装備されていません。
しかし、多くのプラットフォームが提供されており、クラウドで利用できます。います。前述のGoogle Colaboratryもその一つです。

代表的な拡張モジュール

このサイトで用いている主なものを列挙します。

NumPy

配列処理の基本的なライブラリです。
  import numpy as np として利用可能になり、np.xxx の形式で関数を記述します。
  x = np.array([10, 20, 30])   x[0]=10, x[1]=20
のように定義します。
  x += 1 とすれば [11, 21, 31] になります。
y = x[np.where(x > 15] とすれば y = [20, 30] になります。
    このように NumPy を用いることにより、forループなどが事実上不要になり簡潔な記述ができます。
  x.mean(), x.std() のような関数を豊富にもっています。
  np.linalg.eig(corr) (固有ベクトル、固有値)のような高度な関数も持っています。
ndarray は、主に数値的演算を目的としているので、通常は配列は数値だけになります。

Pandas

import pandas as pd として利用可能になり、np.xxx の形式で関数を記述します。
データをRDB(関係データベース)のような形式(DataFrame)でもちます。
  df = pd.DataFrame([['A', 'F', 158, 65, 56],
            ['B', 'M', 181 ,78, 70],
            ['C', 'M', 178, 68, 75],
            ['D', 'F', 162, 76, 52]],
           columns = ['氏名','性別','身長','胸囲','体重'])
のような形式で与えます。
  df['身長'] あるいは df.身長 とすると [[158],[181],[178],[162]] の列ベクトルが得られます。
df.身長.mean() のような df.NumPy と似た機能を持つだけでなく、SQLの SELECT 文の基本的な機能に匹敵する機能を提供します。
  df[['身長','体重']].query('性別'=='M')
(SQL SELECT 身長,体重 FROM df WHERE '性別'='M'; に相当)
実務的には、入力データを表計算のスプレッドシートをCSVファイルでもち、それをPandasでDataFrameとして読込み、直接に、あるいは必要に応じて ndarray の形式に変換して加工するのが一般的です。

Matplotlib

配列データをグラフ表示する機能です。
import matplotlib.pyplot as plt で利用できます。
  fig = plt.figure()
  ax = fig.add_subplot(1, 1, 1)
として画面を定義します。

データが ndarray か DataFrame かで、やや形式は異なりますが、どちらもほぼ同じ機能を持ち、bar(棒グラフ)、plot(折線グラフ)、scatter(散布図)など、一般に用いられるグラフはほぼ提供されています。
残念なことに、現在の Matplotlib は日本語表示をサポートしていません。対応策はありますが、Google Colaboratry の環境では複雑になります。

sklearn

因子分析やクラスター分析など、高度な統計分野に用いられます。 from sklearn.decomposition import FactorAnalysis as fa で利用できます。

参考URL