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