目次
- 目次
- データ解析ライブラリPandas
- インストール
- データファイルの読み込みと書き込み
- データフレームの作成
- データフレームの情報を取得する
- データの抽出
- データフレームの加工
- Pandasでピボット分析
- 10分で学ぶPandasが初心者にはおすすめ
- 参考資料
- MyEnigma Supporters
データ解析ライブラリPandas
Pandasは、データ解析を簡単に実行するための
Pythonライブラリです。
具体的には、データの読み込みや、
読み込んだデータからの、
目的データの抽出、
データの削除、追加などが
簡単に実行可能になります。
元々は統計解析によく使われる
Rという言語で使用されていた
データフレームという考え方を適応し、
Pythonで使用できるようにしたものらしいです。
インストール
基本的にはpipでインストールできるはずです。
pip install pandas
Windowsでpipでpandasをインストールした時にvcvarsall.batが無いと言われた場合
windowsにおいて、
pipでpandasをインストールしようとした時に、
下記のようなエラーが出ることがあります。
error: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat)
そんな時は下記の記事の通り、
Mirosoftが提供しているVisual C++ コンパイラをインストールしましょう。
コンパイラはここにあります。
データファイルの読み込みと書き込み
データをファイルから読んだり、
データをファイルに書き込む方法について説明します。
CSVファイルからの読み込み
read_csv関数を使いましょう。
この関数が素晴らしいのがcsvにラベルが付いている場合、
自動的にラベル付けをしてデータをpythonの辞書データとして格納してくれる所です。
例えば、下記のようなCSVファイルをread_csv関数で読み込んだ場合、
自動で最初の行をデータフレームのラベルとして読み込み、
その列のデータのラベルになります。
あとは、そのラベルを使ってデータにアクセスすることができます。
下記はそのサンプルプログラムです。
import pandas as pd data=pd.read_csv("sampledata.csv") #col3の列のデータを表示 print data["col3"]
この方法でデータを読み、利用することで、
CSVのデータのフォーマットが変わったとしても、
同じラベルが付いているデータは同じコードでアクセスすることができ、
ソフトウェアの再利用性が向上します。
また、ヘッダがついてないCSVファイルを読み込む時は、
下記のように、ヘッダ名を指定することができます。
pd.read_csv( 'foo.txt', names=('a', 'b', 'c') )
CSVファイルへの書き込み
to_csv関数を使いましょう。
データフレームをそのままCSVに変換できます。
#csvデータのエクスポート pd.to_csv("filepatg")
また、上記の方法では
データフレームのインデックスも保存されてしまいますが、
もしインデックスは保存したくない場合は、
下記のようにindex引数をFalseとすればOKです。
#csvデータのエクスポート pd.to_csv("filepatg", index=False)
データフレームの作成
ある時刻毎のデータフレームを作成
data_range関数を使うと、
ある日付から指定した区切り毎の日付のリストを返してくれます。
dates = pd.date_range('20130101', periods=6) df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD')) df
データフレームの情報を取得する
読み取ったデータフレームの情報を表示したい時は、
下記のサンプルコードで使用している変数や関数を使うと便利です。
import seaborn as sns iris = sns.load_dataset("iris") #サンプルデータセット print iris.index print iris.columns print iris.shape iris.info() print iris.describe() print iris.head(5) print iris.tail(10)
index変数
データフレームのデータ番号(行)を表します。
columns変数
データフレームのラベル(列)を表します。
shape変数
データの行と列の数をタプルで返します。
info関数
データフレームの型などの情報を表示します。
describe関数
データの簡単な統計情報を表示します。
返り値をprintする必要があるので注意が必要です。
head関数
データの頭から指定した行数を表示します。
tail関数
データの末尾から指定した行数を表示します。
データの抽出
pandasのデータフレームは、
色んな方法で一部分を取得することができます。
インデックスを使う
データフレームはindex名で取得できるので非常に便利ですが、
たまに、行列のように
ある列からある列までデータを取得したい時があります。
そんな時はixメンバにアクセスすることで、
行列のインデックスのような形で
部分データを取得することが可能です。
df = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']}, index=[0, 1, 2, 3]) print df # A B C D #0 A0 B0 C0 D0 #1 A1 B1 C1 D1 #2 A2 B2 C2 D2 #3 A3 B3 C3 D3 print df.ix[:,1:3] #1-3列を取得 # B C #0 B0 C0 #1 B1 C1 #2 B2 C2 #3 B3 C3 print df.ix[1:2,:] #1-2行を取得 # A B C D #1 A1 B1 C1 D1 #2 A2 B2 C2 D2 print df.ix[1:2,1:3] #1-2行と1-3列を取得 # B C #1 B1 C1 #2 B2 C2
インデックスとカラム名を使ってデータを取得する
atメソッドを使うことで、
インデックスの値とカラム名を指定して、
対応するデータを取得することができます。
import pandas as pd from numpy import random df = pd.DataFrame(random.randn(5,3),columns=list('ABC')) print df # A B C #0 0.256226 -0.261018 -2.246759 #1 1.040020 -0.019676 -0.488064 #2 2.059117 0.080764 0.360490 #3 2.061856 -0.538768 1.015353 #4 0.016484 -0.750428 -0.574846 print df.at[2,"A"] #2.05911699262
条件式を使う
条件文を使って、データを抽出することも簡単です。
フィールドAの値が50以上のデータ行を抽出したい場合は、
下記のようにします。
data.loc[(df["A"] > 50)]
下記のようにすると、条件を満たすB列を抽出できます。
data.loc[(df["A"] > 50), "B"]
isin関数を使う
isin関数を使うと、下記のようなデータフレームにおいて、
ある行にある指定した要素を含む行を簡単に取得できます。
df[df['E'].isin(['two','four'])]
データフレームの加工
データの欠損値(NaN)の削除
CSVファイルなどを読み込んだ時、
データが無い部分は、欠損値として
NaNが入れられます。
NaNが入った行を削除したい場合は、
dropna関数を使います。
data.dropna() #NaNの入った行を削除する data.dropna(axis=1) #NaNの入った列を削除する data.dropna(subset=["a"]) #aがkeyの列でNaNが入った行を削除する
NaNをある値に置き換えたい時は、fillna関数を使い、
NaNかどうかを判断する行列を取得したい場合は、
isnull関数を使います。
df1.fillna(value=5)
pd.isnull(df1)
データフレームの連結
データフレームを縦や横に連結する場合は、
concat関数を使います
(concatenate: 鎖状に繋げるという意味です)
pd.concat([df1, df2]) # 行方向に連結 pd.concat([df1, df2], axis=1) # 列方向に連結
データフレームのソート
下記のように、
軸でソートしたり、
df.sort_index(axis=0, ascending=False)
データ列でソートできます。
df.sort_values(by='B')
データフレームに関数を適用
データフレームに、ある関数を適用し、
その結果をデータフレームにしたい場合は、
apply関数を使います。
df.apply(np.cumsum)
データフレームの追加
下記のようにappend関数を使うことで、
データフレームを追加することも可能です。
df.append(df.iloc[2], ignore_index=True)
Pandasでピボット分析
Excelなどでよく実施するピボット分析をpandasで実施する場合は、
pivot_table関数を使うとOKです。
カテゴリデータを元に、集計解析などを実施することができます。
10分で学ぶPandasが初心者にはおすすめ
下記の公式ドキュメントにかかれている
10分で学ぶPandasがPandas初心者にはおすすめです。
参考資料
shower.human.waseda.ac.jp/~asaitaku/toolsManual/_sources/python/pandas/tips.txt
Web Analytics or Die » Blog Archive » Pythonデータ解析ライブラリpandasと遊ぶ:クロス集計~検定・残差分析まで
MyEnigma Supporters
もしこの記事が参考になり、
ブログをサポートしたいと思われた方は、
こちらからよろしくお願いします。