Skip to content

Commit 1aa4570

Browse files
committed
improving Networks methods
1 parent 00d3362 commit 1aa4570

File tree

3 files changed

+41
-15
lines changed

3 files changed

+41
-15
lines changed
119 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.

art/classes/networks.py

Lines changed: 41 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -172,22 +172,38 @@ def degrees_dataframe(self):
172172
Returns the network's degree distributions as a dataframe.
173173
"""
174174

175-
degrees_dataframe = pd.DataFrame(columns = ['vertex', 'total_degree', 'in_degree', 'out_degree'])
176-
total_degrees = Network.degree(self, mode = 'all')
177-
in_degrees = Network.degree(self, mode = 'in')
178-
out_degrees = Network.degree(self, mode = 'out')
175+
isdir = self.is_directed()
176+
177+
if isdir == False:
178+
degrees_dataframe = pd.DataFrame(columns = ['vertex', 'degree'])
179+
total_degrees = Network.degree(self, mode = 'all')
180+
else:
181+
182+
degrees_dataframe = pd.DataFrame(columns = ['vertex', 'total_degree', 'in_degree', 'out_degree'])
183+
total_degrees = Network.degree(self, mode = 'all')
184+
in_degrees = Network.degree(self, mode = 'in')
185+
out_degrees = Network.degree(self, mode = 'out')
179186

180187
index = 0
181188
for v in self.vs:
182189
if 'name' in v.attributes().keys():
183190
item = v['name']
184191
else:
185192
item = v.index
186-
degrees_dataframe.loc[index] = [item, total_degrees[index], in_degrees[index], out_degrees[index]]
193+
194+
degrees_dataframe.loc[index, 'vertex'] = item
195+
196+
if isdir == False:
197+
degrees_dataframe.loc[index, 'degree'] = total_degrees[index]
198+
degrees_dataframe = degrees_dataframe.sort_values('degree', ascending=False)
199+
else:
200+
degrees_dataframe.loc[index, 'total_degree'] = total_degrees[index]
201+
degrees_dataframe.loc[index, 'in_degree'] = in_degrees[index]
202+
degrees_dataframe.loc[index, 'out_degree'] = out_degrees[index]
203+
degrees_dataframe = degrees_dataframe.sort_values('total_degree', ascending=False)
187204
index += 1
188205

189206
degrees_dataframe.index.name = 'vertex_id'
190-
degrees_dataframe = degrees_dataframe.sort_values('total_degree', ascending=False)
191207

192208
return degrees_dataframe
193209

@@ -380,7 +396,18 @@ def coreness_stats(self):
380396

381397
def community_detection(self, algorithm='fastgreedy'):
382398

383-
"""Identifies communities in the network. Gives the option of using different algorithms."""
399+
"""Identifies communities in the network. Gives the option of using different algorithms.
400+
401+
Parameters
402+
----------
403+
algorithm : str
404+
name of community detection algorithm. Options:
405+
1. betweenness
406+
2. fastgreedy
407+
3. eigenvector
408+
4. spinglass
409+
5. walktrap
410+
"""
384411

385412
if (algorithm == None) or (algorithm == ''):
386413
algorithm = input('Algorithm must be specified. Options: 1. betweenness, 2. fastgreedy, 3. eigenvector, 4. spinglass, 5. walktrap.:')
@@ -465,20 +492,19 @@ def weighted_density(self):
465492
return weighted_density
466493

467494

468-
def weighted_degrees_dataframe(self, direction = 'all'):
495+
def weighted_degrees_dataframe(self):
469496

470497
"""Returns the network's weighted degrees distribution as a dataframe."""
471498

499+
# Checks if network is directed
500+
472501

473502
# Checks if network is weighted
474503

475504
if 'weight' not in self.es.attributes():
476-
degrees_dataframe = self.degrees_dataframe(direction = direction)
477-
degrees_dataframe['weighted_degree'] = degrees_dataframe['degree']
478-
degrees_dataframe = degrees_dataframe.drop('degree', axis = 1)
505+
degrees_dataframe = self.degrees_dataframe().rename(columns={'total_degree':'weighted_total_degree', 'in_degree': 'weighted_in_degree', 'out_degree': 'weighted_out_degree'})
479506
return degrees_dataframe
480-
481-
507+
482508
else:
483509

484510
degrees_dataframe = pd.DataFrame(columns = ['vertex', 'weighted_degree'])
@@ -498,13 +524,13 @@ def weighted_degrees_dataframe(self, direction = 'all'):
498524
return degrees_dataframe
499525

500526

501-
def weighted_degrees_stats(self, direction = 'all'):
527+
def weighted_degrees_stats(self):
502528

503529
"""
504530
Returns frequency statistics for the weighted degree distribution.
505531
"""
506532

507-
df = self.weighted_degrees_dataframe(direction = direction)
533+
df = self.weighted_degrees_dataframe()
508534

509535
if df is not None:
510536
return df['weighted_degree'].describe()

0 commit comments

Comments
 (0)