男のブログ俺は中卒だ。学歴なんて無くても生きていける。統計学suckamon最近、機械学習の分野に興味があり、回帰やディープラーニングなどのチューリアルをすることがよくある。中卒の俺に機械学習で必要な数学力があるわけもなく、チュートリアルの内容を完全に理解することができなかったので、まずは機械学習で必要な統計の基礎を勉強することにした。今後、勉強した内容は備忘録として記事にまとめていくことにする。今回は統計の基礎でもある縮約と言われる手法の中から度数分布表を作成する方法と、作成した表を元にヒストグラムと言われるグラフを作成する方法を紹介する。縮約とは統計の基礎概念といったところだろうか。何千件、何万件とあるデータを一つずつ眺めていても全体の特徴などは何も分からない。この散らばったデータを、あるルールに基づいて整理し必要な情報のみを抜き出すのが縮約と言われる手法だ。今回はpythonを使ってランダムに生成した身長データを使う。Notebookを開いて、以下のコードを入力してくれ。pd.DataFrame(height)df.to_csv("~/Desktop/height.csv")コードを実行すると170cmを平均値とした標準偏差10の身長データが100件生成されるはずだ。今回はこのバラバラの身長データを縮約し、このデータ群にどんな特徴があるかを確認してみよう。作成したCSVファイルを元に、これから度数分布表を作っていく。ステップ1データ群の中から最大値・最小値を見つける。ステップ2最大値から最小値までの範囲を5〜8程度の範囲(小区間)に区切る。この区間を階級と呼ぶ。ステップ3各階級の代表となる値を決める。通常はそれぞれの階級の中で真ん中の値を選ぶことが多く、これを階級値と呼ぶ。ステップ4それぞれの階級に属するデータの数をカウントする。ステップ5データ全体から見た、各階級の度数の割合を調べる。式でそれぞれの階級の相対度数を求める。全階級の相対度数の総和は必ず1になる。ステップ6その階級までの度数を合計した数を計算する。これを累積度数と呼ぶ。サンプルデータの度数分布表を作成するではここまで紹介した手順を元に度数分布表を作成してみよう。サンプルのcsvデータをExcelやNumbers、Googleスプレッドシートなどの表計算ソフトで開き、まずは最大値と最小値を求める。次に区切りのいい数字として、最小値143に近い140、最大値205に近い210を選び、140から210まで10cm刻みで7つの階級を作る。階級値としては真ん中の値を使うことにする。140〜149までの階級の場合、階級値は144になる。ここまでの手順で出来た度数分布表は次のとおり。次に度数を求めていく。作業用にF列・G列に各階級のx以上y以下のxy値を入力した。ここまで用意できたら度数のセルに以下の関数を入力し、度数を求めていく。※オートフィルを使って全てのセルに関数を適用してくれ。=countifs($A$2:$A$101,">="&F2,$A$2:$A$101,"<"&G2)度数を求めることができたら、追加した作業用列は非表示にしておこう。次に相対度数を求める。セルに以下の関数を入力してくれ。=H2/sum($H$2:$H$8)最後に累積度数を求めよう。単純な度数の足し算なので特に関数などは必要ないはずだ。表を見てもらったら分かるとおり、この表からは元々の情報(最小、最大値など)を確認することができなくなっている。生の情報が失われているということだ。生の情報は失われたが、その分この表から得られる情報は多い。サンプルデータ100件の身長は均等に分布しているわけではなく、特定の場所にデータが集中していることが分かる。160cm〜179cmの階級に集中している。※pythonでサンプルデータを生成した際に、平均値を170と指定したので、まぁ想定内の結果ではあるのだが。向かって大きく度数は下がっている。その度数の下がり方も8...3、9...4...1と似たような推移の仕方だ。データの分布は集中している階級を軸に、左右の対称性があるということが分かる。このことから、まずサンプルの身長データには平均値をベースにある範囲内で度数の分布が見られるが極端に小さい身長(100cmなど)や大きい身長(300cm)は見られない、また平均値の170cmあたりに集中する、平均値を基点に最小、最大両端に向かって似たような推移で現れにくくなる、といった特徴が見て取れる。ヒストグラムを作成する今度は作成した度数分布表を棒グラフにして、データを可視化していこう。x軸に階級値、y軸に度数を設定した棒グラフを作成する。Googleスプレッドシートで簡単に作成した図がこちらだ。グラフ化するとより直感的にデータの分布、特徴が分かりやすいはずだ。Notebook上でヒストグラムを表示する方法も紹介しておく。下記のコードを入力する。階級の数)統計学を勉強するにあたり、Pythonを使うことができれば、より簡単にデータをヒストグラム化することができるので、基本的なコードとJupyterの使い方は覚えておくと良いだろう。投稿ナビゲーション前のページへ「NichePhone-S」実機レビュー。当サイトはXserverで運営していますプロフィール中卒男15歳で熊本から単身大阪へ渡り、囲碁棋士になるための修行を積む。その後、紆余曲折ありプログラミングを学び職とする。現在プログラミングや統計、機械学習の勉強に合わせ、双子の育児に奮闘中。