Python 基礎7 外部データの取り込み方

Python 基礎7 外部データの取り込み方

今回の記事では外部データの読み込み方について解説したいと思います。クラウド上で引っ張ってくる方法を取り上げます。

ニューラルネットワークのコードを実装したとしても、外部からデータを読み込んでテストできなかったら、コードの性能を評価することができません。「外部データを取り込む」とは、Python コードの外からデータを引っ張ってくるという意味になります。

外部データを取り込むには、scikit-learn などの便利なライブラリを活用するなどの方法があります。ライブラリとは、「いろんなデータやメソッドを予め用意してくれているデータ群」のことです。

ライブラリを活用することで、私たちの作業工数と時間のロスが大幅に削減されます。

scikit-learn は 個人/商用 問わず、誰でも無料で使うことができます。アヤメの品種データやボストン市の住宅価格データ、数字の手書きデータなど、様々なテスト用のデータが用意されているものになります。

詳しくはこちらもみてみるといいでしょう。

機械学習の用途によって使うテストデータも違ったりします。用途とは、大きく分けて3つあります。分類、回帰、クラスタリングです。

ちょっとわかりにくいので、解説します。

機械学習ってそもそもなぜ作る必要があるのかというと、「人間よりも高い精度で予想ができるようにしたい」からです。

例えば「顔写真だけ見て、その人は今どのくらいストレスが貯まっているのかを判別できるようにする」、というのを高い精度で予想できるようになったらいいですよね。この例は回帰問題に該当します。どのくらい **** なのかを高い精度で予想するのは回帰問題です。

「雲の写真だけ見せて、その雲の種類はなにか」を判別させるのは分類問題です。雲の種類って実はとてもたくさんあります。一般の人は形状と名前なんて覚え切れません。回答となる答えの名前が明確な場合は分類問題です。

「顔写真だけ見せて、その人がどんな食習慣をしているかを判別させる」のはクラスタリング問題に該当します。食習慣って、いろんなタイプがありますよね。肉と野菜の比率が 10:0 の人もいるし、8:2、5:5、 0:10 の人もいます。きりがないくらいのグループ分けをすることが可能ですよね。クラスタリング問題とは「その人がどんなグループに属するのかを判別させる」というものです。

「どんな問題を高い精度で予想したいのか」によって、必要なサンプルデータも違ってきます。

雲の種類を回答させたいのなら教師あり学習というやり方で、雲写真と雲の種類を入力として与えます(分類問題)

どのくらいストレスが溜まってるのか判別させたいなら、学習用データとして顔写真とその人の健康データを入力させる必要があります(回帰問題)

どういった食習慣なのかを判別させたいなら、その人の顔写真と、生活習慣に関するデータを学習用データとして用意する必要があります(クラスタリング問題)

入力データの用途の意味について理解していただけたでしょうか?

ここが理解できたら機械学習の勉強がだいぶ前に進むのではないかと思います。

もし理解できないのなら、何度も読んでいただくといいですし、コメントでわかりにくい理由など書いていただけると嬉しいです^o^。

こう言ったことを踏まえて、次に進みましょう(^^;;。

scikit-learn ってどんな風に使うのか?

すいません、前置きが長くなりました。でも大事なところなのでわかってほしいです。

scikit-learn のコードを載せました。行の先頭に # がついている場合、緑色になっています。緑色になっている行というのは、コメントアウトされており、コードが無効化されます。sklearn というのはファイル名で、datasets というのは sklearn というファイルで定義されているクラスのことです。

データがズラーっと出てきました。本当は 150行 あります。配列の中に配列が入っている格好になっていますね。こういうのを二次元配列と言います。

iris = datasets.load_iris() という行をみてください。ここでは何をしているのかというと、 datasets クラスの中の アイリスの花に関するデータを取り込んでいます。load_iris() というのは、クラスメソッド名です。

データが 150行 4列になっています。これは 3品種 のアイリス、合計 150個 のデータを採取したものになります。花一個に対して萼(がく)長径と短径、花弁の長径と短径を測定したので 4列 になっています。

実行結果のところにたくさんのデータが出てきましたね。データの数が多すぎて画像の中に収まりきらなかったです。本当は 150 行あります。

print(iris_data.shape) と書くことで、iris_data 配列の中がどんな構造になっているのかを表示させることができます。先述したとおり、150行 の 4列 となっています。

一番上の from sklearn import datasets というのは、scikit learn を使うための決まり文句のようなものと覚えても構いません。ここで外部ファイルを取り込んでいます。

from 外部ファイル名 import メソッド名

↑こんな感じで記述をすると、外部ファイルに含まれるメソッドを、自分のコードで使うことができるようになります。クラス名を書いても構いません。ファイル名には拡張子 py は書く必要はありません。

import ファイル名

↑こんな感じで外部ファイルを取り込むこともできます。拡張子 py は書く必要はないです。この場合、外部ファイルに含まれるメソッドを使うときは

ファイル名.メソッド名

↑こんな風にすると使うことができます。メソッドの代わりにクラス名を書いてもいいです。

クラウド上で外部ファイルを取り込むたいときは階層まで意識する必要はありません。
ですが、ローカル端末上での外部ファイル(CSVファイルなど)を取り込むときは、 python コードを保存しているディレクトリや、
階層のことまで意識する必要があります。

上の階層のファイルを取り込むときや下の階層のファイルを取り込むときは、階層を考慮しなければならないので、
ちょっと複雑になります。ただ、クラウド上で取り込む場合、そんなに深く考える必要はないです。
今は階層のことまで気にしないでください。

ライブラリとはこんな風に、データを提供する機能を持つクラス、メソッドのことを言います。どうですか?なんとなく実体が見えてきたのではないでしょうか。

scikit-learn の提供する機能についてもっと知りたい方はこちらをみてください。このページを見ると、なんとなく実体が見えてくるのではないでしょうか?

はっきり理解する必要はありません。「こんなものだな」という理解で十分だと思います。

取り込んだデータを散布図で表示

次に取り込んだデータを散布図でみてみましょう。

コードの下半分を見てみましょう。

st_data = iris_data[:50] となっていますね( st_data = iris_data[0:50] と書いても構いません)。こうすることで iris_data 配列の中の、最初の 50行 を取り出すことができます。

最初の 50行 にはセトサという品種の、萼と花弁のデータが入っています。

次の行で vc_data = iris_data[50:100] となってますね。ここでバージカラーという品種の花のデータを取り出しています。ここでも同じように、50~100行 データを取り出しています。

50~100行 の中にはバージカラーいう品種のデータが入っています。


どうですか、外部データの取り込みって難しいと感じました?

私のブログって読みやすいですか?取り扱っている内容がとても高度なので、可能な限り読み砕いて、わかりやすくしているつもりです~_~;。

どうやったら読みやすくなるか、コメントをいただけると助かります(^^;;。

次回は散布図のプロットの仕方について解説をします。

長すぎになったので今回はここまでにしますね。

関連記事

コメント

この記事へのコメントはありません。

TOP