Pandas プログラミング

データ解析でまずやるべき2つのこと【Dr. Python#4】

icon
historoid

こんにちは。@historoid1です。

今回からPandasの基本操作を学んでいきます。

データ解析でまずやるべき2つのこと

  1. データ全体を俯瞰する。
  2. 欠損値の有無を確認する。

たったこれだけです。

今回はPandasの操作に慣れつつ、データ解析をスタートしていきましょう。

前回までのおさらい

これまでのDr. Pythonでは、Google Colabのアカウント作成から、Pandasのデータフレームを作るところまで説明しました。

途中で理解が不十分だと感じたときも、前の記事に戻ってみてください。

前回の記事
icon
Google Drive上のファイルをGoogle Colabで読む方法【Dr. Python#3】

Google ColabとGoogle Driveを連携してエクセルファイルを読み込む手順を解説します。Pandasでのデータ解析の第一歩です。

データ全体を俯瞰する

まずはデータ全体をよく見て、どんな数値が入っているのかを確認しましょう。

今回使うデータを読み込む

今回はGoogle Colabにもとから入っているデータを使います。

import pandas as pd
df = pd.read_csv('/content/sample_data/california_housing_train.csv')

メモ

もし今後Google Colabにデータが用意されなくなったら、外部ライブラリのデータを使いましょう。

from sklearn import datasets
df = pd.DataFrame(datasets.load_iris().data, columns=['sepal length', 'sepal width', 'petal length', 'petal width'])

ちょっとコードの解説

今回あたりから、コードの解説も入れていきます。

df = pd.....としているのは、dfという名前(変数名)をつけて、右辺を代入していることを示しています。

変数名は何でも良いのですが、Python自体にすでに用意されている名前、数字から始まる名前などはダメです。

データの確認

df

これでデータ全体を見ることができます。

正確に言うと、dfという変数の中身を見ているのでデータフレームに限らず、用意した変数を見ることができます。

本当はprint(df)と書くのが正しいのですが、面倒なので変数名だけで中身を見ちゃいます。

するとこんなテーブルが表示されますね。

ここで注意してほしいのは、頭とお尻のデータしか見えてないってことです。

全体を見ているようで、真ん中のデータは見えていないんですね。

欠損値の有無を確認する

さて、次は欠損値の確認です。

私は「欠損値を先に確認しなさい」といろいろなところで話しています。

欠損値の確認を怠ったせいで、2日間が無駄になったからです。

欠損値を見逃した失敗

私のはじめてのデータ解析はタンパク質の質量解析で、受け取ったデータはエクセルファイルでした。

エクセルファイルを開くと、数千行のデータが並んでおり、すべてを見るのに数分スクロールしなければならない状態でした。そしてデータ全体は複数のシートからなる複数のファイルでした。そのため1行ずつ丁寧に見ることはせず、流して確認しました。

そして解析をはじめてしばらくしてから、原因不明のエラーが現れたのです。同じ処理をしているのに、特定のエクセルファイルの途中で処理が止まるのです。

原因を考え、処理を何度も修正しましたが、途中で止まります。

そのときは「途中で止まる」としか認識しておらず、「何番目のデータで止まるのか」とは考えていませんでした。そのためデータそのものに原因があるとは思いつかず、プログラムを延々と書き直していました。

その原因が欠損値でした。なぜか、あるファイルの1つのシートにだけ空白行が1行混ざっていたのです。

Pandasには、欠損値をスキップしてくれる処理とエラーになる処理が混在しています。解析途中までは欠損値をスキップする処理を行っていたため、問題が表に出なかったわけですね。それもあって、まさか「データそのものに原因がある」とは思いつかなかったのです。

この経験から、私は欠損値の確認をまずはじめに行うようになりました。

欠損値の有無を真偽値で確認する

df.isna()

これだけです。これで欠損値のところは、Trueになります。

見たところ、すべてFalseなので欠損値ではありませんね。

でも要注意です。頭とお尻の5行しか表示されていませんからね。

サンプルサイズが小さい標本だとこのコードでもよいのですが、今は17万件あるので「1つも欠損値はない」とは言い切れません。

欠損値が1つもないことを示す

では、欠損値が1つもないこと示すコードを書きましょう。

df.isna().any()

このような文字列が返ってきました。すべてFalseですね。

.any()「1つでもTrueがあれば、Trueを返す」機能を持っています。

もっと深く理解したい?

そろそろ「このコードの意味は何だ?」、「文法は?」と思う頃合いかもしれませんが、文法を理解するにはまだ早いです。はっきりいって、数行書いた程度では文法の説明を聞いてもピンときません。

何度か使ってみて、自分の頭の中にパターンを感じ始めたら文法の勉強をはじめましょう

この.isna().any()という書き方はオブジェクト指向プログラミングと呼ばれるものですが、オブジェクトの説明をしたところで今は理解できません。

抽象的なことを理解できるようになるのは、さまざまな具体的なものに触れたあとです。順番を間違えないでくださいね。繰り返しますが、今はまだ真似して書く段階です。

今の段階で「TrueだのFalseだのわからん」と感じるのは正しいことですが、説明がないからわからないのではありません。経験が圧倒的に少ないことが原因です。まずは書いてください。

さて返り値を見ると、列名ごとにFalseが並んでいますね。

すべての列に欠損値がなかったことを示しています。


今回はここまでです。欠損値が1つもないことがわかりました。

これで安心してデータ解析に進むことができます。次回は、Pandasの機能をもっと活用してみましょう。

-Pandas, プログラミング

© 2021 historoidのノート