Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Dim Reader As New StreamReader("counter.csv")
- Dim Datapoints As New List(Of Datapoint)
- ' Read in csv data
- While Reader.Peek > -1
- Dim Line As String = Reader.ReadLine
- Dim LineSplit() As String = Line.split(",")
- Dim Datapoint As New Datapoint
- Datapoint.Time = New Date(CLng(LineSplit(0)))
- Datapoint.Value = CLng(LineSplit(1))
- Datapoints.Add(Datapoint)
- End While
- ' Sanity checks
- For Each datapoint In Datapoints
- Dim CollectionDate As Date = New Date(2016, 10, 5)
- Dim MinAcceptableCounterVal As Long = 57000
- Dim MaxAcceptableCounterVal As Long = 100000
- Dim AcceptibleDateWindowDays = 2
- If datapoint.Value < MinAcceptableCounterVal Or datapoint.Value > MaxAcceptableCounterVal Then
- Throw New Exception("Date out of bounds")
- End If
- If datapoint.Time < CollectionDate.AddDays(-AcceptibleDateWindowDays) Or datapoint.Time > CollectionDate.AddDays(AcceptibleDateWindowDays) Then
- Throw New Exception("Counter value out of bounds")
- End If
- Next
- ' Write a sub-sampled representation of the counter data (10x less data points to plot, excel friendly)
- Using Writer As New StreamWriter("counter.thin.csv")
- For i As Integer = 0 To Datapoints.Count - 1 Step 10
- Writer.WriteLine(Datapoints(i).Time.Ticks & "," & Datapoints(i).Value)
- Next
- End Using
- ' Generate list of counter maxima (approximate due to jitter in counter values)
- Dim Maxima As New List(Of Long)
- For i As Integer = 1 To Datapoints.Count - 1
- If Datapoints(i - 1).Value > (Datapoints(i).Value + 20) Then
- Maxima.Add(Datapoints(i - 1).Value)
- End If
- Next
- Using Writer As New StreamWriter("counter.maxima.csv")
- For Each Value In Maxima
- Writer.WriteLine(Value)
- Next
- End Using
- ' Maxima histogram
- Dim BucketSize As Integer = 1000
- Dim FirstBucket As Long = 57000
- Dim LastBucket As Long = 100000
- Dim BucketCount As Integer = (LastBucket - FirstBucket) / BucketSize
- Dim Buckets(BucketCount - 1) As Integer
- For Each Value In Maxima
- Dim BucketIdx As Integer = Math.Floor((Value - FirstBucket) / BucketSize)
- Buckets(BucketIdx) += 1
- Next
- Using Writer As New StreamWriter("counter.maxima.histogram.csv")
- For i As Integer = 0 To Buckets.GetUpperBound(0)
- Writer.WriteLine(Buckets(i))
- Next
- End Using
Advertisement
Add Comment
Please, Sign In to add comment