一般来说mysql中存储的数据是面向列式的,这种格式非常善于新增数据或者删除数据,如果数据量比较大的话,还可以很方便地按行进行拆分,然后分片处理。
但是在数据分析时,我们更期望日期是行索引,评分是列索引,中间每个单元格的值是对应的数据。那如何将左边的数据变成右边的数据形式呢?
这就是将列示数据变成二维交叉形式,便于分析,这就叫做重塑或透视。
经过统计得到多维度指标数据
在实际的场景中经常需要指定多个维度,计算聚合后的指标。比如像统计电影评分数据集中每个月份的每种评分(1-5分)被评分多少次。
读取数据,并利用pandas中的to_datetime方法将时间转换为日期的形式:
此时pdata的格式变成datetime64[ns]格式,转换成这种格式的好处在于可以直接使用pandas的dt.month得到月份,之后按照月份和打分等级进行多层groupby,之后挑选出"UserID"这一列,再调用聚合方法agg,调用np.sum进行计数。
对于上述这样的格式数据,想要去查看按月份,不同评分的次数趋势,是没法实现的,需要将数据变换成每个评分是一列(x轴是月份,y轴是评分,中间是数值这种二维形式)。
使用unstack实现数据二维透视
调用unstack()方法可以实现:对比按照月份的不同评分的数量趋势:
从上图所示结果可以看出,大家在一月份对评分不感兴趣,在八月份评分最多。
unstack和stack是互逆操作:
使用pivot简化透视
调用pivot方法直接指定x,y,和数值这三列可以直接实现数据的透视:
pivot方法相当于对df使用set_index创建分层索引,然后调用unstack。