Python/Pandasなら文字数値混在csvも簡単読み込み!

  • このエントリーをはてなブックマークに追加

csvファイルは様々なソフトで互換性が高く、データフォーマットとしての汎用性が非常に高いファイルです。ここでは文字列と数値が混合されたcsvファイルをPandasで簡単に読み込みする方法を習得します。

Pandasは異なるデータ型を同時に扱える

Pandasとは?

Pandasとは、Pythonのデータ解析用ライブラリパッケージです。

Pandasには様々な統計解析用の関数があるため、機械学習用のデータ分析や金融系の計算によく活用されています。

Pandasの大きな特徴は、データをExcelのテーブルのようにデータフレームで扱うことができることにありますが、1つのデータフレームに文字列や数値等、様々なデータ型を同時に扱えることがPandasのメリットとなります。

まるで本当にExcelみたいですね!

今回使用するcsvファイル

今回は以下の画像に示す、当WATLABブログの8月までの運営記録をcsvファイル(エンコード:SHIFT-JIS)化してプログラムの例を説明します。名前は「Report.csv」です。

csvファイルの例

このデータは1行目が日本語のヘッダーとなっており、A列は2019という年を意味する数値が2行目のみに入っています。他のデータは整数があったり小数があったりといった所ですね。

ちなみに、記事数以外の数値はGoogle AnalyticsやGoogle Search ConsoleといったGoogleのプラットフォームを使って計測をしています。そのためGoogleのみに依存した計測結果ということになりますね。

csv処理のサンプルコードは、Pandasの他に同じくcsvファイルを扱うことのできるNumPyと比較をしてみます。

NumPyとPandasを比較!csv処理のコード

Advertisements

NumPyの場合のcsv読み込み:np.loadtxt

NumPyは当ブログのほとんどのプログラムに使われているので、僕にとってみればお馴染みのライブラリですが、画像処理や機械学習でも使われるので世間的にもPythonのメジャーライブラリです。

NumPyのcsv読み込みコードは以下に示すように「np.loadtxt」を使います。

まずはprintでデータを表示させてみましょう。data[1, 0]はcsvファイルの「2019」という数値を取得する部分です。

このコードを実行すると、以下の結果がコンソールに表示されます。

NumPyでもdtype='unicode'を指定することで日本語を読めるようになります。dtypeを指定しないとデフォルトはfloatなので日本語文字列を読んだ時点でコードエラーが出ます(やってみました)。

unicodeで読んでいるので、数値も全てのデータはstr型になっていることもわかりました。

Pandasの場合のcsv読み込み:pd.readcsv

続いてPandasの場合のcsvファイルの読み込みです。Pandasの場合は「pd.read_csv」を使います。

エンコードにencodingを使っています。これでSHIFT-JISを読み込めるようにします。

この設定の場合、ファイル内の2019という数値は(0, 0)になり、data.iloc[0, 0]と指標を指定して抽出します。locを使えばラベル名、ilocを使えば指標番号で抽出することができます。

上記コードを実行すると、以下の結果がコンソールに表示されます。

このように、日本語はしっかり読み込めているにも関わらず、数値は数値型として認識されていることがわかりました。

さらに、何も記載がない2019という数値の下には「NaN」が割り当てられています。NaNはNot a Numberの略で、欠損値を意味します。Pandasでは自動的に欠損値の割り当てをしてくれるんですね。

Pandasでcsvを読み込んでmatplotlibでグラフ表示

全コード

それではせっかくなのでPandasで読み込んだデータをグラフ表示させてみましょう!

なんとPandasでは「MONTH = data['月']」と、ラベル名でデータを抽出することもできてしまいます。さらにそのままmatplotlibに渡してグラフ表示もできてしまうという簡単さです。

以下に全コードを示します。少々長く感じますが、ムダにグラフ表示に凝っているだけです。

実行結果

以下が実行結果です。

ブログ運営数字が見事に可視化されました。

result

まとめ

本ページではPythonのデータ解析ライブラリパッケージであるPandasの概要を説明し、当ブログの運営数字を題材にグラフ表示までプログラミングしてみました。

NumPyにも良い所は多々ありますが、Pandasのデータフレームはより統計解析向けに使い勝手がよく設計されているようです。

異なるデータ型を同時に扱い、かつグラフ表示もスムーズにできることを確認しました。

今回初めてPandasを使ってみましたが、今後もお世話になりそうな使い勝手でした!
Twitterでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメント

コメントを残す

*