java的for循环取出数据只是拿到最后一个_新兴大数据分析榆中百合
? ? ? ? ? ? 新興大數據分析榆中百合
大數據流程
從流程角度上看,整個大數據處理可分成4個主要步驟。
處理流程圖
分為三層(數據采集層,數據存儲與計算處理層,數據可視化):
表2-1 系統環境
系統 | 版本 |
Windows 10 | 專業版(建議) |
Linux | CentOS 6.8 or ?CentOS 7.2(1611內核) |
表2-2 開發工具
工具 | 版本 |
idea Maven Jdk | 2017.2.5 旗艦版 3.3.9 1.8+ |
表2-3 集群環境(CDH版)
框架 | 版本 |
Hadoop | Cdh5.3.6-2.5.0 |
Zookeeper | Cdh5.3.6-3.4.5 |
Hbase | Cdh5.3.6-0.98 |
Hive | Cdh5.3.6-0.13.1 |
Flume | Cdh5.3.6-1.5.0(學習使用版本 1.7.0) |
Kafka | Kafka_2.10-0.8.2.1(學習使用版本 2.11-0.11.0.2) |
表2-4 硬件環境
硬件 | Hadoop 102 | Hadoop 103 | Hadoop104 |
內存 | 4G | 2G | 2G |
CPU | 2核 | 1核 | 1核 |
硬盤 | 50G | 50G | 50G |
數據生產
對于該模塊的業務,即數據生產過程,一般并不會讓你來進行操作,數據生產是一套完整且嚴密的體系,這樣可以保證數據的魯棒性。但是如果涉及到項目的一體化方案的設計(數據的產生、存儲、分析、展示),則必須清楚每一個環節是如何處理的,包括其中每個環境可能隱藏的問題;數據結構,數據內容可能出現的問題。
本系統使用有一個基于數據分析消費者的可視化系統,該系統需要通過大量數據分析出榆中百合的銷售渠道以及消費量,可以詳細的掌握到榆中百合的銷售情況,以便于后期將他們作為主要的消費群體來推廣。數據包括用戶ID,購買日期,購買數量,購買金額四個字段。
用到的工具:pycharm,python3.7
1、項目的總體內容包以下幾個部分
(1)數據清洗:處理缺失值,數據類型轉化,按照需要將數據整理好
(2)按月對數據進行分析:每月用戶消費次數,每月用戶的購買量,每月用戶的購買總金額以及每月用戶數量對比這些圖標分析數據是否存在誤差
(3)用戶個體消費數據分析:用戶個體消費金額與消費次數的統計描述,用戶消費金額和消費次數的散點圖,用戶消費金額的分布圖(符合二八法則),用戶消費次數的分布圖,用戶累計消費金額的占比。
(4)用戶消費行為分析:用戶第一次消費時間,用戶最后一次消費時間,用戶分層,新老客消費比,用戶購買周期,用戶生命周期。
a.數據清洗
拿到數據使用pandas的read_table讀出txt文件,列名為'user_id','order_dt','order_products','order_amount',由于這里的txt文件不是逗號分割的,所以sep = ‘\s+’。
數據讀出無誤時要檢查數據中是否存在空值,并檢查數據的數據類型。發現數據中并不存在空值,很干凈的數據。那接下來既然我們需要每月這個數據,就要給order_dt這一列的數據進行適當的轉換一下,轉化成通常的時間格式,Y(年)m(月)D(日)。下面那句代碼的意思是:在df里新增加一列列名是mounth,取出這一列的日期order_dt然后調取這一列的值把值轉換成以月為單位的,例如6月1號到30號統統屬于6月1號即是六月。
這時候可以對數據進行簡單初步分析,用df.describe()。產品購買數量均值在2.4,中位數是2,其分位數是3,說明用戶購買量大部分都不多,少部分購買量大的,最高購買量是99,其中存在一定的極致干擾。用戶的訂單金額比較穩定,人均購買CD金額在35,中位數在25元,存在極致干擾,很多銷售行業都是類似這種分布,小額比較多,大額的較少,收入來源很大一部分是來自大額。
到這里數據都準備好了進行下一步分析。
b.按月分析數據趨勢:
在這里用到了一個groupby,一個在數據分析中非常好用的函數,這一節是要按月分析用戶行為,用groupby對用戶按照月分分組。
?分組完成之后得到一個新的dataframe叫group_month,然后直接取出組里的order_amount并求和可得到每個月份的銷售總額,并且畫出折線圖。
c.用戶個體消費數據分析:
之前的都是看趨勢,現在看個體的消費水平如何
主要分析的對象是:
用戶消費金額和消費次數的統計以及散點圖來觀察用戶的平均消費水平
用戶消費金額的分布圖(二八原則)
用戶消費次數的分布圖
用戶累計消費金額的占比(百分之多的用戶占了百分之多少的消費額)
?以user_id為索引進行分組但是分組之后可能會發現打印出來的是對象,因為需要對分組完的數據進行進一步操作,例如求和求均值等等。然后再這里用到的是對數據進行求和,然后調用quary方法規定x軸坐標order_amunt的值小于3000,調用plot里的scatter散點圖,畫出散點圖。
求出用戶的累計消費金額占比,cumsum方法是滾動求和,對求完占比之后的dataframe進行重置 索引,重置索引之后的索引是按照升序排列好的,所以畫出的圖橫坐標就是索引,縱坐標就是消費額所占比例,可以反映出百分之多少的用戶占了消費額的百分之多少。?
圖3-1 用戶消費額占比
?從消費額占比中看得出百分之五十的用戶才占了百分之二十不到的消費額,排名前五百的用戶占有了快百分之五十的消費額,消費還是主要集中在一些大客戶上。
d.用戶消費行為分析:
用戶第一次消費&用戶最后一次消費
新老客消費比(多少客戶僅消費一次,每月新客占比)
用戶分層(RFM,新,老,活躍,流失)
用戶消費周期
用戶生命周期
?首購都在一月到三月份,最后一次購買也基本集中在一月到三月份,長期活躍的客戶不是很多,大部分用戶是購買一次之后不在購買,隨著時間的增長,最后一次購買的用戶量也在不斷增加
第一次消費時間等于最后一次消費時間的數量占到了一半,說明很多顧客僅消費一次不再消費。
接下來對用戶進行分層:
將用戶分成:
? ? ? ? 111':'重要價值客戶',
? ? ? ? '011':'重要保持客戶',
? ? ? ? '101':'重要挽留客戶',
? ? ? ? '001':'重要發展客戶',
? ? ? ? '110':'一般價值客戶',
? ? ? ? '010':'一般保持客戶',
? ? ? ? '100':'一般挽留客戶',
? ? ? ? '000':'一般發展客戶'
至于前面數字的意義等下會解釋。到這里就開始使用一個新的函數,及python的透視函數,point_table此函數功能跟excel的透視表一樣,但是比透視表更加靈活,pd.point_table(index = [],columns = [],values = [],aggfunc = [])這幾個參數等會要用到
RFM是人工使用象限法把數據劃分為幾個立方體,立方體對應相應的標簽,我們可以把標簽運用到業務層面上。比如重要保持客戶貢獻金額最多159203.62,我們如何與業務方配合把數據提高或者維護;而重要發展客戶和重要挽留客戶他們有一段時間沒有消費了,我們如何把他們拉回來
首先對于參數data,data是單獨的一行,也即是secris類型的數據apply方法默認取出的數據是一列,但是在后面直接明確了取數據的方式axis=1,代表每次取一行,一行進行函數中間的邏輯運算。既然是一行數據了,一行里有十八種類型,則需要遍歷循環十八次,所以for i in range(18):默認從0到十八,但是包括0不包括十八(python的半包)。先定義一個空數組status,然后開始討論本月是否有消費,假設本月沒有消費,那么data[i]==0,判斷status里是否有值即判斷data[i-1],如果status里有值,看他里邊的值是什么狀態,如果說值等于unreg那本月依然是未注冊。就往status里加入“unreg”,如果上個月是不活躍或者回流,這個月不消費依然是不活躍,status加入“unactive”。其他如果本身status里都沒有值,這個月又不消費那么就是還沒開始注冊。假設本月已經消費那么data[i-1]==1,看一下status的狀態,如果len(status)>0即是status里有值就要判斷一下這里邊值的狀態了,如果這里邊data[i-1]==‘unreg’就是說上個月就沒注冊,這個月突然消費了,那他就是新客啦!如果上個月是不活躍那這個月就是回流用戶了,其他情況都是活躍用戶。這一塊代碼有點多,不過邏輯上還是很清晰的
????接下來就來看一下每個月的新用戶,未注冊用戶,活躍用戶回流用戶有多少,由于沒注冊的用戶在數據里是干擾項,則直接讓沒注冊的用戶為NaN,這樣的話看起來應該會好看一些。用replace函數,用np.NaN進行替代apply在這里默認每次取出一列進行邏輯運算,用到lambda匿名函數,以及panads的計數函數
每月用戶的消費狀態變化。活躍用戶、持續消費的用戶對應的是消費運營質量。回流用戶,之前不消費本月才消費對應的是喚回運營。不活躍的用戶對應的是流失,這里可以針對業務模型下個定義:流失用戶增加,回流用戶正在減少
再來看一下用戶的生命周期:也就是用戶的最后一筆訂單時間減去第一筆訂單時間就是用戶的生命周期。
新建一個判斷函數。data是輸入數據,既用戶在18個月內是否消費的記錄,status是空列表,后續用來保存用戶是否回購的字段。因為有18個月,所以每個月都要進行一次判斷,需要用到循環。if的主要邏輯是,如果用戶本月進行過消費,且下月消費過,記為1,沒有消費過是0.本月若沒有進行過消費,為NAN,后續的統計中進行排除。apply函數應用在所有行上,獲得想要的結果。
最后計算和復購率大同小異,用count和sum求出,從圖中可以看出,用戶的回購率高于復購,約在30%左右,和老客戶差異不大。從回購率和復購率綜合分析可以得出,新客的整體質量低于老客,老客的忠誠度(回購率)表現較好,消費頻次稍次,這是CDNow網站的用戶消費特征。
總結
以上是生活随笔為你收集整理的java的for循环取出数据只是拿到最后一个_新兴大数据分析榆中百合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态清明上河图电脑壁纸下载(清明上河图动
- 下一篇: 挡土墙计算软件_广联达软件如何计算钢板止