コード例 #1
0
ファイル: trend.py プロジェクト: v-makarenko/vtoolsmq
    def _process_and_display_trends(self, query, objects_expected):
        from qtools.lib.nstats import moving_average_by_interval
        from numpy import histogram
        import numpy as np

        group_by_plate = self.form_result['group_by_plate']
        if objects_expected:
            results = execute_built_query(query, group_by_plate, True, self.form_result['metric'][1])
        else:
            results = execute_built_query(query, group_by_plate, False)

        epoch_results = [(float(stat), time.mktime(dt.timetuple()), id, name) for stat, dt, id, name in results if stat is not None]

        exclude_func = create_exclude_function(self.form_result)
        filtered_results = [tup for tup in epoch_results if exclude_func(tup[0])]

        c.yaxis_title = fl.comparable_metric_display(MetricPattern.from_python(self.form_result['metric']))
        c.mean_value = 'N/A'
        c.std_value  = 'N/A'
        c.metric_name = fl.comparable_metric_display(MetricPattern.from_python(self.form_result['metric']))
        c.table_data =[]

        if group_by_plate:
            moving_average = 10
            epoch_url_results = [(stat, stamp*1000, url(controller='plate', action='view', id=id), name) for stat, stamp, id, name in filtered_results]
        else:
            moving_average = 50
            epoch_url_results = [(stat, stamp*1000, url(controller='well', action='view', id=id), name) for stat, stamp, id, name in filtered_results]

        if epoch_url_results:
            c.stats = {}
            stats, time_points, urls, names = zip(*epoch_url_results)
            c.stats = h.literal(json.dumps(zip(time_points, stats)))

            c.table_data = zip( names, stats, time_points )
            #update if we can.
            c.mean_value = str( np.mean( stats ) )
            c.std_value  = str( np.std( stats ) )
            
            INTERVAL = 24*60*60*1000
            ma = moving_average_by_interval(stats, time_points, INTERVAL, 10)
            c.moving_avg = h.literal(json.dumps(ma))
            c.urls = h.literal(json.dumps(urls))
            c.names = h.literal(json.dumps(names))

            # get histogram of points by day
            #raise Exception, len(ma)
            density, edges = histogram(time_points, bins=len(ma), range=(ma[0][0], ma[-1][0]))
            c.densities = h.literal(json.dumps(zip([m[0] for m in ma], [int(d) for d in density])))
            c.max_density_axis = 3*max(density)
        else:
            c.stats = {}
            c.moving_avg = {}
            c.urls = {}
            c.names = {}
            c.densities = {}
            c.max_density_axis = 3

        return render('/trend/results.html')
コード例 #2
0
ファイル: test_nstats.py プロジェクト: v-makarenko/vtoolsmq
    def test_moving_average_by_interval(self):
        interval_width = 100
        array = [1, 4, 5, 2, 2, 6]
        interval_array = [90, 100, 150, 200, 300, 500]
        avgs = moving_average_by_interval(array, interval_array, interval_width, 2)

        bins, vals = zip(*avgs)
        assert bins == (0.0, 100.0, 200.0, 300.0, 400.0, 500.0)
        assert vals == (1.0, 2.75, 3.25, 2.0, 2.0, 4.0)