%matplotlib inline
import matplotlib.pyplot as plt
import ipywidgets as widgets
import pandas as pd
from IPython.display import display, clear_output
from ipywidgets import Button, HBox, VBox
from collections import Counter
df = pd.read_csv('25504-0014-Data.tsv', sep= '\t', low_memory = False)
df.head(10)
SEQN | PEASCST1 | PEASCTM1 | PEASCCT1 | BPXCHR | BPQ150A | BPQ150B | BPQ150C | BPQ150D | BPAARM | ... | FIAPROXY | FIAINTRP | MIALANG | MIAPROXY | MIAINTRP | AIALANG | WTINT2YR | WTMEC2YR | SDMVPSU | SDMVSTRA | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 31127 | 1 | 41 | 100 | ... | 2 | 2 | 6434.950248 | 6571.396373 | 2 | 44 | ||||||||||
1 | 31128 | 1 | 401 | 2 | 2 | 2 | 2 | 1 | ... | 2 | 2 | 1 | 2 | 2 | 1 | 9081.700761 | 8987.041810 | 1 | 52 | ||
2 | 31129 | 1 | 664 | 1 | 2 | 2 | 2 | 1 | ... | 2 | 2 | 1 | 2 | 2 | 1 | 5316.895215 | 5586.719481 | 1 | 51 | ||
3 | 31130 | 2 | 4 | 2 | 2 | 2 | 2 | 1 | ... | 2 | 2 | 29960.839509 | 34030.994786 | 2 | 46 | ||||||
4 | 31131 | 1 | 827 | 2 | 2 | 2 | 2 | 1 | ... | 2 | 2 | 1 | 2 | 2 | 1 | 26457.708180 | 26770.584605 | 1 | 48 | ||
5 | 31132 | 1 | 730 | 2 | 2 | 2 | 2 | 1 | ... | 2 | 2 | 1 | 2 | 2 | 1 | 32961.509920 | 35315.538900 | 2 | 52 | ||
6 | 31133 | 1 | 612 | 2 | 2 | 2 | 2 | 1 | ... | 2 | 2 | 1 | 2 | 2 | 1 | 5635.221296 | 5920.617679 | 1 | 51 | ||
7 | 31134 | 1 | 844 | 2 | 2 | 2 | 2 | 1 | ... | 2 | 2 | 1 | 2 | 2 | 1 | 43718.506372 | 44231.167252 | 2 | 48 | ||
8 | 31135 | 1 | 61 | 120 | ... | 2 | 2 | 15711.544398 | 16143.815753 | 2 | 52 | ||||||||||
9 | 31137 | 1 | 819 | 2 | 2 | 2 | 2 | 1 | ... | 2 | 2 | 1 | 2 | 2 | 1 | 5576.468045 | 5576.194780 | 2 | 51 |
10 rows × 70 columns
style = {'description_width': 'initial'}
# set up initial text box and button
graphs_num = widgets.IntText(value = 1, description = "Number of Graphs", style = style)
graphs_ex = widgets.Button(description = "Execute")
# set up the graph widgets
x_axis = []
x_filter = []
x_filter_num = []
y_axis = []
y_filter = []
y_filter_num = []
graph_type = []
# create graph button
run_graph = widgets.Button(description = "Graph!")
# display setup buttons
display(graphs_num)
display(graphs_ex)
x_axis.append(widgets.Dropdown(options = list(df), description = "X Variable", style = style))
x_filter.append(widgets.Dropdown(options = ["No Filter", "=", "!=", ">", ">=", "<", "<="], description = "Filter:", style = style))
x_filter_num.append(widgets.IntText(value = 0))
y_axis.append(widgets.Dropdown(options = list(df), description = "Y Variable", style = style))
y_filter.append(widgets.Dropdown(options = ["No Filter", "=", "!=", ">", ">=", "<", "<="], description = "Filter:", style = style))
y_filter_num.append(widgets.IntText(value = 0))
graph_type.append(widgets.Dropdown(options = ["Bar (Sum)", "Line (Trends)", "Pie (Percent)"], description = "Type:", style = style))
x_group = HBox([x_axis[0], x_filter[0], x_filter_num[0]])
y_group = HBox([y_axis[0], y_filter[0], y_filter_num[0]])
x_and_y = VBox([x_group, y_group]), VBox([x_group, y_group])
print ("Graph 1:")
display(x_and_y[0])
display(graph_type[0])
display(run_graph)
print_x = []
print_y = []
xvar = []
# create graphs
def publish_graph(p):
clear_output()
display(graphs_num)
display(graphs_ex)
for i in range(graphs_num.value):
x_group = HBox([x_axis[i], x_filter[i], x_filter_num[i]])
y_group = HBox([y_axis[i], y_filter[i], y_filter_num[i]])
x_and_y = VBox([x_group, y_group]), VBox([x_group, y_group])
print ("Graph %d:" %(i+1))
display(x_and_y[0])
display(graph_type[i])
display(run_graph)
for i in range(graphs_num.value):
if x_filter[i].value == 'No Filter':
for j in range(len(df)):
xvar.append(j)
elif x_filter[i].value == "=":
for j in range(len(df)):
if df[x_axis[i].value][j] == x_filter_num[i].value:
xvar.append(j)
elif (x_filter[i].value == "!="):
for j in range(len(df)):
if df[x_axis[i].value][j] != x_filter_num[i].value:
xvar.append(j)
elif x_filter[i].value == ">":
for j in range(len(df)):
if df[x_axis[i].value][j] > x_filter_num[i].value:
xvar.append(j)
elif x_filter[i].value == ">=":
for j in range(len(df)):
if df[x_axis[i].value][j] >= x_filter_num[i].value:
xvar.append(j)
elif x_filter[i].value == "<":
for j in range(len(df)):
if df[x_axis[i].value][j] < x_filter_num[i].value:
xvar.append(j)
elif x_filter[i].value == "<=":
for j in range(len(df)):
if df[x_axis[i].value][j] <= x_filter_num[i].value:
xvar.append(j)
######## BAR GRAPH ############################################################
######## PIE CHART ############################################################
if graph_type[i].value == "Bar (Sum)" or graph_type[i].value == "Pie (Percent)":
if y_filter[i].value == "No Filter":
for k in range(len(xvar)):
print_y.append(df[y_axis[i].value][xvar[k]])
elif (y_filter[i].value == "="):
for k in range(len(xvar)):
if (df[y_axis[i].value][xvar[k]] == y_filter_num[i].value):
print_y.append(df[y_axis[i].value][xvar[k]])
elif (y_filter[i].value == "!="):
for k in range(len(xvar)):
if (df[y_axis[i].value][xvar[k]] != y_filter_num[i].value):
print_y.append(df[y_axis[i].value][xvar[k]])
elif (y_filter[i].value == ">"):
for k in range(len(xvar)):
if (df[y_axis[i].value][xvar[k]] > y_filter_num[i].value):
print_y.append(df[y_axis[i].value][xvar[k]])
elif (y_filter[i].value == ">="):
for k in range(len(xvar)):
if (df[y_axis[i].value][xvar[k]] >= y_filter_num[i].value):
print_y.append(df[y_axis[i].value][xvar[k]])
elif (y_filter[i].value == "<"):
for k in range(len(xvar)):
if (df[y_axis[i].value][xvar[k]] < y_filter_num[i].value):
print_y.append(df[y_axis[i].value][xvar[k]])
elif (y_filter[i].value == "<="):
for k in range(len(xvar)):
if (df[y_axis[i].value][xvar[k]] <= y_filter_num[i].value):
print_y.append(df[y_axis[i].value][xvar[k]])
D = Counter(print_y)
######## LINE GRAPH ############################################################
else:
if (y_filter[i].value == "No Filter"):
for k in range(len(xvar)):
print_x.append(df[x_axis[i].value][xvar[k]])
print_y.append(df[y_axis[i].value][xvar[k]])
elif (y_filter[i].value == "="):
for k in range(len(xvar)):
if (df[y_axis[i].value][k] == y_filter_num[i].value):
print_x.append(df[x_axis[i].value][xvar[k]])
print_y.append(df[y_axis[i].value][xvar[k]])
elif (y_filter[i].value == "!="):
for k in range(len(xvar)):
if (df[y_axis[i].value][k] != y_filter_num[i].value):
print_x.append(df[x_axis[i].value][xvar[k]])
print_y.append(df[y_axis[i].value][xvar[k]])
elif (y_filter[i].value == ">"):
for k in range(len(xvar)):
if (df[y_axis[i].value][k] > y_filter_num[i].value):
print_x.append(df[x_axis[i].value][xvar[k]])
print_y.append(df[y_axis[i].value][xvar[k]])
elif (y_filter[i].value == ">="):
for k in range(len(xvar)):
if (df[y_axis[i].value][k] >= y_filter_num[i].value):
print_x.append(df[x_axis[i].value][xvar[k]])
print_y.append(df[y_axis[i].value][xvar[k]])
elif (y_filter[i].value == "<"):
for k in range(len(xvar)):
if (df[y_axis[i].value][k] < y_filter_num[i].value):
print_x.append(df[x_axis[i].value][xvar[k]])
print_y.append(df[y_axis[i].value][xvar[k]])
elif (y_filter[i].value == "<="):
for k in range(len(xvar)):
if (df[y_axis[i].value][k] <= y_filter_num[i].value):
print_x.append(df[x_axis[i].value][xvar[k]])
print_y.append(df[y_axis[i].value][xvar[k]])
########## Print Graph ########################################################
#print(print_x)
#print(print_y)
plt.figure()
if (graph_type[i].value == "Bar (Sum)"):
plt.bar(range(len(D)), list(D.values()), align='center')
plt.xticks(range(len(D)), list(D.keys()))
elif (graph_type[i].value == "Pie (Percent)"):
plt.pie([float(v) for v in D.values()], labels=[float(k) for k in D], autopct='%1.1f%%')
else:
plt.plot(print_x, print_y)
print_x.clear()
print_y.clear()
xvar.clear()
def run_setup(r):
clear_output()
display(graphs_num)
display(graphs_ex)
for i in range(graphs_num.value):
x_axis.append(widgets.Dropdown(options = list(df), description = "X Variable", style = style))
x_filter.append(widgets.Dropdown(options = ["No Filter", "=", "!=", ">", ">=", "<", "<="], description = "Filter:", style = style))
x_filter_num.append(widgets.IntText(value = 0))
y_axis.append(widgets.Dropdown(options = list(df), description = "Y Variable", style = style))
y_filter.append(widgets.Dropdown(options = ["No Filter", "=", "!=", ">", ">=", "<", "<="], description = "Filter:", style = style))
y_filter_num.append(widgets.IntText(value = 0))
graph_type.append(widgets.Dropdown(options = ["Bar (Sum)", "Line (Trends)", "Pie (Percent)"], description = "Type:", style = style))
x_group = HBox([x_axis[i], x_filter[i], x_filter_num[i]])
y_group = HBox([y_axis[i], y_filter[i], y_filter_num[i]])
x_and_y = VBox([x_group, y_group]), VBox([x_group, y_group])
print ("Graph %d:" %(i+1))
display(x_and_y[0])
display(graph_type[i])
display(run_graph)
graphs_ex.on_click(run_setup)
run_graph.on_click(publish_graph)
A Jupyter Widget
A Jupyter Widget
Graph 1:
A Jupyter Widget
A Jupyter Widget
A Jupyter Widget
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-15-dee2ac45eac2> in publish_graph(p) 113 elif (y_filter[i].value == "<"): 114 for k in range(len(xvar)): --> 115 if (df[y_axis[i].value][xvar[k]] < y_filter_num[i].value): 116 print_y.append(df[y_axis[i].value][xvar[k]]) 117 TypeError: '<' not supported between instances of 'str' and 'int'