Neo4j【有与无】【N7】图论的预测分析

目录

1.深度和广度优先搜索

2.用Dijkstra的算法进行路径查找

3.A *算法

4.图论与预测建模

4.1.三元闭包/闭合(Triadic Closures)

4.2.结构平衡(Structural Balance)

5.本地桥梁(Local Bridges)

6.摘要


在本章中,我们将研究一些用于处理图形数据的分析技术和算法。 图论和图算法都是计算科学领域中成熟且广为人知的领域,我们将演示如何将二者用于从图数据库中挖掘复杂的信息。 尽管具有计算机科学背景的读者无疑会认识到这些算法和技术,但本章中的讨论无需借助数学即可进行处理,以鼓励好奇的外行学习。

1.深度和广度优先搜索

在研究高阶分析技术之前,我们需要重新熟悉基本的广度优先搜索算法,这是迭代整个图的基础。 我们在本书中看到的大多数查询本质上都是深度优先而不是广度优先。 也就是说,它们从起始节点向外遍历到某个末端节点,然后沿着与同一起始节点不同的路径重复进行类似的搜索。 当我们尝试遵循发现离散信息的路径时,深度优先是一个不错的策略。

信息深度优先搜索

经典的深度优先算法搜索是未知的。 也就是说,它仅搜索路径,直到找到图形的末尾。 一旦结束,它将回溯到起始节点并尝试其他路径。 但是,由于图形数据库在语义上很丰富,因此我们可以尽早终止沿特定分支的搜索(例如,一旦找到一个没有兼容的传出关系的节点,或者已经遍历了“足够远”)。 这种明智的搜索可以缩短执行时间。 这些正是我们前面的Cypher查询和Java遍历执行的搜索类型。

尽管我们使用深度优先搜索作为一般图遍历的基本策略,但许多有趣的算法都以广度优先的方式遍历整个图。 也就是说,他们一次浏览图,首先从起始节点访问深度1处的每个节点,然后访问深度2处的每个节点,然后访问深度3依此类推,直到访问了整个图。 如图7-1所示,从标有O的节点(用于起点)开始,然后一次向外扩展,可以轻松地看到此进度。

搜索的终止取决于正在执行的算法-大多数有用的算法不是单纯的广度优先搜索,而是在某种程度上被通知的(informed )。 广度优先搜索通常在寻路算法中或需要对整个图进行系统搜索时使用(对于图全局算法之类的问题,我们将在第3章中进行讨论)。

2.用Dijkstra的算法进行路径查找

广度优先搜索为众多经典图形算法(包括Dijkstra算法)奠定了基础。 Dijkstra(通常缩写)用于查找图中两个节点之间的最短路径。 Dijkstra的算法很成熟,已于1956年发布,此后被计算机科学家广泛研究和优化。 它的行为如下:

  1. 选取起始节点和结束节点,然后将起始节点添加到求解的节点集合(即,距离起始节点的路径最短的节点集合)中,值为0(根据定义,起始节点距离其0路径长度)。
  2. 从起始节点开始,首先遍历宽度到最近的邻居,并记录每个邻居节点的路径长度。
  3. 选择到这些邻居之一的最短路径(在平局的情况下任意选择)并将该节点标记为已解决,因为现在我们知道从起始节点到该邻居的最短路径。
  4. 从已求解节点的集合中,访问最近的邻居(注意广度优先的进程),并记录从起始节点到这些新邻居的路径长度。 不要访问任何已经解决的相邻节点,因为我们知道到达它们的最短路径。
  5. 重复步骤3和4,直到已将目标节点标记为已解决。

Dijkstra算法的效率

Dijkstra的算法非常有效,因为它仅计算通过图形的可能路径的相对较小子集的长度。 当我们解决了一个节点后,就会知道从起始节点开始的最短路径,从而使所有后续路径都可以安全地基于该知识。

实际上,Dijkstra算法的最快已知最坏情况实现的性能为O(| R | + | N | log | N |)。 即,该算法在时间上运行,该时间与图中的关系数成正比,再加上节点数的大小乘以节点集大小的对数即可。 原始值为O(| R | ^ 2),这意味着它的运行时间与图中关系数的大小的平方成正比。

Dijkstra通常用于查找现实世界中最短的路径(例如,用于导航)。 这是一个例子。 在图7-2中,我们看到了澳大利亚的逻辑地图。 我们的挑战是要找到东海岸悉尼(标记为SYD)和珀斯(西海岸)相距最远的珀斯之间最短的行驶路线。 其他主要城镇均标有各自的机场代码; 一路上我们会发现很多。

从图7-3中代表悉尼(Sydney)的节点开始,我们知道到悉尼(Sydney)的最短路径是0小时,因为我们已经到了那里。 根据Dijkstra的算法,在我们知道从悉尼(Sydney)到悉尼(Sydney)的最短路径的情况下,悉尼(Sydney)现在可以求解。因此,我们将表示悉尼(Sydney)的节点变灰,添加路径长度(0),并加粗了节点的边界,这是一个惯例 在本示例的其余部分中,我们将继续进行维护。

从悉尼上移一层,我们的候选城市是布里斯班,它位于北部9小时路程处; 堪培拉,澳大利亚的首都,位于西部4小时路程处; 和墨尔本,它位于南部12小时路程处。

我们可以找到的最短路径是悉尼到堪培拉(4小时),因此我们认为可以解决堪培拉,如图7-4所示。

正如我们已经看到的那样,已解决节点中的下一个节点是墨尔本,距悉尼经堪培拉(Canberra)10小时,或距悉尼直接12小时。 我们还有爱丽丝泉(Alice Springs),距堪培拉(Canberra)15小时,距悉尼(Sydney)19小时,或布里斯班(Brisbane),距悉尼(Sydney)9小时直达。

因此,我们探索了一条最短的路径,即从悉尼到布里斯班的9个小时,并考虑布里斯班在9个小时就解决了,如图7-5所示。

我们所求解的节点中的下一个相邻节点是墨尔本,这是经过堪培拉的10个小时,或者从悉尼沿着另一条路直达12个小时; 凯恩斯(Cairns),从悉尼经布里斯班出发,需要31个小时; 还有爱丽丝泉(Alice Springs),从布里斯班出发需要40个小时,而从堪培拉出发则需要19个小时。

因此,我们选择了最短的路线,即墨尔本,经过堪培拉,距悉尼10小时路程。 这比现有的12小时直接链接短。 现在我们考虑解决墨尔本问题,如图7-6所示。

在图7-7中,已解决节点的下一个相邻节点层是距悉尼18小时路程(经堪培拉和墨尔本)的阿德莱德; 凯恩斯(Cairns),距悉尼31小时车程(经布里斯班); 和爱丽丝泉(Alice Springs),从悉尼经堪培拉(Canberra)到达19小时,或从布里斯班(brisbane)到达40小时。 我们选择阿德莱德,并且认为它可以解决18小时。

我们不考虑路径Melbourne→Sydney,因为其目的地是一个已解决的节点-实际上,在这种情况下,它是起始节点Sydney。

我们已解决的节点中的下一个相邻节点层是珀斯,这是我们的最终目的地,从悉尼经过阿德莱德需要50个小时; 爱丽丝泉(Alice Springs),从悉尼经过堪培拉(Canberra)到这里需要19个小时,或者经过阿德莱德(Adelaide)到33小时; 凯恩斯(Cairns),从悉尼经布里斯班出发,需要31个小时。

在这种情况下,我们选择Alice Springs是因为它具有当前最短的路径,即使从大局的角度来看,我们知道从阿德莱德(Adelaide)到珀斯(Perth)最终实际上会更短-只要问任何经过的丛林人即可。 我们的成本为19小时,如图7-8所示。

在图7-9中,已解决节点的下一个相邻节点层是经过布里斯班(Brisbane)31个小时的凯恩斯(Cairns)或通过Alice Springs的43个小时,或者通过Alice Springs的34个小时的达尔文(Darwin),或者通过50个小时的阿德莱德(Brisbane)的珀斯(Perth)。 因此,我们将选择通过布里斯班(Brisbane)前往凯恩斯(Cairns)的路线,并认为凯恩斯以31小时的最快车程从悉尼(Sydney)得以解决。

已解决节点的下一个相邻节点层是距爱丽丝泉(Alice Springs)34小时的达尔文(Darwin),经凯恩斯(Cairns)的61小时,或经过50小时的阿德莱德(Adelaide)的珀斯(Perth)。 因此,我们选择了从爱丽丝泉到达尔文的路线,花费了34个小时,并考虑了达尔文(Darwin)的解决,如图7-10所示。

Dijkstra的算法效果很好,但是由于其探索是无方向性的,因此有些病理图拓扑可能会导致最坏情况下的性能问题。在这种情况下,我们探索的图比直观上需要的更多—在某些情况下,我们探索了整个图。 图形。 由于每个可能的节点在相对隔离的情况下一次被视为一个,因此该算法必须遵循直观上永远不会构成最终最短路径的路径。

尽管Dijkstra的算法已成功计算出悉尼和珀斯之间的最短路径,但是任何对地图阅读有直觉的人都不会选择从阿德莱德向北探索这条路线,因为它感觉更长。 如果我们有某种启发式的机制来指导我们,例如进行最佳优先搜索(例如,偏向西向东,偏向南而不向北),我们可能会避免前往布里斯班,凯恩斯,爱丽丝泉和达尔文的行程 在这个例子中。 但是最佳优先搜索是贪婪的,即使在途中有障碍物(例如泥泞小路),也要尝试朝目标节点移动。 我们可以做得更好。

3.A *算法

A *(发音为“ A-star”)算法是对经典Dijkstra算法的改进。它基于这样的观察:一些搜索被告知,并且通过被告知,我们可以更好地选择通过图形的路径。 在我们的示例中,通过先遍历整个大陆到达尔文,就不会从悉尼到珀斯进行明智的搜索。 A *就像Dijkstra一样,可以潜在地搜索大范围的图,但是就其使用启发式方法进行引导而言,它也像是贪婪的最佳第一搜索。 A *结合了Dijkstra算法的各个方面,该算法优先选择靠近当前起点的节点,而Best-first搜索则优先选择靠近目标节点的节点,从而提供了一种可证明的最优解决方案,用于查找图中的最短路径。

在A *中,我们将路径成本分为两部分:g(n),即从起点到某个节点n的路径成本; h(n)表示从节点n到目标节点的路径的估计成本,由启发式(智能猜测)计算得出。 A *算法在迭代图时平衡g(n)和h(n),从而确保在每次迭代时选择总成本最低的节点f(n)= g(n)+ h(n)。

如我们所见,广度优先算法对于路径查找特别有用。 但是它们还有其他用途。 使用广度优先搜索作为迭代图的所有元素的方法,我们现在可以考虑图论中许多有趣的高阶算法,这些算法可以对连接数据的行为进行预测。

4.图论与预测建模

图论是关于网络(或从我们的角度来看,连接数据)的性质的成熟且易于理解的研究领域。 由图论理论家开发的分析技术可以解决一系列有趣的问题。 现在,我们了解了低级遍历机制,例如广度优先搜索,我们可以开始考虑高阶分析了。

图论技术广泛适用于各种问题。 当我们第一次想获得对新域的了解,甚至了解从域中提取什么样的见解时,它们特别有用。 在这种情况下,我们可以直接应用图论和社会科学等一系列技术来获得洞察力。

在接下来的几节中,我们将介绍社交图论中的一些关键概念。 我们将根据社会学家Mark Granovetter,David Easley和Jon Kleinberg的著作,在社会领域的背景下介绍这些概念。

属性图和图论

关于图论的许多工作都假设模型与本书中一直使用的特性图略有不同。 这项工作往往会忽略图形的方向和标签,而是假设与来自域的单个标签(例如Friend或Colleague)之间存在无方向的关系。

我们将在此处采用混合方法。 我们将名称添加到关系中,以帮助添加特定于域的含义。 但是,在许多情况下,我们将忽略关系方向。 但是,这不会影响分析。 无论其结构如何,图结构都遵循相同的原理。

4.1.三元闭包/闭合(Triadic Closures)

三元闭包是社交图的一个共同属性,在该图中我们观察到,如果两个节点通过涉及第三个节点的路径连接,那么将来在某些时候两个节点直接连接的可能性就会增加。 这是一个熟悉的社交事件。 如果我们碰巧与两个彼此不认识的人成为朋友,那么这两个人在将来的某个时刻成为直接朋友的可能性就会增加。 我们与他们俩都是朋友这一事实为每个人提供了直接成为朋友的手段和动机。 也就是说,通过与我们在一起闲逛,两个人相遇的机会增加了,如果他们相遇了,他们很有可能会基于彼此对我们的信任和我们的友谊选择而互相信任。 他们俩都是我们的朋友这一事实表明,彼此之间可能在社会上相似。

根据他的分析,Granovetter指出,如果子图的节点A与其他两个节点B和C,B和C的关系密切,则该子图将保持强三合子闭合特性。 这是一个大胆的断言,并不总是适用于图中的所有子图。 尽管如此,它已经足够普遍,尤其是在社交网络中,可以作为可靠的预测指标。

强弱关系

我们不会定义弱关系和强关系,因为它们特定于每个域。 在社交通讯网络中,可以说在上周交换过电话的朋友之间存在牢固的社交关系,而据说社交关系较弱的社交关系是那些仅仅观察到彼此Facebook状态的朋友之间的联系。

让我们看看强大的三合会封闭属性如何在工作场所图中用作预测辅助。 我们将从一个简单的组织层次结构开始,在该层次结构中,Alice管理Bob和Charlie,但是下级之间还没有任何联系,如图7-12所示。

对于工作场所来说,这是一个相当奇怪的情况。 毕竟,鲍勃和查理不太可能成为彼此的陌生人。 如图7-13所示,无论他们是高层管理人员,因此是爱丽丝的行政管理人员中的同龄人,还是他们是流水线工人,因此他们都是爱丽丝领导下的领班,甚至非正式地,我们都可能期望鲍勃和查理 以某种方式连接。

因为Bob和Charlie都与Alice一起工作,所以很可能最终会一起工作,如图7-13所示。 这与强三合会闭包属性一致,这表明鲍勃是查理的同伴(我们称之为弱者)或鲍勃与查理一起工作(我们称之为强者)。 在鲍勃和查理之间添加第三个WORKS_WITH或PEER_OF关系将闭合三角形-因此,术语三重闭合。

来自许多领域的经验证据包括社会学,公共卫生,心理学,人类学乃至技术(例如Facebook,Twitter,LinkedIn)都表明,三合会封闭的趋势是真实而实质的。 这与传闻证据和观点一致。 但是,简单的几何图形并不能满足您的全部需求:图中涉及的关系的质量也与稳定的三元闭合的形成有很大关系。

4.2.结构平衡(Structural Balance)

如果我们回想一下图7-12,可以很直观地看到Bob和Charlie如何在Alice的管理下成为同事(或同伴)。 出于示例目的,我们将假设MANAGES关系有点消极(毕竟,人们不喜欢被老板欺负),而PEER_OF和WORKS_WITH关系却是积极的(因为人们通常喜欢他们的同龄人和人们 他们一起工作)。

从前面关于强三合会闭包原理的讨论中我们知道,在图7-12中Alice管理Bob和Charlie的情况下,应该形成三合会闭包,也就是说,在没有任何其他约束的情况下,我们期望至少有PEER_OF ,WORKS_WITH甚至是Bob和Charlie之间的MANAGES关系。

如果爱丽丝(Alice)管理鲍勃(Bob),而鲍勃(WORKS_WITH)查理(Charlie),则存在类似的趋势,即形成三元闭合,如图7-14所示。 有趣的是:如果鲍勃和查理一起工作,那么让他们共享一个经理是很有意义的,尤其是在该组织貌似允许查理在没有管理监督的情况下运作的情况下。

但是,盲目地应用强大的三合会封闭原则可能会导致某些相当奇怪且看起来不舒服的组织层次结构。 例如,如果爱丽丝(Alice)管理鲍勃(Bob)和查理(Charlie),但鲍勃(Bob)也管理查理(Charlie),我们就有不满的秘诀。 如图7-15所示,没人希望查理像他那样由他的老板和老板的老板共同管理。

同样,如果鲍勃与爱丽丝的同事查理一起工作时,如果鲍勃由爱丽丝管理,那会让他不舒服。 如图7-16所示,这在组织层之间难于进行切换。 这也意味着,鲍勃永远无法在支持同龄人小组中放心地谈论爱丽丝的管理风格。

图7-16中尴尬的等级结构使Charlie既是老板的同伴又是另一工人的同伴,在社交上不太可能令人愉悦,因此Charlie和Alice会反对它(想要成为老板或工人)。 对于Bob来说,情况也类似,他不确定是否应该像对待经理Alice一样对待Charlie(因为Charlie和Alice是同龄人)还是作为自己的直接同龄人。

很明显,图7-15和7-16中的三元组闭合使我们感到不舒服,从而避免了我们固有的结构对称性和合理分层的偏好。 这种偏好在图论中被赋予了一个名称:结构平衡。

有趣的是,如果爱丽丝(Alice)管理鲍勃(Bob)和查理(Charlie),那么在结构上更加平衡的三元组闭包是可以接受的,但是鲍勃(Bob)和查理(Charlie)本身是通过WORKS_WITH关系连接的同事,如图7-17所示。

相同的结构平衡体现在一个同样可以接受的三合会封闭中,其中Alice,Bob和Charlie都是同事。 在这种安排中,工人在一起,这可能是一种社交友好的安排,引起了友爱,如图7-18所示。

在图7-17和7-18中,三元组闭包是惯用的,并使用三个WORKS_WITH关系或两个MANAGES和一个WORKS_WITH关系构造。 它们都是平衡的三元组闭包。 为了理解平衡和不平衡的三元组闭包的含义,我们将通过声明WORKS_WITH关系在社会上是积极的(因为母牛的人花费大量时间进行交互)来为模型增加更多的语义丰富性,而MANAGES是消极的 之所以建立这种关系,是因为经理在管理工作上与个人互动所花费的时间总体较少。

有了积极和消极情绪的新维度,我们现在可以问一个问题:“这些平衡结构有何特别之处?”很明显,三合会的强势封闭仍在起作用,但这并不是唯一的推动力。 在这种情况下,结构平衡的概念也会起作用。 结构上平衡的三合会闭包由所有强烈情感的关系(我们的WORKS_WITH或PEER_OF关系)或两个具有负面情感的关系(在本例中为MANAGES)和一个积极关系组成。

我们在现实世界中经常看到这种情况。 如果我们有两个好朋友,那么社会压力就会使那些好朋友自己变成好朋友。 那两个朋友自己是敌人,这很不寻常,因为这使我们所有的友谊都承受了压力。 一个朋友无法向我们表达对另一个人的厌恶,因为另一个人也是我们的朋友! 面对这些压力,该小组将解决分歧并结识好朋友是一个结果。 这会将我们不平衡的三合会封闭(两个具有积极情绪的关系,一个消极情绪)变为平衡的封闭,因为所有关系都将是积极情绪,就像我们的合作计划一样,其中爱丽丝,鲍勃和查理在图7-18中一起工作 。

但是,可能的结果(尽管可能不那么令人愉快)将是我们站在“朋友”之间的争端中,在两个带有消极情绪的关系中建立关系-有效地结成一个人。 现在,我们可以闲聊关于我们对前朋友的相互厌恶,关闭也再次变得平衡。 同样,我们也看到了这种情况,这反映在组织场景中,通过管理鲍勃和查理,爱丽丝实际上成为了他们的职场敌人,如图7-17所示。

在现实世界中挖掘组织数据

我们不必通过分析组织结构图来得出这些图,因为这是对组织实际工作方式的静态且通常不一致的看法。 实际而及时的生成图表的方法将是对公司内个人之间的电子通信历史进行此类分析。

在图表数据库中以图表的形式存储和查询这些交互是很简单的,因此,我们可以通过寻找创建平衡的关闭机会来对组织结构的演变进行预测分析。 这种结构可能是一个福音—我们观察到员工已经在自我组织以取得成功。 否则可能表明存在某种不当行为-一些员工正走入阴暗的角落进行公司欺诈! 无论哪种方式,图的预测能力都使我们能够主动参与这些问题。

平衡的闭包为图形的预测能力增加了另一个维度。 只需寻找机会在整个图上创建平衡的闭合,即使是非常大的规模,我们也可以修改图结构以进行准确的预测分析。 但是我们可以走得更远,在下一节中,我们将引入本地桥梁的概念,它使我们对组织的通信流程具有宝贵的见解,而从中获得的知识便是可以对其进行适应以应对未来挑战的能力。

5.本地桥梁(Local Bridges)

我们一直使用的只有三个人的组织是异常的,我们在本节中研究的图形最好被认为是较大组织层次结构中的小子图。 当我们开始考虑管理更大的组织时,我们期望的是更为复杂的图结构,但是我们也可以将其他启发式方法应用于该结构,以帮助理解业务。 实际上,一旦将组织的其他部分引入到图中,就可以基于局部作用的强三合子闭合原理来推理图的全局属性。

在图7-19中,我们看到了一个违反直觉的场景,其中组织中的两个小组分别由爱丽丝和达维纳管理。 但是,我们的结构有些尴尬,爱丽丝不仅与鲍勃和查理一起经营一支球队,而且还管理着达维纳。 尽管这不是不可能的范围(爱丽丝确实有这种职责),但从组织设计的角度来看,它在直觉上感觉很尴尬。

从图论的角度来看,这也是不可能的。 由于爱丽丝参与了两个牢固的关系,即她管理查理(和鲍勃)和管理达维纳,所以自然地我们想通过在达维纳和查理(和鲍勃)之间添加至少PEER_OF关系来创建三合会闭包。 但是,爱丽丝还参与了通向达维纳的本地桥梁,它们共同构成了组织中各个小组之间的唯一沟通途径。 与Alice MANAGES Davina建立关系意味着我们实际上必须创建封口。 这两个属性(局部桥接和强力三合会闭合)是对立的。

但是,如果Alice和Davina是同伴(弱关系),则不会激活强三合会闭合原理,因为只有一个强关系(与Bob(或Charlie)的MANAGES关系),并且本地桥属性尽可能有效 参见图7-20。

这个本地网桥的有趣之处在于它描述了我们组织中各组之间的沟通渠道。 这样的渠道对于我们企业的生命力至关重要。 特别是,为了确保公司的健康,我们将确保本地桥梁的关系健康且活跃,或者同样,我们可能会密切关注本地桥梁,以确保不发生不当行为(盗用,欺诈等)。

 

寻找下一份工作

弱链接的这种概念在(社交)工作搜索等算法中特别相关。 求职的非凡之处在于,很少有人会提供最好的推荐,而是一个较宽松的熟人。

为什么会这样呢? 我们的密友具有相似的世界视图(它们在同一图形组件中),并且对可用的职位数据具有相似的访问权限,并对这些职位持有相似的观点。 跨过本地桥梁的朋友显然处于不同的社交网络(不同的组成部分)中,相应地获得工作的机会也不同,并且对工作的看法也不同。 因此,如果您要寻找工作,请跨过本地桥梁,因为在那里您和您的朋友有不同的了解。

作为弱链接(在我们的示例组织中为PEER_OF)的本地桥梁具有相同的属性,这种属性在整个社交图中都非常普遍。 这意味着我们可以根据经验得出的本地桥梁和强大的三合会封闭概念开始对组织的发展进行预测分析。 因此,给定一个任意的组织图,我们可以看到业务结构可能如何发展并为这些可能情况进行计划。

6.摘要

图是真正了不起的结构。 我们对它们的理解源于数百年的数学和科学研究。 但是,我们才刚刚开始了解如何将其应用于我们的个人,社交和商业生活。 该技术在这里是开放的,并且以现代图形数据库的形式对所有人开放,机遇无穷。

正如我们在本书中所看到的,图论算法和分析技术并不苛刻。 我们只需要了解如何应用它们来实现我们的目标。 在本书中,我们简单地呼吁:拥抱图形和图形数据库。 充分利用您所学到的关于图形建模,图形数据库体系结构,设计和实现图形数据库解决方案,以及将图形算法应用于复杂的业务问题的知识,并着手构建下一个真正的开拓性信息系统。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值