题目:
- Excel表格中的数据中有123家公司的进项发票信息,但是每一家又分别有若干类型的发票,因此共有数据162485行数据,我们需要将每一家的税额总额算出来,想练习的可以去搜索2020年全国大学生数学建模竞赛C题,因为表格太大了,我这边也只能放一部分,但是信息又不完全,只有数据,列名什么的都没有
代码实现:
opts = detectImportOptions('D:\Matlab_project\test\附件1:123家有信贷记录企业的相关数据.xlsx');
opts.Sheet = '销项发票信息';
opts.VariableNamingRule = 'preserve';
date_txt1 = readtable('D:\Matlab_project\test\附件1:123家有信贷记录企业的相关数据.xlsx', opts);
startRow = 2;
endRow = 162484;
column1 = date_txt1.("税额")(startRow:endRow);
column2 = date_txt1.("企业代号")(startRow:endRow);
column3 = string(column2);
column2 = column3;
Table1 = table(column2,column1);
uniqueCompanyIDs = unique(column2);
uniqueCompanyIDs = sort(uniqueCompanyIDs);
Table2 = table();
for i = 1:length(uniqueCompanyIDs)
companyID = uniqueCompanyIDs{i};
id = double(uniqueCompanyIDs{i});
rowsWithSameCompanyID = (column2 == companyID);
totalTax = sum(column1(rowsWithSameCompanyID));
newRow = table(totalTax);
Table2 = [Table2; newRow];
end
plot(Table2,1);
代码解析:
读取表格文件数据的准备工作解析:
opts = detectImportOptions('D:\Matlab_project\test\附件1:123家有信贷记录企业的相关数据.xlsx');
opts.Sheet = '销项发票信息';
opts.VariableNamingRule = 'preserve';
date_txt1 = readtable('D:\Matlab_project\test\附件1:123家有信贷记录企业的相关数据.xlsx', opts);
读取指定列数据代码解析:
startRow = 2;
endRow = 162484;
column1 = date_txt1.("税额")(startRow:endRow);
column2 = date_txt1.("企业代号")(startRow:endRow);
- 首先:date_txt1 中保存的是整个表格的数据
- 然后:用 " . " 访问它其中的列数据,单独跟在保存总表格数据的变量后date_txt1 .
- ("税额’') 是要获取的列名,用括号与双引号圈起来
- (startRow:endRow) 是要获取数据的行范围,已经通过变量便捷startRow与endRow表示,方便理解
将获取来的列数据转换成相应的类型,方便后续对表格使用unique函数:
column2 = string(column2);
Table1 = table(column2,column1);
- 首先:将column2也就是保存着公司代号的那一行
- 先将char类型的id转换为cell元胞数组,然后在通过cell2table转换为表格