Pythonで動的棒グラフを作りGIFアニメーションを作る方法

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

Pythonには強力な可視化ツールとしてmatplotlibがある事が有名です。ここでは、Pandasによるデータ処理、棒グラフの値の動的操作、GIFアニメーション作成までを全てPythonで処理する方法を紹介します。

こんにちは。wat(@watlablog)です。ここでは動的棒グラフ作成からGIFアニメーション作成までをやってみます

本記事の目標

本記事で算出する動的棒グラフとは、以下のような動きのあるグラフです。

このように日付と連動して累積されていく検索数を見ていると、勢いのあるワード、順位の入れ替わりが一目瞭然です。

動きのあるプロットは使い所さえ見極めれば効果的なプレゼンを行う事ができます(但し、使いすぎは逆効果なので注意)。

今回はサンプルデータとして、有名なディープラーニングのフレームワーク(ディープラーニングのコードを組むために作られたライブラリ等の仕組み)を使いました(本当はもっとありますが、あくまで目的は動的グラフ作成のため)。

コーディングのキーポイント

本記事の最後に全コードを載せますが、ここに個別のコーディングキーポイントを示していきます。

Googleトレンドのcsvをそのまま使う

Googleトレンドをご存知でしょうか?

Googleトレンドは、入力したキーワードに対して過去の検索数を教えてくれるトレンド調査のツールです。このツールで色々なワードを比較する事で、今流行っている事を調査する事ができます。

データを分析する時、ユーザ側にファイルの加工を強いると途端に面倒になって使われないツールとなってしまう事があります。

そのため、本記事で紹介するプログラムコードは、Googleトレンドからダウンロードしたcsvをそのまま使う仕様としました。

以下はファイルを開くために作成した関数です。データサイエンスの世界で良く使われるPandasがかなり便利なので重宝しています。

Googleトレンドのcsvを一つずつ開き、プログラム内で.concatによる列方向の結合、列項目の書き換え、不要な行の削除、データ型の変換、累積和の計算といった一連の作業をこの関数の中で実行しています。

Pandasのその他基本操作は「Python/Pandasの基本操作!データフレーム行列の取扱い」を是非ご覧下さい。

データ/ラベル/色を常に大きい順にソートする

上に示した目標の動的棒グラフは値の大小が上下のデータで入れ替わるとnp.sortを使って自動的に大きい順にソートされるようにしています。

データだけ入れ替わるとラベルや色が追従しないため、pd.Series.argsortを使ってPandasデータフレームのデータソートした順番を取得し、その順番でラベル順序や色リストの順序を入れ替えます。データとラベル、色の3つを同一順番にコントロールする事で上記動的棒グラフを実現させています。

画像ファイルを使ってGIFアニメーションを作る

当ブログでは「Pythonのmatplotlibアニメーションで楕円の軌跡!」にてmatplotlibのArtistAnimationを使ったGIFアニメーション作成を紹介しました。

この方法でも良いのですが、画像ファイルをフォルダに入れておいてGIFアニメーションを作るという方法を覚えておけば、matplotlibを使わないで処理する時でも汎用的に使える技術になるため、今回はあえて蓄積した画像ファイルを使う方法を選択しました。

以下のコードがGIFアニメーションを作成する関数です。'out'というディレクトリにあるファイルを全てリストしていますが、この時sortedを付けないと画像がめちゃくちゃな順番になってしまう事があるので注意が必要です。

outディレクトリやファイルのリスト作成に拡張子を指定するといった事をすればより汎用的になると思います。

GIFの保存はimgs[0]で最初の画像を選択し、.saveメソッドでimgs[1:]とスライスを使って0番目以降の画像を選択します。dulationは1フレームあたりの持続時間、loop=0は無限ループをそれぞれ意味しています。loop=NとするとN回ループするGIFになります。

動的棒グラフを作成する全コード

最後に、全コードを以下に示します。forループでmatplotlibのグラフをいちいちクリアにしながら作っています(もっと効率良い方法あるかも?)。text()部分でdata.nameを使って日付をグラフにテキスト描画している所もポイントです。

まとめ

本記事では動的棒グラフ(この名称は当ブログだけかも?)の作り方を紹介しました。

コーディングのキーポイントとして、Googleトレンドのデータをそのまま使いユーザにデータ加工をさせないようにしたり、データソートをしたり、GIFを作ったりする所を紹介しました。

もしかしたらplotlyとか使えば簡単にもっと見栄えの良いグラフが作れるかも知れませんが、そっちはまだ調査していません。

今回はよくTwitterとかで流れてくる棒グラフの動画(テスラ社がぐんぐん成長していく様子で有名なやつ等)を自分で作ってみたらどうかなと思ってついやっただけです。公開はしましたが後悔はしていません。

特に躓く事無くすんなりと動きのあるグラフが作れました!
Twitterでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!

SNSでもご購読できます。

コメントを残す

*