pandas(パンダス)はpythonのライブラリの一つで、データを効率的に扱うのに必要不可欠なツールになります。
データ分析や機械学習、ディープラーニングなど大量のデータを扱う際に役立つ他、数値以外にも文字列を扱うこともできるため、エクセルなどの表計算をまんまプログラミング化して効率化することも可能です。
そこで今回は、pandasで重要となる基本操作や便利な関数について解説し、次の3つの事例での活用方法を紹介したいと思います。
- データの読み込み(エクセルやcsvなどのファイル)
- データ加工(データ分析や機械学習用のデータ成形)
- データの保存やグラフ出力(結果の活用)
それぞれpandas以外の他のライブラリと組み合わせた使い方の事例となっていますので参考にしてみてください。
pandasのメリットとインストール方法
pandasは機能もたくさんあり便利ですが、別にpandasを使わなくても良いケースもあります。
まずはpandasを使うメリットを紹介し、pandasを使うための準備(インストール方法)について説明します。
具体的なpandasの使用例は後半で紹介します。
pandasを使うメリット
pandasを使うと効果的な場合としては、次の3つのような状況があります。
- 異なる型のデータをひとつのファイルとして扱う
- データが完全ではなく欠損値があったり補完が必要
- データの加工や解析を行う
このどれかに当てはまる場合、一般的には扱うデータ量が大きくなるほど、トラブルを生みやすく作業効率も下がってしまうものです。
逆に、pandasはこれらの対応が得意なツールとなります。
具体的な事例としては、
- 散在しているエクセルやCSVのファイルを整理する
- 機械学習用やデータ解析用にデータを成形する
- データを見える化したり、再利用する
などがあるかと思います。
pandasのインストール方法
それでは、pandasを使えるように準備をします。
といっても、pipを使ってコマンド1行でインストールは完了です。
pip3 install pandas
pythonとpipが使える環境を想定してますが、Macにpythonやpipをインストールする方法については【Macにイチからpythonを導入する手順!】所要時間は30分という記事で紹介していますので、参考にしてみてください。
pandasの使い方と事例3選
Pandasを利用するには、pandasのライブラリを読み込む(インポートする)必要があります。
import pandas as pd
pandasをpdという名前で扱えるようにするのが通例です。
DataFrameの作成
pandasは基本的に「DataFrame」という型を使います。
DataFrameは、エクセルシートのような2次元構造で、文字列や数値などの異なる型のデータをひとまとめにできます。(スプレッドシートやSQLのテーブルといった方が分かりやすい方もいるかと思います)
新規作成するとき
新規で作成する場合は下記のようにDataFrame関数を使ってデータを生成します。
data = pd.DataFrame({
'ID' : ['P1', 'P2', 'P3'],
'Name' : ['MacBook Pro 13', 'MacBook Pro 14', 'MacBook Pro 16'],
'Price(JPY)' : [148280, 239800, 299800],
'CPU' : [8, 10, 10],
'GPU' : [16, 32, 32],
})
リストを使うと以下のように作成することも出来ます。
list = [["P1", "MacBook Pro 13", 148280, 8, 16],
["P2", "MacBook Pro 14", 239800, 10, 32],
["P3", "MacBook Pro 16", 299800, 10, 32]]
columns = ["ID", "Name", "Price (JPY)", "CPU", "GPU"]
data = pd.DataFrame(data=list, columns=columns)
いずれの場合もdataの表示結果は次のようになります。
ID | Name | Price (JPY) | CPU | GPU | |
---|---|---|---|---|---|
0 | P1 | MacBook Pro 13 | 148280 | 8 | 16 |
1 | P2 | MacBook Pro 14 | 239800 | 10 | 32 |
2 | P3 | MacBook Pro 16 | 299800 | 10 | 32 |
カラム(columns)は表の列に相当しているのがわかると思います。
では、行に相当するのは?というとインデックス(index)といいます。
list = [["P1", "MacBook Pro 13", 148280, 8, 16],
["P2", "MacBook Pro 14", 239800, 10, 32],
["P3", "MacBook Pro 16", 299800, 10, 32]]
columns = ["ID", "Name", "Price (JPY)", "CPU", "GPU"]
index = ["one","two","three"]
data = pd.DataFrame(data=list, columns=columns, index=index)
このようにindexも指定してあげれば、結果は次のようになります。
ID | Name | Price (JPY) | CPU | GPU | |
---|---|---|---|---|---|
one | P1 | MacBook Pro 13 | 148280 | 8 | 16 |
two | P2 | MacBook Pro 14 | 239800 | 10 | 32 |
three | P3 | MacBook Pro 16 | 299800 | 10 | 32 |
使い方事例1:エクセル処理の代替
先ほど、DataFrameの構造と作り方を紹介しましたが、実際には既存のデータを読みこんでDataFrameとして格納するケースがほとんどでしょう。
まずはエクセルで処理していたような表計算をpandasを使ってプログラム化してみます。
ファイルを読み込むとき
csvファイルなら次の通り。
csv_data = pd.read_csv('./path/hoge.csv')
エクセルファイルの場合は、追加でインストールするライブラリが必要になります。
Excelファイルを読み取るライブラリであるxlrdが2.0.0からxlsファイルしか対応しなくなったので、2.0.0より古いバージョンの1.2.0を指定してインストールする必要があります。
pip3 install xlrd==1.2.0
読み込み方はcsvと同じように行えます。
excel_data = pd.read_excel('./path/hoge.xlsx')
ただ、古いバージョンを使い続けないといけないというのは少し気持ち悪いのと、誤ってアップグレードしてしまうと、またダウングレードが必要になってしまいます。
そこで、もう一つの手はopenpyxlをインストールするという方法です。
pip3 install openpyxl
openpyxlを使う場合は、read_excel関数の引数にengine=”openpyxl”と指定します。
excel_data = pd.read_excel('sample.xlsx',engine="openpyxl")
一度データを読み込んでしまえば、エクセルで行うような演算はなんでも出来ると思いますので一度試してみると良いと思います。
使い方事例2:機械学習用のデータ成形
ここでは、scikitlearnという機械学習用のライブラリも用いてdateframeを訓練データとテストデータに分割するといった加工をしています。
読み込んだデータをsciktlearnで分析したり、推論させたりといったことができるようになるので実用的です。
import pandas as pd
from sklearn.model_selection import train_test_split
data = pd.read_csv('sample.csv')
x_train_df, x_test_df = train_test_split(data, test_size=0.3)
使い方事例3:グラフ表示とデータの保存
下のコードは、最初の列をインデックスとして読み込んだデータ(index_col=0)の処理結果をグラフに描画しています。
import pandas as pd
excel_data = pd.read_excel('sample.xlsx',engine="openpyxl", index_col=0)
excel_data.plot(kind='bar')
グラフの描画で使われる定番のライブラリはmatplotlibですが、pandasにはmatplotlibの機能を扱うラッパーが存在していて、DataFrameをそのままmatplotlibで表示することができます。(kind=’bar’で棒グラフの他、’line’で折線、’scatter’で散布図なども描けます。)
plotメソッドはシンプルでお手軽ですが、グラフ化されるのは数値の列のみで文字列の列は除外され、index
がx軸として使われます。
慣れてきたらグラフ描画用のライブラリであるmatplotlibを使っていきましょう。また、グラフのビジュアルを良くしたい場合はseabornを使えばカッコよく仕上げることもできます。
また、作ったデータフレームは再度エクセルやcsvファイルに書き出すこともできます。
df.to_excel('sample.xlsx', sheet_name='new_sheet_name')
まとめ
今回はpythonの中でも役に立つpandasの使い方やメリットについて解説しました。
pandasの基本的な使い方を3つの事例で紹介しました。
- ファイルの読み込み
- データ加工
- グラフやファイル出力
細々とした使い方についてはその都度ググっていく必要がありますが、これらの一連操作さえおさえておけば、pandasを活用するイメージがつかめるのではないかと思います。