대만 과거 기상 데이터

대만 과거 기상 데이터 (Taiwan historical weather datasets)

지난 128년간의 대만 기상 관측 데이터를 담은 데이터셋입니다. 각 행은 특정 시점과 기상 관측소의 측정값입니다. 데이터를 다운로드해 ClickHouse 테이블로 로드하고 분석하는 과정을 단계별로 보여줍니다.

출처: 문서

본문

이 데이터셋은 지난 128년간의 역사적 기상 관측 데이터를 포함합니다. 각 행은 특정 날짜-시간과 기상 관측소에 대한 측정값입니다.

이 데이터셋의 원본은 여기에서, 기상 관측소 번호 목록은 여기에서 확인할 수 있습니다.

기상 데이터셋의 출처는 중앙기상청(Central Weather Administration)이 설립한 기상 관측소(관측소 코드가 C0, C1, 4로 시작)와 농업위원회(Council of Agriculture) 소속 농업 기상 관측소(위에 언급된 것 외의 관측소 코드)를 포함합니다:

  • StationId
  • MeasuredDate, 관측 시간
  • StnPres, 관측소 기압
  • SeaPres, 해수면 기압
  • Td, 이슬점 온도
  • RH, 상대 습도
  • 기타 사용 가능한 요소들

데이터 다운로드 (Downloading the data)

  • ClickHouse용 데이터의 [사본]은 정리되고 재구성되었으며 풍부해졌습니다. 이 데이터셋은 1896년부터 2023년까지의 연도를 다룹니다.
  • [변환]해 ClickHouse가 요구하는 형식으로 만듭니다. 자신만의 컬럼을 추가하려는 사용자는 자신의 접근 방식을 탐색하거나 완성할 수 있습니다.

전처리된 데이터 (Pre-processed data)

이 데이터셋은 라인당 하나의 측정값에서 기상 관측소 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,,,,,,,,,,,,,,,,,,,,,,,

결과 테이블이 덜 희소(sparse)해지고, 일부 요소는 이 기상 관측소에서 측정할 수 없어 null이 되는지 쿼리하기 쉽습니다.

이 데이터셋은 다음 Google Cloud Storage 위치에서 사용할 수 있습니다. 데이터셋을 로컬 파일시스템에 내려받아(ClickHouse 클라이언트로 삽입) 사용하거나, ClickHouse에 직접 삽입할 수 있습니다(참고).

다운로드 방법:

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

# 옵션: 체크섬 검증
md5sum preprocessed_weather_daily_1896_2023.tar.gz
# Checksum should be equal to: 11b484f5bd9ddafec5cfb131eb2dd008

tar -xzvf preprocessed_weather_daily_1896_2023.tar.gz
daily_weather_preprocessed_1896_2023.csv

# 옵션: 체크섬 검증
md5sum daily_weather_preprocessed_1896_2023.csv
# Checksum should be equal to: 1132248c78195c43d93f843753881754

원본 원시 데이터 (Original raw data)

다음 내용은 원본 원시 데이터를 내려받아 원하는 대로 변환·변경하는 단계입니다.

다운로드 (Download)

원본 원시 데이터를 내려받으려면:

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
# Checksum should be equal to: 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
# Checksum should be equal to: b26db404bf84d4063fac42e576464ce1

대만 기상 관측소 가져오기 (Retrieve the Taiwan weather stations)

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

테이블 스키마 생성 (Create table schema)

(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에 삽입 (Inserting into ClickHouse)

로컬 파일에서 삽입 (Inserting from local file)

(ClickHouse 클라이언트에서) 로컬 파일에서 다음과 같이 삽입할 수 있습니다:

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

여기서 /path/to는 디스크의 로컬 파일에 대한 사용자의 특정 경로를 나타냅니다.

ClickHouse에 데이터를 삽입한 후의 샘플 응답 출력은 다음과 같습니다:

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.

URL에서 삽입 (Inserting from URL)

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

속도를 높이는 방법은 대규모 데이터 로드 튜닝 블로그 게시물을 참고하세요.

데이터 행과 크기 확인 (Check data rows and sizes)

  1. 삽입된 행 수를 확인해 봅시다:
SELECT formatReadableQuantity(count())
FROM tw_weather_data;
┌─formatReadableQuantity(count())─┐
│ 131.99 million                  │
└─────────────────────────────────┘
  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         │
└───────────┴───────────────────┘

샘플 쿼리 (Sample queries)

Q1: 특정 연도에 각 기상 관측소의 최고 이슬점 온도 조회

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

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

감사의 말 (Credits)

이 데이터셋을 준비, 정리, 배포해 주신 중앙기상청(Central Weather Administration)과 농업위원회(Council of Agriculture)의 농업 기상 관측 네트워크(관측소)의 노력에 감사드립니다. 여러분의 노력에 감사드립니다.

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]

더 알아보기 (Learn more)