sql重拾(一)——談談數據分析方面的sql與python之異曲同工之妙

本科學了sql,研究生常常用python。二者在做數據分析、做統計方面有異曲同工之妙。

sql中的、Excel裏的統計函數、python裏面的一些統計函數其實是一樣的,同一原理,同一東西,表現形式不同而已。下面來體會一下。

以下是我昨天寫的一個筆記:
Sql的聚集函數:如,sum() avg() count() max() min()
聚集函數只能用在select和group by的having子句中。
group by:
分組後聚集函數可以作用於每一個組,可以對每一個組的數據做一些統計。
Example,

三張表:
學生表:Student(Sno, Sname, Ssex, Sage, Sdept)
課程表:Course(Cno, Cname, Cpno, Ccredict) Cpno 是先行課,Ccredict是學分
學生選課表:SC(Sno, Cno, Grade) Grade是分數

1)聚集函數用在select子句中:
查詢各個課程(下)的選課人數:
select 課程號,count(學生學號)from 學生選課表 group by 課程號;
2)聚集函數用在group by的having子句中:
Group by 分組, having作用於每組去了解每組。
查詢修了3門以上課程的學生:
Select 學號 from 學生課程表 group by 學號 having count(*)> 3;
先按學號分組了,每一組就是一個學生的上課情況;然後對每一組用聚集函數count計數。
【想到python】
python的DataFrame的grouby()函數+agg()函數,同一東西,同一原理,不同表現形式。
比如,sales.groupby([“date_month_id”]).agg({“item_cnt_day”:”sum”}),按月份標號分組,分組後,統計每一組的總銷量(即,月銷量),爲該組的月銷量。【直接用我之前項目中的例子來舉例,這個更好理解】
再如,train.groupby([‘date_block_num’,‘shop_id’,‘item_id’]).agg({‘item_cnt_day’:‘sum’}),按[月份+門店+產品]分組,後,統計每一組的總銷量,仍然是月銷量,但是是以該月同一<門店,產品>爲單位的。

還有,sql中的連接。在python中pandas.merge()函數就是sql中的連接。
Merge的參數how=”inner”就是sql的自然連接(∩交關係),how=“outer”就是sql的外連接(∪並關係),=”left”就是左外連接(左表爲主人),=“right”就是右外連接(右表爲主人)。On參數表示公共屬性。
如,pd.merge( item, item_category, on=’item_id’, how=’left’) 連接產品表和產品類別表,基於產品編號做左連接。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章