I need to group certain hours of a day into day and night categories from my xlsx file in the format "yyyy-MM-dd'T'HH:mm:ss."
4 次查看(过去 30 天)
显示 更早的评论
Hello,
Still familiarizing mysef with MatLab... Essentially I am trying to distriubute my data into day and night to better understand what vessel types are present. The data looks like this, with the heading being bolded
BaseDateTime LAT LON SOG COG Heading VesselName IMO CallSign VesselType
2018-05-18T00:00:07 27.79192 -88.7611 13 148.2 144 SBI MAIA IMO9705304 V7MI4 70
ranging from 2018-05-18 to 2020-06-24. It is a very large exel flie so I an unable to attach it here.
so far I have:
clear variables;
close all;
fclose ('all');
% hold on
shipdata = readtable ('allship2018-2020_1_data.xlsx');
t= datetime(shipdata.BaseDateTime, 'InputFormat',"uuuu-MM-dd'T'HH:mm:ss");
day = timerange('06:00:00','18:00:00');
night = timerange('18:00:01','05:59:59');
for i = 1:length(t)
y(i,:) = isbetween(t,day,night);
end
yy = unique(y,'rows');
I was thinking about using "isbetween" to find my hours for day (06:00:00 to 18:00:00) and for night (18:00:01 to 05:59:59). I am not sure how to go about this... I tried this code I provide above and got the error "All inputs must be datetime arrays or date/time character vectors or date/time strings"
From there I will graph the data to compare.
Thanks for any help or advice.
0 个评论
采纳的回答
Star Strider
2022-11-22
The isbetween functin is the correct approach here, although if you have one set of 12-hour segments and you want to go over several days, a simple logical comparison is all you need.
t = datetime('now') + hours(0:2:64).';
daytime = hour(t)>=6 & hour(t)<18;
figure
plot(t(daytime), ones(size(t(daytime))), '.', 'DisplayName','Daytime')
hold on
plot(t(~daytime), -ones(size(t(~daytime))), '.', 'DisplayName','Nighttime')
hold off
grid
ylim([-1 1]*1.5)
legend('Location','best')
Experiment to get different results.
.
4 个评论
Star Strider
2022-11-24
opts = detectImportOptions('https://www.mathworks.com/matlabcentral/answers/uploaded_files/1205258/allship2018-2020_1_data_2.xlsx');
opts.VariableTypes{1} = 'datetime';
T1 = readtable('https://www.mathworks.com/matlabcentral/answers/uploaded_files/1205258/allship2018-2020_1_data_2.xlsx', opts)
t = T1.BaseDateTime;
Daytime = hour(t)>6 & hour(t)<=18;
addvars(T1, Daytime, 'After','BaseDateTime') % Insert 'Daytime' As Second Column (Optional)
% Check1 = [nnz(Daytime) nnz(~Daytime) size(T1,1)]
figure
plot(t(Daytime), 0.1*ones(size(t(Daytime))), '.', 'DisplayName','Daytime', 'MarkerSize',0.6)
hold on
plot(t(~Daytime), -0.1*ones(size(t(~Daytime))), '.', 'DisplayName','Nighttime', 'MarkerSize',0.6)
hold off
grid
ylim([-1 1]*0.2)
legend('Location','best')
I doubt that a bar plot would work here. A more reasonable approach would likely be a stairs plot. I will work with you to get that running if you want to use it. (I experimented with that.)
.
更多回答(2 个)
Steven Lord
2022-11-22
Let's look at a sample datetime.
t = datetime('now')
What time of day does that represent?
tod = timeofday(t)
Is that time of day during the day? You can either explicitly create a duration by calling duration or just indicate the number of hours after midnight.
dawn = duration(6, 0, 0)
dusk = hours(18)
isDuringTheDay = isbetween(tod, dawn, dusk)
How about 12 hours from now?
then = t+hours(12)
todThen = timeofday(then)
isDuringTheDay12 = isbetween(todThen, dawn, dusk)
Of course, if it's not during the day then it's during the night. It's easier to ask the question "is it daytime" because asking "is it nighttime" would require asking "is it between midnight and dawn" and "is it between dusk and midnight" separately.
A timerange object is used for indexing into a timetable.
0 个评论
Stephen23
2022-11-24
编辑:Stephen23
2022-11-24
fnm = 'allship2018-2020_1_data_2.xlsx';
obj = detectImportOptions(fnm);
obj = setvartype(obj,'BaseDateTime','datetime');
tbl = readtable(fnm,obj)
tod = timeofday(tbl.BaseDateTime);
isd = isbetween(tod, duration(6,0,0), duration(18,0,0)); % logical index = is daytime
tbl_day = tbl(isd,:)
tbl_night = tbl(~isd,:)
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Axes Transformations 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!