June 2018 Update
This commit is contained in:
parent
ba8067c3b7
commit
22f33d4004
5278 changed files with 84726 additions and 14379 deletions
|
|
@ -19,6 +19,8 @@ longest period with successive invalid measurements (i.e values with
|
|||
flag<=0)</pre>
|
||||
|
||||
The data is [http://www.eea.europa.eu/help/eea-help-centre/faqs/how-do-i-obtain-eea-reports free to download and use] and is of this format:
|
||||
|
||||
Data is no longer available at that link. Zipped mirror available [https://github.com/thundergnat/rc/blob/master/resouces/readings.zip here] (offsite mirror).
|
||||
<pre style="overflow:scroll">
|
||||
1991-03-30 10.000 1 10.000 1 10.000 1 10.000 1 10.000 1 10.000 1 10.000 1 10.000 1 10.000 1 10.000 1 10.000 1 10.000 1 10.000 1 10.000 1 10.000 1 10.000 1 10.000 1 10.000 1 10.000 1 10.000 1 10.000 1 10.000 1 10.000 1 10.000 1
|
||||
1991-03-31 10.000 1 10.000 1 10.000 1 10.000 1 10.000 1 10.000 1 10.000 1 20.000 1 20.000 1 20.000 1 35.000 1 50.000 1 60.000 1 40.000 1 30.000 1 30.000 1 30.000 1 25.000 1 20.000 1 20.000 1 20.000 1 20.000 1 20.000 1 35.000 1
|
||||
|
|
|
|||
|
|
@ -4,45 +4,32 @@ list l;
|
|||
real s;
|
||||
text bad_day, worst_day;
|
||||
|
||||
f_affix(f, "/dev/stdin");
|
||||
f.stdin;
|
||||
|
||||
max_bads = 0;
|
||||
count = 0;
|
||||
bads = 0;
|
||||
s = 0;
|
||||
max_bads = count = bads = s = 0;
|
||||
|
||||
while (f_list(f, l, 0) ^ -1) {
|
||||
integer e, i;
|
||||
while (f.list(l, 0) ^ -1) {
|
||||
integer i;
|
||||
|
||||
i = 2;
|
||||
while (i < 49) {
|
||||
e = atoi(l_q_text(l, i));
|
||||
if (0 < e) {
|
||||
count += 1;
|
||||
s += atof(l_q_text(l, i - 1));
|
||||
if (max_bads < bads) {
|
||||
max_bads = bads;
|
||||
worst_day = bad_day;
|
||||
}
|
||||
bads = 0;
|
||||
} else {
|
||||
if (!bads) {
|
||||
bad_day = l_q_text(l, 0);
|
||||
}
|
||||
bads += 1;
|
||||
}
|
||||
i += 2;
|
||||
if (0 < atoi(l[i])) {
|
||||
count += 1;
|
||||
s += atof(l[i - 1]);
|
||||
if (max_bads < bads) {
|
||||
max_bads = bads;
|
||||
worst_day = bad_day;
|
||||
}
|
||||
bads = 0;
|
||||
} else {
|
||||
if (!bads) {
|
||||
bad_day = l[0];
|
||||
}
|
||||
bads += 1;
|
||||
}
|
||||
i += 2;
|
||||
}
|
||||
}
|
||||
|
||||
o_text("Averaged ");
|
||||
o_real(3, s / count);
|
||||
o_text(" over ");
|
||||
o_integer(count);
|
||||
o_text(" readings.\n");
|
||||
|
||||
o_text("Longest bad run ");
|
||||
o_integer(max_bads);
|
||||
o_text(", started ");
|
||||
o_text(worst_day);
|
||||
o_text(".\n");
|
||||
o_form("Averaged /d3/ over ~ readings.\n", s / count, count);
|
||||
o_("Longest bad run ", max_bads, ", started ", worst_day, ".\n");
|
||||
|
|
|
|||
54
Task/Text-processing-1/Julia/text-processing-1.julia
Normal file
54
Task/Text-processing-1/Julia/text-processing-1.julia
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
using DataFrames
|
||||
|
||||
function mungdata(filename)
|
||||
lines = readlines(filename)
|
||||
numlines = length(lines)
|
||||
dates = Array{DateTime, 1}(numlines)
|
||||
means = zeros(Float64, numlines)
|
||||
numvalid = zeros(Int, numlines)
|
||||
invalidlength = zeros(Int, numlines)
|
||||
invalidpos = zeros(Int, numlines)
|
||||
datamatrix = Array{Float64,2}(numlines, 24)
|
||||
datamatrix .= NaN
|
||||
totalsum = 0.0
|
||||
totalgood = 0
|
||||
for (linenum,line) in enumerate(lines)
|
||||
data = split(line)
|
||||
validcount = badlength = 0
|
||||
validsum = 0.0
|
||||
for i in 2:2:length(data)-1
|
||||
if parse(Int, data[i+1]) >= 0
|
||||
validsum += (datamatrix[linenum, Int(i/2)] = parse(Float64, data[i]))
|
||||
validcount += 1
|
||||
badlength = 0
|
||||
else
|
||||
badlength += 1
|
||||
if badlength > invalidlength[linenum]
|
||||
invalidlength[linenum] = badlength
|
||||
invalidpos[linenum] = Int(i/2) - invalidlength[linenum] + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
dates[linenum] = DateTime(data[1], "y-m-d")
|
||||
means[linenum] = validsum / validcount
|
||||
numvalid[linenum] = validcount
|
||||
totalsum += validsum
|
||||
totalgood += validcount
|
||||
end
|
||||
dt = DataFrame(Date = dates, Mean = means, ValidValues = numvalid,
|
||||
MaximumGap = invalidlength, GapPosition = invalidpos)
|
||||
for i in 1:size(datamatrix)[2]
|
||||
dt[Symbol("$(i-1):00")] = datamatrix[:,i]
|
||||
end
|
||||
dt, totalsum/totalgood
|
||||
end
|
||||
|
||||
datafilename = "data.txt" # this is taken from the example listed on the task, since the actual text file is not available
|
||||
df, dmean = mungdata(datafilename)
|
||||
println(df)
|
||||
println("The overall mean is $dmean")
|
||||
maxbadline = indmax(df[:MaximumGap])
|
||||
maxbadval = df[:MaximumGap][maxbadline]
|
||||
maxbadtime = df[:GapPosition][maxbadline] - 1
|
||||
maxbaddate = replace("$(df[:Date][maxbadline])", r"T.+$", "")
|
||||
println("The largest run of bad values is $(maxbadval), on $(maxbaddate) beginning at $(maxbadtime):00 hours.")
|
||||
51
Task/Text-processing-1/Kotlin/text-processing-1.kotlin
Normal file
51
Task/Text-processing-1/Kotlin/text-processing-1.kotlin
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
// version 1.2.31
|
||||
|
||||
import java.io.File
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val rx = Regex("""\s+""")
|
||||
val file = File("readings.txt")
|
||||
val fmt = "Line: %s Reject: %2d Accept: %2d Line_tot: %7.3f Line_avg: %7.3f"
|
||||
var grandTotal = 0.0
|
||||
var readings = 0
|
||||
var date = ""
|
||||
var run = 0
|
||||
var maxRun = -1
|
||||
var finishLine = ""
|
||||
file.forEachLine { line ->
|
||||
val fields = line.split(rx)
|
||||
date = fields[0]
|
||||
if (fields.size == 49) {
|
||||
var accept = 0
|
||||
var total = 0.0
|
||||
for (i in 1 until fields.size step 2) {
|
||||
if (fields[i + 1].toInt() >= 1) {
|
||||
accept++
|
||||
total += fields[i].toDouble()
|
||||
if (run > maxRun) {
|
||||
maxRun = run
|
||||
finishLine = date
|
||||
}
|
||||
run = 0
|
||||
}
|
||||
else run++
|
||||
}
|
||||
grandTotal += total
|
||||
readings += accept
|
||||
println(fmt.format(date, 24 - accept, accept, total, total / accept))
|
||||
}
|
||||
else println("Line: $date does not have 49 fields and has been ignored")
|
||||
}
|
||||
|
||||
if (run > maxRun) {
|
||||
maxRun = run
|
||||
finishLine = date
|
||||
}
|
||||
val average = grandTotal / readings
|
||||
println("\nFile = ${file.name}")
|
||||
println("Total = ${"%7.3f".format(grandTotal)}")
|
||||
println("Readings = $readings")
|
||||
println("Average = ${"%-7.3f".format(average)}")
|
||||
println("\nMaximum run of $maxRun consecutive false readings")
|
||||
println("ends at line starting with date: $finishLine")
|
||||
}
|
||||
78
Task/Text-processing-1/Phix/text-processing-1.phix
Normal file
78
Task/Text-processing-1/Phix/text-processing-1.phix
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
constant lines = split(data,'\n')
|
||||
|
||||
include builtins\timedate.e
|
||||
|
||||
integer count = 0,
|
||||
max_count = 0,
|
||||
ntot = 0
|
||||
atom readtot = 0
|
||||
timedate run_start, max_start
|
||||
|
||||
procedure end_bad_run()
|
||||
if count then
|
||||
if count>max_count then
|
||||
max_count = count
|
||||
max_start = run_start
|
||||
end if
|
||||
count = 0
|
||||
end if
|
||||
end procedure
|
||||
|
||||
for i=1 to length(lines) do
|
||||
sequence oneline = split(lines[i],no_empty:=true), r
|
||||
if length(oneline)!=49 then
|
||||
?"bad line (length!=49)"
|
||||
else
|
||||
r = parse_date_string(oneline[1],{"YYYY-MM-DD"})
|
||||
if not timedate(r) then
|
||||
?{"bad date",oneline[1]}
|
||||
else
|
||||
timedate td = r
|
||||
integer rejects=0, accepts=0
|
||||
atom readsum = 0
|
||||
for j=2 to 48 by 2 do
|
||||
r = scanf(oneline[j],"%f")
|
||||
if length(r)!=1 then
|
||||
?{"error scanning",oneline[j]}
|
||||
rejects += 1
|
||||
else
|
||||
atom reading = r[1][1]
|
||||
r = scanf(oneline[j+1],"%d")
|
||||
if length(r)!=1 then
|
||||
?{"error scanning",oneline[j+1]}
|
||||
rejects += 1
|
||||
else
|
||||
integer flag = r[1][1]
|
||||
if flag<=0 then
|
||||
if count=0 then
|
||||
run_start = td
|
||||
end if
|
||||
count += 1
|
||||
rejects += 1
|
||||
else
|
||||
end_bad_run()
|
||||
accepts += 1
|
||||
readsum += reading
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
end for
|
||||
if rejects=0 then
|
||||
readtot += readsum
|
||||
ntot += 1
|
||||
end if
|
||||
-- readtot += readsum
|
||||
-- ntot += accepts
|
||||
printf(1,"Date: %s, Rejects: %2d, Accepts: %2d, Line total: %7.3f, Average %6.3f\n",
|
||||
{format_timedate(td,"DD/MM/YYYY"),rejects, accepts, readsum, readsum/accepts})
|
||||
end if
|
||||
end if
|
||||
end for
|
||||
|
||||
printf(1,"Average: %.3f (of %d entirely valid days)\n",{readtot/(24*ntot),ntot})
|
||||
--printf(1,"Average: %.3f\n",{readtot/ntot})
|
||||
end_bad_run()
|
||||
if max_count then
|
||||
printf(1,"Maximum run of %d consecutive false readings starting: %s\n",
|
||||
{max_count,format_timedate(max_start,"DD/MM/YYYY")})
|
||||
end if
|
||||
Loading…
Add table
Add a link
Reference in a new issue