爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 318|回复: 3

[程序设计] MATLAB新手向记录‖读取txt站点数据将单站日降水处理成年平均降水

[复制链接]

新浪微博达人勋

发表于 2024-8-29 16:06:25 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 AriesLin 于 2024-8-29 16:12 编辑

MATLAB新手记录自己的代码,欢迎大家一起交流学习

数据来源:单位业务使用,处理的数据为txt格式,以“,”分隔。
txt存储格式形如1958,10,15,31.1,999999.0,0,1
即1958年10月15日降水量为31.1mm。我需要将逐日数据累加求平均,得到逐年平均的txt数据。


【代码分享】

clc;clear;close all             % 清除命令行、清除变量、清除图窗

% 读取数据文件
filename = 'A:\data\单站日降水数据.txt';

% 读取数据,文件使用逗号分隔符
data = readtable(filename, 'Delimiter', ',', 'ReadVariableNames', true);

% 检查列名是否正确
disp(data.Properties.VariableNames);

% 提取年份
data.Year = data.Year; % 年份已经在第一列,无需转换

% 选择要计算年平均值的列,例如这里选择第四列 (日降水量对应的变量名称)
value_column = '日降水量对应的变量名称';

% 按年份分组并计算逐年平均值
yearly_avg = varfun(@mean, data, 'InputVariables', value_column, 'GroupingVariables', 'Year');

% 重命名输出表格中的列
yearly_avg.Properties.VariableNames{'GroupCount'} = 'Year_avg';
yearly_avg.Properties.VariableNames{['mean_', value_column]} = 'YearlyAverage';

% 保存结果到新的txt文件
output_filename = 'A:\data\单站年平均降水数据.txt';
writetable(yearly_avg, output_filename, 'Delimiter',  ',', 'WriteVariableNames', true);

disp(['逐年平均数据已成功保存到 ', output_filename]);



得出的新txt文件形如
1961,365,6.46246575342466;即1961年,使用365天雨量求平均,年平均降水量6.46mm


【读取txt的指令解析】
data = readtable(filename, 'Delimiter', ',', 'ReadVariableNames', true);
这行代码从 filename 指定的文件中读取数据,假设数据是逗号分隔的,并且文件的第一行包含列名。读取完成后,数据将存储在data表格变量中,可以通过列名或索引访问其中的数据。

data:这是一个表格变量,它将存储从文件中读取的数据。表格变量是 MATLAB 中用于存储带有列名的数据表的类型,类似于数据库中的表或 Excel 工作表。
readtable:这是 MATLAB 的一个函数,用于从文件(如文本文件、CSV 文件、Excel 文件等)中读取数据,并将其存储为表格格式。
filename:这是一个字符串,表示要读取的文件的名称或路径。比如,如果 filename = 'data.csv',readtable 函数就会读取名为 data.csv 的文件。
'Delimiter', ',':这是一个名称-值对参数,用于指定文件中的列分隔符。在这个例子中,',' 表示逗号分隔符,这通常用于 CSV 文件。如果文件中的列是用逗号分隔的,这个参数就会告诉 readtable 如何正确分隔数据列。
'ReadVariableNames', true:这是另一个名称-值对参数,用于指定文件的第一行是否包含列名。如果设置为 true,readtable 会将文件的第一行数据解释为列名,并将其用作表格变量的列名。如果设置为 false,第一行数据将被视为普通数据,并会为表格自动生成默认的列名。
【计算平均值的指令解析】
yearly_avg = varfun(@mean, data, 'InputVariables', value_column, 'GroupingVariables', 'Year');
这行代码的功能是:
  • 将 data 表格中的数据按 Year 列进行分组。
  • 对每个组内的 value_column 列应用均值函数 @mean。
  • 将计算的结果存储在 yearly_avg 表格变量中。
例如,如果 data 表格包含了多年的数据(如温度、降雨量等),这行代码会按年分组,并计算每年的平均值,将结果存储在 yearly_avg 中。

  • yearly_avg:这是一个表格变量,将存储计算后的分组均值。
  • varfun:这是 MATLAB 的一个函数,用于对表格数据的指定列应用某个函数。varfun 会根据给定的分组变量,将数据分组后对每组应用函数,然后将结果返回为新的表格。
  • @mean:这是一个函数句柄,表示要对数据应用的函数。在这里,@mean 表示均值函数 mean,即对指定数据计算均值。
  • data:这是一个包含数据的表格变量,varfun 将对其进行操作。
  • 'InputVariables', value_column:这是一个名称-值对参数,用于指定要对其计算均值的列。value_column 是一个变量或字符串,表示表格 data 中的一列或多列的名称。varfun 会对 value_column 中指定的列应用均值函数。
  • 'GroupingVariables', 'Year':这是另一个名称-值对参数,用于指定分组变量。'Year' 是表格 data 中的一列,用于分组数据。varfun 会根据 Year 列中的不同值,将数据划分为不同的组,然后对每个组分别计算均值。







密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2024-9-10 11:03:27 | 显示全部楼层
向楼主提一个建议,可以放一个示例数据
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2024-9-25 09:13:25 | 显示全部楼层
si18 发表于 2024-9-10 11:03
向楼主提一个建议,可以放一个示例数据

好像不让放(小小声)
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2024-9-25 12:16:36 | 显示全部楼层
AriesLin 发表于 2024-9-25 09:13
好像不让放(小小声)

附件试试               
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表