スタートページ>
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