本科学了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’) 连接产品表和产品类别表,基于产品编号做左连接。