一個朋友在某運動品牌公司上班,老闆給他佈置了一個處理客戶訂單資料的任務。要求是根據訂單時間和客戶id判斷生成四個新的資料:
1、記錄該客戶是第幾次光顧
2、上一次的日期時間是什麼時候
3、與上次訂單的間隔時間
4、這是一個existing客戶還是一個new客戶(見定義)
推薦下我自己建立的Python學習交流群960410445,這是Python學習交流的地方,不管你是小白還是大牛,小編都歡迎,不定期分享乾貨,包括我整理的一份適合零基礎學習Python的資料和入門教程。
檔案說明:
1、第一列是訂單日期和時間(亂序)
2、第二列是客戶的id
3、第三列不需要使用
4、60+萬行資料
相關定義如下:
1、existing:此次下單日期時間與上次日期時間的距離在N天以內,精確到時間(時分秒)
2、new:即超過N天
整體思路
1、讀取表格的行資料儲存成list,並按照時間列的升序排序。
2、維護一個map(在python裡是字典dict),每個使用者 id 作為key,一個二元組(第幾次下單,上一次的日期時間)作為value。
3、遍歷表格行資料的list。判斷客戶 id 是否已經存在於map中,若首次出現,則置該客戶 id 在map中的value為[1,'首次下單'],對應行資料新增的4個資料為[1,'首次下單',該次日期時間與上次日期時間差,'new']。若已經存在,則更新map中對應的value為[原次數+1,該次日期時間],對應行資料新增的4個資料為[原次數+1,上次日期時間,間隔時間,new/existing取決於間隔時間與預設N]。
4、將修改過後的行資料list寫入到Excel工作簿並儲存。
讀取表格資料
我們可以用xlrd模組對Excel檔案進行讀取,以便進一步分析處理資料。示例程式碼如下:
以上程式碼成功輸出前100行的日期則說明已經成功讀取到資料。輸出結果如下:
既然讀取檔案沒有問題,進一步瀏覽整個檔案發現存在多餘的空行和重複的標題行在讀取和轉存中可以用正則匹配過濾掉這些行。
將讀取的行資料轉存到list中,以便進行排序。
將修改後的行資料list寫入Excel表格並儲存為xslx格式
結果展示
完整程式碼