%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('25505-0012-Data.tsv', sep= '\t', low_memory = False)
df.head(10)
SEQN | BMDSTATS | BMXWT | BMIWT | BMXRECUM | BMIRECUM | BMXHEAD | BMIHEAD | BMXHT | BMIHT | ... | FIAPROXY | FIAINTRP | MIALANG | MIAPROXY | MIAINTRP | AIALANG | WTINT2YR | WTMEC2YR | SDMVPSU | SDMVSTRA | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 41475 | 3 | 138.9 | 154.7 | ... | 2 | 2 | 1 | 2 | 2 | 1 | 59356.356426 | 60045.772497 | 1 | 60 | ||||||
1 | 41476 | 1 | 22 | 120.4 | ... | 2 | 2 | 35057.218405 | 35353.210440 | 1 | 70 | ||||||||||
2 | 41477 | 1 | 83.9 | 167.1 | ... | 2 | 2 | 1 | 2 | 2 | 1 | 9935.266183 | 10074.150074 | 1 | 67 | ||||||
3 | 41478 | 1 | 11.5 | 77.4 | ... | 2 | 2 | 12846.712058 | 14560.472652 | 2 | 59 | ||||||||||
4 | 41479 | 1 | 65.7 | 154.4 | ... | 2 | 2 | 2 | 2 | 2 | 2 | 8727.797555 | 9234.055759 | 1 | 70 | ||||||
5 | 41480 | 1 | 27 | 122.7 | ... | 2 | 2 | 7379.745086 | 7297.067503 | 2 | 69 | ||||||||||
6 | 41481 | 1 | 77.9 | 182.7 | ... | 2 | 2 | 1 | 2 | 2 | 1 | 24342.505253 | 24655.376656 | 2 | 68 | ||||||
7 | 41482 | 1 | 101.6 | 173.8 | ... | 2 | 2 | 2 | 2 | 2 | 2 | 9811.075078 | 11602.178638 | 2 | 65 | ||||||
8 | 41483 | 3 | 133.1 | 173.8 | ... | 2 | 2 | 1 | 2 | 2 | 1 | 8058.685296 | 7920.812275 | 2 | 66 | ||||||
9 | 41484 | 1 | 9.3 | 72.7 | ... | 2 | 2 | 8942.951928 | 9259.270099 | 2 | 59 |
10 rows × 65 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