編寫Pythont程式:推薦可以使用Visual Studio Code (簡稱VS Code,需安裝在電腦上) 或 Colaboratory (簡稱Colab,需使用網路、在線上) 的平台上編輯程式。
Visual Studio Code:https://code.visualstudio.com/
安裝方式可參考https://hackmd.io/@smallshawn95/vscode_write_py,需在"延伸模組(Extensions)"安裝Chinese(Tradiational)繁體中文包、Python
安裝Python https://www.python.org/downloads/,安裝時,務必勾選Add Pathon 3.X to Path
Colaboratory:https://colab.research.google.com/
A. 福衛七號的大氣觀測資料
下載福衛七號的大氣觀測資料 https://tacc.cwa.gov.tw/v2/
方法一:上方欄位的「福衛七號-TDPC」 資料下載 --> FS-7 TDPC Real-time --> level2 --> wetPF2 --> 可以找到最新或是前一天的資料夾 --> 挑選需要的檔案
方法二:上方欄位的「展示」 掩星分布圖 --> 選擇大氣斜溫圖 --> 放大並移動地點和選擇日期 --> 挑選點位後,在網頁右側下載檔案(wetPF2_***_nc)
方法三:本網頁的範例檔案(https://drive.google.com/file/d/19yUXEhAd0muqmrH6_JOGRnKR3JSa9uGN,2024年3月5日台灣附近海域資料,檔案名稱:wetPf2_C2E1.2024.065.05.16.G10_0001.0001_nc)
將檔案移動至自己設定的資料夾中,本網站範例使用的資料夾為 c:\fs7data\fs7_2024065\
首先,安裝 netCDF4 和 matplotlib 包。你可以在VS Code的終端中使用以下命令安裝:
pip install netCDF4 matplotlib
以下程式碼則在編輯器主要的區域進行編寫,再執行程式。
import netCDF4 as nc
# 定義檔案路徑
file_path = r"C:\fs7data\fs7_2024065\wetPf2_C2E1.2024.065.05.16.G10_0001.0001_nc"
# 開啟NetCDF檔案
dataset = nc.Dataset(file_path, 'r')
# 列出所有變數名稱及其屬性
print("變數名稱及其意義:")
for var_name in dataset.variables:
var = dataset.variables[var_name]
print(f"\n變數名稱: {var_name}")
for attr_name in var.ncattrs():
print(f" {attr_name}: {var.getncattr(attr_name)}")
# 關閉NetCDF檔案
dataset.close()
常用參數代號:
MSL_alt:高度(以平均海平面
lat:緯度 (degrees_north),(-90° ~ +90°)
lon:經度 (degrees_east),(-180° ~ +180°)
Temp:溫度 [℃]
Pres:大氣壓力 [hPa]
Vp:水氣壓 [hPa]
sph:比溼(Specific humidity) [g/kg]
rh:相對溼度 [%]
將溫度變化和高度做成圖表
import netCDF4 as nc
import matplotlib.pyplot as plt
# 定義檔案路徑
file_path = r"C:\fs7data\fs7_2024065\wetPf2_C2E1.2024.065.05.16.G10_0001.0001_nc"
# 開啟NetCDF檔案
dataset = nc.Dataset(file_path, 'r')
# 讀取溫度和高度資料
temp = dataset.variables['Temp'][:]
msl_alt = dataset.variables['MSL_alt'][:]
# 關閉NetCDF檔案
dataset.close()
# 繪製溫度高度圖
plt.figure(figsize=(10, 6))
plt.plot(temp, msl_alt, marker='o', linestyle='-')
plt.xlabel('Temperature (K)') # 假設溫度單位是開爾文(K)
plt.ylabel('MSL Altitude (m)') # 假設高度單位是米(m)
plt.title('Temperature vs MSL Altitude')
plt.grid(True)
plt.show()
顯示結果:
問題:
對流層的高度為何?
利用程式自動找出對流層頂的溫度、高度、經度、緯度
import netCDF4 as nc
import numpy as np
# 定義檔案路徑
file_path = r"C:\fs7data\fs7_2024065\wetPf2_C2E1.2024.065.05.16.G10_0001.0001_nc"
# 開啟NetCDF檔案
dataset = nc.Dataset(file_path, 'r')
# 讀取溫度、高度、緯度和經度資料
temp = dataset.variables['Temp'][:] # 溫度,單位:攝氏度
msl_alt = dataset.variables['MSL_alt'][:] # 高度,單位:米
lat = dataset.variables['lat'][:] # 緯度,單位:degrees_north
lon = dataset.variables['lon'][:] # 經度,單位:degrees_east
# 找到溫度最低點的索引
min_temp_index = np.argmin(temp)
# 根據索引獲取對應的高度、緯度和經度資料
min_temp = temp[min_temp_index]
min_alt = msl_alt[min_temp_index]
min_lat = lat[min_temp_index]
min_lon = lon[min_temp_index]
# 關閉NetCDF檔案
dataset.close()
# 輸出結果
print(f"溫度最低點的溫度: {min_temp:.2f} °C")
print(f"對應的高度: {min_alt:.2f} 米")
print(f"對應的緯度: {min_lat:.2f} degrees_north")
print(f"對應的經度: {min_lon:.2f} degrees_east")
顯示結果:
B. 福衛七號的電離層觀測資料
下載福衛七號的電離層觀測資料 https://tacc.cwa.gov.t"w/v2/
方法一:上方欄位的「福衛七號-TDPC」 資料下載 --> FS-7 TDPC Provisional (ionPrf) --> 可以找到最新或是前一天的資料夾 --> 挑選需要的檔案
方法二:上方欄位的「展示」 掩星分布圖 --> 選擇電子濃度剖面圖 --> 放大並移動地點和選擇日期 --> 挑選點位後,在網頁右側下載檔案(ionPrf_***_nc)
方法三:本網頁的範例檔案(https://drive.google.com/file/d/15bdl5mrppgRTwIqNz2CV9FF3Q1ShiFQs/view?usp=drive_link,2024年3月5日台灣周遭環境資料,檔案名稱:ionPrf_C2E6.2024.065.08.19.R21_0001.0001_nc)
將檔案移動至自己設定的資料夾中,本網站範例使用的資料夾為 c:\fs7data\fs7_2024036ion\
import netCDF4 as nc
# 定義檔案路徑
file_path = r"C:\fs7data\fs7_2024036ion\ionPrf_C2E6.2024.065.08.19.R21_0001.0001_nc"
# 開啟NetCDF檔案
dataset = nc.Dataset(file_path, 'r')
# 列出所有變數名稱及其屬性
print("變數名稱及其意義:")
for var_name in dataset.variables:
var = dataset.variables[var_name]
print(f"\n變數名稱: {var_name}")
for attr_name in var.ncattrs():
print(f" {attr_name}: {var.getncattr(attr_name)}")
# 關閉NetCDF檔案
dataset.close()
netcdf電離層檔案中的常用參數代號:
MSL_alt:高度(以平均海平面) [km]
Geo_lat:緯度 (degrees_north)
Geo_lon:經度 (degrees_east)
ELEC_dens:電子濃度 [el/cm3]
將溫度變化和高度做成圖表
import netCDF4 as nc
import matplotlib.pyplot as plt
# 定義檔案路徑
file_path = r"C:\fs7data\fs7_2024036ion\ionPrf_C2E6.2024.065.08.19.R21_0001.0001_nc"
# 開啟NetCDF檔案
dataset = nc.Dataset(file_path, 'r')
# 讀取高度和電子濃度資料
msl_alt = dataset.variables['MSL_alt'][:] # 高度,單位:公里
elec_dens = dataset.variables['ELEC_dens'][:] # 電子濃度,單位:電子數/cm³
# 關閉NetCDF檔案
dataset.close()
# 繪製電子濃度和高度的關係圖
plt.figure(figsize=(10, 6))
plt.plot(elec_dens, msl_alt, marker='o', linestyle='-')
plt.xlabel('電子濃度 (el/cm³)')
plt.ylabel('高度 (km)')
plt.title('電子濃度 vs 高度')
plt.grid(True)
plt.show()
顯示結果: