網站首頁 編程語言 正文
正文
今天本人在趕學校課程作業的時候突然發現groupby這個分組函數還是蠻有用的,有了這個分組之后你可以實現很多統計目標。
當然,最主要的是,他的使用非常簡單
本期我們以上期作業為例,單走一篇文章來看看這個函數可以實現哪些功能:
(本期需要準備的行囊):
- jupyter notebook環境(anaconda自帶)
- pandas第三方庫
- numpy第三方庫(也許會用吧)
- 能運行以上依賴的電腦和舒服的外設
- 一定的python基礎
- 需要是吃飽喝足的你,帶上能運作的小腦瓜來繼續
一、了解groupby
這是一個函數,一般作用于dataframe上,有返回值,不改變原變量。輸出的是原dataframe按照傳入參數分組后的結果。
我們一通引入獲得了一個dataframe,按照“user”進行了分組,發現得到的是一個dataframegroupby對象。這個對象內部是什么呢?我們用遍歷循環來看看:
for i in f.groupby("user"): print(i)
發現這個對象內部是一個個元組,每個元組的第一個元素是我們設定的分組依據的值
(例如這里我們設定的分組依據是user,這里第一個元組包含的是user為19500時的所有記錄,元組第一個元素就是19500)
而當我們輸出元組里的第二個元素的時候,發現得到的是類似dataframe的結果
看前面user下面的數據,整齊劃一,是不是?o(〃^▽^〃)o
二、數據文件簡介
文章中所用數據為某時段內消費者的行為數據。user為消費者編號,brand為品牌編號,behavr為消費者行為(0代表瀏覽,1代表購買,2代表收藏,3代表加入購物車。且允許存在不瀏覽直接購買的行為)
接下來我們要針對這些數據進行處理,輸出一些有用的結果
三、求各個商品購買量
因為要求統計的“購買”行為屬于behavr列中的某特殊值。很容易想到先用條件篩選選出所有購買的記錄,再用groupby按各個商品分類,再用size()方法統計分組后每組的數量,以此輸出各個商品的購買量。
那么會了這個之后來舉一反三一下:求各個商品瀏覽量
自行思考一下再往下翻哦
沒錯,就是改一下一開始條件過濾的數值即可。把購買(1)改成瀏覽(0)
四、求各個商品轉化率
商業數據分析經常會遇到一個數據量——轉化率,其實就是購買的數量比上瀏覽的數量。以此來看這個商品是否足夠吸引人。
我們這里在上面已經計算出了各個商品的瀏覽量和購買量,事實上只需要比一比就可以了。
正好,pandas的series計算是我們想要的,他會根據鍵值對去分別計算
這個series里user名字是鍵,數量是值,非常完美符合series計算設定,我們直接除一下就行。
pandas用.div()
來實現比值功能(前面的比后面的)。
要注意的是,series計算可能會帶來缺失值,因為兩個series計算的時候并不能保證兩個series的鍵完全一樣
即有可能出現前一個series有的鍵而后一個沒有。比如這里可以看出brand 11就只有瀏覽沒有購買,因此統計購買量的時候沒有11這個鍵,但是瀏覽量中有11這個鍵。
在計算的時候不共有的鍵會以缺失值的形式出現,即NaN:
如果我們不想看到這個缺失值NaN,在div內添加fill_value參數可以把缺失值補充上
五、轉化率最高的30個商品及其轉化率
這就需要用到排序了。其實也很簡單。我們把前面計算好的轉化率用sort_values()
函數排序之后輸出前30個即可:
- sort_value()函數中設置ascending參數為False即為降序,默認為True升序
- head(n)用來輸出前n個,同理tail(n)用來輸出最后n個
小小の總結
其實我們不難發現,python語言其實本身過于“高級”。他不需要你思考用什么算法來完成這些操作(特別是你本身還在用第三方庫的時候)。
她總有相關的函數或者方法可以替你完成。并且這個函數內部可能是C語言等基礎語言實現的,代碼效率會比你自己在python上手碼要快很多
作為使用者,想要快速入門的話,你所需要的——
只是把這些都記住就行了
大概這就是一個像文科一樣的編程語言吧……
原文鏈接:https://juejin.cn/post/7151026947303145486
相關推薦
- 2023-03-01 Maui?Blazor?使用攝像頭實現代碼_其它綜合
- 2022-03-11 Linux fatal error: iostream: No such file or direc
- 2022-07-15 go語言實現銀行卡號Luhn校驗_Golang
- 2022-09-09 python中對開區間和閉區間的理解_python
- 2023-06-02 Python利用CNN實現對時序數據進行分類_python
- 2022-12-22 C++?boost?thread庫用法詳細講解_C 語言
- 2023-01-14 詳解C#如何實現屏幕放大和取色功能_C#教程
- 2022-08-15 棧(Stack)和隊列(Queue)的基本操作
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支