【问题标题】:Python Code for UCINET network graph drawingUCINET网络图绘制的Python代码
【发布时间】:2015-05-23 17:39:32
【问题描述】:

我使用 beautifulsoup 抓取了一些数据,并保存为 .txt 文件。数据是来自 IMDB.com 的电影评论 我找到了一个很好的单词计数python代码,所以我可以制作一个词频excel表。但是,我无法仅使用频率表绘制图表。

我想使用UCINET绘制语义网络图(节点大小应该基于中介中心性。)

我的问题是如何将文本文件转换为邻接矩阵数据来绘制UCINET图。 像这样http://www.umasocialmedia.com/socialnetworks/wp-content/uploads/2012/09/senatorsxsenators1.png 我想用审稿人的话来画网络图。

(计算两个词在同一个句子中出现的频率,当它们匹配行和列行时)

或者。你能告诉我如何在 Python 代码中绘制网络图(使用中介中心性)吗?

【问题讨论】:

  • 在这种情况下,您将什么定义为“邻接”?您的问题不清楚。
  • @JDong 我很抱歉我的英语水平不好。审稿人写了这句话。 “X战警真棒”。有 20x20 矩阵。第二行是“X战警”,第四列是“真棒”。如果数据中有“X战警真棒”,则矩阵中的(2,4)会增加1个频率。
  • 确认一下,您的邻接矩阵将是对称的,因为您有一个无向图,对吗?
  • @JDong 是的。你是对的。对称矩阵。

标签: python


【解决方案1】:

制作一个 2D 20x20 数组,遍历每个输入字符串,并使用该字符串更新您的矩阵:

adjacency_matrix = [[0 for _ in range(20)] for _ in range(20)]


def get_lines(filename):
    """Returns the lines in the file"""
    with open(filename, 'r') as fp:
        return fp.readlines()


def update_matrix(matrix, mapping, string):
    """Update the given adjacency matrix using the given string."""                                        
    words = [_ for _ in re.split("\s+", string) if _ in mapping.keys()]            
    for word_1 in words:                                                           
        for word_2 in words:                                                       
            matrix[mapping[word_1]][mapping[word_2]] += 1


if __name__ == "__main__":
    words_in_matrix = ["X-men", "awesome", "good", "bad", ... 16 more ...]
    mapping = {word: index for index, word in enumerate(words_in_matrix)}

    for line in get_lines("ibdb.txt"):
        update_matrix(adjacency_matrix, mapping, line)
    print(adjacency_matrix)

类似于update_matrix 的函数可能有用,matrix 作为邻接矩阵,mapping 是单词到邻接矩阵中索引的映射,string 是您的示例评论。

您需要根据自己的需要对其进行修改。输入可能有句点或其他干扰字符,需要去除。

【讨论】:

  • 哦...非常感谢您的回答。但是,我是 python 初学者。我不知道如何在我的数据中应用您的代码。我的数据是文本文件,包括 100 多条评论,其中包含 10 多行文本。
  • 教python的基础知识不在这个问题的范围内,对不起。不过,我会为您提供更多示例代码,以便您开始使用。
  • 哇。谢谢。在你的例子中,什么是 'X-men': 0 ?如果有“X战警真棒”这样的句子,难道'X战警'字数不是'1'吗?
  • 我还有一个问题。如何在整个 txt 中使用“update_matrix”。文件,而不是像“X战警真棒”这样的一句话?
  • 您的邻接矩阵仅包含邻接数据。行和列未标记。行和列的标签存储在mapping 中。新的示例代码应该更清楚,在__main__ 部分。
猜你喜欢
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
  • 2010-10-08
  • 1970-01-01
  • 2020-12-16
相关资源
最近更新 更多