<th id="uz6zr"><table id="uz6zr"><sub id="uz6zr"></sub></table></th> <tbody id="uz6zr"></tbody>
  • <menuitem id="uz6zr"><dfn id="uz6zr"></dfn></menuitem><menuitem id="uz6zr"><strong id="uz6zr"></strong></menuitem>

      1. Python 數據集探索與可視化實例指南

        上一篇 / 下一篇  2020-10-22 09:35:32

          在今天的文章中,您將學習:
          ·如何合并和整理數據,
          ·如何探索和分析數據,
          ·如何創建漂亮的圖形以可視化您的發現
          本文適用于誰:
          ·經常處理數據的人
          ·Python和Pandas有基本了解的人
          情景再現:
          你的任務是提高銷售團隊的績效。在我們假設的情況下,潛在客戶有相當自發的需求。當這種情況發生時,您的銷售團隊會在系統中放置一個訂單線索。然后,您的銷售代表會設法安排一次會議,會議將在訂單線索被注意到的時候舉行。有時在前,有時在后。你的銷售代表有一個把會議和餐費結合起來的開支預算。銷售代表花費他們的成本,并將發票交給會計團隊處理。在潛在客戶決定是否接受您的報價后,銷售代表會跟蹤訂單線索是否轉化為銷售。
          對于分析,您可以訪問以下三個數據源:
          ·訂單線索(包含所有訂單線索和轉換信息)
          ·銷售團隊(包括公司和負責的銷售代表)
          ·發票(提供發票和參與者的信息)
          導入和安裝:
          需要安裝標準庫,此外,通過使用以下命令,在你的Notebook上安裝seaborn.
          !pip install seaborn 
          下載數據:
          您可以按照上周的說明下載并合并數據,也可以從此處下載文件并將其加載到 Notebook中。
        sales_team 數據表的前兩行
        order_leads數據表的前兩行
        invoices數據表的前兩行
          開始探索
          總轉化率發展:
        轉化率隨時間的變化
          事情似乎在2017年初走下坡路。經過與首席銷售官核實,發現大約在那個時候有一個競爭對手進入了這個市場。很高興知道,但我們現在無能為力。
          _ = order_leads.set_index(pd.DatetimeIndex(order_leads.Date)).groupby(    pd.Grouper(freq='D')     
           
          )['Converted'].mean()    
          ax = _.rolling(60).mean().plot(figsize=(20,7),title='Conversion Rate Over Time')      
          vals = ax.get_yticks()      
          ax.set_yticklabels(['{:,.0f}%'.format(x*100) for x in vals])   
           
          sns.despine() 
          1. 我們使用下劃線_作為臨時變量。對于以后不再使用的一次性變量,我通常會這樣做。
          2. 我們在order_leads.Date上使用了pd.DateTimeIndex并將結果設置為索引,這使我們能夠
          3. 使用pd.Grouped(freq ='D')按天對數據進行分組。 或者,您可以將頻率更改為W,M,Q或Y(每周,每月,每季度或每年)
          4. 我們計算每天“轉換”的平均值,這將給出當天訂單的換算率。
          5. 我們使用.roll(60)和.mean()來獲得60天的滾動平均值。
          6. 然后我們格式化yticklables,使它們顯示一個百分號。
          各銷售代表的轉化率:
          各個銷售代表之間似乎存在很大的差異。 讓我們對此進行更多調查。
          就所使用的功能而言,這里沒有太多新內容。 但是請注意我們如何使用sns.distplot將數據繪制到軸上。
          如果我們回顧sales_team數據,我們會記住并非所有的銷售代表都擁有相同數量的客戶,這肯定會產生影響! 讓我們檢查。
        按分配的帳戶數分配的轉換率
          我們可以看到,轉換率數字似乎與分配給銷售代表的帳戶數量成反比。 那些降低的轉化率是有道理的。 畢竟,代表擁有的帳戶越多,他可以花在每個人身上的時間就越少。
          在這里,我們首先創建一個輔助函數,該函數將垂直線映射到每個子圖中,并用數據的均值和標準差注釋該線。然后我們設置一些seaborn繪圖默認值,例如較大的font_scale和whitegrid設置為樣式。
          進餐影響:
        進餐數據
          看來我們已經確定了用餐的日期和時間,讓我們快速了解一下時間分布:
          invoices['Date of Meal'] = pd.to_datetime(invoices['Date of Meal'])     
          invoices['Date of Meal'].dt.time.value_counts().sort_index()
         
          out: 
          07:00:00    5536 
          08:00:00    5613 
          09:00:00    5473 
          12:00:00    5614 
          13:00:00    5412 
          14:00:00    5633 
          20:00:00    5528 
          21:00:00    5534 
          22:00:00    5647 
          總結:
          invoices['Type of Meal'] = pd.cut(     
              invoices['Date of Meal'].dt.hour,     
              bins=[0,10,15,24],     
              labels=['breakfast','lunch','dinner']     
          ) 
          注意,這里我們是如何使用pd.cut為數字數據分配類別的,這很有意義,因為畢竟,早餐是在8點還是9點開始,都沒有關系。
          另外,請注意我們如何使用.dt.hour,我們只能這樣做,因為我們將
          invoices['Date of Meal']轉換為之前的日期時間。 .dt是所謂的訪問器,其中有三個cat,str和dt。 如果您的數據類型正確,則可以使用這些訪問器及其方法進行直接操作(計算有效且簡潔)。不幸的是,invoices ['Participants']是一個字符串,我們必須首先將其轉換為合法的JSON,以便我們 可以提取參與者的數量。
          def replace(x):     
              return x.replace("\n ",",").replace("' '","','").replace("'",'"')     
          invoices['Participants'] = invoices['Participants'].apply(lambda x: replace(x))     
          invoices['Number Participants'] = invoices['Participants'].apply(lambda x: len(json.loads(x))) 
          現在,我們合并數據。 為此,我們首先將公司ID上的所有發票左連接到order_leads。 但是,合并數據會導致所有餐點都加入所有訂單。 也有古老的飯菜,以最近的訂單。 為了緩解這種情況,我們計算了進餐和點餐之間的時間差,并且僅考慮訂單周圍五天的進餐。
          仍然有一些訂單已分配多餐。 當同時有兩個訂單和兩餐時,可能會發生這種情況。 然后,兩餐將分配給兩個訂單線索。 要刪除這些重復項,我們僅使餐點最接近該訂單。
        組合數據的部分
          我創建了一個繪圖欄功能,其中已經包含一些樣式。 通過該功能進行繪圖可以使目視檢查更快。 我們將在一秒鐘內使用它。
          進餐類型的影響:
          orders_with_meals['Type of Meal'].fillna('no meal',inplace=True)     
          _ = orders_with_meals.groupby('Type of Meal').agg({'Converted': np.mean})     
          plot_bars(_,x_col='Type of Meal',y_col='Converted') 
          哇! 用餐相關的訂單與不用餐相關的訂單之間的轉換率差異非常大。 不過,看起來午餐的轉化率略低于晚餐或早餐。
          時間的影響(即進餐之前或之后進餐):
          _ = orders_with_meals.groupby(['Days of meal before order']).agg(     
          {'Converted': np.mean}     
          )     
          plot_bars(data=_,x_col='Days of meal before order',y_col='Converted') 
          “訂購前用餐天數”為負數表示用餐是在訂單線索輸入之后進行的。我們可以看到,如果膳食在訂單線索進入之前發生,則對轉化率似乎有積極影響。 訂單的先驗知識似乎在這里給我們的銷售代表帶來了優勢。
          結合所有:
          ·現在,我們將使用熱圖同時可視化數據的多個維度。 為此,首先創建一個輔助函數。
          ·然后,我們使用一些最終數據進行爭辯,以額外考慮餐食價格與訂單價值的關系,并將交貨時間分配到“訂購前”,“訂購前后”,“訂購后”,而不是從負4到正4的天數,因為這在解釋方面有些繁瑣。
          運行以下代碼片段將產生多維熱圖。
          draw_heatmap(     
              data=data,     
              outer_row='Timing of Meal',     
              outer_col='Type of Meal',     
              inner_row='Meal Price / Order Value',     
              inner_col='Number Participants',     
              values='Converted'     
          ) 
        熱圖可在一幅圖中可視化四個維度
          該熱圖當然很漂亮,盡管起初有點難讀。 因此,讓我們來看一下。 圖表總結了4個不同維度的影響:
          ·用餐時間:訂購后,訂購前后,訂購前(外排)
          ·用餐類型:早餐,晚餐,午餐(外欄)
          ·餐單價格:最低價格,最低價格,比例價格,最高價格,最高價格(內排)
          ·參加人數:1,2,3,4,5(內欄)
          當然,圖表底部的顏色似乎更深/更高,這表明:
          ·在點餐之前用餐時,轉化率會更高
          ·當只有一名參與者時,晚餐轉化率似乎更高
          ·與訂單價值相比,看起來更昂貴的餐食對轉化率有積極影響
          結果:
          ·銷售代表的帳戶不要超過9個(轉化率會迅速下降)
          ·確保每個訂單線索都伴隨有會議/進餐(因為這會使轉換率翻倍當只有一位員工來訪時,晚餐最有效
          ·您的銷售代表應支付的餐費約為訂單金額的8%至10%
          ·時間是關鍵,理想情況下,您的銷售代表應盡早知道即將達成交易。
          單擊此處查看代碼: GitHub Repo / Jupyter Notebook
          備注為熱圖:
          ·要解決可能出現的格式錯誤,可以先卸載(然后在終端中必須這樣做),然后運行以下命令,將matplotlib降級到3.1.0版:
          !pip install matplotlib==3.1.0 

        TAG: 軟件開發 Python

         

        評分:0

        我來說兩句

        顯示全部

        :loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

        日歷

        « 2020-11-17  
        1234567
        891011121314
        15161718192021
        22232425262728
        2930     

        數據統計

        • 訪問量: 7838
        • 日志數: 68
        • 建立時間: 2020-08-11
        • 更新時間: 2020-11-17

        RSS訂閱

        Open Toolbar
        在线看黄AV免费悠久