GoogleのビジュアライゼーションAPIを使用して、私は生データに基づいてサブテーブルを作成するためにgoogle.visualization.data.groupを使用します。私の未処理データは、値以外の値を表示するために{v: "US"、 "f:" United States "}のトリックを使用しますが、集計関数を使用すると、フォーマットが削除され、" US "部分のみが残されます。グーグルビジュアライゼーションAPIでグループ化を使用して書式を保持する
元の書式を保持する方法はありますか、グループ集計を使用して作成したDataTableに簡単に追加する方法はありますか?
サンプルデータ:
[2010, {v:"MA", f:"Morocco"}, {v:"002", f:"Africa"}, {v:"002", f:"Northern Africa"}, 21.12724],
[2010, {v:"AW", f:"Aruba"}, {v:"019", f:"Americas "}, {v:"019", f:"Caribbean"}, 0.98],
[2010, {v:"AF", f:"Afghanistan"}, {v:"142", f:"Asia"}, {v:"142", f:"Southern Asia"}, 0.9861],
[2010, {v:"AO", f:"Angola"}, {v:"002", f:"Africa"}, {v:"002", f:"Middle Africa"}, 5.11774],
集計関数:
var countryData = google.visualization.data.group(
rawData,
[0, 1],
[{'column': 4, 'aggregation': google.visualization.data.sum, 'type': 'number'}]
);
編集:保証がないため、さらに思想に
が、それは形式を持つグループに、おそらく不可能ですその形式について各値は一貫しています。これを念頭に置いて、私のデータの各列にフォーマットを追加する関数を書くほうがよいでしょう。だから問題は「どうしたらいいの?」
私は本当にむしろフォーマットされていない値として生データを作成するのではなく、各値のフォーマットを検索するための追加のテーブルを作成します。これには、2つのテーブルが追加されます(1つは28行の領域用、もう1つは240行以上の国用)。次にグループ化されたテーブルの各値を調べる2つの関数を作成します(30年以上のデータ、何千もの行を意味します)。
これは本当に複雑な解決策のようです。
修飾子機能でこれを行う方法はありますか?テーブル内の各値を{v: "US"、f: "United States"}の形式のオブジェクトとして返す関数を記述できますか?または、元のテーブルの適切な値を検索し、その形式を採用する列フォーマッタを書く簡単な方法はありますか?それは私にとって(誰がそれを書かなければならないのか)、そして(それをロードしなければならない)ユーザのために、頭痛を最小限に抑えるだろうか?
EDIT 2:
私はこのようなものを使用して、新しいテーブルのフォーマッタを作成することができるはずのように見えます:
function (dt, row) {
return {
v: (dt.getValue(row, 1)/1000000),
f: (dt.getValue(row, 1)/1000000) + 'M'
}
}
しかし、問題は、私は数を扱っておりませんので、ということになり私は値を取るルックアップテーブルのいくつかの並べ替えを作成する必要があります、ルックアップテーブルでそれを検索し、適切な形式を返します。また、私はテーブル全体を何千行も繰り返す必要があるかもしれません。
ブルートフォースルーピングと値の割り当てがなければ、これを行う簡単な方法はないとは思いません。
編集3:
だから私はトリッキーなことを試しました。各行を値/フォーマットとして設定するのではなく、value/format部分を文字列として作成し、グループ化してからeval()を使用してオブジェクトを評価しました。これはうまくいった。ここで
[2010, "{v: 'MA', f: 'Morocco'}", 21.13],
[2010, "{v: 'AW', f: 'Aruba'}", 0.98],
[2010, "{v: 'AF', f: 'Afghanistan'}", 0.99],
[2010, "{v: 'AO', f: 'Angola'}", 5.12],
新しいコードされています:ここにデータがある
var countryCount = countryData.getColumnRange(0).count;
for (var i = 0; i <= countryCount; i++) {
countryData.setValue(i, 1, eval('(' + countryData.getValue(i,1) + ')'));
};
の問題は、これはGoogleのデータテーブルに、それは{Vを示したときにI出力: 'AE'、F: 'をアラブ首長国連邦}のevalで結果を確認することは適切に私を与えているという事実にもかかわらず:
>>> eval('(' + countryData.getValue(i,1) + ')')
Object v="AE" f="United Arab Emirates"
だから私はここで間違って何をやっていますか?