作者: | 来源:互联网 | 2023-09-25 19:34
一、案例背景
事情是这样的,一个眼光明媚的早上,领导看到昨天PV增长明显,于是就提出了如下需求:
ok,get到需求后,立马行动起来!
为什么pv会增长明显呢?首先,依据拆分的思想,网站有很多个板块,所以将总体pv拆分成n个板块(可以根据经验选择主要的板块进行分析),对这n个板块逐个进行分析;接着,由于孤数不立的原则:单看一天数据,无法判断具体哪个板块增长,哪个板块降低,因此,主要从日期、板块这两个维度进行分析。
”无情的提数机器“来了!首先确定需要用到的表:只需要访问日志表。
原始数据形式
简单看一下日志表中我们需要的两个主要字段(日期、网页链接):
目标数据形式
我们需要提出来的效果是这样的(数据当然不能给别人看咯):
太年轻的小菜我,紧急情况下,没想到用数据透视表,像个沙雕一样,写了屎一样的sql。(为了让大家引以为戒,我脸也不要了,展示出来吧)
没错,查9天的数据,我用了8个left join…
为了让别人一眼就能从这近1000条数据中看出来谁增高了,谁降低了,那必须画个图,然后根据图进行描述分析,得出结果。(这段不重要,就略过了)
二、使用数据透视表
用又臭又长的sql得出报告后,总觉得心里不舒服,怎么能写这么烂的sql,于是,突然想到了数据透视表。
excel实现数据透视表就比较理所当然啦,因为数据透视表就是excel里面的概念。
第一步:先直接简单的select查出近9天的数据并保存为excel
第二步:数据透视表的使用
好了,excel的数据透视表就是这么简单好用,顺便也出来图了,但是很丑,可以直接改改,或者copy数据自己用工具作图分析。
第一步:先直接简单的select查出近9天的数据并保存为excel(如果本地可以直接连生产的数据库,可以直接pd.read_sql()一步到位获取数据)
第二步:实现pandas的数据透视表功能
import pandas as pd
data = pd.read_excel('xxx.xlsx')
data_result = pd.pivot_table(data, index=["page"], columns=["date"], values=["page"], aggfunc={"page": "count"})
print(data_result)
sql一步到位,为了保护隐私和更方便大家看方法,我就简化了一下sql,如下:
select page,
count(case when date = '2020-07-01' then page end) as "2020-07-01",
count(case when date = '2020-07-02' then page end) as "2020-07-02",
count(case when date = '2020-07-03' then page end) as "2020-07-03",
from table_test
group by page
over!