How do I get the probability for every path occurring from a Networkx graph?

Viewed 90

How do I calculate the probability of each path occurring in a graph? For example I have a graph

df = pd.DataFrame({'column_id':[1,1,1,2,2],
                   'sequence':['hi','how are you','bye','hi','bye'],
                   'person':['A','B','A','B','A'],
                   'type':['Friendly','Friendly','Friendly','Mean','Mean']})
df['source'] = df['sequence']
df['target'] = df.groupby('column_id')['sequence'].transform(lambda x: x.shift(-1))
df1 = df[df['target'].notna()]
df1 = df1[['source','target','person','type']]
df1 = df[df['target'].notna()]
df1 = df1.drop(['sequence'],axis=1)
df1.loc[len(df1.index)+1] = [3, 'A', 'Mean', 'hi', 'run away']
df1.loc[len(df1.index)+1] = [3, 'A', 'Mean', 'run away', 'how are you']
df1.loc[len(df1.index)+1] = [3, 'A', 'Mean', 'how are you', 'bye']
df1.loc[len(df1.index)+1] = [4, 'A', 'Friendly', 'hi', 'how are you']
df1.loc[len(df1.index)+1] = [4, 'A', 'Friendly', 'how are you', 'bye']
df1.loc[len(df1.index)+1] = [5, 'A', 'Friendly', 'hi', 'runaway']
df1.loc[len(df1.index)+1] = [5, 'A', 'Friendly', 'run away', 'how are you']
df1.loc[len(df1.index)+1] = [5, 'A', 'Friendly', 'how are you', 'this is me']
df1.loc[len(df1.index)+1] = [5, 'A', 'Friendly', 'this is me', 'bye']
df1 = df1.reset_index().drop(['index'], axis=1)
df2 = df1.groupby(['source','target']).size().reset_index()
df2 = df2.drop_duplicates(subset=['source','target'],keep='last')
df3 = pd.merge(df1,df2, on=['source','target'], how='left')
df3 = df3.drop('column_id', axis=1)
df3.rename(columns={0:'weight'}, inplace=True)
df3['probability'] = df3['weight']
df3['probability'] = df3['probability']/df3['probability'].sum()

G = nx.from_pandas_edgelist(df3,
                            source = 'source',
                            target = 'target',
                            edge_attr=['person','type','probability'],
                            create_using=nx.DiGraph()) 

I want to calculate the probability of each path that is given from

sp = nx.all_simple_paths(G, source='hi', target='bye')

I tried multiplying the probability of each path but the results are not correct.

0 Answers
Related