1. 查找一整天数据全为0或缺失数据达到50%天数的用户,并说明哪些月份有缺失或为零
2. 查找一整天数据为非零的同一值的用户,并说明这样的天数有多少天
% 读取 Excel 文件
filename = 'your_excel_file.xlsx'; % 替换为你的文件名
data = readtable(filename);
% 查看读取的列名,确保它们正确
disp(data.Properties.VariableNames);
% 获取总用户数
numUsers = numel(unique(data{:, 'SerialNumber'}));
% 1. 查找一整天数据全为0或缺失数据达到50%天数的用户,并说明哪些月份有缺失或为零
zeroOrMissingDataUsers = [];
for i = 1:numUsers
% 获取每个用户的全部数据
userData = data(data{:, 'SerialNumber'} == i, :);
numZeroOrMissingDays = 0;
monthsWithIssues = [];
for j = 1:height(userData)
dailyData = userData{j, 7:end};
% 判断是否一整天的数据全为0或全为NaN
if all(dailyData == 0) || all(isnan(dailyData))
numZeroOrMissingDays = numZeroOrMissingDays + 1;
% 记录有问题的月份
currentMonth = month(userData{j, 'Date'});
monthsWithIssues = [monthsWithIssues; currentMonth];
end
end
% 如果用户有超过50%的天数据全为0或缺失
if numZeroOrMissingDays >= 0.5 * height(userData)
zeroOrMissingDataUsers = [zeroOrMissingDataUsers; i];
disp(['用户 ' num2str(i) ' 有 ' num2str(numZeroOrMissingDays) ' 天数据全为0或缺失,占全年天数50%以上。']);
disp('这些天涉及到的月份为:');
disp(unique(monthsWithIssues));
end
end
% 2. 查找一整天数据为非零的同一值的用户,并说明这样的天数有多少天
constantValueUsers = [];
for i = 1:numUsers
% 获取每个用户的全部数据
userData = data(data{:, 'SerialNumber'} == i, :);
constantDaysCount = 0;
for j = 1:height(userData)
dailyData = userData{j, 7:end};
% 查找所有数据点都相同且非零的天
if all(dailyData == dailyData(1)) && dailyData(1) ~= 0
constantDaysCount = constantDaysCount + 1;
end
end
if constantDaysCount > 0
constantValueUsers = [constantValueUsers; i];
disp(['用户 ' num2str(i) ' 有 ' num2str(constantDaysCount) ' 天的所有数据点为同一非零值。']);
end
end