Plolty подзаговоры во вкладке ipywidgets - PullRequest
0 голосов
/ 20 марта 2020

Я здесь впервые, так что терпите меня! Я пытаюсь построить гистограммы на разных вкладках в 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

Это будет отображать все столбцы на каждой вкладке виджетов. Я пытаюсь понять, что я делаю не так часами, но не могу понять! Любая помощь будет принята с благодарностью!

...