> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-home-button.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> 过去 128 年间的 1.31 亿行气象观测数据

# 台湾历史气象数据集

该数据集包含过去 128 年间的历史气象观测数据。每一行代表某个日期时间点在某个气象站记录的一次测量。

该数据集的来源可在[此处](https://github.com/Raingel/historical_weather)查看，气象站编号列表可在[此处](https://github.com/Raingel/weather_station_list)找到。

> 气象数据集的来源包括由中央气象署设立的气象站 (测站代码以 C0、C1 和 4 开头) ，以及隶属于农业委员会的农业气象站 (测站代码不以上述代码开头) ：

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

<div id="downloading-the-data">
  ## 下载数据
</div>

* 适用于 ClickHouse 的数据[预处理版本](#pre-processed-data)，已完成清洗、重组和增强。该数据集涵盖 1896 年至 2023 年。
* [下载原始数据](#original-raw-data)并将其转换为 ClickHouse 所需的格式。想要添加自定义列的用户，也可以自行探索或补充相应方法。

<div id="pre-processed-data">
  ### 预处理后的数据
</div>

数据集也已重新调整结构：从每行一条测量记录改为每个测站 ID 和测量日期对应一行，即

```csv theme={null}
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 CloudStorage 位置获取。你可以将数据集下载到本地文件系统 (并使用 ClickHouse 命令行客户端插入) ，或者直接将其插入 ClickHouse (参见[从 URL 插入](#inserting-from-url)) 。

下载方式如下：

```bash theme={null}
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
```

<div id="original-raw-data">
  ### 原始数据
</div>

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

<div id="download">
  #### 下载
</div>

要下载原始数据：

```bash theme={null}
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
```

<div id="retrieve-the-taiwan-weather-stations">
  #### 获取台湾的气象站
</div>

```bash theme={null}
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
```

<div id="create-table-schema">
  ## 创建表 schema
</div>

在 ClickHouse 中创建 MergeTree 表 (使用 ClickHouse 命令行客户端) 。

```bash theme={null}
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);
```

<div id="inserting-into-clickhouse">
  ## 向 ClickHouse 插入数据
</div>

<div id="inserting-from-local-file">
  ### 从本地文件插入数据
</div>

可以按如下方式从本地文件插入数据 (在 ClickHouse 命令行客户端中) ：

```sql theme={null}
INSERT INTO tw_weather_data FROM INFILE '/path/to/daily_weather_preprocessed_1896_2023.csv'
```

其中，`/path/to` 表示磁盘上本地文件的用户具体路径。

将数据插入 ClickHouse 后，响应输出示例如下：

```response theme={null}
Query id: 90e4b524-6e14-4855-817c-7e6f98fbeabb

Ok.
131985329 rows in set. Elapsed: 71.770 sec. Processed 131.99 million rows, 10.06 GB (1.84 million rows/s., 140.14 MB/s.)
Peak memory usage: 583.23 MiB.
```

<div id="inserting-from-url">
  ### 通过 URL 插入
</div>

```sql theme={null}
INSERT INTO tw_weather_data SELECT *
FROM url('https://storage.googleapis.com/taiwan-weather-observaiton-datasets/daily_weather_preprocessed_1896_2023.csv', 'CSVWithNames')

```

要了解如何加快这一过程，请参阅我们的博文：[优化大规模数据加载](https://clickhouse.com/blog/supercharge-your-clickhouse-data-loads-part2)。

<div id="check-data-rows-and-sizes">
  ## 查看数据行数和大小
</div>

1. 来看已插入了多少行：

```sql theme={null}
SELECT formatReadableQuantity(count())
FROM tw_weather_data;
```

```response theme={null}
┌─formatReadableQuantity(count())─┐
│ 131.99 million                  │
└─────────────────────────────────┘
```

2. 我们来看看这个表占用了多少磁盘空间：

```sql theme={null}
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
```

```response theme={null}
┌─disk_size─┬─uncompressed_size─┐
│ 2.13 GiB  │ 32.94 GiB         │
└───────────┴───────────────────┘
```

<div id="sample-queries">
  ## 示例查询
</div>

<div id="q1-retrieve-the-highest-dew-point-temperature-for-each-weather-station-in-the-specific-year">
  ### Q1: 查询特定年份各气象站的最高露点温度
</div>

```sql theme={null}
SELECT
    StationId,
    max(Td) AS max_td
FROM tw_weather_data
WHERE (year(MeasuredDate) = 2023) AND (Td IS NOT NULL)
GROUP BY StationId
```

```response theme={null}
┌─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 rows in set. Elapsed: 0.045 sec. Processed 6.41 million rows, 187.33 MB (143.92 million rows/s., 4.21 GB/s.)
```

<div id="q2-raw-data-fetching-with-the-specific-duration-time-range-fields-and-weather-station">
  ### Q2：按指定时间范围、字段和气象站获取原始数据
</div>

```sql theme={null}
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
```

```response theme={null}
┌─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 rows in set. Elapsed: 0.009 sec. Processed 91.70 thousand rows, 2.33 MB (9.67 million rows/s., 245.31 MB/s.)
```

<div id="credits">
  ## 致谢
</div>

我们谨向中央气象署及行政院农业委员会农业气象观测网 (测站) 致谢，感谢其在本数据集的准备、清理和发布过程中所付出的努力。感谢你们的贡献。

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. 面向应用的台湾稻热病早期预警深度学习模型。Ecological Informatics 73, 101950. [https://doi.org/10.1016/j.ecoinf.2022.101950](https://doi.org/10.1016/j.ecoinf.2022.101950) \[13/12/2022]
