AI 実装検定への道(10)
AI 実装検定 A級合格へ向けて学習を進めています。
前回投稿が9回目で、引き続きGoogle Colaboratoryを利用してプログラミングの章を進めて書いています。
第9回では、直接DataFrameを作成すること、Google Colaboratoryに用意されたサンプルデータからcsvファイルを読み込むこと(これは、道草の中でも勉強したので嬉しいですね)、pandasでの欠損処理について「dropna」を習得し、何も指定しないと行方向に削除、「columns」をしているすると列方向で削除。axis=1でも同様で、0にすると行方向となることまで確認しました!
公式テキスト、244ページから再開です!
前回に引き続き、欠損値のあるデータフレームを見ていきます。
今一度、前回同様にdf2を生成しておきます。
(コード記述)
df2=pd.DataFrame([
[5, np.nan, 3],
[2, 6, 8],
[np.nan, 7, 9],])
df2
(結果)
ここに4列めを追加します。
(コード記述)
df2[3]=np.nan
df2
(結果)
これで、4列目に欠損値のみの列を追加できました。
この場合4列目のデータが全て欠損値なので、df2.dropna()とすると・・・
(コード記述)
df2.dropna()
(結果)
こんなふうに、すべてのデータが消されて、列のタイトル(columns)のみが残ることになってしまいます。行方向、列方向に閾値(threshold)を決めることもできるそうです。thresh=3とすると、欠損値でない要素が3つ以上ある行が残されます。
(コード記述)
df2.dropna(axis="rows", thresh=3)
(結果)
ここで、thresh=2として、欠損地でない要素が2つ以上・・・と考えましたが、設定ではどの行もそうなので、列方向に見ても面白くないですね・・・次に進みましょう。次は欠損値に数値を代入?(公式テキストには補いと書かれているが?)する方法を学びます。
まずは、サンプルを作成します。
(コード記述)
data1=pd.Series([5,np.nan,2,None,7], index=list("vwxyz"))
data1
(結果)
欠損値の部分に指定した数値で補うのが「fillna( )」。
やってみます。
(コード記述)
data1.fillna(9.8)
(結果)
これ、どういう時に役に立つのか分からないけど、例えばデータベースの欠損が出てしまった場合に、一応全体で成立させておかねばならないから、不都合のない秒数だけ入れておこうか・・・みたいな時に役立つんでしょうかね?
次は、「fillna( )」に続いて「method( )」。
これには、欠損値の前後の値で補う「ffill」と「bfill」があるそうです。
(コード記述)
data1.fillna(method="ffill")
(結果)
(コード記述)
data1.fillna(method="bfill")
(結果)
何だか、データ改竄のための手解きを受けているのでしょうかね??
ちょっと不思議ですが、欠損値が2つ続くような場合でも、出来るそうです。
(コード記述)
data2=pd.Series([2,5,np.nan,None,3,6,None,np.nan,7,9], index=list("lmnouvwxyz"))
data2
(結果)
もう一度、「method( )」に加えて、欠損値の前後の値で補う「ffill」と「bfill」を使ってみます。
(コード記述)
data2.fillna(method="ffill")
(結果)
(コード記述)
data2.fillna(method="bfill")
(結果)
ここまで、Seriesでの欠損値を見てきたが、次はDataFrameでやってみるようです。まずは、サンプルを生成します。
(コード記述)
df5=pd.DataFrame([{5,np.nan,8},{2,np.nan,1},{9,0,np.nan}])
df5
(結果)
ここでも「method( )」と欠損値の前後の値で補う「ffill」と「bfill」を使ってみるのですが、1次元のSeriesと違って、ここでは2次元のDataFrameなので、「axis」を使って行方向(1)、列方向(0)で指定するのだそうです。
(コード記述)
df5.fillna(method="ffill", axis=1)
(結果)
(コード記述)
df5.fillna(method="ffill", axis=0)
(結果)
では、次に「bfill」を使ってみます。
(コード記述)
df5.fillna(method="bfill", axis=1)
(結果)
(コード記述)
df5.fillna(method="bfill", axis=0)
(結果)
だいたい理解できたように思います。
今回は短いですが、第20講がここで終わったので、一区切りとします。
今回は、前回に引き続き欠損値について学びました。
欠損値でのみ列を追加したり、前回同様「dropna」を使って欠損値を削除したり、その方向を行方向、列方向に閾値(threshold)を決めて割愛する「thresh」。その後に、欠損値に任意のデータを置き換える「fillna( )」、それに続いて「method( )」を用いて欠損値の前後の値で補う「ffill」と「bfill」。2次元のDataFrameではさらに「axis」を使って行方向(1)、列方向(0)を指定するというところまで辿り着きました。
次回は、公式テキスト250ページか第21講「pandasでデータセットの連結と計算」から再開します。