次の表形式のデータを考えてみましょう (ほんの一例)。
A,B,C,D,x,y,z
a0,b0,c0,d0,0.007,0.710,0.990
a0,b0,c0,d1,0.283,0.040,1.027
a0,b0,c1,d0,0.017,0.688,2.840
a0,b0,c1,d1,0.167,0.132,2.471
a0,b1,c0,d0,0.041,0.851,1.078
a0,b1,c0,d1,0.235,1.027,1.027
a0,b1,c1,d0,0.037,0.934,2.282
a0,b1,c1,d1,0.023,1.049,2.826
a1,b0,c0,d0,0.912,0.425,1.055
a1,b0,c0,d1,0.329,0.932,0.836
a1,b0,c1,d0,0.481,0.681,0.997
a1,b0,c1,d1,0.782,0.595,2.294
a1,b1,c0,d0,0.264,0.918,0.857
a1,b1,c0,d1,0.053,1.001,0.920
a1,b1,c1,d0,1.161,1.090,1.470
a1,b1,c1,d1,0.130,0.992,2.121
列A
、B
、C
、およびの個別の値の各組み合わせはD
、このテーブルで 1 回だけ発生することに注意してください。したがって、この列のサブセットを「キー列」、残りの列を「値列」と考えることができます。
このデータがいくつかのファイルにあり、次のようにこのファイルをコールバック引数にdata.csv
読み込むとします。d3.csv
data
d3.csv('data.csv', function (error, data) {
...
});
列が「ピボット」されるようd3.js
に変換するための便利な操作を探しています。これにより、変換されたテーブルの「値」列は、列の値を元の「値」列、、、、と「交差」させることによって得られるものであることを意味します。つまり、csv 形式では、変換されたテーブルは次のようになります。data
C
C
x
y
z
A,B,D,x_c0,x_c1,y_c0,y_c1,z_c0,z_c1
a0,b0,d0,0.007,0.017,0.710,0.688,0.990,2.840
a0,b0,d1,0.283,0.167,0.040,0.132,1.027,2.471
a0,b1,d0,0.041,0.037,0.851,0.934,1.078,2.282
a0,b1,d1,0.235,0.023,1.027,1.049,1.027,2.826
a1,b0,d0,0.912,0.481,0.425,0.681,1.055,0.997
a1,b0,d1,0.329,0.782,0.932,0.595,0.836,2.294
a1,b1,d0,0.264,1.161,0.918,1.090,0.857,1.470
a1,b1,d1,0.053,0.130,1.001,0.992,0.920,2.121
これを行う簡単な方法がない場合、より単純な (しかし有用な) バリアントは、最初に「値」列を 1 つを残してすべて破棄した後、同様の変換を行うことです。たとえば、列と列を破棄した後x
、y
列をピボットするC
と、(csv 形式で) 次のようになります。
A,B,D,c0,c1
a0,b0,d0,0.990,2.840
a0,b0,d1,1.027,2.471
a0,b1,d0,1.078,2.282
a0,b1,d1,1.027,2.826
a1,b0,d0,1.055,0.997
a1,b0,d1,0.836,2.294
a1,b1,d0,0.857,1.470
a1,b1,d1,0.920,2.121
簡略化は、元の値の列 ( )を、ピボットされた列 ( )z
の値 (この場合は) にちなんで名付けられた一連の列に単純に置き換えることができることです。c0
c1
C