跳到主要内容
跳到主要内容

台湾历史天气数据集

该数据集包含过去 128 年的历史气象观测数据。每一行对应某一时间点和气象观测站的一条测量记录。

该数据集的来源在此处,气象观测站编号列表可在此处找到。

气象数据集来源包括由中央气象局设立的气象站(站号以 C0、C1 和 4 开头),以及隶属于农业委员会的农业气象站(站号为上述以外的编号):

  • StationId
    • MeasuredDate,观测时间
    • StnPres,测站气压
    • SeaPres,海平面气压
    • Td,露点温度
    • RH,相对湿度
    • 其他可用的气象要素

下载数据

  • 为 ClickHouse 准备的预处理数据版本,已经过清洗、重构和富化。该数据集覆盖 1896 年至 2023 年。
  • 下载原始数据并转换为 ClickHouse 所需的格式。希望添加自定义列的用户可以在此基础上探索或完善自己的方案。

预处理数据

该数据集也已经从“每行一条测量记录”的结构重组为“每个气象站 ID 与测量日期对应一行”的结构,即:

StationId,MeasuredDate,StnPres,Tx,RH,WS,WD,WSGust,WDGust,Precp,GloblRad,TxSoil0cm,TxSoil5cm,TxSoil20cm,TxSoil50cm,TxSoil100cm,SeaPres,Td,PrecpHour,SunShine,TxSoil10cm,EvapA,Visb,UVI,Cloud Amount,TxSoil30cm,TxSoil200cm,TxSoil300cm,TxSoil500cm,VaporPressure
C0X100,2016-01-01 01:00:00,1022.1,16.1,72,1.1,8.0,,,,,,,,,,,,,,,,,,,,,,,
C0X100,2016-01-01 02:00:00,1021.6,16.0,73,1.2,358.0,,,,,,,,,,,,,,,,,,,,,,,
C0X100,2016-01-01 03:00:00,1021.3,15.8,74,1.5,353.0,,,,,,,,,,,,,,,,,,,,,,,
C0X100,2016-01-01 04:00:00,1021.2,15.8,74,1.7,8.0,,,,,,,,,,,,,,,,,,,,,,,

可以很方便地进行查询,你会发现结果表的稀疏程度更低,但其中有些元素为 null,这是因为该气象站无法对它们进行观测和测量。

此数据集可在以下 Google Cloud Storage 位置获取。你可以将数据集下载到本地文件系统(然后使用 ClickHouse 客户端插入),或者直接插入到 ClickHouse 中(参见 Inserting from URL)。

下载方式如下:

wget https://storage.googleapis.com/taiwan-weather-observaiton-datasets/preprocessed_weather_daily_1896_2023.tar.gz

# 可选:验证校验和
md5sum preprocessed_weather_daily_1896_2023.tar.gz
# 校验和应为:11b484f5bd9ddafec5cfb131eb2dd008

tar -xzvf preprocessed_weather_daily_1896_2023.tar.gz
daily_weather_preprocessed_1896_2023.csv

# 可选:验证校验和
md5sum daily_weather_preprocessed_1896_2023.csv
# 校验和应为:1132248c78195c43d93f843753881754

原始数据

以下内容介绍如何下载原始数据,以便按需进行转换和处理。

下载

要下载原始数据:

mkdir tw_raw_weather_data && cd tw_raw_weather_data

wget https://storage.googleapis.com/taiwan-weather-observaiton-datasets/raw_data_weather_daily_1896_2023.tar.gz

# 可选:验证校验和
md5sum raw_data_weather_daily_1896_2023.tar.gz
# 校验和应为:b66b9f137217454d655e3004d7d1b51a

tar -xzvf raw_data_weather_daily_1896_2023.tar.gz
466920_1928.csv
466920_1929.csv
466920_1930.csv
466920_1931.csv
...

# 可选:验证校验和
cat *.csv | md5sum
# 校验和应为:b26db404bf84d4063fac42e576464ce1

获取台湾地区气象站列表

wget -O weather_sta_list.csv https://github.com/Raingel/weather_station_list/raw/main/data/weather_sta_list.csv

# 可选:将 UTF-8-BOM 转换为 UTF-8 编码
sed -i '1s/^\xEF\xBB\xBF//' weather_sta_list.csv

创建表结构

使用 ClickHouse 客户端在 ClickHouse 中创建 MergeTree 表。

CREATE TABLE tw_weather_data (
    StationId String null,
    MeasuredDate DateTime64,
    StnPres Float64 null,
    SeaPres Float64 null,
    Tx Float64 null,
    Td Float64 null,
    RH Float64 null,
    WS Float64 null,
    WD Float64 null,
    WSGust Float64 null,
    WDGust Float64 null,
    Precp Float64 null,
    PrecpHour Float64 null,
    SunShine Float64 null,
    GloblRad Float64 null,
    TxSoil0cm Float64 null,
    TxSoil5cm Float64 null,
    TxSoil10cm Float64 null,
    TxSoil20cm Float64 null,
    TxSoil50cm Float64 null,
    TxSoil100cm Float64 null,
    TxSoil30cm Float64 null,
    TxSoil200cm Float64 null,
    TxSoil300cm Float64 null,
    TxSoil500cm Float64 null,
    VaporPressure Float64 null,
    UVI Float64 null,
    "Cloud Amount" Float64 null,
    EvapA Float64 null,
    Visb Float64 null
)
ENGINE = MergeTree
ORDER BY (MeasuredDate);

向 ClickHouse 插入数据

从本地文件插入

可以在 ClickHouse 客户端中通过以下方式从本地文件插入数据:

INSERT INTO tw_weather_data FROM INFILE '/path/to/daily_weather_preprocessed_1896_2023.csv'

其中 /path/to 表示磁盘上本地文件的特定用户路径。

向 ClickHouse 插入数据后,示例响应如下:

查询 ID: 90e4b524-6e14-4855-817c-7e6f98fbeabb

完成。
结果集包含 131985329 行。耗时:71.770 秒。已处理 1.3199 亿行,10.06 GB(184 万行/秒,140.14 MB/秒)。
峰值内存使用量:583.23 MiB。

从 URL 插入数据

INSERT INTO tw_weather_data SELECT *
FROM url('https://storage.googleapis.com/taiwan-weather-observaiton-datasets/daily_weather_preprocessed_1896_2023.csv', 'CSVWithNames')

如需了解如何加快这一过程,请参阅我们关于优化大规模数据加载的博文。

检查数据行和大小

  1. 先查看已插入了多少行:
SELECT formatReadableQuantity(count())
FROM tw_weather_data;
┌─formatReadableQuantity(count())─┐
│ 1.3199亿                        │
└─────────────────────────────────┘
  1. 我们来看看这张表使用了多少磁盘空间:
SELECT
    formatReadableSize(sum(bytes)) AS disk_size,
    formatReadableSize(sum(data_uncompressed_bytes)) AS uncompressed_size
FROM system.parts
WHERE (`table` = 'tw_weather_data') AND active
┌─disk_size─┬─uncompressed_size─┐
│ 2.13 GiB  │ 32.94 GiB         │
└───────────┴───────────────────┘

查询示例

Q1: 查询指定年份中每个气象站的最高露点温度

SELECT
    StationId,
    max(Td) AS max_td
FROM tw_weather_data
WHERE (year(MeasuredDate) = 2023) AND (Td IS NOT NULL)
GROUP BY StationId

┌─StationId─┬─max_td─┐
│ 466940    │      1 │
│ 467300    │      1 │
│ 467540    │      1 │
│ 467490    │      1 │
│ 467080    │      1 │
│ 466910    │      1 │
│ 467660    │      1 │
│ 467270    │      1 │
│ 467350    │      1 │
│ 467571    │      1 │
│ 466920    │      1 │
│ 467650    │      1 │
│ 467550    │      1 │
│ 467480    │      1 │
│ 467610    │      1 │
│ 467050    │      1 │
│ 467590    │      1 │
│ 466990    │      1 │
│ 467060    │      1 │
│ 466950    │      1 │
│ 467620    │      1 │
│ 467990    │      1 │
│ 466930    │      1 │
│ 467110    │      1 │
│ 466881    │      1 │
│ 467410    │      1 │
│ 467441    │      1 │
│ 467420    │      1 │
│ 467530    │      1 │
│ 466900    │      1 │
└───────────┴────────┘

返回 30 行。用时:0.045 秒。已处理 641 万行,187.33 MB(1.4392 亿行/秒,4.21 GB/秒)。

Q2: 在特定时间范围内按字段和气象站获取原始数据

SELECT
    StnPres,
    SeaPres,
    Tx,
    Td,
    RH,
    WS,
    WD,
    WSGust,
    WDGust,
    Precp,
    PrecpHour
FROM tw_weather_data
WHERE (StationId = 'C0UB10') AND (MeasuredDate >= '2023-12-23') AND (MeasuredDate < '2023-12-24')
ORDER BY MeasuredDate ASC
LIMIT 10
┌─StnPres─┬─SeaPres─┬───Tx─┬───Td─┬─RH─┬──WS─┬──WD─┬─WSGust─┬─WDGust─┬─Precp─┬─PrecpHour─┐
│  1029.5 │    ᴺᵁᴸᴸ │ 11.8 │ ᴺᵁᴸᴸ │ 78 │ 2.7 │ 271 │    5.5 │    275 │ -99.8 │     -99.8 │
│  1029.8 │    ᴺᵁᴸᴸ │ 12.3 │ ᴺᵁᴸᴸ │ 78 │ 2.7 │ 289 │    5.5 │    308 │ -99.8 │     -99.8 │
│  1028.6 │    ᴺᵁᴸᴸ │ 12.3 │ ᴺᵁᴸᴸ │ 79 │ 2.3 │ 251 │    6.1 │    289 │ -99.8 │     -99.8 │
│  1028.2 │    ᴺᵁᴸᴸ │   13 │ ᴺᵁᴸᴸ │ 75 │ 4.3 │ 312 │    7.5 │    316 │ -99.8 │     -99.8 │
│  1027.8 │    ᴺᵁᴸᴸ │ 11.1 │ ᴺᵁᴸᴸ │ 89 │ 7.1 │ 310 │   11.6 │    322 │ -99.8 │     -99.8 │
│  1027.8 │    ᴺᵁᴸᴸ │ 11.6 │ ᴺᵁᴸᴸ │ 90 │ 3.1 │ 269 │   10.7 │    295 │ -99.8 │     -99.8 │
│  1027.9 │    ᴺᵁᴸᴸ │ 12.3 │ ᴺᵁᴸᴸ │ 89 │ 4.7 │ 296 │    8.1 │    310 │ -99.8 │     -99.8 │
│  1028.2 │    ᴺᵁᴸᴸ │ 12.2 │ ᴺᵁᴸᴸ │ 94 │ 2.5 │ 246 │    7.1 │    283 │ -99.8 │     -99.8 │
│  1028.4 │    ᴺᵁᴸᴸ │ 12.5 │ ᴺᵁᴸᴸ │ 94 │ 3.1 │ 265 │    4.8 │    297 │ -99.8 │     -99.8 │
│  1028.3 │    ᴺᵁᴸᴸ │ 13.6 │ ᴺᵁᴸᴸ │ 91 │ 1.2 │ 273 │    4.4 │    256 │ -99.8 │     -99.8 │
└─────────┴─────────┴──────┴──────┴────┴─────┴─────┴────────┴────────┴───────┴───────────┘

返回 10 行。用时:0.009 秒。已处理 9.17 万行,2.33 MB(967 万行/秒,245.31 MB/秒)。

致谢

我们谨此感谢行政院农业委员会中央气象署及农业气象观测网(测站)在本数据集的准备、清洗和发布过程中所作出的贡献,谨致谢忱。

Ou, J.-H., Kuo, C.-H., Wu, Y.-F., Lin, G.-C., Lee, M.-H., Chen, R.-K., Chou, H.-P., Wu, H.-Y., Chu, S.-C., Lai, Q.-J., Tsai, Y.-C., Lin, C.-C., Kuo, C.-C., Liao, C.-T., Chen, Y.-N., Chu, Y.-W., Chen, C.-Y., 2023. Application-oriented deep learning model for early warning of rice blast in Taiwan. Ecological Informatics 73, 101950. https://doi.org/10.1016/j.ecoinf.2022.101950 [13/12/2022]