Python數據分析指南(全)

前言

數據分析是通過明確分析目的,梳理并確定分析邏輯,針對性的收集、整理數據,并采用統計、挖掘技術分析,提取有用信息和展示結論的過程。

本文從常用數據分析邏輯框架及技術方法介紹出發,結合python項目實戰,來全面解讀數據分析。以便快速掌握數據分析的框架套路,直接上手進行數據分析。

一、 數據分析的邏輯(方法論)

1.1 PEST分析法

PEST分析是指宏觀環境的分析,宏觀環境是指影響一切行業或企業的各種宏觀力量。P是政治(Politics),E是經濟(Economy),S是社會(Society),T是技術(Technology)。通常是戰略咨詢顧問用來幫助企業檢閱其外部宏觀環境的一種方法,以吉利收購沃爾沃為例:

1.2 5W2H分析法

5W2H分析法又稱七何分析法,包括:Why、What、Where、When、Who、How、How much 。主要用于用戶行為分析、業務問題專題分析、營銷活動等,是一個方便又實用的工具。

1.3 邏輯樹分析法

邏輯樹是分析問題最常用的工具之一,它是將問題的所有子問題分層羅列,從最高層開始,并逐步向下擴展。使用邏輯樹分析的主要優點是保證解決問題過程的完整性,且方便將工作細分為便于操作的任務,確定各部分的優先順序,明確地把責任落實到個人。

1.4 4P營銷理論

4P即產品(Product)、價格(Price)、渠道(Place)、促銷(Promotion),在營銷領域,這種以市場為導向的營銷組合理論,被企業應用最普遍。通過將四者的結合、協調發展,從而提高企業的市場份額,達到最終獲利的目的。

4P營銷理論適用于分析企業的經營狀況,可視為企業內部環境,PEST分析的是企業在外部面對的環境。

1.5 SCQA分析法

SCQA分析是一個“結構化表達”工具,即S(Situation)情景、C(Complication)沖突、Q(Question)疑問、A(Answer)回答。

整個結構是通過描述當事者的現實狀態,然后帶出沖突和核心問題,通過結構化分析以提供更為明智的解決方案。以校園招聘SCQA分析為例:

1.6 SMART分析法

SMART法是一種目標管理方法,即對目標的S(Specific)明確性,M(Measurable)可衡量性,A(Attainable)可實現性,R(Relevant)相關性,T(Time-based)時限性。

1.7 SWOT分析法

SWOT分析法也叫態勢分析法,S (Strengths)是優勢、W (Weaknesses)是劣勢,O (Opportunities)是機會、T (Threats)是威脅或風險。

SWOT分析法常用來確定企業自身的內部優勢、劣勢和外部的機會和威脅等,可以對研究對象所處的情景進行全面、系統、準確的研究,從而將公司的戰略與公司內部資源、外部環境有機地結合起來。以HUAWEI 的SWOT分析為例:

二、 數據分析的技術方法

數據分析的技術方法是指提取出關鍵信息的具體方法,如對比分析、交叉分析、回歸預測分析等方法。

2.1 對比分析法

對比分析法是將兩個或兩個以上的數據進行比較,分析差異,揭示發展變化情況和規律。

  • 靜態比較:時間一致的前提下,選取不同指標,如部門、城市、門店等,也叫橫向比較。
  • 動態比較:指標一致的前提下,針對不同時期的數據比較,也叫縱向比較。

舉例:各車企銷售表現

2.2 分組分析法

  • 先經過數據加工,對數據進行數據分組,然后對分組的數據進行分析。
  • 分組是為了便于對比,把總體中具有不同性質的對象區分開,把性質相同的對象合并在一起,保持各組內對象屬性的一致性、組與組之間屬性的差異性,以便進一步運用各種數據分析方法來解釋內在的數量關系。

舉例: 新書在各銷售渠道的銷量

2.3 結構分析法

  • 結構分析法又稱比重分析法,是在分組分析法的基礎上,計算總體內各組成部分占總體的比重,進而分析總體數據的內部特征。

舉例:市場占有率是典型的結構分析。

2.4 平均分析法(標準參數分析法)

  • 運用計算平均數的方法來反映總體在一定的時間、地點條件下某一數量特征的一般水平。
  • 平均指標可用于同一現象在不同地區、不同部門或單位間的對比,還可用于同一現象在不同時間的對比。

舉例:季節性分析和價格分析時常會用到index指標

2.5 交叉分析法

  • 通常用于分析兩個變量之間的關系,即同時將兩個有一定聯系的變量及其值交叉排列在一張表格內,使各變量值成為不同變量的交叉節點,形成交叉表。

舉例:常見的氣泡圖數據表格

2.6 漏斗圖分析法

  • 漏斗圖可以很好的反映網站各步奏轉化率,利用對比法對同一環節優化前后的效果進行對比分析來反映某個步奏轉化率的好壞。

舉例:商品流轉率表現圖

三、 數據分析的圖表展示

圖表展示可以幫助我們更好、更直觀地看懂數據信息。

圖表的選擇,需要回答的首要問題是『有什么數據,需要用圖表做什么』,而不是 『圖表長成什么樣』 。可以通過數據展示的功能『構成、比較、趨勢、分布及聯系』進行圖表選擇,如下所示:

四、 項目實戰 (python)

4.1 數據內容

數據來源于天貓真實成交訂單,主要是行為類數據。
a. 訂單編號:訂單編號
b. 總金額:訂單總金額
c. 買家實際支付金額:總金額 - 退款金額(在已付款的情況下);未付款的支付金額為0
d. 收貨地址:全國各個省份
e. 訂單創建時間:下單時間
f. 訂單付款時間:付款時間(如果未付款,顯示NaN)
g. 退款金額:付款后申請退款的金額。未付款的退款金額為0

4.2 天貓訂單分析過程

4.2.1 背景及分析目的

以天貓一個月內的訂單數據,觀察這個月的訂單量以及銷售額, 分析下單日期、收貨地址等因素對訂單量的影響以及訂單轉換情況,旨在提升用戶下單量和訂單轉換率,進而提高用戶實際支付額。

4.2.2 分析邏輯

本文結合訂單流程以邏輯樹方法分析訂單數目的影響因素,從以下幾個維度展開:

4.2.3 數據讀取及處理

import numpy as np
import matplotlib.pyplot as plt
import os
import warnings
warnings.filterwarnings('ignore')
#讀取數據
df = pd.read_csv('tmall_order_report.csv')
df.head()
# 利用pandas_profiling一健生成數據情況(EDA)報告
import pandas_profiling as pp
report = pp.ProfileReport(df)
report
#規范字段名稱
df.columns
df=df.rename(columns={'收貨地址 ':'收貨地址','訂單付款時間 ':'訂單付款時間'})
df.columns
#查看數據基本信息
df.info()
#數據類型轉換
df['訂單創建時間']=pd.to_datetime(df.訂單創建時間)
df['訂單付款時間']=pd.to_datetime(df.訂單付款時間)
df.info()
#數據重復值
df.duplicated().sum()

#數據缺失值
df.isnull().sum()
#數據集描述性信息
df.describe()
#篩選數據集
df_payed=df[df['訂單付款時間'].notnull()]#支付訂單數據集
df_trans=df_payed[df_payed['買家實際支付金額']!=0]#到款訂單數據集
df_trans_full=df_payed[df_payed['退款金額']==0]#全額到款訂單數據集

4.2.4 總體運營指標分析

分析2月份成交訂單數的變化趨勢

import pyecharts.options as opts
#將訂單創建時間設為index
df_trans=df_trans.set_index('訂單創建時間')
#按天重新采樣
se_trans_month = df_trans.resample('D')['訂單編號'].count()
from pyecharts.charts import Line
#做出標有具體數值的變化圖
name = '成交訂單數'

(
    Line()
    .add_xaxis(xaxis_data = list(se_trans_month.index.day.map(str)))
    .add_yaxis(
        series_name= name,
        y_axis= se_trans_month,

    )
    .set_global_opts(
        yaxis_opts = opts.AxisOpts(
            splitline_opts = opts.SplitLineOpts(is_show = True)
        )
    )
    .render_notebook()
)
小結 1 :2月上半月,多數企業未復工,快遞也停運,暫時無法發貨,訂單數很少;2月下半月,隨著企業復工逐漸增多,訂單數開始上漲。
se_trans_map=df_trans.groupby('收貨地址')['收貨地址'].count().sort_values(ascending=False)
# 為了保持收貨地址和下面的地理分布圖使用的省份名稱一致,定義一個處理自治區的函數
def strip_region(iterable):
    result = []
    for i in iterable:
        if i.endswith('自治區'):
            if i == '內蒙古自治區':
                i = i[:3]
                result.append(i)
            else:
                result.append(i[:2])
        else:
            result.append(i)
    return result
# 處理自治區
se_trans_map.index = strip_region(se_trans_map.index)
# 去掉末位‘省’字
se_trans_map.index = se_trans_map.index.str.strip('省')
import pyecharts.options as opts
from pyecharts.charts import Map
# 展示地理分布圖
name = '訂單數'

(
    Map()
    .add(
        series_name = name,
        data_pair= [list(i) for i in se_trans_map.items()])
    .set_global_opts(visualmap_opts=opts.VisualMapOpts(
        max_=max(se_trans_map)*0.6
    )
                    )
    .render_notebook()
)

用直觀的地圖來觀察成交訂單數的分布情況

小結 2 :地區對訂單數量影響較大,一般較發達地區訂單數較大,邊遠地區較小。這里可能需要具體分析每個地區的商品種類、消費群體以及優惠政策,快遞等原因。可以根據原因進一步提高其他地區的訂單數量和銷售金額。

4.2.5 銷售轉化指標

訂單數以及訂單轉化率的呈現

dict_convs=dict() #字典
dict_convs['總訂單數']=len(df)
df_payed
dict_convs['訂單付款數']=len(df_payed.notnull())
df_trans=df[df['買家實際支付金額']!=0]
dict_convs['到款訂單數']=len(df_trans)
dict_convs['全額到款訂單數']=len(df_trans_full)
#字典轉為dataframe
df_convs = pd.Series(dict_convs,name = '訂單數').to_frame()
df_convs
#求總體轉換率,依次比上總訂單數
total_convs=df_convs['訂單數']/df_convs.loc['總訂單數','訂單數']*100
df_convs['總體轉化率']=total_convs.apply(lambda x:round(x,0))
df_convs
#求單一轉換率
single_convs=df_convs.訂單數/(df_convs.訂單數.shift())*100
single_convs=single_convs.fillna(100)
df_convs['單一轉化率']=single_convs.apply(lambda x:round(x,0))
df_convs

畫轉換率漏斗圖,直觀呈現訂單轉化情況

from pyecharts.charts import Funnel
from pyecharts import options as opts
name = '總體轉化率'
funnel = Funnel().add(
                    series_name = name,
                    data_pair = [ list(z) for z in zip(df_convs.index,df_convs[name]) ],
                    is_selected = True,
                    label_opts = opts.LabelOpts(position = 'inside')
                    )
funnel.set_series_opts(tooltip_opts = opts.TooltipOpts(formatter = '{a}<br/>{b}:{c}%'))

funnel.set_global_opts( title_opts = opts.TitleOpts(title = name),
#                         tooltip_opts = opts.TooltipOpts(formatter = '{a}<br\>{b}:{c}%'),
                      )
                        
funnel.render_notebook()
name = '單一轉化率'
funnel = Funnel().add(
                    series_name = name,
                    data_pair = [ list(z) for z in zip(df_convs.index,df_convs[name]) ],
                    is_selected = True,
                    label_opts = opts.LabelOpts(position = 'inside')
                    )
funnel.set_series_opts(tooltip_opts = opts.TooltipOpts(formatter = '{a}<br/>{b}:{c}%'))

funnel.set_global_opts( title_opts = opts.TitleOpts(title = name),
#                         tooltip_opts = opts.TooltipOpts(formatter = '{a}<br\>{b}:{c}%'),
                      )
                        
funnel.render_notebook()
小結 3 :從單一轉化率來看,支付訂單數-到款訂單數轉換率為79%,后續可以從退款率著手分析退款原因,提高轉換率。
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,034評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,327評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,554評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,337評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,883評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,114評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,625評論 1 332
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,555評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,737評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,973評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,615評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,343評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,699評論 2 370

推薦閱讀更多精彩內容