1 2 Previous Next 15 Replies Latest reply on Aug 25, 2016 2:11 PM by Shinichiro Murakami

    欠けているデータがある場合の割合の出し方

    Akiya Mizukoshi

      いつもお世話になっております。

      水越と申します。

       

      欠けているデータがある場合に、割合の出し方で質問があります。

      下のようなデータがあるとします。

       

      年月性別来店者数
      2016-03-0151
      2016-03-0152
      2016-04-01 53
      2016-04-0154
      2016-05-0155
      2016-05-0156

       

      年月性別商品名購入者数
      2016-03-01コーヒー50
      2016-03-01コーヒー10
      2016-03-01パフェ2
      2016-03-01パフェ50
      2016-04-01コーヒー50
      2016-04-01コーヒー20
      2016-04-01パフェ1
      2016-04-01パフェ50
      2016-05-01コーヒー50
      2016-05-01コーヒー15
      2016-05-01パフェ50

       

      (5月は男性のパフェが0件なので、データとしては存在していません。)

       

      来店者数に対する購入者数の割合を出したかったので下記のような計算フィールドを作成しました。

       

      [購入割合]

      sum([購入者数])/sum([来店者数])

       

      そして、性別で分けるない場合と分ける場合で購入割合のグラフを出してみました。

       

      シート 1.png

       

      すると、性別でわけている場合は良いのですが、性別でわけない場合の5月のパフェの割合が大きくなりすぎています。

      計算フィールドの分母の sum([来店者数]) に、男性の来店者数が含まれていないからだと思います。

      本当なら (0+50) / (55+56)  ≒ 0.45 のはずなのに、 50 / 56  ≒ 0.89 になっているのです。

       

      このような場合に、正しくグラフを表示する方法はありますでしょうか。

        • 1. Re: 欠けているデータがある場合の割合の出し方
          lei.chen.0

          水越さん

           

          お世話になります。

           

          データソースはJOINではなく、データブレンディングを利用すれば、解決できます。

           

          詳細は添付ワークブックをご参照ください。

           

          宜しくお願い致します。

          1 of 1 people found this helpful
          • 2. Re: 欠けているデータがある場合の割合の出し方
            Akiya Mizukoshi

            なるほど!確かに望み通りになりました。

             

            データブレンディングを使うのですね。大変勉強になりました。

            ありがとうございました!

            • 3. Re: 欠けているデータがある場合の割合の出し方
              lei.chen.0

              お役に立ててよかったです

               

              粒度の違うデータソースを分析する時に、データブレンディングが非常に使いやすいです。

              典型的な利用シナリオはやはり予実比較ですね。

              • 4. Re: 欠けているデータがある場合の割合の出し方
                Shinichiro Murakami

                水越さん

                 

                別のケースでうまくいかないとお聞きしたので、ここに投稿してみます。

                基本的には、Lei Chen さんの Blending でよいです。

                 

                ただ、「より複雑になったケース」というのは、

                どのField で Relationships を 作るのかで結果が変わってきます。

                 

                たとえば、多くのLayerになった場合(年代をプラスするとか)、余り細かくしすぎると、

                Primary に 特定の年代のデータがないと、それらのデータが漏れてしまいます。

                 

                この例の場合、年月x性別 が 来店者数の Key Field なので、購入数がこれ以上細かくなっても、Relationshipsは

                この2 Fields のみでキープしないといけないです。

                 

                 

                 

                こちらで、Data Join のまま、計算式を作ってみました。いろいろ試しましたが、データ重複の実態から、以下が必要な算式のようです。

                [Visted Fixed]

                {fixed [年月] :MAX(if [性別]= "男" then [来店者数] end)}

                +

                {fixed [年月] :MAX(if [性別]= "女" then [来店者数]end)}

                 

                ただし、性別表示の時にはこれは使えません。

                Blending の場合だと、計算式はそのままで、性別を詳細に加えるかどうかだけで答えが変わるので、そちらの方が良いです。

                 

                いずれにしても、再度、より複雑なケースでtwbx ファイルをポストしてもらえれば、他の方もチャレンジできるかと思います。

                 

                村上

                 

                9.3 attached.

                1 of 1 people found this helpful
                • 5. Re: 欠けているデータがある場合の割合の出し方
                  Akiya Mizukoshi

                  村上さん、コメントありがとうございます。

                   

                  うまくいかないケースがあったので、最初よりも少し複雑にしたデータを作ってみました。

                   

                  来店者数のデータには年代と性別をキーとして来店者数が数字で入っています。

                  来店者数.png

                  また、購入数のデータには年代と性別と商品名をキーとして購入者数が数字で入っています。

                  購入数.png

                  来店者数と購入数はデータバインディングで繋げています。

                  購入率という計算フィールドを、 SUM([購入者数])/SUM([来店者数].[来店者数]) としました。

                  それをグラフにしたものがこれです。

                  購入率.png

                  コーヒーの購入率が0.43になっています。

                  来店者数全員の900人に対して、コーヒーの購入者数の301人の割合なので0.3344になって欲しいところです。

                   

                  どうしてこうなるかというと、来店者数が一部欠けて、10代(男、女、不明)、20代(男、女)、30代(男、女)の700人だと計算しているからだと思います。

                  これを何とかして、301/900=0.3344という計算にしたいと考えています。

                   

                  Tableauに入れる前にデータを加工して、欠けている部分に0を入れると、期待通りに動作することも確認しました。(添付の"購入数_0埋め.twbx"がそれです。

                  ただし、実際のデータで欠けている部分に0を入れると、元のデータに比べて何倍も大きくなってしまうので、できれば避けたいと思っています。

                   

                  こんなことが可能かどうかもわかっていないのですが、お知恵を貸していただけると助かります。

                  よろしくお願いいたします。

                  • 6. Re: 欠けているデータがある場合の割合の出し方
                    Shinichiro Murakami

                    これだけなんですよ。。

                     

                     

                    村上

                    1 of 1 people found this helpful
                    • 7. Re: 欠けているデータがある場合の割合の出し方
                      Akiya Mizukoshi

                      村上さん、返信ありがとうございます!

                      そして、私が説明不足な点があったのをお詫びします。

                       

                      たしかに年代のリンクを切れば、質問で書いた 301/900=0.3344 になるのですが、年代のリンクは切りたくはないのです。

                      たとえば、10代と20代だけを対象にして購入率を出したい、という場合を考慮しています。

                      追加質問した時にそう書いておけばよかったのに、回り道になってしまって申し訳ないです。

                       

                      10代と20代に限定すると、来店者数は600人で、コーヒーの購入者数は201人になってほしいです。

                      しかし、前に添付したtwbxファイルでは、来店者数は500人になってしまっています。

                      (20代の性別不明の100人をカウントできていないからだと思っています。)

                      購入数_10代と20代.png

                      0埋めした元データから作ったtwbxファイルでは、期待通りの結果になっています。

                      購入数_0埋め_10代と20代.png

                      今回のtwbxファイルも添付しておきます。

                      村上さんのように、数字をラベルで見えるようにしておきました。

                      • 8. Re: 欠けているデータがある場合の割合の出し方
                        Shinichiro Murakami

                        ご期待の機能をも持たせるためには、0を埋める方法でよいと思います。

                        いずれにしても、どのような組み合わせのフィルタでも正しい答えを返す方法は、現状のデータセットでは不可能だと思います。

                        ですので、できるとしても、性別、年齢で、フィルタの種類を変えるとか、結構ヘンテコなアプローチになります。

                        それであれば、0 を持ってきたほうが総合的には出来が良いと思います。

                         

                        ただ、データを拝見していて思ったのですが、全~然 違うアプローチを。。

                         

                        最初から

                        か、

                         

                        のような形でデータが構築されていれば、データソースを二つ持つ必要がないように思います。

                        入場者数だけが別になっているのには何か訳があるとは思うのですが、属性からはデータはひとつでいけるように見えます。

                         

                        これだと、Coffee と Pancake を同時に注文した人数なども算出できるので、より使いやすいように思いました。

                         

                        村上

                        • 9. Re: 欠けているデータがある場合の割合の出し方
                          Akiya Mizukoshi

                          村上さん、お返事ありがとうございます。

                           

                          0で埋める方法が良いとのことで、多少データが大きくなってもその作戦でいこうと思います。

                           

                          別のアイデアもありがとうございます。

                          実は元々はこういう構造でした。

                          実際はリアル店舗のデータではなくてWeb上のサービスなので、人数が1ヶ月に何万人もいて、数年分をまとめて扱うと大きすぎるので、データ形式を変更したという経緯になります。

                           

                          とはいえ、添付していただいたtwbxファイルは、私にとってはとても勉強になりそうです。詳しく拝見させていただきます。

                          • 10. Re: 欠けているデータがある場合の割合の出し方
                            Shinichiro Murakami

                            水越さん

                             

                            やはり、元のデータは違う構造ですよね。

                            タブローとしては、数百万件程度のデータは十分扱えると思いますが、元データの制約があるでしょうから、

                            おそらく簡単には変えられないのではないかと推測します。

                             

                            繰り返しになりますが、タブローそのものは、元データのまま扱うのがいちばん機動的です。

                            もし、機会があれば、データベース化の際に一工夫できれば、簡単になると思います。

                             

                            村上

                            • 11. Re: 欠けているデータがある場合の割合の出し方
                              Shinichiro Murakami

                              追加で。

                              いったん、 Lei Chen さんの回答に「正解」マークを付けて頂けるとありがたいです。

                               

                              村上

                              • 12. Re: 欠けているデータがある場合の割合の出し方
                                Shinichiro Murakami

                                別のアプローチを

                                 

                                下記のテーブルをまず作成します。

                                 

                                [購入者数2]

                                zn(lookup(sum([購入者数]),0))

                                テーブルを、必要なMeasure 来店者数、購入者数2のみにします。

                                以下のようにDataを選択します。

                                 

                                そのままClipboardから貼り付けます。

                                 

                                Clipboard 自身がデータソースとして入手できます。

                                Field名を分かりやすいように変更します。

                                今後、これ自身をデータソースとして使用します。

                                データソースをフィルタリングします。

                                計算式を加えて、Percentageを計算します。

                                [Konyusya-su]

                                if [Name of Dimension]="購入者数2 along Table (Down)" then [Number of People] END

                                 

                                [Raitensya-su]

                                if [Name of Dimension]="来店者数" then [Number of People] END

                                 

                                [Percentage]

                                sum([Konyusya-su])/SUM([Raitensya-su])

                                 

                                 

                                ちょっと面倒なのと、さらにもうひとつデータソースができてしまうのであんまり気持ちよくないですが、

                                Tableau 内で作業が完了します。

                                 

                                村上

                                1 of 1 people found this helpful
                                • 13. Re: 欠けているデータがある場合の割合の出し方
                                  Akiya Mizukoshi

                                  村上さん、何度もありがとうございます!!

                                   

                                  クリップボードをデータソースにできることを知らなかったのでびっくりでした。

                                  こういう加工方法もあるのですね。

                                   

                                  まだ理解が追いついていないので、手順を追いかけて理解してみます。

                                  • 14. Re: 欠けているデータがある場合の割合の出し方
                                    Shinichiro Murakami

                                    dynamicには使えないので、使用ケースは限定されますが、うまく使える状況であれば、まあ使えると思います。

                                    それと、このClipboard データソースをサーバーにパブリッシュしておけば、

                                    今後、元のデータが更新されたとき、

                                     

                                    ワークシートをコピー、

                                    ペースト、

                                    データソースをサーバーに上書きする形でパブリッシュ

                                     

                                    で、手作業は介在するものの、ルーティン化することも可能です。

                                     

                                    村上

                                    1 2 Previous Next