データのより良い視覚化によるデータ分析の改善?


8

4つのプログラムを2つの異なるマシンでa, b, c, d 並行してXY別々に10回実行しました。以下はデータのサンプルです。10各プログラムの実行時間(ミリ秒)は、それぞれの名前で示されています。

Machine-X:

a b  c d
29 40 21 18
28 43 20 18
30 49 20 28
29 50 19 19
28 51 21 19
29 41 30 29
32 47 10 18
29 43 20 18
28 51 30 29
29 41 21 19


Machine-Y:

a b c d
16 24 19 18
16 24 19 18
16 23 19 18
16 24 19 18
16 24 19 18
16 22 19 18
16 24 19 18
16 24 19 18
16 24 19 18
16 24 19 18

以下を視覚化するためのグラフを作成する必要があります。

  1. マシンXとYの両方で、各プログラムのパフォーマンス(実行時間など)を比較します。
  2. マシンXとYの両方で、各プログラムの実行時間の変動を比較します。
  3. 各プログラムにコンピューティングリソースを提供するうえで公平なマシンはどれですか。
  4. XとYの両方のマシンで、各実行の4つのプログラムの合計実行時間(a + b + c + d)を比較します。
  5. 10回の実行における4つのプログラムの合計実行時間の変動を比較します。

1と2については、図Aを作成し、図Bは3、図Cは4と5を作成しました。ただし、3つのグラフがあり、3つのグラフすべてを私の論文に収めることは難しいため、満足できません。さらに、私たちはこれらよりも良いものを生産できると信じています。私の要件を満たしながら、誰かがRで3つではなく1つまたは2つの素晴らしいグラフを描くのを手伝ってくれる人がいてくれたら本当に感謝しています。これらのグラフを作成するために使用したRコードについては、以下を参照してください。

図A:

図A

図B:X軸は実行を示し、Y軸は特定の実行における4つのプログラムの実行時間を示します。

図B

図C:

図C

Rコード

> pdf("Figure A.pdf")
> par(mfrow=c(1,2))
> boxplot(x,boxwex=0.4, ylim=c(15, 60))
> mtext("Time", side=2, line=2)
> mtext("Running times of each program in 10 runs", side=3, line=2, at=6,cex=1.4)
> mtext("Machine X", side=3, line=0.5, at=2,cex=1.1)
> boxplot(y,boxwex=0.4, ylim=c(15, 60))
> mtext("Machine Y", side=3, line=0.4, at=2,cex=1.1)
> dev.off()



> pdf("Figure B.pdf")
> par(mfrow=c(1,2))
>  boxplot(t(x),boxwex=0.4, ylim=c(0,50))
> mtext("Run Number", side=1, line=2, at=12, cex=1.2)
> mtext("Fairness", side=3, line=2, at=12,cex=1.4)
>  mtext("Machine X", side=3, line=0.5, at=5,cex=1.1)
> boxplot(t(y),boxwex=0.4, ylim=c(0,50))
> mtext("Machine Y", side=3, line=0.4, at=5,cex=1.1)
> dev.off()


> pdf("Figure C.pdf")
> par(mfrow=c(1,2))
> barplot(t(x), ylim=c(0,150),names=1:10,col=mycolor)
> mtext("Run Number", side=1, line=2, at=14, cex=1.2)
> mtext("Total Running-Times in 10 Runs", side=3, line=2, at=14, cex=1.2)
> mtext("Machine X", side=3, line=0.5, at=5,cex=1.1)
> barplot(t(y), ylim=c(0,150), names=1:10,col=mycolor)
> mtext("Machine Y", side=3, line=0.5, at=5,cex=1.1)
> legend("topright",legend=c("a","b","c","d"),fill=mycolor,cex=1.1)
> dev.off()

回答:


12

他の回答者は有益な洞察を提供してくれましたが、私は彼らの見解のいくつかに同意していません。特に、私は、グラフィックスがどの示すことができると信じている詳細(雑然とされずに)データのをあからさまに要約したり、データを隠しているものよりも視野に、より豊かで実りある、と私は信じている全てのデータだけではなく、それらのために、興味深いものですコンピューターX。見てみましょう。

アルゴリズムとコンピューターによるタイミングプロット

(ここでは小さなプロットを示していますが、かなり多くの数値を小さなスペースで詳細に表示できると便利です。)

このプロットは、個々のデータ値をすべて示しています 80=2×4×10そのうちの。Y軸に沿った距離を使用して計算時間を表します。これは、人々が共通の軸上の距離を最も迅速かつ正確に比較できるためです(Bill Clevelandの調査が示しているように)。変動が実際の時間のコンテキストで正しく理解されるように、y軸はゼロまで拡張されます。正の値でカットオフすると、タイミングの相対的変動が誇張され、「ライファクター」が導入されます(タフテの用語で) 。

グラフィックジオメトリ(ポイントマーカーラインセグメント)は、コンピューターX(マーカー)とコンピューターY(セグメント)を明確に区別します。シンボリズムの変化(ポイントマーカーの形状と色の両方)と、x軸に沿った位置の変化は、プログラムを明確に区別します。(形状を使用することで、グレースケールレンダリングでさえも区別が確実に保持されます。これは、印刷ジャーナルで発生する可能性があります。)

プログラムには固有の順序がないように見えるため、コード名「a」、...、「d」でアルファベット順に提示しても意味がありません。この自由度を利用して、コンピューターXが必要とする平均時間で結果をシーケンスします。複雑さやインクを追加する必要がないこの単純な変更により、興味深いパターンが明らかになります。コンピューターYのプログラムの相対タイミングは、コンピューターXの相対タイミングとは異なります。これは統計的に有意である場合とそうでない場合がありますが、このグラフィックが思いがけなく明らかにするデータの特徴です。 それが、優れたグラフィックで実現できることです。

ポイントマーカーを十分に大きくすることにより、プログラムによって視覚的に全体の変動性のグラフィック表現にブレンドされます。(ブレンドによって一部の情報が失われます。オーバーラップが発生する場所は正確にはわかりません。これは、ポイントを水平方向に少し揺らして、すべてのオーバーラップを解決することで修正できます。)

このグラフィックだけでデータを表示するのに十分です。ただし、同じ手法を使用して、ある実行から別の実行へのタイミングを比較することにより、さらに多くのことが発見されます。

「フェアネス」プロット

今回は、基本的に横並びのパネルを使用して、水平位置でコンピューターYとコンピューターXを区別しています。(各パネルの周囲のアウトラインは、プロット全体で行いたい視覚的な比較を妨げるため、削除されています。)各パネル内で、位置によってランが区別されます。最初のプロットまったく同じように、同じマーカースキームを使用してプログラムを区別します。マーカーの形状と色は異なります。これにより、2つのプロット間の比較が容易になります。

2つのパネル間のマーカーパターンの視覚的なコントラストに注意してください。これは数値の表では提供されない即時性を備えています。コンピューターYのタイミングが非常に一貫していることに気づく前に注意深くスキャンする必要があります。

マーカーはかすかな破線で結ばれ、各プログラム内で視覚的なつながりを提供します。これらの行は余分なインクであり、データを提示するためには一見不要と思われるため、タフテ教授はそれらを避けているのではないかと思います。ただし、これらは、さまざまなプログラムのマーカーがほぼ重複している場所を整理するのに役立つ視覚的なガイドとして機能します。

繰り返しますが、実行は独立しているため、実行番号は意味がないと思います。もう一度、それを活用できます。各パネル内で別々に、4つのアルゴリズムの合計時間によって実行がシーケンスされています。(これは単なる注意散漫になるため、x軸は実行番号にラベルを付けません。)最初のプロットと同様に、このシーケンスは、各実行内の4つのアルゴリズムのタイミング間のいくつかの興味深い相関パターンを明らかにします。コンピュータXの変動のほとんどは、アルゴリズム "b"(赤い四角)の変更によるものです。これは最初の図ですでに見ました。ただし、最悪の合計パフォーマンスは、アルゴリズム "c"と "d"(それぞれ金色のひし形と緑色の三角形)の2つの長い時間が原因であり、これらは同じ2回の実行で発生しました。 プログラム "a"と "c"の両方の外れ値が同じ実行で発生したことも興味深いです。これらの観察は、コンピューターXのプログラムタイミングの変動に関する有用な情報を明らかにする可能性があります。これらのグラフィックはデータの詳細を示すため(棒や箱ひげ図などの要約ではなく)、変動と相関に関して多くのことがわかります。 -しかし、ここでは詳しく説明する必要はありません。自分で探索できます。

最初にデータの内容確認したかったので、データの「ストーリー」や「スピン」をまったく考えずにこれらのグラフィックを作成しました。 そのようなグラフィックは、おそらくUSA Todayのページを飾ることは決してないでしょうが、高速で正確な視覚的比較を可能にすることによってパターン明らかにする能力のために彼らは結果を科学的または技術的な聴衆に伝えるための良い候補です。(どちらに欠陥がないと言っているわけではありません。最初のジッターや、両方に優れた凡例と賢明なラベルを提供するなど、それらを改善する明らかな方法がいくつかあります)。しかし、グラフィックスが特定の視点を提唱したり押し付けたりすることを意図して作成されるべきであると私は納得しません。

要約すると、私はこのアドバイスを提供したいと思います。

  • 地図作成と認知神経科学に関する文献に見られる設計原則(Alan MacEachrenなど)を使用して、読者が意図したとおりにグラフィックを解釈し、読者から正直で偏見のない結論を導き出す可能性を高めます。

  • 統計グラフィックスに関する文献にある設計原則(例:Ed TufteBill Cleveland)を使用して、情報量の多い豊富なプレゼンテーションを作成します。

  • 実験し、創造的です。原則は統計的なグラフィックを作成するための開始点ですが、それらは破られる可能性があります。あなたが破っている原則とその理由を理解してください。

  • 単なる要約ではなく、啓示を目指してください。満足のいくグラフィックは、データに関心のあるパターンを明確に示します。素晴らしいグラフィックは予期しないパターンを明らかにし、私たちが事前に考えていなかった比較をするように私たちを誘います。新しい質問やその他の質問をするように促される場合があります。それが私たちの理解を進める方法です。


2
+1素晴らしい答え!最初と最後の段落だけでも簡潔に書かれた素晴らしいアドバイスであり、真ん中の詳細は素晴らしいグラフィックがどんなものであり、どのように見えるべきかを正確に示しています。
アーロンがスタックオーバーフローを去った

@whuber:すばらしい答えです!ありがとうございました。図に使用したコードも教えてください。Rコードですか?
サマラサ、2011

@kkpこれはRコードではありません。これらはMathematicaグラフィックです。(このソフトウェアへのアクセス権があれば、私が使用したコードを共有させていただきます。)plotlines、およびpointsコマンドを使用して、Rでエミュレートするのは簡単です。ほとんどの作業には、グラフィックスオプションの設定とデータへの水平座標の割り当てが含まれます。ggplotのようなパッケージは、この作業の一部を減らすかもしれません。
whuber

@アーロンありがとうございます。統計グラフィックスの専門家としてのあなたの意見は大歓迎です。
whuber

3

プロットは、読者に結果を解釈してもらいたい方法でデータを回転させるために、ストーリーを語らせます。持ち帰りメッセージは何ですか?あなたは彼らの心に何を守りたいですか?そのメッセージを決定し、それを図にする方法について考えます。

あなたのプロットでは、どのメッセージを学ばなければならないのかわからず、生データの多くを返してくれます---データそのものではなく、効率的な要約が必要です。

プロット1について、どのような比較をしたいですか?指定したグラフは、特定のコンピューターのプログラム全体の実行時間を示しています。特定のプログラムについて、コンピューター間で比較したいようです。この場合、コンピューターxのプログラムaの統計を、コンピューターyのプログラムaの統計と同じプロットに表示します。私はあなたが実際に行っている比較を容易にするために、同じ図の2つの箱ひげ図に8つの箱すべてを、ax、ay、bx、by、...の順に並べます。

同じことがプロット2にも当てはまりますが、このプロットは奇妙です。あなたは基本的にあなたが持っているすべてのデータポイントを示しています---各実行のためのボックスと実行には4つの観測しかありません。コンピューターxの合計実行時間とコンピューターyの合計実行時間の箱ひげ図を表示しないのはなぜですか。

同じ「データが多すぎる」という批判は、最後のプロットにも当てはまります。プロット3は、プロット2に新しい情報を追加しません。プロット2で平均時間に4を掛ければ、全体の時間を取得できます。ここでも、コンピューターxとyのそれぞれに対してボックスをプロットできますが、これらは文字通り、プロット2を置き換えることを提案したプロットの倍数になります。

私は@Andy Wに同意します。コンピューターyはそれほど興味深いものではなく、簡潔に示すためにそれをプロットから除外したいだけかもしれません(私が行った提案はこれらのプロットを削減するのに役立つと思います)。ただし、テーブルは非常に良い方法だとは思いません。


2

あなたのプロットは私には問題ないと思われ、スペースの制約がある場合は、3つの別々のプロットの代わりにすべてを1つのプロットに配置できます(たとえば、使用par(mfrow=c(3,2))して同じデバイスすべてに出力します)。

報告することはあまりありませんがMachine Y、プログラムを除いて文字通りバリエーションはありませんb。グラフは、実行時間がどれだけ長いかだけでなく、実行時間がMachine Xどれだけ変化しているかを確認するのに役立つと思います。

これが実際にユースケースである場合、すべてのデータをテーブルに配置するだけの単純なデータで、マシン間の違いを示すのに十分です(ただし、グラフをそれらに配置する余地がある場合は、グラフは依然として有用だと思います)。ドキュメントも)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.