データの加工をしていると、よく「これってどのような操作をしたら、思い通りの形になるんだろう?」という状況に出くわすことがあると思います。その代表的なものの一つに、Tidyrパッケージに入っているGatherコマンドによる操作があります。知っているととても便利な操作です。例をまじえながら、説明していきたいと思います。

どんなときに使うのか

まずは、世界銀行が提供している、国ごとに年度ごとの人口の推移のデータを例に見ていきたいと思います。

このデータは、行がそれぞれの国を、列がそれぞれの年度を表し、国と年度が交わるところが、その国のその年の人口を表しています。

このように列名がデータの一部になっている形のデータは、実際に他でも見かけることが多いのではないかと思います。個人的には、Excelが元になっているデータに多く見うけられる気がします。このようなデータの形はワイド型と呼ばれています。データが増えていくと(この場合だと、年度データが増えていくと)、横にワイドに増えていくようなデータの形、と覚えるとわかりやすいです。

この形のデータは、このままこれが完成形として使う場合にはわかりやすいのですが、ここからさらにデータを加工、分析する場合には不便です。例えば、前年度からの人口の増減の割合を、国ごとに表示するようなチャートを作ることを考えてみます。

Loading...

年度が列名になっている状態だと、このようなチャートをつくるのは至難の業です。この場合、データの理想的な形は、以下のように、年度が列ではなくデータの一部として入っている状態です。

このようなデータの形は、ワイド型に対してロング型と呼ばれています。こちらは、データが増えていくと、縦方向にロングに伸びてゆくデータの形、と覚えるとわかりやすいです。

使い方

Gatherコマンドは、まさに、ワイド型のデータをロング型に変換するコマンドです。上記の例のワイド型のデータをロング型に変換するの場合の Gatherのコマンドは以下のようになります。

gather(dataframe, Year, Population, `1959`:`2016`) 

Exploratoryで操作する場合、以下のように行います。

テーブルビューを表示し、変換の対象となる列のレンジの左端の列をクリックします。その列が選択されます。

変換の対象となる列のレンジの右端の列をシフトキーを押しながらクリックします。左端から右端までのすべての列が選択されます。

列ヘッダメニューからGatherコマンドを選択し、選択された範囲を選択します。

新規列名のキー列にYearを、列の値にPopulationを指定します。

実行すると、ワイド型のデータがロング型に変換されます。

まとめ

今回は、ワイド型をロング型に変換するGatherコマンドを紹介しました。Gatherコマンドの動きを図にまとめてみましたので、復習もかねて参考にしていただければと思います。


データサイエンスを本格的に学んでみたいという方へ

6月に、Exploratory社がシリコンバレーで行っている研修プログラムを日本向けにした、データサイエンス・ブートキャンプの第6回目が東京で行われます。上記のようなデータの加工に関する実践的なテクニックや、本格的なデータサイエンスの手法を、プログラミングなしで学んでみたい方、そういった手法を日々のビジネスに活かしてみたい方はぜひこの機会に、参加を検討してみてはいかがでしょうか。こちらに詳しい情報がありますのでぜひご覧ください。