こんにちは。以下のトランザクション データをマトリックスに変換して、顧客が注文したさまざまな日の頻度をカウントしたいと考えています。
私は基本的に、2 年間の取引データに基づいて理解しようとしています。 customerID が購入した日数。
たとえば、顧客 ID 17850 には、周波数以下のデータセットの 1 のうち 1 つです (取引データからわかるように、その日は別のアイテムを購入しました)。
TABULATE を試していますが、単一の customerID の行と頻度 (固有の日に基づく) を計算する方法がわかりません。
集計結果の例 (ROWS ではなく、一意の日付に基づいています!):
PS: Excel にトランザクションデータを添付します
| 請求書番号 | 証券コード | 説明 | 量 | 請求書の日付 | 単価 | 顧客ID | 国 |
| 536365 | 85123A | ホワイトハンギングハートTライトホルダー | 6 | 2010/1/12 8:26 | 2.55 | 17850 | イギリス |
| 536365 | 71053 | ホワイトメタルランタン | 6 | 2010/1/12 8:26 | 3.39 | 17850 | イギリス |
| 536365 | 84406B | クリームキューピッドハートコートハンガー | 8 | 2010/1/12 8:26 | 2.75 | 17850 | イギリス |
| 536365 | 84029G | ニットユニオンフラッグ湯たんぽ | 6 | 2010/1/12 8:26 | 3.39 | 17850 | イギリス |
| 536365 | 84029E | 赤いウーリー湯たんぽの白いハート。 | 6 | 2010/1/12 8:26 | 3.39 | 17850 | イギリス |
| 536365 | 22752 | バブーシュカ ネストボックス 7 個セット | 2 | 2010/1/12 8:26 | 7.65 | 17850 | イギリス |
| 536365 | 21730 | グラススターフロストTライトホルダー | 6 | 2010/1/12 8:26 | 4.25 | 17850 | イギリス |
| 536366 | 22633 | ハンドウォーマー ユニオンジャック | 6 | 2010/1/12 8:28 | 1.85 | 17850 | イギリス |
| 536366 | 22632 | ハンドウォーマー レッドポルカドット | 6 | 2010/1/12 8:28 | 1.85 | 17850 | イギリス |
| 536367 | 84879 | アソートカラーの鳥のオーナメント | 32 | 2010/1/12 8:34 | 1.69 | 13047 | イギリス |
| 536367 | 22745 | ポピーのプレイハウスの寝室 | 6 | 2010/1/12 8:34 | 2.1 | 13047 | イギリス |
| 536367 | 22748 | ポピーのプレイハウスキッチン | 6 | 2010/1/12 8:34 | 2.1 | 13047 | イギリス |
| 536367 | 22749 | フェルトクラフト プリンセス シャーロット ドール | 8 | 2010/1/12 8:34 | 3.75 | 13047 | イギリス |
| 536367 | 22310 | アイボリー ニットマグ コージー | 6 | 2010/1/12 8:34 | 1.65 | 13047 | イギリス |
| 536367 | 84969 | 6色アソートティースプーンの箱 | 6 | 2010/1/12 8:34 | 4.25 | 13047 | イギリス |
| 536367 | 22623 | ビンテージ ジグソー ブロックのボックス | 3 | 2010/1/12 8:34 | 4.95 | 13047 | イギリス |
| 536367 | 22622 | ヴィンテージアルファベットブロックのボックス | 2 | 2010/1/12 8:34 | 9.95 | 13047 | イギリス |
| 536367 | 21754 | 住宅建築ブロックワード | 3 | 2010/1/12 8:34 | 5.95 | 13047 | イギリス |
| 536367 | 21755 | LOVEビルディングブロックワード | 3 | 2010/1/12 8:34 | 5.95 | 13047 | イギリス |
| 536367 | 21777 | メタルハート入りレシピボックス | 4 | 2010/1/12 8:34 | 7.95 | 13047 | イギリス |
| 536367 | 48187 | ドアマット ニューイングランド | 4 | 2010/1/12 8:34 | 7.95 | 13047 | イギリス |
| 536368 | 22960 | 瓶付きジャム作りセット | 6 | 2010/1/12 8:34 | 4.25 | 13047 | イギリス |
| 536368 | 22913 | レッドコートラックパリファッション | 3 | 2010/1/12 8:34 | 4.95 | 13047 | イギリス |
| 536368 | 22912 | イエロー コート ラック パリ ファッション | 3 | 2010/1/12 8:34 | 4.95 | 13047 | イギリス |
| 536368 | 22914 | ブルーコートラックパリファッション | 3 | 2010/1/12 8:34 | 4.95 | 13047 | イギリス |
| 536369 | 21756 | お風呂の建物のブロックワード | 3 | 2010/1/12 8:35 | 5.95 | 13047 | イギリス |
| 536370 | 22728 | 目覚まし時計 ベイクピンク | 24 | 2010/1/12 8:45 | 3.75 | 12583 | フランス |
| 536370 | 22727 | 目覚まし時計 ベイクレッド | 24 | 2010/1/12 8:45 | 3.75 | 12583 | フランス |
| 536370 | 22726 | 目覚まし時計 ベイクライクグリーン | 12 | 2010/1/12 8:45 | 3.75 | 12583 | フランス |
| 536370 | 21724 | パンダとウサギのステッカーシート | 12 | 2010/1/12 8:45 | 0.85 | 12583 | フランス |
| 536370 | 21883 | スターズ ギフトテープ | 24 | 2010/1/12 8:45 | 0.65 | 12583 | フランス |
これを行う別の方法。まず、Jim が言うように、顧客 ID を (Nominal または Ordinal のいずれかに) 変更します。現在の InvoiceDate を Character Nominal 変数に変更して、新しい日付列を作成します。左側 (請求書日付,10) を使用して、日付の新しい列を作成します。これにより、時間が削除されます。次に、顧客 ID の後に新しい日付列 (両方とも行) を指定して表を作成します。赤い矢印の部分で、データテーブルにします。
次に、列番号 (日付、顧客 ID 別) という式を使用して新しい列を作成します。これにより、各顧客が注文した個別の日数が得られます。
あなたの質問に対する解決策は非常に簡単です。これは対話形式で、またはスクリプトとして簡単に実行できます。 これらの手順はすべて、JMP の入門ドキュメントに記載されているため、時間をかけて読むことをお勧めします。利用可能なさまざまなコンポーネントの概要がわかります。
ヘルプ==>書籍==>JMPの使用
相互の作用:
1. JMPからExcelファイルを開きます。
ファイル==>開く
2. CustomerID は数値/連続列として開きます。Ordinal 値である必要があります。
3. InvoiceDate 列は、時間部分も表示されるようにフォーマットされています。InvoiceDate を数日内の時刻ではなく、別々の日として処理したいので、その列の列情報を開いて形式を「d/m/y」に変更します。
4. CustomerID/InvoiceDate ごとにデータを 1 行に要約するには、次のコマンドを実行します。
表==>概要
CustomerID と InvoiceDate の両方をグループ選択に入力し、「OK」をクリックします。
5. 次に、CustomerID ごとに 1 行に要約するために、新しく作成したテーブルに対して要約プラットフォームを再度実行します。
表==>概要
CustomerID 列をグループ選択に配置し、「OK」をクリックします。
結果のテーブルには要求された値が含まれます
以下のスクリプトは、基本的に上記の手順を対話的に実行し、各手順のスクリプトをスクリプト ウィンドウに保存することによって生成されました。以下のコードのほんの一部だけを書きました。JMP が生成しました。
names default to here(1);
// Open the Excel file
dt=Open(
// Change the below to the path to the Excel File
"<PATH to="" folder="">\Online Retail.xlsx");
// The CustomerID should not be treated as a continuous,
// analytical column of data, so
// Change CustomerID to an Ordinal Modeling Type
dt:CustomerID<<MODELING type="">Tabulate
// which will allow for the Calculation of the
// counts of the number of different InvoiceDates
dtSum1 << Tabulate(
Show Control Panel( 0 ),
Include missing for grouping columns( 1 ),
Add Table(
Column Table( Analysis Columns( :InvoiceDate ), Statistics( N ) ),
Row Table( Grouping Columns( :CustomerID ) )
)
);
// Or
// Run the Summary Platform again, but this time run it on
// the current Summarized data table to count the number of
// rows for each CustomerID
dtSum2 = dtSum1 << Summary(
Group( :CustomerID ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 )
);
// Now Clean up the N Rows name to # of Invoiced Days
dtSum2:N Rows << set name("# of Invoiced Days");</MODELING></PATH>