實戰案例解讀:數據分析,如何更進一步?

  • 2020 年 2 月 14 日
  • 筆記

☞500g+超全學習資源免費領取

本文從一個具體的評價分析場景切入,按步分析,力求還原分析的每個環節。相關案例數據和程式碼可空降文末獲取。

最近收到不少留言,除了誇小Z腦洞奇清的,問最多的竟然是:

「我是偏運營/業務分析的,複雜的分析演算法我不會,還有什麼方法能夠對評價類數據做更深入分析嗎?」

剛開始我會昧著良心回復「詞雲啊!」

然鵝總是會被DISS「詞雲太簡單了吧,有點low!」

我猙獰一笑,雖然這個問題有點像「我長的不帥也沒錢,有沒有什麼辦法能夠追到白富美」。但從數據分析的角度來看,仍不失為一個好問題。

好在哪裡呢?在回答之前,先瞧一個數據分析常見思維誤區:

一些同學總是認為,分析不出來有價值的結果,是因為有兩隻攔路虎,一是數據量和維度不夠,二是因為自己不會複雜的分析模型和演算法。然後,也沒有再去思考,如何基於現狀更進一步地分析問題

數據維度和演算法的價值當然不言而喻,但總是把分析不出結果和價值的鍋甩出去,這種歸錯於外的思維非常危險,它營造了一種「分析不出結果,我也沒辦法」的心安理得。

而「我不會高階分析工具和方法,但基於現狀,去思考或者詢問有沒有更好的分析方式」,雖然這種思維也有槽點,但本身算是一種在現階段嘗試去解決問題的思路。

So,我們循著後一種思路,以李子柒在天貓上賣的一款辣椒醬評價為例

看看基於現有的「單薄」數據維度,怎樣讓分析再向前邁進一步

明確目標

魯迅曾經沒說過:「明確分析目標,你的分析已經成功了一大半」。

做深入分析之前,面對這一堆評價數據,我們要明確,究竟想通過分析來解決什麼問題?只有明確分析目標,才能把發散的思維聚焦起來。

為了給大家一個明確的分析錨點,假設我們是這款辣椒醬的產品負責人,要基於評價,更好的獲悉消費者對產品的看法,從而為後續產品優化提供思路。

所以,我們的分析目標是「基於評價回饋,量化消費者感知,指導優化產品」

註:這裡給到的一個假設目標並不完美,主要是拋磚引玉,大家可以從不同的維度來提出目標假設,嘗試不同分析方向。

是不是有那麼一丟丟分析思路了?別急,目標還需要繼續拆解。

拆解目標

這些年來,最有價值的一個字,便是「拆」了:

在數據分析中也是同理。

我們在上一步已經確定了「基於評價優化產品」的目標,但這只是一個籠統模糊的目標。要讓目標真正可落地,「拆」是必不可少的一步。

「拆」的藝術大體可以分為兩步,第一步是換位思考。

評價來源於客戶,客戶對產品有哪些方面的感知呢?我們可以閉上眼睛,幻想自己購買了這款辣椒醬。

接著進入第二步,基於換位的邏輯拆解,這裡可以按照模擬購物流程的邏輯來拆解:

首先,李子柒本身有非常強的IP光環,大家在選購時或多或少是慕名而來。所以,在購買決策時,到底有多大比例是沖著李子柒來的?

Next,在沒收到貨前,影響體驗的肯定是物流,付款到收貨用了幾天?派送員態度怎麼樣,送貨上門了嗎?

收到貨後,使用之前,體感最強的則是包裝。外包裝有沒有破損?有沒有變形?產品包裝是精緻還是粗糙?

接下來是產品體驗,拿辣椒醬來說,日期是否新鮮?牛肉用戶是否喜歡?到底好不好吃?

吃完之後,我們建立起了對產品的立體感知——性價比。我花錢買這個產品到底值不值?這個價位是貴了還是便宜?實惠不實惠?

品牌、物流、包裝、產品(日期、口味)和性價比五大天王鋒芒初現,我們下一步需要量化消費者對於每個方面的感知。

Python實現

對於評價的拆解和量化,這裡介紹一種簡單粗暴的方式,按標點把整條評論拆分成零散的模組,再設置一系列預置詞來遍歷

註:再次強調我們這篇內容的主題是「如何基於最基礎的技術,做進一步的分析,這裡假設我們只會最基礎的python語法和pandas。

有同學會問「為什麼不用分詞」!此問可謂正中我懷。不過,我把這個問題當作開放式思考題留給大家——如果用分詞,如何實現同樣的效果,以及有什麼優缺點?

言歸正傳,我們先看看實戰爬取的評論數據,一共1794條:

把每條評論按照標點拆分成短句,為了省事,用了簡單的正則拆分:

我們發現,就算是比較長段的評論,也只是涉及到品牌、物流、包裝、產品和性價比的部分方面,所以,我們依次去遍歷匹配,看短句中有沒有相關的內容,沒有就跳過,有的話再判斷具體情緒。

以物流為例,當短句中出現「物流」、「快遞」、「配送」、「取貨」等關鍵詞,大體可以判定這個短句和物流相關。

接著,再在短句中尋找代表情緒的辭彙,正面的像「快」、「不錯」、「棒」、「滿意」、「迅速」;負面的「慢」、「龜速」、「暴力」、「差」等。

在我們預設詞的基礎上進行兩次遍歷匹配,大體可以判斷這句話是不是和物流相關,以及客戶對物流的看法是正面還是負面:

為方便理解,用了灰常醜陋的語法來一對一實現判斷。包裝、產品和性價比等其他模組的判斷,也是沿用上述邏輯,只是在預設詞上有所差異,部分程式碼如下:

def judge_comment(df,result):        judges = pd.DataFrame(np.zeros(13 * len(df)).reshape(len(df),13),                        columns = ['品牌','物流正面','物流負面','包裝正面','包裝負面','原料正面',                                   '原料負面','口感正面','口感負面','日期正面','日期負面',                                   '性價比正面','性價比負面'])        for i in range(len(result)):          words = result[i]          for word in words:              #李子柒的產品具有強IP屬性,基本都是正面評價,這裡不統計情緒,只統計提及次數              if '李子柒' in word or '子柒' in word or '小柒' in word or '李子七' in word                  or '小七' in word:                      judges.iloc[i]['品牌'] = 1                #先判斷是不是物流相關的              if '物流' in word or '快遞' in word or '配送' in word or '取貨' in word:                  #再判斷是正面還是負面情感                  if '好' in word or '不錯' in word or '棒' in word or '滿意' in word or '迅速' in word:                      judges.iloc[i]['物流正面'] = 1                  elif '慢' in word or '龜速' in word or '暴力' in word or '差' in word:                      judges.iloc[i]['物流負面'] = 1                #判斷是否包裝相關              if '包裝' in word or '盒子' in word or '袋子' in word or '外觀' in word:                  if '高端' in word or '大氣' in word or '還行' in word or '完整' in word or '好' in word or                     '嚴實' in word or '緊' in word:                      judges.iloc[i]['包裝正面'] = 1                  elif  '破' in word or '破損' in word or '癟' in word or '簡陋' in word:                      judges.iloc[i]['包裝負面'] = 1                #產品              #產品原料是牛肉為主,且評價大多會提到牛肉,因此我們把這個單獨拎出來分析              if '肉' in word:                  if '大' in word or '多' in word or '足' in word or '香' in word or '才' in word:                      judges.iloc[i]['原料正面'] = 1                  elif '小' in word or '少' in word or '沒' in word:                      judges.iloc[i]['原料負面'] = 1                #口感的情緒              if '口味' in word or '味道' in word or '口感' in word or '吃起來' in word:                  if '不錯' in word or '好' in word or '棒' in word or '鮮' in word or                      '可以' in word or '喜歡' in word or '符合' in word:                      judges.iloc[i]['口感正面'] = 1                  elif '不好' in word or '不行' in word or '不鮮' in word or                      '太爛' in word:                      judges.iloc[i]['口感負面'] = 1                #口感方面,有些是不需要出現前置詞,消費者直接評價好吃難吃的,例如:              if '難吃' in word or '不好吃' in word:                  judges.iloc[i]['口感負面'] = 1              elif '好吃' in word or '香' in word:                  judges.iloc[i]['口感正面'] = 1                #日期是不是新鮮              if '日期' in word or '時間' in word or '保質期' in word:                  if '新鮮' in word:                      judges.iloc[i]['日期正面'] = 1                  elif '久' in word or '長' in word:                      judges.iloc[i]['日期負面'] = 1              elif '過期' in word:                  judges.iloc[i]['日期負面'] = 1                #性價比              if '划算' in word or '便宜' in word or '賺了' in word or '囤貨' in word or '超值' in word or                   '太值' in word or '物美價廉' in word or '實惠' in word or '性價比高' in word or '不貴' in word:                  judges.iloc[i]['性價比正面'] = 1              elif  '貴' in word or '不值' in word or '虧了' in word or '不划算' in word or '不便宜' in word:                  judges.iloc[i]['性價比負面'] = 1        final_result = pd.concat([df,judges],axis = 1)        return final_result  

運行一下,結果畢現:

第一條評價,很明顯的說快遞暴力,對應「物流負面」計了一分。

第二條評價,全面誇讚,提到了品牌,和正面的物流、口感資訊。

第三條評價,粉絲表白,先說品牌,再誇口感。

看起來還不賴,下面我們對結果數據展開分析。

結果分析

我們先對結果做個匯總:

一共爬了1794條評論,評論中有提及到我們關注點的有1937次(之所以用次,是因為一條評論中可能涉及到多個方面)。粗略一瞥,口感和原料佔比較高,畫個圖更細緻的看看。

看來,辣椒醬的口感(好不好吃)是客戶最最最關注的點,沒有之一,佔比高達57.98%,領先其他類別N個身位。

慢隨其後的,是原料、品牌、性價比和包裝,而物流和日期則鮮有提及,消費者貌似不太關注,或者說目前基本滿足要求。

那不同類別正負面評價佔比是怎麼樣的呢?

整體來看,主流評論以好評為主,其中口感、品牌(這個地方其實沒有細分)、包裝以正面評價占絕對主導。

原料和性價比,負面評價佔比分別是14%和38%,而物流和日期由於本身佔比太少,參考性不強。

作為一個分析師,我們從原料、性價比負面評價佔比中看到了深挖的機會。

原料負面評價是單純的在吐槽原材料嗎?

初步篩選之後,發現事情並沒有那麼簡單。

原料負面評價共出現了53次,但裡面有24次給了口感正面的評價,甚至還有8次原料正面評價!羅生門嗎?

這8次即正面又負面的原料評價,其實是揭了我們在預置詞方面的不嚴謹,前面判斷牛肉相關的短句,「小」就是負面,「大」就是正面,有些絕對。

而判斷準確的原料差評中,雖然有一半說味道不錯,但還是不留情面的吐槽了牛肉粒之小,之少,甚至還有因此覺得被騙。

如何讓牛肉粒在體感上獲取更多的好評,是應該在產品傳播層做期望控制的宣導?還是在產品層增加牛肉的「肉感」?需要結合具體業務進一步探究。

性價比呢?

性價比相關負面評價共58次,負面情緒占性價比相關的38%。這些負面評價消費者大多數認為價格偏貴,不划算,還有一部分提到了通過直播渠道購買價格相對便宜,但日常價格難以接受。

坦白講,這款辣醬的價格在線上確實屬於高端價位,而價格體系是一個比較複雜的場景,這裡暫不展開分析。

但是對於這部分認為性價比不符預期的客戶,是應該因此反推產品價格,還是把他們打上「價格敏感的標籤」,等大促活動喚醒收割,這是兩條可以考慮並推進的道路。

物流和日期提及太少,不具備參考性,但為了不那麼虎頭蛇尾,我們還是順手看一眼物流負面評價:

果然,物流是一項必備需求,基本滿足預期的話消費者並不會主動提及,沒達預期則大概率會雷霆震怒。而物流暴力、速度太慢是兩個永恆的槽點。

至此,我們基於看起來簡單的評價數據,用簡單淺白的方式,做了細緻的拆分,並通過拆分更進一步的量化和分析,向深淵,哦不,向深入邁進了那麼一丟丟。

總結

文中涉及到的程式碼,主要是拋磚引玉,大家還可以結合實際,做更精細的梳理和判斷。在整個分析過程中,去思考如何更深入的分析,如何明確分析方向,如何通過換位思考和流程拆解,把大目標拆成可以分析的小目標,並最終落地,則需要在實踐中反覆磨練,與君共勉!