Ngiêm cấm sử đụng PROXY và VPS vào mục đích trái pháp luật bạn sẽ phải chịu toàn bộ trách nhiệm trước pháp luật khi sử dụng dịch vụ của chúng tôi tks!
NOAA CDO API station data: cờ chất lượng và ngày thiếu

NOAA CDO API station data: cờ chất lượng và ngày thiếu

Chuyên viên Kỹ thuật ProxyVN 04-19-2026 Đang tính... phút đọc

NOAA CDO API station data là cách lấy số đo khí hậu theo trạm từ Climate Data Online của NCEI, mỗi bản ghi gồm trạm, loại số đo, ngày, giá trị và chuỗi thuộc tính chất lượng. Bài này viết cho người dựng bảng nhiệt độ, lượng mưa theo trạm, hay mắc lỗi điền 0 cho ngày thiếu và bỏ qua cờ đo vết. ProxyVN chạy lab ngày 05/11/2026: gọi CDO v2 không token để ghi lại phản hồi, rồi lấy dữ liệu GHCND thật của hai trạm qua dịch vụ Access Data của NCEI để kiểm cờ.

NOAA CDO API station data: mục tiêu và phạm vi không lặp

Phần này chốt bài toán, đầu ra và ranh giới với các bài khác.

Bài toán cần giải

Một nhóm phân tích muốn so lượng mưa và nhiệt độ của vài trạm qua nhiều năm. Họ tải dữ liệu, cộng lượng mưa theo năm, tính nhiệt độ trung bình. Kết quả lệch vì những ngày không có bản ghi bị coi là 0 mm, và những ngày có mưa vết được tính như không mưa mà không ai ghi chú.

Đầu ra nghiệm thu

Đầu ra là dataset dạng dài, mỗi dòng gồm station, datatype, date, value, mflag, qflag, sflag, obs_time. Đi kèm là bảng kiểm: số ngày có dòng trên số ngày trong khoảng, phân bố từng cờ theo datatype, tổng có và không có cờ chất lượng, danh sách ngày không có số đo.

Ranh giới với bài thời tiết theo lưới

Dữ liệu trạm là số đo thật tại một điểm, có ngày thiếu và có cờ. Dữ liệu mô hình theo lưới như Open-Meteo archive là kết quả tính toán phủ đều không gian, gần như không có ngày thiếu. Bài này chỉ nói về số đo trạm. Bài về Open-Meteo nằm ở phần sau của cụm, không trùng nội dung.

Giới hạn của lab

Lab không có token CDO. Mọi lời gọi tới CDO v2 trả 400, nên lab không chạy được endpoint data của CDO v2. Số liệu trong bài lấy từ NCEI Access Data Service, dataset daily-summaries, là cùng dữ liệu GHCND mà CDO phục vụ, kèm chuỗi thuộc tính cùng thứ tự cờ. Phần nào chỉ dựa trên tài liệu CDO v2 được ghi rõ.

Ai nên đọc

Người làm phân tích khí hậu, nông nghiệp, bảo hiểm thời tiết cần số đo trạm. Kỹ sư dữ liệu dựng pipeline khí tượng. Giảng viên cần ví dụ thật về cờ chất lượng dữ liệu đo.

Những gì bài không làm

Bài không giải thích phương pháp kiểm soát chất lượng của GHCND, không chuyển dữ liệu trạm sang lưới, không bàn về đồng nhất hóa chuỗi số liệu dài hạn. Phạm vi là lấy đúng, giữ đúng cờ và không tự điền số.

Thuật ngữ dùng trong bài

GHCND là bộ dữ liệu khí hậu hằng ngày toàn cầu. Station là trạm đo, có ID như USW00094728. Datatype là loại số đo như TMAX, TMIN, PRCP, SNOW, SNWD, TAVG, AWND. MFLAG là cờ đo lường, QFLAG là cờ chất lượng, SFLAG là cờ nguồn. Obs_time là giờ quan trắc nếu có.

Vì sao dữ liệu trạm vẫn cần

Dữ liệu lưới tiện vì phủ mọi nơi, nhưng nó là kết quả mô hình. Khi cần bằng chứng về một trận mưa lớn tại một địa điểm, hay khi hợp đồng bảo hiểm gắn với số đo của một trạm cụ thể, số đo trạm là nguồn được chấp nhận. Đổi lại, người dùng phải tự xử lý ngày thiếu và cờ.

Thu dữ liệu NOAA theo station/datatype và xử lý chất lượng/missing với NOAA CDO API station data

Phần này ghi lại lời gọi CDO v2 và lời gọi dữ liệu thật.

Nguồn tài liệu đã đọc

Tài liệu Web Services v2 của CDO mô tả các endpoint datasets, datacategories, datatypes, locations, stations và data, cùng yêu cầu gửi token trong header. Tài liệu Access Data Service của NCEI mô tả dịch vụ trả dữ liệu GHCND theo trạm, không cần token. Nghĩa của cờ lấy từ tệp readme của GHCN Daily.

CDO v2 không token

Lab gọi https://www.ncei.noaa.gov/cdo-web/api/v2/data với datasetid GHCND, stationid GHCND:USW00094728, startdate 2025-01-01, enddate 2025-01-31, không gửi token. API trả HTTP 400 với message là Token parameter is required. Lời gọi datasets không token cũng trả cùng thông điệp.

CDO v2 token sai

Gửi header token với giá trị bịa, API trả HTTP 400 với message là The token parameter provided is not valid. Hai thông điệp khác nhau cho phép phân biệt thiếu token với token sai. Cả hai đều là 400, không phải 401 hay 403. Mã xử lý lỗi không nên dựa vào mã HTTP để biết vấn đề xác thực.

Token CDO lấy ở đâu

Theo tài liệu, token đăng ký miễn phí bằng email trên trang CDO và gửi trong header token. Lab không đăng ký vì quy tắc dự án không dùng email cá nhân cho lab. Người đọc có token có thể chạy phần CDO v2 theo mã ở phần sau và đối chiếu với kết quả của bài.

Access Data Service không cần token

Lab gọi https://www.ncei.noaa.gov/access/services/data/v1 với dataset daily-summaries, stations, startDate, endDate, dataTypes, includeAttributes true, format json, units metric. Trạm Central Park ở New York, ID USW00094728, năm 2025 trả HTTP 200, 90774 byte, 365 dòng.

Ví dụ request bằng Python

import requests, time
s = requests.Session()
s.headers["User-Agent"] = "ProxyVN-docs-lab/1.0 (+https://proxy.vn/)"
ADS = "https://www.ncei.noaa.gov/access/services/data/v1"
 
def ads(station, start, end, types):
    r = s.get(ADS, params=dict(dataset="daily-summaries", stations=station, startDate=start,
              endDate=end, dataTypes=",".join(types), includeAttributes="true",
              format="json", units="metric"), timeout=90)
    time.sleep(4)
    return r.status_code, r.json()
 
st, d = ads("USW00094728", "2025-01-01", "2025-12-31", ["TMAX", "TMIN", "PRCP", "SNOW", "SNWD"])
print(st, len(d), d[0])

Một dòng trong response

Mỗi dòng có DATE, STATION và một cặp trường cho mỗi datatype: giá trị và _ATTRIBUTES. Ví dụ ngày 01/09/2026 của Central Park có TMAX 27.8, TMAX_ATTRIBUTES là ",,1", PRCP 9.9, PRCP_ATTRIBUTES là ",,1,2400". Giá trị là chuỗi, không phải số.

Kích thước response

Một năm của Central Park với năm datatype nặng khoảng 90 KB. Hai năm với bảy datatype khoảng 236 KB. Trạm Hà Nội một năm với bốn datatype yêu cầu chỉ 20 KB, vì phần lớn trường vắng. Kích thước nhỏ cũng là một tín hiệu sớm rằng trạm thiếu dữ liệu.

Format csv và json

Access Data Service hỗ trợ cả csv và json. Lab dùng json vì dễ phân biệt trường vắng với trường rỗng. Với csv, một cột không có giá trị và một cột vắng hẳn có thể trông giống nhau sau khi đọc bằng thư viện bảng tính.

Mã CDO v2 tương ứng

CDO = "https://www.ncei.noaa.gov/cdo-web/api/v2/data"
r = s.get(CDO, headers={"token": TOKEN},
          params={"datasetid": "GHCND", "stationid": "GHCND:USW00094728",
                  "datatypeid": "PRCP", "startdate": "2025-01-01",
                  "enddate": "2025-01-31", "units": "metric", "limit": 1000})

Đoạn này chưa chạy được vì không có token. Theo tài liệu, mỗi kết quả có date, datatype, station, attributes, value. Trường attributes dùng cùng thứ tự cờ như Access Data Service.

Khám phá dataset, station và datatype có dữ liệu bằng NOAA CDO API station data

Không phải trạm nào cũng có mọi datatype, và ID sai không báo lỗi.

Trạm Hà Nội chỉ có TAVG

Trạm Hà Nội chỉ có TAVG

Trạm Hà Nội chỉ có TAVG

Lab gọi trạm VMM00048820 năm 2025 với TMAX, TMIN, PRCP. Response có 236 dòng, nhưng không dòng nào có ba datatype đó. Mỗi dòng chỉ có DATE và STATION. Gọi lại với TAVG thêm vào, cả 236 dòng có TAVG, ví dụ 18.7 ngày 01/01/2025.

Dòng rỗng vẫn được trả

236 dòng không có giá trị nào của datatype yêu cầu vẫn được trả về. Nghĩa là trạm có dữ liệu ở một datatype khác trong những ngày đó. Pipeline đếm số dòng làm thước đo đầy đủ sẽ kết luận sai rằng Hà Nội có 236 ngày đủ số liệu.

129 ngày không có dòng nào

Năm 2025 có 365 ngày, trạm Hà Nội chỉ có 236 dòng. 129 ngày không có dòng. Những ngày này không có bất kỳ số đo nào trong dữ liệu GHCND của trạm. Không điền, không nội suy trong bảng gốc.

ID sai trả mảng rỗng

Lab thử ID VM000048820, một biến thể sai của ID Hà Nội. Response là HTTP 200 với mảng rỗng. Lab cũng thử một trạm USC00305801 năm 2025, nhận về 4 byte là một mảng rỗng. Mã 200 kèm mảng rỗng không cho biết ID sai hay trạm không có dữ liệu trong khoảng đó.

Thử nhiều khoảng ngày khi nghi ngờ

Khi một trạm trả mảng rỗng, thử một khoảng ngày cũ hơn, ví dụ năm trước. Nếu năm trước có dữ liệu, ID đúng và trạm chỉ ngừng gửi số liệu. Nếu mọi khoảng đều rỗng, ID nhiều khả năng sai. Lab chưa chạy phép thử này cho USC00305801, nên không kết luận về trạm đó.

Kiểm trạm trước khi lấy dữ liệu

Với CDO v2, endpoint stations trả mindate, maxdate và datacoverage của trạm. Đây là cách kiểm trạm có dữ liệu trong khoảng cần lấy. Lab không chạy được vì thiếu token. Không có token, có thể dùng tệp danh mục trạm và tệp kiểm kê của GHCN Daily mà readme mô tả.

Datatype nên khám phá trước

Mỗi trạm có tập datatype riêng. Trạm Central Park có TMAX, TMIN, PRCP, SNOW, SNWD, AWND, WSF2 trong 2024 tới 2025. Trạm Hà Nội trong GHCND năm 2025 chỉ có TAVG. Pipeline nên lấy danh sách datatype của trạm trước, rồi mới quyết định so sánh gì.

Tên trạm và vị trí

Lab dùng ID trạm làm khóa. Tên và tọa độ của trạm nằm trong danh mục trạm. Khi trạm đổi vị trí, chuỗi số liệu có thể bị gián đoạn dù ID giữ nguyên. Dataset nên lưu tọa độ trạm tại thời điểm lấy dữ liệu cùng metadata của tệp.

Bảng khám phá trạm

Bảng: Bảng khám phá trạm

Trạm

Năm

Dòng

Datatype có giá trị

USW00094728 Central Park

2025

365

TMAX, TMIN, PRCP, SNOW, SNWD

USW00094728 Central Park

2024 tới 2025

731

thêm AWND 727, WSF2 731

VMM00048820 Hà Nội

2025

236

chỉ TAVG

VM000048820 (ID sai)

2025

0

không có

USC00305801

2025

0

không có

Lấy records theo thời gian với attributes chất lượng trong NOAA CDO API station data

Chuỗi thuộc tính là nơi chứa thông tin quan trọng nhất ngoài giá trị.

Thứ tự cờ trong chuỗi

Thứ tự cờ trong chuỗi

Thứ tự cờ trong chuỗi

Chuỗi _ATTRIBUTES ngăn bằng dấu phẩy theo thứ tự MFLAG, QFLAG, SFLAG, và với một số datatype có thêm obs_time. ",,1" nghĩa là MFLAG rỗng, QFLAG rỗng, SFLAG là 1. ",,1,2400" thêm giờ quan trắc 2400. Số phần tử thay đổi theo datatype, mã tách phải chịu được chuỗi ngắn.

Mã tách cờ

rows = []
for x in d:
    for t in ["TMAX", "TMIN", "PRCP", "SNOW", "SNWD"]:
        if t not in x:
            continue
        a = (x.get(t + "_ATTRIBUTES") or "").split(",")
        a += [""] * (4 - len(a))
        rows.append(dict(station=x["STATION"], datatype=t, date=x["DATE"], value=x[t].strip(),
                         mflag=a[0], qflag=a[1], sflag=a[2], obs_time=a[3]))

MFLAG T là mưa vết

Central Park năm 2025 có 35 ngày PRCP với MFLAG là T, giá trị 0.0. Theo readme của GHCN Daily, T là trace, lượng nhỏ hơn mức đo được. Đây là ngày có mưa, không phải ngày khô. SNOW có 9 ngày T, SNWD có 6 ngày T.

MFLAG H ở trạm Hà Nội

Cả 236 dòng TAVG của Hà Nội có MFLAG là H và SFLAG là S. Theo readme, H cho biết giá trị là trung bình tính từ số liệu theo giờ. TAVG kiểu này khác với trung bình của TMAX và TMIN. So TAVG Hà Nội với trung bình hai cực trị của trạm khác là so hai đại lượng khác nhau.

Obs_time không phải lúc nào cũng có

TMAX và TMIN của Central Park có chuỗi ba phần, không có obs_time. PRCP, SNOW, SNWD có bốn phần với 2400. Mã tách đệm thêm phần tử rỗng để luôn có bốn cột. Không đệm thì truy cập phần tử thứ tư sẽ lỗi với nhiệt độ.

QFLAG trong mẫu

Trong mọi dòng lab lấy về, QFLAG đều rỗng. Mẫu gồm hai năm của Central Park và một năm của Hà Nội. Không thấy QFLAG không có nghĩa là bộ dữ liệu không có. Mã vẫn phải xử lý QFLAG, và bộ test dùng một fixture có QFLAG để kiểm nhánh đó.

SFLAG cho biết nguồn

Central Park có SFLAG là W ở phần lớn dòng và 1 ở phần còn lại, ví dụ năm 2025 với TMAX là 238 và 127. Lab không giải mã giá trị 1 ở đây, việc đó cần tra bảng mã nguồn trong readme. Điều cần giữ là SFLAG cho thấy cùng một trạm có số đo từ nhiều nguồn tổng hợp.

Test cờ bằng fixture

Vì mẫu thật không có QFLAG, lab viết một fixture bốn ngày do lab tự đặt: một ngày mưa 5 mm sạch, một ngày mưa vết, một ngày 120 mm có QFLAG I, một ngày TAVG cờ H. Áp quy tắc của bài, tổng PRCP là 5.0 mm trên 2 trên 3 ngày, 1 ngày vết. Fixture không phải dữ liệu NOAA, chỉ để kiểm nhánh mã.

Bảng phân bố cờ Central Park 2025

Bảng: Bảng phân bố cờ Central Park 2025

Datatype

Số dòng có giá trị

MFLAG

QFLAG

SFLAG

TMAX

365

rỗng 365

rỗng 365

W 238, 1 127

TMIN

365

rỗng 365

rỗng 365

W 238, 1 127

PRCP

365

T 35, rỗng 330

rỗng 365

W 238, 1 127

SNOW

365

T 9, rỗng 356

rỗng 365

W 235, 1 130

SNWD

364

T 6, rỗng 358

rỗng 364

W 233, 1 131

Giữ unit và xử lý giá trị/mốc thời gian thiếu trong NOAA CDO API station data

Đơn vị và ngày thiếu là hai nguồn lệch số thường gặp nhất.

Đơn vị phụ thuộc tham số

Lab đặt units là metric. TMAX 27.8 là độ C, PRCP 9.9 là mm. Không đặt tham số này thì giá trị có thể trả theo đơn vị khác. Dataset phải ghi cột unit hoặc ghi tham số units vào metadata của tệp. Một con số nhiệt độ không có đơn vị là con số không dùng được.

Giá trị là chuỗi

Giá trị trả về là chuỗi, một số có khoảng trắng đầu. Lab strip rồi mới đổi sang số. Giữ chuỗi gốc trong cột value, đổi sang số trong cột value_num khi tính toán.

Ngày có dòng nhưng thiếu một datatype

SNWD của Central Park có 364 trên 365 ngày. Một ngày có dòng, có TMAX, PRCP nhưng không có SNWD. AWND trong 2024 tới 2025 có 727 trên 731 ngày. Những ngày này là thiếu số đo của riêng datatype đó, không phải thiếu cả ngày.

Mã đếm ba trạng thái

Mã đếm duyệt mọi ngày trong khoảng. Ngày không có trong tập DATE là không có dòng. Ngày có DATE nhưng thiếu khóa datatype là có dòng thiếu datatype. Còn lại là có giá trị. Ba bộ đếm cộng lại phải bằng số ngày trong khoảng, đó cũng là phép kiểm cho chính mã đếm.

Ba trạng thái phải tách

Mỗi cặp trạm, datatype, ngày có ba trạng thái: có giá trị, có dòng nhưng thiếu datatype, không có dòng. Bảng kiểm của lab đếm riêng từng trạng thái. Gộp hai trạng thái sau thành một thì mất khả năng chẩn đoán vì sao chuỗi số bị hổng.

Nội suy là bước riêng

Có lúc phân tích cần chuỗi liên tục, ví dụ để tính trung bình trượt. Nội suy khi đó là một bước riêng, ghi vào cột riêng hoặc tệp riêng, có ghi phương pháp. Dataset gốc không bao giờ bị ghi đè bằng số nội suy.

Tỉ lệ đầy đủ

Với mỗi trạm và datatype, tính tỉ lệ ngày có giá trị trên số ngày trong khoảng. Central Park 2025 đạt 100 phần trăm với TMAX, khoảng 99,7 phần trăm với SNWD. Hà Nội đạt khoảng 64,7 phần trăm với TAVG. Báo cáo so sánh hai trạm phải nêu con số này.

Không điền 0

Một ngày không có PRCP không có nghĩa là ngày không mưa. Có thể máy đo hỏng, có thể bản tin không gửi. Cộng lượng mưa năm bằng cách coi ngày thiếu là 0 cho tổng thấp hơn thực tế. Dataset gốc giữ ô trống, phép tổng phải ghi số ngày đã dùng.

Mốc thời gian

DATE có dạng YYYY-MM-DD, theo ngày quan trắc của trạm. Obs_time 2400 của Central Park cho biết ngày quan trắc kết thúc lúc nửa đêm. Trạm hợp tác có thể quan trắc lúc 7 giờ sáng, khi đó lượng mưa của một ngày thực ra phủ từ sáng hôm trước. Khi so trạm khác giờ quan trắc, ghi chú điều này.

Đối soát cờ chất lượng theo datatype trước tổng hợp với NOAA CDO API station data

Tổng hợp chỉ làm sau khi cờ đã được xét.

Quy tắc trước khi cộng

Quy tắc trước khi cộng

Quy tắc trước khi cộng

Dòng có QFLAG không rỗng bị loại khỏi phép tổng mặc định, đưa vào danh sách xem lại. Dòng có MFLAG T được giữ với giá trị 0 nhưng đánh dấu là ngày có mưa vết. Dòng không có giá trị thì không vào phép tổng, số ngày dùng được ghi cạnh kết quả.

Kết quả với Central Park

Tổng PRCP năm 2025 là 1006.1 mm trên 365 ngày có giá trị. Bỏ dòng có QFLAG vẫn ra 1006.1 mm, vì không có dòng nào bị gắn QFLAG. Số ngày mưa vết là 35. Báo cáo nên ghi số ngày có mưa gồm cả 35 ngày vết nếu định nghĩa ngày mưa là ngày có giáng thủy bất kỳ.

Mã tổng có điều kiện

pr = [r for r in rows if r["datatype"] == "PRCP"]
ok = [r for r in pr if not r["qflag"]]
total = sum(float(r["value"]) for r in ok)
trace_days = sum(1 for r in pr if r["mflag"] == "T")
print(f"{total:.1f} mm tren {len(ok)}/{len(pr)} ngay, {trace_days} ngay vet")

Ngưỡng đầy đủ cho tổng tháng

Một tổng lượng mưa tháng dựa trên 20 trên 30 ngày không so được với tổng dựa trên 30 trên 30 ngày. Quy tắc phổ biến là chỉ tính tổng tháng khi số ngày thiếu dưới một ngưỡng. Ngưỡng là quyết định của người phân tích, nên ghi rõ trong báo cáo.

Quy tắc khác nhau theo datatype

Cờ T có nghĩa với PRCP, SNOW, SNWD. Với TMAX và TMIN, MFLAG thường rỗng. Với TAVG của Hà Nội, MFLAG H nói về cách tính. Quy tắc lọc phải viết theo từng datatype, không áp một luật chung kiểu bỏ mọi dòng có MFLAG.

Lọc nhầm vì một luật chung

Nếu áp luật bỏ mọi dòng có MFLAG không rỗng, Hà Nội sẽ mất cả 236 dòng TAVG, Central Park mất 35 ngày PRCP vết. Lab ghi ca này vào test để không ai đơn giản hóa quy tắc về sau.

Lọc nhầm đã kiểm bằng fixture

Fixture của lab có bốn dòng. Luật chung bỏ mọi dòng có MFLAG chỉ còn 2 trên 4 dòng, mất ngày vết và ngày TAVG. Đây là bằng chứng cụ thể để giữ quy tắc theo datatype.

Bảng quy tắc theo datatype

Bảng: Bảng quy tắc theo datatype

Datatype

MFLAG

QFLAG

Cách xử lý

PRCP

T là mưa vết

không rỗng là nghi

Giữ T, loại QFLAG khỏi tổng

SNOW, SNWD

T là vết

không rỗng là nghi

Giữ T, loại QFLAG

TMAX, TMIN

thường rỗng

không rỗng là nghi

Loại QFLAG khỏi trung bình

TAVG

H là tính từ giờ

không rỗng là nghi

Không trộn với trung bình cực trị

Đầu ra nghiệm thu: Dataset station datatype date attributes value với kiểm mã chất lượng của NOAA CDO API station data

Phần này liệt kê điều kiện để coi dataset là xong.

Tệp records.csv

Mỗi dòng một cặp trạm, datatype, ngày có giá trị. Cột station, datatype, date, value, mflag, qflag, sflag, obs_time. Lab ghi records_USW00094728.csv cho năm 2025.

Tệp kiểm đầy đủ

Mỗi cặp trạm, datatype có số ngày có giá trị, số ngày có dòng nhưng thiếu datatype, số ngày không có dòng. Central Park 2025: TMAX 365, 0, 0. SNWD 364, 1, 0. Hà Nội 2025 TAVG: 236, 0, 129.

Tệp kiểm cờ

Mỗi cặp trạm, datatype có phân bố MFLAG, QFLAG, SFLAG. Phép tổng đi kèm số dòng bị loại vì QFLAG và số ngày vết.

Kiểm đơn vị

Metadata của tệp ghi units là metric. Mọi giá trị nhiệt độ nằm trong khoảng hợp lý cho thành phố đó, lượng mưa không âm. Phép kiểm khoảng giá trị đơn giản này bắt được lỗi quên tham số units, khi nhiệt độ bỗng thành độ F.

Bảng nghiệm thu của lab

Nghiệm thu dữ liệu trạm

Nghiệm thu dữ liệu trạm

Bảng: Bảng nghiệm thu của lab

Hạng mục

Kết quả 05/11/2026

CDO v2 không token

400 Token parameter is required

CDO v2 token sai

400 token not valid

Central Park 2025

365 dòng, PRCP 1006.1 mm

Ngày mưa vết

35

QFLAG gặp trong mẫu

0

Hà Nội 2025

236 dòng, chỉ TAVG cờ H

ID sai

200, mảng rỗng

Những gì lab chưa chạy

Lab chưa chạy CDO v2 data, stations, datatypes vì không có token. Lab chưa gặp QFLAG thật, chưa thử dataset khác GHCND như GSOM, chưa thử giới hạn số dòng mỗi lời gọi, chưa thử các trạm Việt Nam khác. Kết quả phần CDO v2 cần chạy lại khi có token.

Vận hành NOAA CDO API station data trong pipeline định kỳ

Dữ liệu trạm được bổ sung và hiệu chỉnh dần, pipeline phải lấy lại có kiểm soát.

Lịch chạy

Số liệu ngày gần nhất có thể chưa có hoặc chưa qua kiểm tra. Pipeline hằng tuần lấy lại 30 ngày gần nhất, ghi đè có lịch sử. Số liệu cũ hơn lấy lại hằng tháng để bắt các lần hiệu chỉnh.

Lấy lại dữ liệu cũ

NCEI có thể hiệu chỉnh số liệu cũ khi nhận thêm bản tin hay sửa lỗi. Lấy lại một năm cũ, so với bản đã lưu theo khóa trạm, datatype, ngày. Dòng đổi giá trị hoặc đổi cờ ghi vào bảng lịch sử, không ghi đè mất dấu.

Hạn mức

Tài liệu CDO v2 nêu giới hạn theo token, theo giây và theo ngày. Access Data Service có giới hạn riêng về kích thước truy vấn. Lab nghỉ 4 giây giữa các lời gọi, mỗi lời gọi tối đa hai năm của một trạm. Không gọi song song.

Chia khoảng ngày khi lấy dài hạn

Lấy 30 năm của một trạm trong một lời gọi dễ chạm giới hạn kích thước. Chia theo năm, mỗi lời gọi một năm, nghỉ vài giây. Lỗi ở một năm chỉ cần chạy lại năm đó, không phải cả chuỗi.

Xử lý lỗi

400 với thông điệp token là vấn đề xác thực, sửa cấu hình. 200 với mảng rỗng thì kiểm ID trạm và khoảng ngày trước khi coi là không có dữ liệu. 5xx và mất kết nối thử lại có giãn cách.

Proxy ở tầng mạng

API của NCEI công khai. Proxy không thay token, không tăng hạn mức của token. Cách đặt nhịp gọi khi đi qua proxy có ở bài rate limit API khi dùng proxy. Cách ghi chuỗi proxy có ở bài định dạng proxy, vai trò proxy trong thu thập có ở bài Web Scraping proxy là gì. Khi cần IP Việt Nam cho tác vụ khác, anh em có thể mua proxy tại trang chủ ProxyVN.

Ghi xuất xứ cho từng tệp

Mỗi tệp dữ liệu đi kèm tệp metadata nhỏ: dịch vụ đã gọi, URL đầy đủ không có token, ngày giờ gọi, units, danh sách datatype, số dòng nhận. Người dùng dữ liệu sau này cần biết số liệu đến từ CDO v2 hay Access Data Service, vì hai dịch vụ có thể khác cách đặt tham số.

Che token

Token CDO là bí mật gắn với email người đăng ký. Đặt trong biến môi trường, không ghi vào log, không đưa vào tệp chia sẻ. Log ghi URL và tham số, bỏ header token.

Danh sách trạm theo dõi

Danh sách trạm nằm trong tệp cấu hình với ID, tên, datatype cần lấy và ghi chú. Trạm có datatype khác nhau như Hà Nội và Central Park cần cấu hình riêng. Pipeline đọc tệp này thay vì gắn cứng một danh sách datatype cho mọi trạm.

Khóa phiên bản

Lab chạy Python 3.12.10, requests 2.34.2. CDO v2 và Access Data Service v1 là hai dịch vụ riêng, có thể đổi độc lập. Ghi tên dịch vụ và phiên bản vào metadata của dataset.

Ngày không có số đo không phải 0, mưa vết không phải ngày khô, cờ chất lượng phải xét theo từng loại số đo. Bảng trạm đúng bắt đầu từ ba điều đó.

NOAA CDO API station data: câu hỏi thường gặp

Các câu dưới đây gom những điểm hay bị hỏi.

Không có token thì làm sao?

CDO v2 trả 400. Dữ liệu GHCND theo trạm vẫn lấy được qua Access Data Service không cần token, như lab đã làm.

Ngày thiếu có nên điền 0?

Không trong dữ liệu gốc. Giữ trống, ghi số ngày dùng được khi tổng hợp.

MFLAG T có phải lỗi?

Không. T là lượng vết, dưới mức đo được. Ngày đó có giáng thủy.

Vì sao Hà Nội không có TMAX?

Trong GHCND năm 2025, trạm VMM00048820 chỉ có TAVG. Dữ liệu cực trị có thể nằm ở nguồn khác hoặc không được đưa vào bộ này.

Mảng rỗng có nghĩa trạm không có dữ liệu?

Có thể là ID sai. Kiểm ID trong danh mục trạm trước.

Có trộn TAVG với trung bình TMAX và TMIN được không?

Không nên. TAVG cờ H tính từ số liệu giờ, khác trung bình hai cực trị.

Có dùng được dữ liệu trạm cho hợp đồng không?

Việc đó tùy điều khoản hợp đồng và nguồn được chỉ định. Dataset của bài chỉ cung cấp số liệu kèm cờ và xuất xứ, không thay cho chứng nhận chính thức.

Dữ liệu GHCND có dùng thương mại được không?

Dữ liệu của NOAA thường được phân phối công khai. Lab không thẩm định điều khoản cho từng mục đích. Đọc chính sách dữ liệu của NCEI trước khi đưa vào sản phẩm.

Có cần cả CDO v2 lẫn Access Data Service?

Không bắt buộc. Chọn một dịch vụ làm nguồn chính và ghi rõ. Lab dùng Access Data Service vì không có token CDO.

NOAA CDO API station data và những điều cần nhớ

NOAA CDO API station data chỉ cho bảng đúng khi tách MFLAG, QFLAG, SFLAG theo thứ tự, xét cờ theo từng datatype, giữ ngày thiếu là trống và ghi đơn vị cùng dữ liệu. Kiểm ID trạm trước khi tin vào mảng rỗng, đếm riêng ba trạng thái thiếu, và chỉ tổng hợp sau khi đã đối soát cờ. Proxy.vn - Nhà cung cấp dịch vụ proxy chất lượng hàng đầu Việt Nam khuyên anh em giữ bảng kiểm cờ đi cùng mọi tổng hợp từ NOAA CDO API station data.

TIN TỨC LIÊN QUAN