2016-04-27 7 views
0

私は、次のCSVを持っている:2つの列に1つのクロスフィルタ次元とグループ化?

ccgcode,ccgname,metric,male,female 
06M,Great Yarmouth And Waveney,3,24,76 
05G,North Staffordshire,3,46,54 
... etc. 

私はdc.pieChart()を駆動するSex次元の作成について取得するにはどうすればよいですか?私の質問は、具体的にはDimensionGroupのCrossFilterの側面であり、円グラフのレンダリング方法ではありません。

+0

あなたは本当にデータをクロスフィルターに適した形式に変換する必要があります。たとえば、 "Sex"ディメンションの値が "M"または "F"であるように変更する必要があります。値が「Count」ディメンションである必要があります。 –

+0

より細かいデータがあります。それが唯一の方法ですか? – Ciwan

+0

粒度はデータ内の情報の量が変化しないのと同じです。それは違うフォーマットです。これは唯一の方法ではありませんが、それが最良の方法です。別々の列にそれらを保持することは、あらゆる種類の問題を引き起こすことになりますが、ReductioやUniverseなどのヘルパーライブラリでは、より広いデータではなく、データを長くすることによる問題はほとんどありません。 –

答えて

2

Crossfilterは必要な2つの列を単純に合計することができないため、データを再フォーマットすることが最良の方法です(コメント内の会話による)。 Rに精通している場合は(reshape)のように動作するので、生データに触れることはできません。

このソリューションは、あなたのデータは、キーと値のペアを持つオブジェクトのリスト(かなり標準)である前提としています

data = [ 
    { ccgcode: '06M', ccgname: 'Great Yarmouth And Waveney', metric: 3, male: 24, female: 76 }, 
    { ccgcode: '05G', ccgname: 'North Staffordshire', metric: 3, male: 46, female: 54 }, 
...]; 

あなたが最初にあなたが(「融解」したくないすべての静的列を識別したいです

var staticColumns = ['ccgcode', 'ccgname', 'metric']; 

次に、meltを使用してオスとメスの列をグループ解除します。 Meltは(あなたのケースで、それはsexだ)あなたのデータ、あなたが溶融したくない列を取り込み、新たな溶融列の名前:

var ndx = crossfilter(melt(data, staticColumns, 'sex', 'count')); 
var sexDim = ndx.dimension(function (d) { return d.sex; }); 

次の次元で終わる:

sexDim = [ 
    { sex: 'male', count: 24, _id: 0, ccgcode: '06M', ccgname: 'Great Yarmouth And Waveney', metric: 3 }, 
    { sex: 'male', count: 46, _id: 1, ccgcode: '05G', ccgname: 'North Staffordshire', metric: 3}, 
    { sex: 'female', count: 76, _id: 0, ccgcode: '06M', ccgname: 'Great Yarmouth And Waveney', metric: 3 }, 
    { sex: 'female', count: 54, _id: 1, ccgcode: '05G', ccgname: 'North Staffordshire', metric: 3}, 
...]; 

は、すべてのバックをまとめて結びつける必要がある場合に備えて作成されています(ただし、静的な列もこれに役立ちます)。第5パラメータとしてfalsemeltに渡して_idプロパティを除外することができます。

そして男女別のグループあなたはまだすることができます:

var males = sexDim.group().reduceSum(function (d) { 
    if (d.sex === 'male') { 
    return d.count; 
    } else { 
    return 0; 
    } 
}); 

希望に役立ちます!

関連する問題