Example #1
0
def plot_pattern_info(pattern_id, data):
    # find the window corresponding to pattern
    sorted_data = sorted(data, key = lambda datum: datum.time)
    pattern_idxs = [i for (i, datum) in enumerate(sorted_data) if datum.which_pattern == pattern_id]
    pattern_start_idx, pattern_end_idx = min(pattern_idxs), max(pattern_idxs)
    pattern_window_data = sorted_data[pattern_start_idx:pattern_end_idx + 1]
    background_data = sorted_data[:pattern_start_idx] + sorted_data[pattern_end_idx + 1:]
    pattern_window_background_data = [datum for datum in pattern_window_data if datum.which_pattern != pattern_id]
    pattern_data = [datum for datum in pattern_window_data if datum.which_pattern == pattern_id]

    # plot spatial distribution of points inside pattern_window, with pattern points colored differently, as well as distribution in background window
    pattern_window_background_xys = [utils.latlng_to_xy(*datum.location) for datum in pattern_window_background_data]
    pattern_xys = [utils.latlng_to_xy(*datum.location) for datum in pattern_data]
    background_xys = [utils.latlng_to_xy(*datum.location) for datum in background_data]

    marker_size = 3
    alpha = 0.8

    spatial_fig, spatial_ax = plt.subplots()
    spatial_ax.scatter([xy[0] for xy in background_xys], [xy[1] for xy in background_xys], s = marker_size, alpha = alpha, color = background_color)
    spatial_ax.scatter([xy[0] for xy in pattern_window_background_xys], [xy[1] for xy in pattern_window_background_xys], s = marker_size, alpha = alpha, color = pattern_window_color)
    spatial_ax.scatter([xy[0] for xy in pattern_xys], [xy[1] for xy in pattern_xys], s = marker_size, alpha = alpha, color = pattern_color)



    pattern_start_time, pattern_end_time = pattern_data[0].time, pattern_data[-1].time
    spatial_ax.set_title('start: %.2f, end: %.2f, len/window: %d/%d' % (pattern_start_time, pattern_end_time, len(pattern_data), len(pattern_window_background_data)))
    """
    hope that density of pattern_window is higher than that of background in region where the pattern is
    """

    # for each feature, plot distribution of features indie pattern_window, with pattern counts overload differently, as well as background distribution
    feature_figs = []
    background_feature_counts = get_data_feature_counts(background_data)
    pattern_window_feature_counts = get_data_feature_counts(pattern_window_data)
    pattern_feature_counts = get_data_feature_counts(pattern_data)
    num_features = len(iter(data).next().x)
    num_cats = [np.max([datum.x[k] for datum in data]) + 1 for k in range(num_features)]
    for background_feature_count, pattern_window_feature_count, pattern_feature_count, num_cat in itertools.izip(background_feature_counts, pattern_window_feature_counts, pattern_feature_counts, num_cats):
        feature_fig = plt.figure()
        feature_fig.suptitle(background_feature_count.name)
        non_pattern_ax = feature_fig.add_subplot(2,1,1)
        pattern_ax = feature_fig.add_subplot(2,1,2)
        expanded_background_feature_count = (pd.Series(np.zeros(num_cat)) + background_feature_count).fillna(0) / float(background_feature_count.sum())
        expanded_pattern_window_feature_count = (pd.Series(np.zeros(num_cat)) + pattern_window_feature_count).fillna(0) / float(pattern_window_feature_count.sum())
        expanded_pattern_feature_count = (pd.Series(np.zeros(num_cat)) + pattern_feature_count).fillna(0) / float(pattern_feature_count.sum())
        utils.plot_bar_chart(non_pattern_ax, map(str, range(num_cat)), expanded_pattern_window_feature_count, label = 'pattern_window', alpha = 0.5, color = pattern_window_color, offset = 0.4, width = 0.35)
        utils.plot_bar_chart(non_pattern_ax, map(str, range(num_cat)), expanded_background_feature_count, label = 'background', alpha = 0.5, color = background_color, offset = 0.0, width = 0.35)
        non_pattern_ax.set_title('sizes: %d/%d' % (len(pattern_window_data), len(background_data)))
        non_pattern_ax.set_ylim((0,1))
        non_pattern_ax.legend()
        utils.plot_bar_chart(pattern_ax, map(str, range(num_cat)), expanded_pattern_feature_count, label = 'pattern', alpha = 0.5, color = pattern_color, offset = 0.4, width = 0.35)
        pattern_ax.set_title('size: %d' % len(pattern_data))
        pattern_ax.set_ylim((0,1))
        pattern_ax.legend()
        feature_figs.append(feature_fig)
    return spatial_fig, feature_figs
Example #2
0
def plot_pattern_helper(data):
    fig, ax = plt.subplots()
    data_xys = [utils.latlng_to_xy(*datum.location) for datum in data]
    ax.scatter([xy[0] for xy in data_xys], [xy[1] for xy in data_xys], color = 'black', s = 1)
    return fig, ax
Example #3
0
        return itertools.ifilter(lambda (background_data, foreground_data): len(background_data) != 0 and len(foreground_data) != 0 and len(foreground_data) < N / 2, itertools.starmap(start_end_idx_to_background_foreground, itertools.combinations(idx_boundaries,2)))


def plot_pattern((background_data, foreground_data, pattern_data), test_data):
    """
    plot true foreground patterns with x's, background blue, predicted pattern red, others green
    """

    marker_size = 2
    alpha = 0.8

    not_pattern_data = foreground_data.difference(pattern_data)
    true_pattern_data = [datum for datum in foreground_data if datum.in_pattern]
    true_not_pattern_data = [datum for datum in foreground_data if not datum.in_pattern]

    pattern_xys = [utils.latlng_to_xy(*datum.location) for datum in pattern_data]
    not_pattern_xys = [utils.latlng_to_xy(*datum.location) for datum in not_pattern_data]
    true_pattern_xys = [utils.latlng_to_xy(*datum.location) for datum in true_pattern_data]
    true_not_pattern_xys = [utils.latlng_to_xy(*datum.location) for datum in true_not_pattern_data]

    background_xys = [utils.latlng_to_xy(*datum.location) for datum in background_data]

    predicted_fig, predicted_ax = plt.subplots()
    predicted_ax.scatter([xy[0] for xy in background_xys], [xy[1] for xy in background_xys], label = 'background crimes', color = 'black', s = marker_size, alpha = alpha)
    predicted_ax.scatter([xy[0] for xy in pattern_xys], [xy[1] for xy in pattern_xys], label = 'pattern crimes', color = 'green', s = marker_size, alpha = alpha)
    predicted_ax.scatter([xy[0] for xy in not_pattern_xys], [xy[1] for xy in not_pattern_xys], label = 'not pattern crimes', color = 'red', s = marker_size, alpha = alpha)
    predicted_fig.suptitle('predicted')
    predicted_ax.legend()

    true_fig, true_ax = plt.subplots()
    true_ax.scatter([xy[0] for xy in background_xys], [xy[1] for xy in background_xys], label = 'background crimes', color = 'black', s = marker_size, alpha = alpha)