Skip to content

Instantly share code, notes, and snippets.

@flavianh
Created January 27, 2018 18:20
Show Gist options
  • Select an option

  • Save flavianh/5db8e98652e5a324305d0fbcc94ce0dc to your computer and use it in GitHub Desktop.

Select an option

Save flavianh/5db8e98652e5a324305d0fbcc94ce0dc to your computer and use it in GitHub Desktop.
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