clickhouse+superset搭建数据平台(四)-数据应用(报表可视化设计)

经过前面的步骤,我们已经成功搭建好了数据库,将csv文件中的数据导入到clickhouse中,并将superset和clickhouse成功地连接起来了。现在我们就可以对我们的数据尝试提出一些实际业务问题,使用SQL查询出我们想要的数据结果,并将其可视化为报表形式保存在superset上。

我们不妨从以下几个问题入手:

  1. ⾏⻋⾥程最多的出租⻋Top 100是哪些?
  2. 出租⻋每⽇⾼峰期和低峰期(⼩时级别)是什么时候?
  3. 分析每台出租⻋的平均搭载时⻓是多少?
  4. 分析每日出租车数量趋势?
  5. 分析每日出租车订单趋势?
  6. 分析每日车费(fare)趋势?
  7. 不同距离长度的出租车订单分布如何?

由于SQL比较简单,不做多余解释,看代码就行。重点说明如何将SQL查询保存为数据报表(slice)的过程。

  1. ⾏⻋⾥程最多的出租⻋Top 100是哪些?

在SQL Editor中输入:

SELECT sum(trip_miles ) as trip_miles , taxi_id 
FROM TAXI_TRIPS 
GROUP BY taxi_id 
order by trip_miles DESC 
limit 100

点击Run Query,等待服务器返回结果。点击Save Query保存当前查询。

clickhouse+superset搭建数据平台(四)-数据应用(报表可视化设计)_第1张图片

接下来我们将查询结果保存到superset。

点击Explore按钮,页面将跳转到数据切片的详细设置页面,
clickhouse+superset搭建数据平台(四)-数据应用(报表可视化设计)_第2张图片

clickhouse+superset搭建数据平台(四)-数据应用(报表可视化设计)_第3张图片

①数据源设置

点击数据源设置后,可以看到数据源对应的SQL,因为数据源的名称并不容易记住,我们首先将其修改为更直观的名称,点击Use Legacy DataSource Editor切换回以前的数据源旧编辑器模式(新的我没找到在哪里修改数据源名称),
clickhouse+superset搭建数据平台(四)-数据应用(报表可视化设计)_第4张图片
clickhouse+superset搭建数据平台(四)-数据应用(报表可视化设计)_第5张图片
修改后保存即可。
回到新版的旧编辑器,在Metrics标签页里,superset为我们自动生成了一个聚合指标count(*),表示记录条数,我们可以自定义生成其他的指标。比如我们可以生成一个出租车里程数的SUM聚合指标,并且将其名称标记为trip_miles。

这里有个坑,要是直接在刚才的可视化界面将Metrics设置为trip_miles,superset会提示一定要将这个量值聚合后才能用于图表构建,而构建后的图表指标名称就变成了SUM(trip_miles),但是我们见到的大多数图表并不会这样标注,通常会直接标注里程数(trip_miles),因此SUM(trip_miles)并不直观,为人们好理解。现在也没有太好的解决方案,只能暂时通过这种创建量值的方式让图表显示trip_miles。
clickhouse+superset搭建数据平台(四)-数据应用(报表可视化设计)_第6张图片
②报表类型

superset支持了几乎所有常见的图表类型,如下图。
clickhouse+superset搭建数据平台(四)-数据应用(报表可视化设计)_第7张图片

但值得一提的一点是,line chart在superset 0.34.0版本中支持x轴为时间/日期的数据框,其他x轴不为时间/日期类型的不能使用line chart,作者解释这样子设计的意思是x轴非时间类型的数据框可以用bar chart实现我们想要的效果。

因此这里我们选择bar chart。

回到设计界面,需要注意的是这里有另外一个坑,Time项目中Time Range被默认筛选到了Last Week,这个会导致SQL查询无结果,需要将其设定到No filter状态。
clickhouse+superset搭建数据平台(四)-数据应用(报表可视化设计)_第8张图片

clickhouse+superset搭建数据平台(四)-数据应用(报表可视化设计)_第9张图片

③聚合列

此处指定taxi_id作为聚合列。

④指标

此处是我们刚才创建的指标trip_miles。点击Run Query就可以看到设计好的图表。
clickhouse+superset搭建数据平台(四)-数据应用(报表可视化设计)_第10张图片

实际上superset这样子的设计我感觉更使用于粒度中等的SQL返回结果,粒度中度意味着不把底层数据表全量返回,同时又可以对量值做不同类型的聚合计算,COUNT\SUM\MAX等等;但是这样子带来的问题是在写SQL的时候就得想好指标的聚合需要怎么设计,粒度不好把控。

接下来我们将其保存到Dashboard。点击左上角的Save,在Save as中填入图表名称,在Add to new dashboard中填入新建的仪表板名称。

clickhouse+superset搭建数据平台(四)-数据应用(报表可视化设计)_第11张图片

根据选择的图表类型不同,图表设计界面可能有不同的Option,比如:

⑤排序依据
指定图表排序依据的列或者聚合(?)

⑥升降序
排序升降序(DESC\ASC)

以下问题同理,为了方便就不写具体过程,只写出对应的SQL,以供参考。

  1. 出租⻋每⽇⾼峰期和低峰期(⼩时级别)是什么时候?
SELECT
    AVG(a.n_taxis) AS avg_n_taxis,
    a.hour
from
    (
        SELECT
            toDate(trip_start_timestamp) as date,
            toHour(
                toDateTime(trip_start_timestamp)
            ) as hour,
            count(distinct taxi_id) as n_taxis
        FROM
            TAXI_TRIPS
        group by
            date,
            hour
    ) a
group by
    a.hour
  1. 分析每台出租⻋的平均搭载时⻓是多少?
SELECT
    taxi_id,
    avg(trip_seconds) / 60 as avg_trip_minutes
from
    TAXI_TRIPS
GROUP BY
    taxi_id
order by
    avg_trip_minutes desc
    
limit 1000
  1. 分析每日出租车数量趋势?
SELECT
    COUNT(DISTINCT taxi_id) as n_taxis,
    toDate(trip_start_timestamp) as date
FROM
    TAXI_TRIPS
GROUP BY
    date
  1. 分析每日出租车订单趋势?
SELECT
    COUNT(DISTINCT trip_id ) as n_trips,
    toDate(trip_start_timestamp) as date
FROM
    TAXI_TRIPS
GROUP BY
    date
  1. 分析每日车费(fare)趋势?
SELECT
    SUM(toFloat32OrZero(substring(fare, 2))) as fare,
    toDate(trip_start_timestamp) as date
FROM
    TAXI_TRIPS
GROUP BY
    date
  1. 不同距离长度的出租车订单分布如何?
SELECT
    (
        CASE
            WHEN trip_miles >= 0
            and trip_miles < 5 THEN 5
            WHEN trip_miles >= 5
            and trip_miles < 10 THEN 10
            WHEN trip_miles >= 10
            and trip_miles < 50 THEN 50
            WHEN trip_miles >= 50
            and trip_miles < 100 THEN 100
            WHEN trip_miles >= 100
            and trip_miles < 500 THEN 500
            WHEN trip_miles >= 500
            and trip_miles < 1000 THEN 1000
            ELSE 10000
        END
    ) AS miles_tag,
    COUNT(DISTINCT trip_id) as n_trips
FROM
    TAXI_TRIPS
GROUP BY
    miles_tag

你可能感兴趣的:(数据分析,可视化,数据库,python,大数据)