您好,我想將下面的交易數據轉換成矩陣來計算客戶在不同日期下訂單的頻率。
我基本上是想根據 2 年的交易數據弄清楚。 客戶 ID 購買了多少天。
例如,客戶 ID 17850 有頻率下面數據集中的 1(它在當天購買了不同的物品,如您在交易數據中所見)。
我正在嘗試 TABULATE,但不確定如何得出單個 customerID 的行和頻率(基於唯一日期)。
製表結果示例(基於唯一日期,而不是行!):
PS:我附上了帶有交易數據的excel
| 發票號碼 | 股票代號 | 描述 | 數量 | 發票日期 | 單價 | 客戶ID | 國家 |
| 536365 | 85123A | 白色掛心T型燈座 | 6個 | 1/12/2010 8:26 | 2.55 | 17850 | 英國 |
| 536365 | 71053 | 白色金屬燈籠 | 6個 | 1/12/2010 8:26 | 3.39 | 17850 | 英國 |
| 536365 | 84406B | 奶油色丘比特之心衣架 | 8個 | 1/12/2010 8:26 | 2.75 | 17850 | 英國 |
| 536365 | 84029G | 針織聯盟旗幟熱水瓶 | 6個 | 1/12/2010 8:26 | 3.39 | 17850 | 英國 |
| 536365 | 84029E | 紅色 WOOLLY HOTTIE 白色心形。 | 6個 | 1/12/2010 8:26 | 3.39 | 17850 | 英國 |
| 536365 | 22752 | 7 件套巴布什卡巢箱 | 2個 | 1/12/2010 8:26 | 7.65 | 17850 | 英國 |
| 536365 | 21730 | 玻璃星形磨砂 T 型燈座 | 6個 | 1/12/2010 8:26 | 4.25 | 17850 | 英國 |
| 536366 | 22633 | 暖手器聯盟傑克 | 6個 | 1/12/2010 8:28 | 1.85 | 17850 | 英國 |
| 536366 | 22632 | 暖手器紅色圓點 | 6個 | 1/12/2010 8:28 | 1.85 | 17850 | 英國 |
| 536367 | 84879 | 各種顏色的小鳥裝飾品 | 32 | 1/12/2010 8:34 | 1.69 | 13047 | 英國 |
| 536367 | 22745 | 波比的劇場臥室 | 6個 | 1/12/2010 8:34 | 2.1 | 13047 | 英國 |
| 536367 | 22748 | 波比的劇場廚房 | 6個 | 1/12/2010 8:34 | 2.1 | 13047 | 英國 |
| 536367 | 22749 | FELTCRAFT 夏洛特公主娃娃 | 8個 | 1/12/2010 8:34 | 3.75 | 13047 | 英國 |
| 536367 | 22310 | 象牙色針織馬克杯 COSY | 6個 | 1/12/2010 8:34 | 1.65 | 13047 | 英國 |
| 536367 | 84969 | 一盒 6 種不同顏色的茶匙 | 6個 | 1/12/2010 8:34 | 4.25 | 13047 | 英國 |
| 536367 | 22623 | 一盒復古拼圖積木 | 3個 | 1/12/2010 8:34 | 4.95 | 13047 | 英國 |
| 536367 | 22622 | 一盒復古字母積木 | 2個 | 1/12/2010 8:34 | 9.95 | 13047 | 英國 |
| 536367 | 21754 | 家庭積木詞 | 3個 | 1/12/2010 8:34 | 5.95 | 13047 | 英國 |
| 536367 | 21755 | 愛積木詞 | 3個 | 1/12/2010 8:34 | 5.95 | 13047 | 英國 |
| 536367 | 21777 | 金屬心形食譜盒 | 4個 | 1/12/2010 8:34 | 7.95 | 13047 | 英國 |
| 536367 | 48187 | 門墊新英格蘭 | 4個 | 1/12/2010 8:34 | 7.95 | 13047 | 英國 |
| 536368 | 22960 | 帶罐子的果醬製作套裝 | 6個 | 1/12/2010 8:34 | 4.25 | 13047 | 英國 |
| 536368 | 22913 | 紅色衣架巴黎時尚 | 3個 | 1/12/2010 8:34 | 4.95 | 13047 | 英國 |
| 536368 | 22912 | 黃色衣架巴黎時尚 | 3個 | 1/12/2010 8:34 | 4.95 | 13047 | 英國 |
| 536368 | 22914 | 藍色衣架巴黎時尚 | 3個 | 1/12/2010 8:34 | 4.95 | 13047 | 英國 |
| 536369 | 21756 | 浴室積木詞 | 3個 | 1/12/2010 8:35 | 5.95 | 13047 | 英國 |
| 536370 | 22728 | 鬧鐘烘焙粉紅色 | 24 | 1/12/2010 8:45 | 3.75 | 12583 | 法國 |
| 536370 | 22727 | 鬧鐘烘焙紅 | 24 | 1/12/2010 8:45 | 3.75 | 12583 | 法國 |
| 536370 | 22726 | 綠色鬧鐘 | 12 | 1/12/2010 8:45 | 3.75 | 12583 | 法國 |
| 536370 | 21724 | 熊貓和兔子貼紙 | 12 | 1/12/2010 8:45 | 0.85 | 12583 | 法國 |
| 536370 | 21883 | 星星禮品膠帶 | 24 | 1/12/2010 8:45 | 0.65 | 12583 | 法國 |
另一種方法來做到這一點。首先,正如 Jim 所說,更改客戶 ID(更改為 Nominal 或 Ordinal)。通過將當前 InvoiceDate 更改為 Character Nominal 變量來創建新的日期列。使用 Left (Invoice Date,10) 創建一個新的日期列 - 這會去掉時間。然後使用 Tabulate,客戶 ID 後跟新的日期列(均為行)。在紅色箭頭處,製作成數據表。
然後,使用公式 Column Number (date, by Customer ID) 創建一個新列。這給出了每個客戶下訂單的不同天數。
您的問題的解決方案非常簡單。您可以輕鬆地以交互方式或作為腳本執行此操作。 這些步驟都可以在介紹性 JMP 文檔中找到,我建議您花時間閱讀這些文檔。它會讓您對可用的不同組件有一個很好的了解。
幫助==>書籍==>使用JMP
交互的:
1. 從 JMP 打開 Excel 文件
文件==>打開
2. CustomerID 作為數字/連續列打開。它需要是一個序數值。
3. InvoiceDate 列的格式設置為同時顯示時間部分。您希望將 InvoiceDate 作為單獨的幾天處理,而不是幾天內的時間,因此更改打開該列的列信息並將格式更改為“d/m/y”
4. 要將每個 CustomerID/InvoiceDate 的數據匯總到一行,請運行
表格==>總結
將 CustomerID 和 InvoiceDate 都放入組選擇中,然後單擊確定
5. 現在要將每個 CustomerID 匯總到一行,針對新創建的表再次運行匯總平台
表格==>總結
將 CustomerID 列放入組選擇中,然後單擊確定
結果表將包含您請求的值
下面的腳本基本上是通過交互式運行上述步驟生成的,然後將每個步驟的腳本保存到腳本窗口中。我只寫了下面代碼的一小部分。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>