Created
January 27, 2018 18:20
-
-
Save flavianh/5db8e98652e5a324305d0fbcc94ce0dc to your computer and use it in GitHub Desktop.
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 characters
| 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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment