Created
January 27, 2018 18:20
-
-
Save flavianh/5db8e98652e5a324305d0fbcc94ce0dc to your computer and use it in GitHub Desktop.
Revisions
-
Flavian Hautbois created this gist
Jan 27, 2018 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,60 @@ def filter_categories(indexes): categories_filtered = [CATEGORIES[ind] for ind in indexes] if indexes != [] else CATEGORIES update_num_categories_source(categories_filtered, force_categories=True) update_usd_vs_date_source(categories_filtered, force_categories=True) def update_usd_vs_date_source(categories=None, force_categories=False): # To get the current state of the categories if categories is None: categories = source_num_categories.data['categories'] elif not force_categories: categories = list(set(categories) & set(source_num_categories.data['categories'])) df_categories = kickstarter_df_sub[kickstarter_df_sub.broader_category.isin(categories)] for color, state in zip(COLORS, STATES): df_by_state = df_categories[df_categories.state == state] data = { 'x': df_by_state['created_at'], 'y': df_by_state['usd_pledged'], 'name': df_by_state['name'], 'state': [state] * len(df_by_state), } sources_usd_vs_date[state].data = data def update_on_usd_vs_date_selection(event): geometry = event.geometry if geometry['type'] == 'rect': x0 = datetime.datetime.fromtimestamp(geometry['x0'] / 1000) x1 = datetime.datetime.fromtimestamp(geometry['x1'] / 1000) y0 = geometry['y0'] y1 = geometry['y1'] sub_df = kickstarter_df[kickstarter_df.created_at.between(x0, x1) & kickstarter_df.usd_pledged.between(y0, y1)] update_num_categories_source(source_num_categories.data['categories'], sub_df) def update_num_categories_source(categories=None, df=kickstarter_df, force_categories=False): # To get the current state of the categories if categories is None: categories = source_num_categories.data['categories'] elif not force_categories: categories = list(set(categories) & set(source_num_categories.data['categories'])) stacked_barchart_df = ( df['state'].groupby(df['broader_category']) .value_counts(normalize=False) .rename('count') ) data = { 'categories': categories, } # Sadly, I could not find a more efficient method to prepare a pandas array for a stacked bar chart for state, category in product(STATES, categories): data.setdefault(state, []) try: data[state].append(stacked_barchart_df.loc[category, state]) except KeyError: data[state].append(0) source_num_categories.data = data