Я здесь впервые, так что терпите меня! Я пытаюсь построить гистограммы на разных вкладках в ipwidget (набор данных из https://www.kaggle.com/rhuebner/human-resources-data-set#HRDataset_v13 .csv ) в Jupyter Lab с Python. Чтобы у вас была идея, у меня есть следующий код, который работает:
# plots each categorical variable in a different tab with just a simple bar chart
data_cat = data.select_dtypes(include='object')
data_cat = data_cat.drop(['Employee_Name','EmpID'],axis=1)
tab_contents = [i for i in data_cat.columns.values]
children = [widgets.Output() for value in tab_contents]
tab = widgets.Tab(children = children)
[tab.set_title(num,name) for num,name in enumerate(tab_contents)]
display(tab)
for i,k in enumerate(data_cat):
df = pd.DataFrame(data_cat.groupby(k).size().reset_index().rename(columns={0:'Count'}))
df['percentage'] = (100*(df['Count']/len(data))).round(1)
with children[i]:
x=df[k]
y=df['percentage']
fig = go.Figure()
fig.add_trace(go.Bar(x=x,y=y,text =y, textposition ='auto'))
fig.update_xaxes(title_text=tab_contents[i])
fig.update_yaxes(title_text='Percentage (total)')
fig.show()
Теперь я хочу сгруппировать данные по трем двоичным столбцам и построить три разных сгруппированных гистограммы на каждой вкладке. Таким образом, в основном то, что я имею выше, но с дополнительными 2 гистограммами (подсюжетами) То, что я пробовал:
tab_contents_binary_cat = [i for i in data_cat.columns.values]
children = [widgets.Output() for value in tab_contents_binary_cat]
tab = widgets.Tab(children = children)
[tab.set_title(num,name) for num,name in enumerate(tab_contents_binary_cat)]
display(tab)
#a=1
for i,k in enumerate(data_cat):
for i,j in enumerate(data_binary):
dfg = data_binary_cat.groupby(k)[j].apply(lambda x: x.value_counts()).rename('test').reset_index()
dfg = pd.DataFrame(dfg)
dfg['percentage'] = (100*(dfg['test']/len(data))).round(1)
dfg_0 = dfg[dfg['level_1'] == 0.0]
dfg_1 = dfg[dfg['level_1'] == 1.0]
with children[i]:
fig = make_subplots(rows=1, cols=3,start_cell='top-left', print_grid=True)
#params=[name for name in data_binary.columns]
fig.add_trace(go.Bar(x=dfg[k], y=dfg_0['percentage']),row=1,col=a)
fig.add_trace(go.Bar(x=dfg[k], y=dfg_1['percentage']),row=1,col=a)
fig.update_layout(barmode='group')
fig.update_xaxes(title_text=tab_contents_binary_cat[i])
fig.update_yaxes(title_text='Percentage (total)')
fig.show()
#a += 1
Это будет отображать все столбцы на каждой вкладке виджетов. Я пытаюсь понять, что я делаю не так часами, но не могу понять! Любая помощь будет принята с благодарностью!