Python 数学、統計、機械学習:基本統計量、ヒストグラム

1.準備

Python環境に、以下のパッケージをインストール。

pip install {パッケージ}

パッケージ内容
numpy数値計算を効率的に行うための拡張モジュール
matplotlibグラフを描画するときなどに使われる標準的なライブラリ
scikit-learnオープンソース機械学習ライブラリ
pandasデータ解析を支援する機能を提供するライブラリ
scipy科学技術計算ルーチンの中核となるパッケージ

2.サンプルソース

2.1 対象データ

scikit-learn パッケージをimportすると、Boston データセット というボストン市の住宅価格のデータを利用できる。人工知能プログラミングのための数学がわかる本 から、各カラム説明を引用。

カラム

ボストンデータセット内容

CRIM 人口一人当たりの犯罪発生回数
ZN 25,000平方フィート以上の住居区画の占める割合
INDUS 小売業以外の商業が占める面積の割合
CHAS チャールズ川によるダミー変数
NOX NOxの濃度
RM 住居の平均部屋数
AGE1940年より前に建てられた物件の割合
DIS5つのボストン市の雇用施設からの距離
RAD環状高速道路へのアクセスのしやすさ(1-24の間隔尺度)
TAX $10,000あたりの不動産税率の総計($)
PTRATIO 教師1人が持つ生徒の数
B1,000×(黒人比率(%)-0.63) ^2の式で計算される指数
LSTAT給与の低い職業に従事する人口の割合
MEDV 住宅価格の中央値

2.2 ソースコード

scikit-learn の Boston データセットをロード、指定したカラムの基本統計量と、ヒストグラムを表示させる。

from sklearn import datasets
import pandas as pd
import matplotlib.pyplot as plt
import math

title_dict = {'CRIM':      'per capita crime rate by town'
              ,'ZN':       'proportion of residential land zoned for lots over 25,000 sq.ft.'
              ,'INDUS':    'proportion of non-retail business acres per town'
              ,'CHAS':     'Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)'
              ,'NOX':      'nitric oxides concentration (parts per 10 million)'
              ,'RM':       'average number of rooms per dwelling'
              ,'AGE':      'proportion of owner-occupied units built prior to 1940'
              ,'DIS':      'weighted distances to five Boston employment centres'
              ,'RAD':      'index of accessibility to radial highways'
              ,'TAX':      'full-value property-tax rate per $10,000'
              ,'PTRATIO':  'pupil-teacher ratio by town'
              ,'B':        '1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town'
              ,'LSTAT':    '% lower status of the population'
              ,'MEDV':     'Median value of owner-occupied homes in $1000\'s'}

def basic_statistics(feature_index):
    """
    基本統計量とヒストグラム
    :param feature_index:feature_index:['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT']
    :return:
    """
    boston = datasets.load_boston()
    df = pd.DataFrame(boston.data)
    df.columns = boston.feature_names

    x = df[feature_index]
    print(x.describe())

    from pprint import  pprint
    print(pprint(dir(x)))

    desc = """
    count={0}
    mean={1:f}
    median={2:f}
    std={3:f}
    min={4:f}
    25%={5:f}
    50%={6:f}
    75%={7:f}
    max={8:f}
    """.format(
        x.count(),
        x.mean(),
        x.median(),
        x.std(),
        x.min(),
        x.quantile(.25),
        x.quantile(.5),
        x.quantile(.75),
        x.max())
    
    # ヒストグラムの柱の数をデータ数の平方根とする
    plt.hist(x, bins=int(round(math.sqrt(x.count()),0)),
             rwidth=0.8, label=desc)

    plt.title(title_dict[feature_index])
    plt.legend()
    plt.show()


if __name__ == "__main__":
    basic_statistics('RM')

2.3 出力されたヒストグラム

hist01

3.確認

3.1 基本統計量

http://www.trunktools.jp/services/analysis/basis.html

上記、x.describe() にて基本統うよb計量を一括で出力。個別に取得する場合には、メソッドを呼ぶ。

項目 意味個別に取得
count 標本数count()
mean 平均mean()
std 標準偏差std()
min 最小値min()
25% 第1四分位quantile(.25)
50% 中央値(第2四分位)quantile(.5)
75% 第3四分位quantile(.75)
max 最大値(第4四分位)max()

四分位

3.2 ヒストグラムの出力

bins ヒストグラムの棒の数について、EXCELビジネス統計分析

絶対こうしなければいけないという決め事はありません。一般的に実務の世界では、データの個数の平方根を使って区間の数を決めます。専門的にはスタージェスの公式などがありますが、ここではより簡単で便利な方法を使っています。

に従う。ヒストグラムの範囲の決め方

https://pythondatascience.plavox.info/matplotlib/%E3%83%92%E3%82%B9%E3%83%88%E3%82%B0%E3%83%A9%E3%83%A0

matplotlib.pyplot.hist(x, bins=10, range=None, normed=False, weights=None,
                       cumulative=False, bottom=None, histtype='bar',
                       align='mid', orientation='vertical', rwidth=None,
                       log=False, color=None, label=None, stacked=False,
                       hold=None, data=None, **kwargs)

x (必須)ヒストグラムを作成するための生データの配列。
binsビン (表示する棒) の数。階級数。(デフォルト値: 10)
rangeビンの最小値と最大値を指定。(デフォルト値: (x.min(), x.max()))
normedTrue に設定すると正規化 (合計値が 1 になるように変換) を実施。 (デフォルト値: False)
cumulativeTrue に設定すると、累積ヒストグラムを出力。 (デフォルト値: False)
bottom各棒の下側の余白を数値または配列で指定。
histtype‘bar’ (通常のヒストグラム), ‘barstacked’ (積み上げヒストグラム), ‘step’ (線), ‘stepfilled ‘ (塗りつぶしありの線) から選択。 (デフォルト値: ‘bar’)
align各棒の中心を X 軸目盛上のどの横位置で出力するか。 ‘left’, ‘mid’, ‘right’ から選択。(デフォルト値: ‘mid’)
orientation棒の方向。’horizontal’ (水平方向), ‘vertical’ (垂直方向) から選択。(デフォルト値: ‘vertical’)
rwidth各棒の幅を数値または、配列で指定。
logTrue に設定すると、縦軸を対数目盛で表示します。
colorヒストグラムの色。配列で指定し、データセット単位で色を指定することができます。
label凡例を載せる際に使用します。
stackedTrue に設定すると積み上げヒストグラムで出力します。False に設定すると、横に並べて出力します。