Python

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


本サイトの内容

リンク先のファイルは、すべて .txt ファイルです。クリックすると、「download.txt」がダウンロードするので、適当な場所に保管して開いてください。
実行サンプルは「↓↓↓…」と「↑↑↑…」で囲んであります。この部分をGoogle Colaboratryの「コード」部分にコピーアンドペースト(ペーストは Cntl+V)して実行すれば結果が表示されます。

【基礎】
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 の用途は多彩ですが、ここでは統計的分析の分野をまとめました。
回帰・重回帰
基本統計量、共分散、回帰直線、相関係数、信頼区間、t分布、重相関
np.cov()、df.corr()
scikit-learn(sklearn)、linear_model、linear_model.LinearRegression()
主成分分析
相関行列の計算 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

利用環境の設定

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

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