igraph-help
[Top][All Lists]

Re: [igraph] clustering coefficients for bipartite networks

 From: Tamás Nepusz Subject: Re: [igraph] clustering coefficients for bipartite networks Date: Tue, 1 Feb 2011 20:06:07 +0100

```Hi Simone,

To speed up things, I'd probably create the list of neighbor sets in advance:

neisets = [set(g.neighbors(i)) for i in xrange(g.vcount())]

After that, you can do this:

vs = g.vs(type=0)
[len(neisets[u] & neisets[v]) / len(neisets[u] | neisets[v]) for u in vs for v
in vs]

Of course make sure that you do float division and not integer division; either
run from __future__ import division beforehand or convert one of the lengths to
float.

--
Tamas

On 1 Feb 2011, at 17:40, Simone Gabbriellini wrote:

> I guess I have to refine this description: I need to find, for a node u, the
> average of clustering values that u has with all the neighbors v which u
> share some neighbors with, where the clustering value is computed as the
> number of same neighbors between u and v divided by the total number of
> unique neighbors of u and v.
>
> is this something appreciable in that direction?
>
> [ ( len( set( g.neighbors(u) ) & set( g.neighbors(v) ) ) / len( list( set(
> g.neighbors(u) + g.neighbors(v) ) ) ) ) for u in g.vs(type=0) for v in
> g.vs(type=0)]
>
> best,
> simone
>
> Il giorno 01/feb/2011, alle ore 16.08, Simone Gabbriellini ha scritto:
>
>> I am really facing difficulties in translating the code from R... Maybe, it
>> would be better to start from scratch in python.
>>
>> I am trying to find, for every pair (u,v) of nodes of the same set, how many
>> neighbors of the other sets they have in common divided by the  sum of
>> unique neighbors of u and v.
>>
>> is there a simple way to accomplish this task?
>>
>> If I am right, this should produce, for every node, a list of values as long
>> as the number of pairs of nodes in a set. I then can use a running mean to
>> calculate the average value of the list.
>>
>> best,
>> Simone
>>
>> Il giorno 29/gen/2011, alle ore 11.50, Tamás Nepusz ha scritto:
>>
>>>> I don't think I can define functions on the fly like in R (but maybe I am
>>>> wrong)
>>> You can, see the lambda keyword:
>>>
>>> http://diveintopython.org/power_of_introspection/lambda_functions.html
>>>
>>> You can also define functions within functions, so if your auxiliary
>>> function is longer (but you won't use it from anywhere else), you can
>>> define it inside your original function.
>>>
>>> I don't know exactly what the difference is between the different *apply
>>> functions in R (lapply, sapply, apply), but I believe that Python's map()
>>> function does something similar. But even better, use list comprehensions
>>> if possible:
>>>
>>> http://docs.python.org/tutorial/datastructures.html#list-comprehensions
>>>
>>> --
>>> T.
>>>
>>>
>>> _______________________________________________
>>> igraph-help mailing list
>>> http://lists.nongnu.org/mailman/listinfo/igraph-help
>>
>
>
> _______________________________________________
> igraph-help mailing list