Commit 3e81edd8 authored by delanoe's avatar delanoe Committed by Alexandre Delanoë

Modularity need to be optimized but works for small graphs

parent 567f8459
.stack-work/dist/x86_64-linux/Cabal-1.22.5.0/build/louvain/louvain
\ No newline at end of file
......@@ -17,23 +17,23 @@ library
hs-source-dirs: src
exposed-modules: Data.Louvain
, Data.Utils
, Data.Example
-- , Data.Example
, Data.GexfParser
build-depends: base >= 4.7 && < 5
, fgl
, hxt
default-language: Haskell2010
executable louvain
hs-source-dirs: app
main-is: Main.hs
ghc-options: -threaded -rtsopts -with-rtsopts=-N -O2
build-depends: base >= 4.7 && < 5
, fgl
, hxt
, louvain
default-language: Haskell2010
--
-- executable louvain
-- hs-source-dirs: app
-- main-is: MainLouvain.hs
-- ghc-options: -threaded -rtsopts -with-rtsopts=-N -O2
-- build-depends: base >= 4.7 && < 5
-- , fgl
-- , hxt
-- , louvain
-- default-language: Haskell2010
-- --
test-suite louvain-test
type: exitcode-stdio-1.0
hs-source-dirs: test
......
......@@ -8,7 +8,8 @@ import Data.Graph.Inductive
------------------------------------------------------------------------
type Modularity = Double
type Community = [Node]
type Partition = [Community]
-- type Community' = Community { nodes :: [Node], modularity :: Maybe Modularity}
-- type Partition = [Community]
type Reverse = Bool
......
......@@ -18,7 +18,6 @@ mkGraph' es = mkGraph ns es
ns = zip [1.. (fromIntegral . length) ns'] (repeat ())
where ns' = nub $ concat (Prelude.map edge2nodes es)
edge2nodes :: LEdge b -> [Node]
edge2nodes (a,b,_) = [a,b]
......
<?xml version="1.0" encoding="utf-8"?><gexf version="1.1" xmlns="http://www.gexf.net/1.1draft" xmlns:viz="http://www.gexf.net/1.1draft/viz" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/XMLSchema-instance">
<graph defaultedgetype="undirected" mode="static">
<nodes>
<node id="1" label="1" />
<node id="2" label="2" />
<node id="3" label="3" />
<node id="4" label="4" />
<node id="5" label="5" />
<node id="6" label="6" />
<node id="7" label="7" />
<node id="8" label="8" />
<node id="9" label="9" />
<node id="10" label="10" />
<node id="11" label="11" />
<node id="12" label="12" />
<node id="13" label="13" />
<node id="14" label="14" />
<node id="15" label="15" />
<node id="16" label="16" />
<node id="17" label="17" />
<node id="18" label="18" />
<node id="19" label="19" />
<node id="20" label="20" />
<node id="21" label="21" />
<node id="22" label="22" />
<node id="23" label="23" />
<node id="24" label="24" />
<node id="25" label="25" />
<node id="26" label="26" />
<node id="27" label="27" />
<node id="28" label="28" />
<node id="29" label="29" />
<node id="30" label="30" />
<node id="31" label="31" />
<node id="32" label="32" />
<node id="33" label="33" />
<node id="34" label="34" />
</nodes>
<edges>
<edge id="0" source="1" target="32" />
<edge id="1" source="1" target="2" />
<edge id="2" source="1" target="3" />
<edge id="3" source="1" target="4" />
<edge id="4" source="1" target="5" />
<edge id="5" source="1" target="6" />
<edge id="6" source="1" target="7" />
<edge id="7" source="1" target="8" />
<edge id="8" source="1" target="9" />
<edge id="9" source="1" target="11" />
<edge id="10" source="1" target="12" />
<edge id="11" source="1" target="13" />
<edge id="12" source="1" target="14" />
<edge id="13" source="1" target="18" />
<edge id="14" source="1" target="20" />
<edge id="15" source="1" target="22" />
<edge id="16" source="2" target="3" />
<edge id="17" source="2" target="4" />
<edge id="18" source="2" target="8" />
<edge id="19" source="2" target="14" />
<edge id="20" source="2" target="18" />
<edge id="21" source="2" target="20" />
<edge id="22" source="2" target="22" />
<edge id="23" source="2" target="31" />
<edge id="24" source="3" target="4" />
<edge id="25" source="3" target="33" />
<edge id="26" source="3" target="8" />
<edge id="27" source="3" target="9" />
<edge id="28" source="3" target="10" />
<edge id="29" source="3" target="14" />
<edge id="30" source="3" target="28" />
<edge id="31" source="3" target="29" />
<edge id="32" source="4" target="8" />
<edge id="33" source="4" target="13" />
<edge id="34" source="4" target="14" />
<edge id="35" source="5" target="11" />
<edge id="36" source="5" target="7" />
<edge id="37" source="6" target="7" />
<edge id="38" source="6" target="11" />
<edge id="39" source="6" target="17" />
<edge id="40" source="7" target="17" />
<edge id="41" source="9" target="31" />
<edge id="42" source="9" target="34" />
<edge id="43" source="9" target="33" />
<edge id="44" source="10" target="34" />
<edge id="45" source="14" target="34" />
<edge id="46" source="15" target="33" />
<edge id="47" source="15" target="34" />
<edge id="48" source="16" target="33" />
<edge id="49" source="16" target="34" />
<edge id="50" source="19" target="33" />
<edge id="51" source="19" target="34" />
<edge id="52" source="20" target="34" />
<edge id="53" source="21" target="33" />
<edge id="54" source="21" target="34" />
<edge id="55" source="23" target="33" />
<edge id="56" source="23" target="34" />
<edge id="57" source="24" target="33" />
<edge id="58" source="24" target="26" />
<edge id="59" source="24" target="28" />
<edge id="60" source="24" target="34" />
<edge id="61" source="24" target="30" />
<edge id="62" source="25" target="32" />
<edge id="63" source="25" target="26" />
<edge id="64" source="25" target="28" />
<edge id="65" source="26" target="32" />
<edge id="66" source="27" target="34" />
<edge id="67" source="27" target="30" />
<edge id="68" source="28" target="34" />
<edge id="69" source="29" target="32" />
<edge id="70" source="29" target="34" />
<edge id="71" source="30" target="33" />
<edge id="72" source="30" target="34" />
<edge id="73" source="31" target="34" />
<edge id="74" source="31" target="33" />
<edge id="75" source="32" target="33" />
<edge id="76" source="32" target="34" />
<edge id="77" source="33" target="34" />
</edges>
</graph>
</gexf>
http://ptrckprry.com/course/ssd/lecture/community.html
import networkx as nx
import community as co
from collections import defaultdict
karate = nx.read_gexf("../src/Data/karate.gexf")
part = co.best_partition(karate)
print(karate.edges())
#result = defaultdict(list)
result = dict()
for k,v in part.items():
if v is not None:
r = result.get(v, [])
r.append(k)
result[v] = r
print(result)
import Data.List (sort)
import Data.Example
import Data.Louvain
testKarate2com = do
p <- bestpartition True <$> karate
k <- karate
let result = (sort $ Prelude.map (sort) (stepscom' k 2 p))
print result
print karate2com
print $ result == karate2com
--import Data.List (sort)
---- import Data.Example
--import Data.Louvain
--
--
--testKarate2com = do
-- p <- bestpartition True <$> karate
-- k <- karate
-- let result = (sort $ Prelude.map (sort) (stepscom' k 2 p))
-- print result
-- print karate2com
-- print $ result == karate2com
--
main :: IO ()
main = testKarate2com
main = print "undefined" -- testKarate2com
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment