编程交流第三期

一、NetCDF文件的读取与写入

要求:

(1)读取附件中的NC文件,数据内容见MODEL.ICE.HAD187001-198110.OI198111-202206;

(2)读取出NC文件中所包含的数据种类

(3)对数据种类中SEAICE此项数据进行求均值和标准差

(4)将读取出的变量名词和均值与标准差保存进一个名称为result的TXT文件中

#开发人:dwk
import netCDF4 as nc
import numpy as np

# 打开 NC 文件
filename = 'C:/Users/16370/Desktop/158_asphilli-20230416T2043Z/MODEL.ICE.HAD187001-198110.OI198111-202206.nc'
nc_file = nc.Dataset(filename, "r")

# 获取变量名称
var_names = list(nc_file.variables.keys())

# 获取 SEAICE 变量的值
seaice_data = nc_file.variables["SEAICE"][:]

# 计算平均值和标准差
mean = np.mean(seaice_data)
std_dev = np.std(seaice_data)

# 关闭 NC 文件
nc_file.close()

# 将变量名称保存到 TXT 文件
with open("result.txt", "w") as f:
    for name in var_names:
        f.write(name + "\n")

    f.write("SEAICE平均值:" + str(mean) + "\n")
    f.write("SEAICE标准差:" + str(std_dev) + "\n")

作者:XJQ
时间:2023年04月30日
"""
import  netCDF4  as  nc
def nc_r_w(fire_path,nc_name):
        #  读取NC文件
        data = nc.Dataset(fire_path+nc_name)

        #  读取出数据种类
        variables = data.variables.keys()

        #  对SEAICE数据进行求均值和标准差
        if 'SEAICE' in variables:
                seaice_data = data.variables['SEAICE'][:]
                seaice_mean = seaice_data.mean()
                seaice_std = seaice_data.std()
                print('SEAICE数据的均值为:', seaice_mean)
                print('SEAICE数据的标准差为:', seaice_std)
        else:
                print('NC文件中不包含SEAICE数据。')
        v_list = list(variables)
        with open(fire_path + 'result.txt', 'w') as f:
                f.write("variables:" + str(v_list) + "\n")
                f.write("SEAICE_mean:"+str(seaice_mean)+"\n")
                f.write("SEAICE_std:" + str(seaice_std) + "\n")
                f.close()
fire_path = 'C:\\Users\\86136\\Desktop\\3\\data\\'
nc_name = 'MODEL.ICE.HAD187001-198110.OI198111-202206.nc'
if __name__ == "__main__":
   # 引用函数
   nc_r_w(fire_path,nc_name)

#作者 : cyf

from netCDF4 import Dataset
import numpy as np

a = Dataset("F:/file/MODEL.ICE.HAD187001-198110.OI198111-202206.nc")
# 识别变量
name = a.variables.keys()
print(name)
ice = a.variables['SEAICE'][:]
date = a.variables['date'][:]
date_frac = a.variables['date_frac'][:]
datesec = a.variables['datesec'][:]
lon = a.variables['lon'][:]
lat = a.variables['lat'][:]
time = a.variables['time'][:]
# 调整格式
mulArrays = ice
lice = list(np.array(mulArrays).flatten())
mean = np.mean(lice)
std = np.std(lice, ddof=1)
print(mean)
print(std)

syname = str(name)
# 删除多余字符
sname = syname.replace("dict_keys([","",3).replace("])","",3)
smean = str(mean)
sstd = str(std)

li = [sname,smean,sstd]
with open('result.txt', 'w') as f:
       for i in li:
              f.write(i + '\n')
# 开发人:hwy
# 开发时间:2023/4/18
import netCDF4 as nc
import numpy as np

# 读取NC文件
data = nc.Dataset(r'F:\第三期编程\MODEL.ICE.HAD187001-198110.OI198111-202206.nc')

# 读取所有变量名称
var_names = list(data.variables.keys())

# 获取SEAICE数据
seaice_data = data.variables['SEAICE'][:]

# 求SEAICE数据的均值和标准差
seaice_mean = np.mean(seaice_data)
seaice_std = np.std(seaice_data)

# 将变量名词和SEAICE数据的均值与标准差保存到TXT文件中
with open('result.txt', 'w') as f:
    f.write('Variable Names: {}\n'.format(var_names))
    f.write('SEAICE Mean: {}\n'.format(seaice_mean))
    f.write('SEAICE Standard Deviation: {}\n'.format(seaice_std))

二、NetCDF文件的读取与绘图
要求:
(1)读取附件中的NC文件,数据内容见MODEL.SST.HAD187001-198110.OI198111-202206;
(2)读取出NC文件中所包含的数据种类
(3)根据数据中的SST数据和time数据
(4)绘制SST数据随时间序列的变化图

# 开发人:lk
from netCDF4 import Dataset
import numpy as np
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt


def nc_file_visualization(nc_file_path):
    # 读取数据
    data = Dataset(nc_file_path, "r")

    # 打印数据种类
    print(data.variables.keys())

    # 取出所需数据
    lon = data.variables['lon'][:]
    lat = data.variables['lat'][:]
    time = data.variables['time'][:]
    sst = data.variables['SST'][:]
    lon = lon-180

    plt.ion()   # 打开plt交互模式

    # 绘制底图
    map = Basemap()

    # 使用交互模式,循环打印所有数据
    for t in range(sst.shape[0]):
        plt.cla()
        SST = plt.contourf(lon, lat, sst[t, :, :], cmap=plt.cm.RdBu_r)
        map.colorbar(SST)

        # 绘制地图线
        map.drawcoastlines()

        # 绘制经纬线
        map.drawmeridians(np.arange(-180, 181, 30), labels=[0, 0, 0, 1], fontsize=10, linewidth=0.3, color='grey', )
        map.drawparallels(np.arange(-90, 90, 30), labels=[1, 0, 0, 0], fontsize=10, linewidth=0.3, color='grey')

        plt.title('time: ' + str(time[t]))     # 标题
        plt.pause(0.01)    # 图片显示延迟
        plt.ioff()


if __name__ == '__main__':
    nc_file_path = './MODEL.SST.HAD187001-198110.OI198111-202206.nc'
    nc_file_visualization(nc_file_path)

# 开发人:郝文宇
# 开发时间:2023/4/18

import netCDF4 as nc
import numpy as np
import matplotlib.pyplot as plt
from pylab import mpl

plt.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

# 读取NC文件
data = nc.Dataset(r'F:\第三期编程\MODEL.SST.HAD187001-198110.OI198111-202206.nc')

# 读取数据种类
variables = data.variables.keys()
print('数据种类:', variables)

# 读取时间和SST数据
time = data.variables['time'][:]
sst = data.variables['SST'][:]

# 获取SST数据的形状
sst_shape = sst.shape
print('SST数据的形状:', sst_shape)

# 将SST数据从三维转换为二维
sst_data = sst.reshape((sst_shape[0], -1))

# 绘制SST数据随时间序列的变化图
plt.plot(time, sst_data)
plt.xlabel('时间')
plt.ylabel('SST')
plt.title('SST数据随时间序列的变化')
plt.show()

# 关闭NC文件
data.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值