人工知能ってよく聞くけどPythonでのサンプルコードを見てみたい
人工知能ってそもそもなんだろう
どんなライブラリを使うんだろう
Pythonを初めて学ぼうと思う方の中には、上記のように思う方も多いと思います。Pythonで人工知能や機械学習を実装できるって話はよく聞くけど実際にどうやってやるのかよくわからない…。
こんにちは、趣味でも業務でもPythonを用いています。かいです。
今流行りの人工知能ですが、実際に人工知能をPythonでどのように実装するのか疑問を抱いている人も多いのではないでしょうか?
そこで今回は、Pythonで人工知能を扱うときに必ず必要になってくるNumpyとPandasをサンプルコードを交えて解説いたします。
この記事はこんな人のために書きました。
- 人工知能ってそもそもなに
- Numpyのサンプルコードがみたい
- Pandasのサンプルコードがみたい
初心者必見の内容となりますのでぜひ最後まで御覧ください。
なお、Pythonの記事については、こちらにまとめています。
Pythonで人工知能を扱うには
さて、近年ブームの人工知能ですが、どのような技術で扱うのか気になる人も多いですよね。以降で人工知能に必要な技術、その技術を支える最低限のライブラリの使い方などを見ていこうと思います。
機械学習が必要である
人工知能の基盤となっている技術は機械学習というものです。機械学習とは、大量のデータを反復的に学習し、そこに潜むパターンを認識して新たなデータに当てはめることで将来を予測することが主な目的です。
将来を予測といってもそんな難しい話ではなく、レコメンド予測や、不正検知など身近で行われています。人工知能などについて詳しく知りたい方は以下の記事を参考にしてみてください。
必須なライブラリはNumpyとPandas
この機会学習をする上で避けては通れないライブラリが、NumpyとPandasなんですね。本記事ではその二つの使い方をサンプルコードを元にわかりやすく解説していくのでこんな感じで使うんだというだけでも是非参考にしていただければ幸いです!
Numpy
さて、まずはNumpyからみていきます。Numpyとは数値計算に特化したライブラリですが、主に以下3つのメリットがあります。
- コードが綺麗になる
- 高速
- 配列を扱いやすい
かなり重要な3点ですね。サンプルコードを見ていきましょう。
コードが綺麗になる
まずは、コードが綺麗になるという点についてみていきます。例えば、ある配列の要素に一定の重みをかけて出力するというコードをまずは、Numpyを使わずに書いて見ます。
orgin_list = [1,3,5,7,11] result_list = [] for i in range(len(orgin_list)): result_list.append(orgin_list[i] + 1) print(result_list)
[2, 4, 6, 8, 12]
内包表記などを使えばもっと綺麗にかけますが、それでもNumpyの方が綺麗なので割愛します。それでは、Numpyを使ったサンプルをみていきます。
import numpy as np orgin_list = np.array([1,3,5,7,11]) result_list = orgin_list + 1 print(result_list)
[2, 4, 6, 8, 12]
とてもシンプルになりましたね。
コードの解説をすると、一行目で、Numpyをnpという名前でインポートします。その後np.arrayで配列を作成し、その配列に加えたい重みを足すだけで良いです。
機械学習では、このような作業をよく行うのでNumpyではこのように簡単に行えるようになっています。
高速
次はNumpyを使った方が早いよ、ということを確認していきましょう。
確認には、こちらのプラグインを使って計測するのでコードは書きませんのでご了承ください。まずは、生のPythonを書いたときです。
orgin_list = list(range(10000)) result_list = [] for i in range(len(orgin_list)): result_list.append(orgin_list[i] + 1) print(result_list)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, … , 10000] [Finished in 1.67s]
このように、一万個の配列に処理をしたら、1.67秒かかっていますね。print部分は長いので手動で割愛してます。
今度はNumpyを使ってみましょう。
import numpy as np orgin_list = np.array([1,3,5,7,11]) result_list = orgin_list + 1 print(result_list)
[ 1 2 3 ..., 9998 9999 10000] [Finished in 0.296s]
このように、同じ処理をしても0.296と格段に早いですね。またprint部分も自動でいい感じに出力してくれてます。
配列の扱いが柔軟
機会学習ではよく行列というものを扱います。当然プログラムでもその行列を扱う必要があるのですが、それは2次元配列として扱います。
この時もNumpyを使うと、自由自在に配列を扱えます。例えばreshapeという関数を使うと、1次元の配列を2次元にしてくれます。
import numpy as np liner = np.array([1,3,5,7,9,11]) multidimensional = liner.reshape(2,3) print(multidimensional)
[[ 1 3 5] [ 7 9 11]]
reshape(行, 列)という形で指定するとそのような2次元配列が生成されます。簡単ですね。
他にも行列(2次元配列)の四則演算を行なったり、切り取ったりと様々な関数があり自由自在です。
Numpyに興味がでて、他にも使ってみたい!という方は以下の記事を参考にしてみてください。
Pandas
さて、次はPythonの機械学習2大ライブラリとも言われるPandasについて解説していきます。
Numpyは数値計算に特化したライブラリでしたが、Pandasは、文字列でも、時系列でも数値でも扱えるデータが広いことが特徴です。基本的には、データを効率よく分析するために使われるライブラリです。
CSVファイルや行列のデータを加工、分析するときに使うことが多いです。Pythonのcsvライブラリよりもできることが多く、コードも短くかけるのでとても重宝します。Pandasを利用するメリットを以下にまとめます。
- 様々なデータがを一つのデータとして格納できる
- 関数が豊富で、データ加工や解析がよしなに行える
それでは実際にみていきましょう。
異なるデータを一つのデータフレームに格納する
Pandasではデータの単位をDataFrameという独自の概念で切り分けています。また、データフレームを構成する1つのカラムをSeriesという単位で分けています。
簡単に言えばSeriesの集まりがDataFrameということですね。
import pandas as pd df = pd.DataFrame({ 'col_1' : [1,2,3,'say',4], 'col_2' : [5,6,7,'hello',8] }) print(df)
col_1 col_2 0 1 5 1 2 6 2 3 7 3 say hello 4 4 8
このように、一行目で、pandasをpdという名前でインポートし、pd.DataFrameという関数でデータフレームを作成します。文字列と、数値が混在しているデータを一つのデータとして出力できていますね。
関数が豊富で、データ加工や解析が柔軟に行える
これに関しては、関数がたくさんあってここでは紹介しきれないので、特定の値を抽出する方法だけみていきましょう。特定の値を抽出するには、ilocという関数を使います。
iloc[行, 列]という風に指定するので’hello’を抜き出そうと思えば以下のようになります。
import pandas as pd df = pd.DataFrame({ 'col_1' : [1,2,3,'say',4], 'col_2' : [5,6,7,'hello',8] }) print(df.iloc[3,1])
hello
簡単ですね。他にも様々な関数があるので利用用途によって調べて見てください。
Pandasを使う上で一番実務で使うのでcsv処理だと思いますので、必要な方は以下の記事を参考にしてみてください。
まとめ
いかがでしたでしょうか?
人工知能、機械学習に必須スキルであるNumpyとPandasについての説明と、サンプルコードを示してきました。各ライブラリを使いこなすためには、この記事の内容だけでな足りませんので、この記事を皮切りに必要に応じてマスターしていきましょう!
それでは!!