%load_ext retina %pylab inline from IPython.display import display import pandas pandas.set_option('display.notebook_repr_html', True) pandas.set_option('display.precision', 2) def plot_percent(df, limit=10): df['Gun Percent'][:limit].plot() plt.ylim(0,100) plt.title("% Gun Homicide") plt.show() def plot_percapita(df, limit=10): df = df.ix[:,['Homicides', 'Gun Homicides']][:limit] df['Total Homicides'] = df['Homicides'] - df['Gun Homicides'] del df['Homicides'] df.plot(kind='bar', stacked=True, sort_columns=True) plt.ylabel("per 100k") plt.show() def display_relevant(df, limit=10): display(df.ix[:,['Homicides', 'Gun Homicides', 'Gun Data Source']][:limit]) totals = pandas.read_csv('totals.csv', '\t', index_col=0) guns = pandas.read_csv('guns.csv', '\t', index_col=0) gdp = pandas.read_csv('gdp.csv', '\t', index_col=1) data = totals.join(guns).join(gdp) data['Gun Percent'] = 100 * data['Gun Homicides'] / data['Homicides'] del data['Unintentional'],data['Undetermined'],data['Gun Suicides'] data = data.dropna() data = data.sort("Gun Homicides", ascending=False) display_relevant(data, 15) top = data.sort('GDP')[-30:] top_by_guns = top.sort("Gun Homicides", ascending=False) display_relevant(top_by_guns, 5) plot_percapita(top_by_guns, 10) index = (data['Region'] == 'Europe') + \ (data.index == 'United States') + \ (data.index == 'Canada') + \ (data.index == 'Mexico') selected = data[index] print "By Total Gun Homicides" sys.stdout.flush() by_guns = selected.sort("Gun Homicides", ascending=False) #by_guns['Gun Homicides'].plot(kind='bar') plot_percapita(by_guns, limit=25) display_relevant(selected, limit=None) select = data.ix[['United States', 'Canada', 'United Kingdom']] plot_percapita(select) select['Homicides'] = select['Homicides']['United States'] / select['Homicides'] select['Gun Homicides'] = select['Gun Homicides']['United States'] / select['Gun Homicides'] display_relevant(select) for country in data.index: print country