Python:pandasを調べる
文科省の情報Ⅱ教員研修用教材に pandas が出てくる。情報Ⅰには出てこない。「第3章 情報とデータサイエンス」の「学習11 データと関係データベース」ー「3 データサイエンスでのデータ活用」のこの部分。
この学習項目では,簡単なデータ操作ではなく,大量 のデータをプログラミングで処理,分析するデータサイエンスでのデータ利用の基本操作や用語を確認する。
プログラミング言語では,データベースやデータをそのまま扱うこともできるが,大変面倒である。その ためRやPythonではデータフレームと呼ばれる形でデータを扱う 図表4 。データを扱うことに向いたこれらの言語ではRDBをSQLで直接操作するよりもずっと簡単に高速にデータを読み込み,適切な形で処理することができる。
実際にGoogle DriveとGoogle Colaboratory( 以下Colabと略す)を使ってPythonでデータフレームを作成し,データの読み込みとデータ操作をしてみよう。 まず,データフレームに読み込むデータTestdata.csv(別添資料)をColabからアクセスできる場所に置くか,Google Driveにあるファイルならば,Google Driveをマウントする※。Google Driveを別ウィンドウで開い てマイドライブの中にできているColab Notebooks(Colabのためのフォルダ)にTestdata.csvを置く。これはあるクラス39人の小テストのダミーデータである。以下のたった数行のコードで表形式のデータを読み込み,データフレームとして扱うことができる。
1行目はPythonでデータフレームを扱うための パッケージの一つであるpandasを使えるようにしている。pdと名付けている。2行目のread_csv関数で データフレームをdfとして作成している。( )内の「 '(引 用符)」ではさまれた部分が読み込みたいデータのパス(最初にTestdata.csvを置いた場所)である。3行目はprint文を使って作成したデーフレームdfの中身を出力する。確認が不要であれば書く必要はない。
pandasのデータフレームでは,axis=0で同じ列内のデータ,axis=1で同じ行内のデータを対象に,集約計算やデータ削除の処理を行う。また,インデックスを使って行を指定することができる。これにより簡単に大量のデータから列や行の指定,削除ができる。 重複データや欠損値データの抽出機能もある。欠損値の削除や補完は学習12で扱う。
演習4
pandas によるデータフレームのメリットを感じてみよう。
特定の行のデータは以下の一行で削除できます。print() 文を使いどの行が削除されたか表示して確認しましょう。余裕があれば重複データを見つけ(別添資料 Test_csvimportD.ipynb),PlayersNo の列で 特定の番号のデータを指定して削除してみましょう。
・特定行の削除:df = df.drop(0)
・全く同じ重複データの発見:print(df[df.duplicated()])
・PlayerNo が重複したデータの削除:
df.drop_duplicates(subset='PlayerNo',keep='first',inplace=True)
ここでは,subset = ’PlayerNo’ で PlayerNo が重複したデータを抽出し,keep=’first で最初の重複デー タを残して inplace=True で元のデータフレームを置き換えています。
本文を読んだだけで,演習4ができるか。まず無理だ。
・図表4だけでデータフレームの概念と扱い方がわかるか
・コードを見て,CSVファイルがどのように読み込まれてデータフレームになるか
わかるか。
・「インデックスを使って行を指定することができる」とあるが,どのようにすれば行の指定ができるのか。
・「1行目はPythonでデータフレームを扱うための パッケージの一つであるpandasを使えるようにしている。」というのは,Pythonを知っていれば説明の必要もないこと。知らない人,あるいはpandasを使ったことがない人のために書いているとしたら,そういう人が,ここにかかれている説明だけでデータを扱えるはずがない。
つまりは,「pandas を使ってこういうことができますよ」という紹介に過ぎず,とても実習ができる内容ではない。
調べた。
その結果は,マニュアル「高校教員のための Python Reference」に記載した。8ページほどになったので,ここにそのまま掲載するには長い。ダウンロードして見ていただこう。さしあたって必要なことを拾い出しただけなので,pandas についてすべてが書かれているわけではない。
調べた結果,文科省の研修用教材へのツッコミどころも見つかった。
演習4の「・特定行の削除 : df = df.drop(0)」だが,これではちゃんと削除できない。これが正しく動くためには
・インデックスが0から始まる連番であって,かつ0行目を削除する場合に限る。
したがって「特定の番号のデータを指定して削除してみましょう」は,
インデックスが連番でないとできないし,本来 df.drop(インデックス) と書く
べき。
・drop メソッドは,削除した結果を返すもので,もとのデータフレームは変化し
ない。もとのデータフレームから削除してしまいたい場合は,このように代入
するのでなく,引数に inplace=True を書くべき。(結果は同じだが)
そのあとの「PlayerNo が重複したデータの削除」では inplace を使っている。
まあ,研修用教材にすべてを書くこともできないから,これでもいいのだろうし,「何を勉強しておけばいいか」という指針にはなる。しかし,調べてみてわかったのは,研修用教材を読んで内容を理解するためには,読む時間の数倍どころか数十倍の時間が必要だということだ。