1 #ifndef snap_network_community_profile_h
2 #define snap_network_community_profile_h
40 Graph(GraphPt), Nodes(GraphPt->GetNodes()), Edges2(2*GraphPt->GetEdges()), Alpha(AlphaVal) { }
47 int GetNId(
const int& NodeN)
const {
return NIdV[NodeN]; }
59 double GetPhi(
const int& ValId)
const {
return PhiV[ValId]; }
93 void FindBestCut(
const int& SeedNode,
const int& ClustSz,
const double& MinSizeFrac=0.2);
107 static void GetCutStat(
const PUNGraph& Graph,
const TIntV& NIdV,
int& Vol,
int& Cut,
double& Phi,
int GraphEdges=-1);
109 static void GetCutStat(
const PUNGraph& Graph,
const TIntSet& NIdSet,
int& Vol,
int& Cut,
double& Phi,
int GraphEdges=-1);
117 static void PlotNCP(
const PUNGraph& Graph,
const TStr& FNm,
const TStr Desc=
"",
const bool& BagOfWhiskers=
true,
const bool& RewireNet=
false,
118 const int& KMin=10,
const int& KMax=
Mega(100),
const int& Coverage=10,
const bool& SaveTxtStat=
false,
const bool& PlotBoltzman=
false);
138 SeedNId(SeedNode), SweepV(SweepNIdV), PhiV(PhiNIdV) {
IAssert(SweepV.
Len()==PhiV.
Len()); }
142 int NId(
const int i)
const {
return SweepV[i]; }
143 double Phi(
const int i)
const {
return PhiV[i]; }
152 TCutInfo() : Nodes(0), Edges(0), CutSz(0), CutNIdV() { }
153 TCutInfo(
const int& ClustNodes,
const int& EdgesInside,
const int& CutSize) : Nodes(ClustNodes), Edges(EdgesInside), CutSz(CutSize) { }
154 TCutInfo(
const int& ClustNodes,
const int& EdgesInside,
const int& CutSize,
const TIntV& NIdV) :
155 Nodes(ClustNodes), Edges(EdgesInside), CutSz(CutSize), CutNIdV(NIdV) { }
158 TCutInfo(
const TCutInfo& CS) : Nodes(CS.Nodes), Edges(CS.Edges), CutSz(CS.CutSz), CutNIdV(CS.CutNIdV) { }
164 double GetPhi()
const {
return double(CutSz)/double(2*Edges+CutSz); }
165 double GetExpansion()
const {
return Nodes<2 ? 1.0 : double(CutSz)/double(Nodes); }
166 double GetIntDens()
const {
return 1.0 - ((Nodes<2) ? 0 : 2.0*
double(Edges)/double(Nodes*(Nodes-1))); }
167 double GetCutRatio(
const int& GNodes)
const {
return double(CutSz)/double(Nodes*(GNodes-Nodes)); }
169 double GetFracDegOut(
const PUNGraph& Graph,
double& MxFrac,
double& AvgFrac,
double& MedianFrac,
double& Pct9Frac,
double& Flake)
const;
191 TLocClustStat(
const double& _Alpha,
const int& _KMin,
const int& _KMax,
const double& _KFac,
const int& _Coverage,
const double& _SizeFrac);
195 void Run(
const PUNGraph& Graph,
const bool& SaveAllSweeps=
false,
const bool& SaveAllCond=
false,
const bool& SaveBestNodesAtK=
false);
198 void AddCut(
const int& ClustSz,
const double& Phi);
201 double FindBestCut(
const int& Nodes,
const TIntSet& TabuNIdSet,
int& BestCutId)
const;
202 const TCutInfo&
FindBestCut(
const int& Nodes=-1)
const;
204 int FindBestCut(
const int& Nodes,
int& Vol,
int& Cut,
double& Phi)
const;
254 void Impose(
const TStr& OutFNm,
const int& TopN,
const bool& Smooth);
264 static void PlotDataset(
const TStr& InFNmWc,
const TStr& OutFNm,
const bool& ImposeNcp=
false,
const bool& VsGraphN=
false);
double GetModRat(const int &GEdges) const
void SavePajek(const TStr &OutFNm) const
Saves the network in the Pajek format so it can be visualized. Red node represents the seed and color...
TVec< TNodeSweep > SweepsV
static void PlotDataset(const TStr &InFNmWc, const TStr &OutFNm, const bool &ImposeNcp=false, const bool &VsGraphN=false)
void PlotAvgNcp(const TStr &OutFNm, const TVec< TFltPrV > &NcpVec, const int &MinSz, const double &MaxMinY)
static void BagOfWhiskers2(const PUNGraph &Graph, TFltPrV &SizePhiV)
static void DrawWhiskers(const PUNGraph &Graph, TStr FNmPref, const int &PlotN)
Draws the 'whiskers' of the graph. Whiskers are small sub-graphs that are attached to the rest of the...
int GetVol(const int &Nodes) const
Returns the volume of the set of first NodeN nodes in the sweep vector.
void SupportSweep()
After the function ApproxPageRank() has been run the SupportSweep() computes the volume, cut size, node ids, conductance vectors.
static void GetCutStat(const PUNGraph &Graph, const TIntV &NIdV, int &Vol, int &Cut, double &Phi, int GraphEdges=-1)
For a given Graph and a set of nodes NIdV the function returns the Volume, CutSize and the Conductanc...
int GetCut(const int &Nodes) const
Returns the size of the cut of the first Nodes nodes in the sweep vector.
const TIntV & GetNIdV() const
Vector of node IDs sorted in the random walk order.
void Run(const PUNGraph &Graph, const bool &SaveAllSweeps=false, const bool &SaveAllCond=false, const bool &SaveBestNodesAtK=false)
TVec< TFltPrV > WhiskNcpV
int ApproxPageRank(const int &SeedNode, const double &Eps)
Computes Approximate PageRank from the seed node SeedNId and with tolerance Eps.
TFltPr GetXYAtMinY(const TFltPrV &Ncp, const int &NNodes)
void PlotNcpMin(const TStr &OutFNm, const bool &VsGraphN=false)
void PlotPhiDistr(const int &CmtySz, const TStr &OutFNm, TStr Desc=TStr()) const
void FindBestCut(const int &SeedNode, const int &ClustSz, const double &MinSizeFrac=0.2)
Finds minimum conductance cut in the graph around the seed node.
TSizeTy Len() const
Returns the number of elements in the vector.
void PlotPhiDistr(const TStr &OutFNm, TStr Desc=TStr()) const
Plots the cluster conductance vs. cluster size K (cluster is composed of nodes NIdV[1...K]).
double GetExpEdgesIn(const int &GEdges) const
void PlotCutDistr(const TStr &OutFNm, TStr Desc=TStr()) const
Plots the cluster cut size vs. cluster size K (cluster is composed of nodes NIdV[1...K]).
void GetBoltzmanCurveStat(const TFltV &TempV, TVec< TFltPrV > &NcpV) const
const TCutInfo & GetKNodeCut(const int &Nodes) const
int Len() const
Returns the support of the approximate random walk, the number of nodes with non-zero PageRank score...
void PlotNCP(const TStr &OutFNm, TStr Desc=TStr()) const
int GetCutEdges() const
Number of edges in the 'best' (minimum conductance) cut.
double GetNormCut(const int &GEdges) const
const TDat & GetDat(const TKey &Key) const
static double Sqr(const double &x)
void GetEdgesInOut(const PGraph &Graph, const TIntV &NIdV, int &EdgesInX, int &EdgesOutX)
int BestWhiskNodes() const
double GetCutPhi() const
Conductance of the 'best' (minimum conductance) cut.
void PlotRewBestWhisker(const TStr &OutFNm, const bool &VsGraphN=false)
const TCutInfo & GetBestCut() const
void PlotNCPModul(const TStr &OutFNm, TStr Desc=TStr()) const
int BestWhiskEdges() const
double GetExpansion() const
Local-Spectral-Clustering statistics of a given Graph.
static void BagOfWhiskers(const PUNGraph &Graph, TFltPrV &SizePhiV, TFltPr &BestWhisk)
void AddToBestCutH(const PUNGraph &Graph, const TIntV &NIdV, const bool &AddBestCond=true)
Local Spectral Clustering algorithm.
void SaveTxtNcpMin(const TStr &OutFNm, const bool &VsGraphN=false)
int GetRndWalkSup() const
Returns the support of the approximate random walk, the number of nodes with non-zero PageRank score...
void PlotBestWhisker(const TStr &OutFNm, const bool &VsGraphN=false)
double GetCutRatio(const int &GNodes) const
void Save(TSOut &SOut) const
const TFltV & GetPhiV() const
Conducatance of the cut separating first K-nodes in the node-id vector (GetNIdV()) from the rest of t...
void PlotRewNcpMin(const TStr &OutFNm, const bool &VsGraphN=false)
double GetIntDens() const
double FindBestCut(const int &Nodes, const TIntSet &TabuNIdSet, int &BestCutId) const
static double Round(const double &Val)
const TFltPrV & GetBagOfWhiskersV() const
static void MakeExpBins(const TFltPrV &ValV, TFltPrV &NewV)
double Phi(const int i) const
double GetPhi(const int &ValId) const
Returns the conductance of the cut separating the first Nodes nodes in the sweep vector from the rest...
int GetCutVol() const
Volume of the 'best' (minimum conductance) cut.
THash< TInt, TFltV > SizePhiH
void PlotNCPScatter(const TStr &OutFNm, TStr Desc=TStr()) const
void PlotPhiInOut(const TStr &OutFNm, TStr Desc=TStr()) const
TCutInfo(const TCutInfo &CS)
void GetCurveStat(TFltPrV &MeanV, TFltPrV &MedV, TFltPrV &Dec1V, TFltPrV &MinV, TFltPrV &MaxV) const
double GetFracDegOut(const PUNGraph &Graph, double &MxFrac, double &AvgFrac, double &MedianFrac, double &Pct9Frac, double &Flake) const
THash< TInt, TCutInfo > BestCutH
TFltPr GetBestWhisk() const
void SaveTxt(const TStr &OutFNm)
double GetModular(const int &GEdges) const
void ImposeNCP(const TLocClustStat &LcStat2, TStr OutFNm, TStr Desc, TStr Desc1, TStr Desc2) const
const TIntV & GetCutV() const
Edges cut to separate the first K-nodes in the node-id vector (GetNIdV()) from the rest of the graph...
TCutInfo(const int &ClustNodes, const int &EdgesInside, const int &CutSize, const TIntV &NIdV)
const TIntV & GetVolV() const
Volume (sum of the degrees) of first K-nodes in the node-id vector (GetNIdV()).
void PlotNcpTop10(const TStr &OutFNm, TStr Desc, const int &TakeMinN) const
const TCutInfo & GetCutN(const int &N) const
void PlotBestClustDens(TStr OutFNm, TStr Desc=TStr()) const
bool operator<(const TNodeSweep &CS) const
TNcpGraphsBase(const TStr &FNmWc)
bool operator<(const TCutInfo &CS) const
int BestCut() const
Index K of the cut of the minimum conductance around the seed node.
int GetNId(const int &NodeN) const
Returns the ID of the NodeN-th node in the sweep vector.
TCutInfo(const PUNGraph &G, const TIntV &ClustNIdV, bool TakeNIdV=false)
TNodeSweep(const TNodeSweep &NS)
void PlotBoltzmanCurve(const TStr &OutFNm, TStr Desc=TStr()) const
void PlotVolDistr(const TStr &OutFNm, TStr Desc=TStr()) const
Plots the cluster volume vs. cluster size K (cluster is composed of nodes NIdV[1...K]).
void AddCut(const TIntV &NIdV)
TNodeSweep(const int &SeedNode, const TIntV &SweepNIdV, const TFltV &PhiNIdV)
void Save(TSOut &SOut) const
double BestWhiskPhi() const
void SetGraph(const PUNGraph &GraphPt)
void SaveTxtInfo(const TStr &OutFNmPref, const TStr &Desc, const bool &SetMaxAt1) const
int BestCutNodes() const
Number of nodes inside the 'best' (minimum conductance) cut.
double GetXAtMinY(const TFltPrV &Ncp, const int &NNodes)
void Impose(const TStr &OutFNm, const int &TopN, const bool &Smooth)
static void PlotNCP(const PUNGraph &Graph, const TStr &FNm, const TStr Desc="", const bool &BagOfWhiskers=true, const bool &RewireNet=false, const int &KMin=10, const int &KMax=Mega(100), const int &Coverage=10, const bool &SaveTxtStat=false, const bool &PlotBoltzman=false)
Local-Spectral-Clustering for a set of graphs (loads ncp-*.tab files)
TLocClust(const PUNGraph &GraphPt, const double &AlphaVal)
int NId(const int i) const
TCutInfo(const int &ClustNodes, const int &EdgesInside, const int &CutSize)
TLocClustStat(const double &_Alpha, const int &_KMin, const int &_KMax, const double &_KFac, const int &_Coverage, const double &_SizeFrac)