从社区检测到的twitter网络的tweets样本中处理和创建主题模型的一组函数。它还分析是否存在潜在的持久性社区中心(或者/或者由顶级提到的或顶级rter)。
nttc的Python项目详细描述
nttc(命名twitter社区!)python 3的tweets主题建模处理器
作者:chris lindgrenchris.a.lindgren@gmail.com 根据BSD 3条款许可证分发。详见license.txt或http://opensource.org/licenses/bsd-3-clause" rel="nofollow">http://opensource.org/licenses/bsd-3-clause。
概述
从社区检测到的Twitter网络的推文样本中处理和创建主题模型的一组函数。
它假设您寻求以下问题的答案:
- 在语料库中,哪些社区在不同时期持续存在或短暂存在,以及何时存在?
- 基于他们的顶级rts和用户、顶级提到的用户以及生成的主题模型,这些社区可以被命名为什么?
- 在这些社区中,随着时间的推移,他们的主题是什么?
- 待办事项:建立每个社区组跨时段的推文语料库,然后为每组建立lda模型。
因此,它假设您希望跨时段调查社区,并在已定义的周期性事件中调查每个检测到的社区的tweets,目标是命名每个社区并在语料库中随时间检查其各自的主题。
它只与Python3.x一起工作,并且不向后兼容(尽管人们可能只需很少的努力就可以分支出2.x端口)。
警告:NTTC
不执行自定义错误处理,因此请确保输入格式正确!如果您有任何问题,请通过电子邮件通知我。
系统要求
- 重要信息:tsm-github上的当前版本,而不是python包索引,因此您需要从github手动下载和安装(截至19年8月23日)。
- 从上面的链接将回购协议下载到您的计算机。
- 打开终端并将目录更改为
tsm master
:cd path/to/tsm master
- 一旦终端位于
tsm master
文件夹的根目录中,请确保首先确认计算机上尚未安装tsm:sudo pip3 uninstall tsm
。- 注意:如果没有安装,它会告诉你。如果安装了它,它将卸载它。此外,如果您对此文件夹具有权限,则无需使用sudo
- 仍在此根文件夹中,
tsm master
,安装此版本:sudo pip3 install。
pip
将告诉您软件包是否已成功安装。如果没有,请研究错误。
- nltk
- 熊猫
- 努比
- 表情符号
- 打印
- 根西姆
- 间距
安装
PIP安装NTTC
对象
NTTC
初始化并使用以下对象:
communitiesobject
:具有生成主题模型并帮助您更容易命名它们的属性的对象。对象属性如下:.tweet\u slice
:示例社区tweet的dict.split_docs
:采样tweets的拆分版本.id2word
:拆分文档的dict版本。文本
:示例的列表版本.corpus
:具有频率计数的示例项列表。自述
:如果需要,打印出可读版本.model
:存储lda topic model对象。困惑度
:主题模型的计算困惑度得分.coherence
:主题模型的计算一致性得分.top_rts
:社区前10个rter和rts的示例.top\u提到
:前10人的示例e提及.full_hub
:top_rts和top_的组合版本称为数据帧
communityGroupsObject
:具有属性的对象,该属性分析社区相似性分数,然后跨时段对相似社区进行分组。对象属性如下:.best_matches_references
:每个周期的字典,每个周期的中心顶部_references(用户)值作为列表.best_matches_rters
:每个周期的字典,每个周期的中心顶部(用户)值作为列表。sorted\u filtered\u comms
:元组列表,其中每个元组有1)两个时段之间的测试社区对,以及2)它们的JACC分数。示例:('1_0x4_0',0.4286)
.groups\u提及
:一个集合列表,其中每个集合都是跨时段的相同提及组,基于给定的jacc阈值:α[{'1_8', '2_18'}, {'3_7', '4_2'}, {'7_11', '8_0'}, {'10_11', '4_14', '5_14', '6_7', '9_11'}, {'1_0', '2_11', '3_5', '4_0', '5_5', '6_12'}, {'10_10', '1_9', '2_3', '3_3', '4_6', '5_2', '6_3', '7_0', '8_2', '9_4'}, {'10_6', '1_2', '2_4', '3_4', '4_13', '5_6', '6_5', '7_4', '8_7', '9_0'}, {'10_0', '1_12', '2_6', '3_0', '4_5', '5_7', '6_6', '7_3', '8_9', '9_5'}]
.groups rters
:基于给定的jacc阈值:αα[{'1_8', '2_18', '5_14'}, {'10_20', '5_18'}, {'5_2', '6_3', '7_0'}, {'5_1', '7_1'}, {'10_12', '2_3', '3_13', '6_8', '7_5', '8_4', '9_1'}]
的集合列表,其中每个集合在各个时段都是相同的rter组
功能
NTTC
包含以下功能:
获取csv
:将csv数据加载为pandas数据帧。写入csv
:将数据帧写入csv文件。创建集线器csv文件
:以"集线器"的csv形式写入所有对象的顶部/提到的信息获取通信量
:将数据帧列的社区值筛选到列表中。获取所有通信
:将整个集合分割为community和它们各自的tweets。参数:完整数据框、社区和tweets的列名字符串。通信dict writer
:将每个社区的tweets写入字典。拆分社区tweet s
:隔离社区的tweets,然后将字符串拆分为每个tweet的字符串列表,以便为主题建模做好准备。返回作为重视社区tweets的数据帧。clean_split_docs
:删除标点符号、小写、删除停止字并转换为用于主题建模的数据帧。TM U Maker
:为TM创建数据并生成LDA TM。get_hubs_top_rts
:将hubs的前10条rt'd tweets和用户名附加到相应的period和community对象。-
ARG:
- 集线器顶部提到的数据框,
- 带有.top rts的对象的dict,
- 句号字符串
- 返回:带有new.top rts per object的dict对象
获取集线器引用:将集线器引用的数据追加到相应的时段和社区对象。
ARG:
- 集线器数据框中提到,
- 对象指令,
- 句点的列名字符串,
- 句号字符串,
- 社区编号的列名字符串
合并rts提到的内容
:合并集线器的源并将数据作为每个社区的完整列表提到。匹配dict_处理器
:处理用于tsm.match_communities()函数的网络社区集线器的输入数据帧。
- args:一个包含period、period_community(1_0)和top-refered(最高级别)用户的数据帧
- 返回:每个周期的字典,每个周期的通信中心值如下:α
{'1': {'1_0': ['nancypelosi', 'chuckschumer', 'senfeinstein', 'kamalaharris', 'barackobama', 'senwarren', 'hillaryclinton', 'senkamalaharris', 'repadamschiff', 'corybooker'], ... }, ... '10': {'10_3': [...] } }
match_maker
:从matching_dict_processor()获取period dict并提交给tsm.match_communities()方法。分配、筛选和排序返回值
- args:以每周期通信集线器值为列表的每周期字典;过滤0到1之间的JACC阈值(浮点)。
- 返回:元组列表:period_community xperiod_community,jacc score
[('1_0x4_0', 0.4286), ('1_0x2_11', 0.4615), ('1_0x3_5', 0.4615), ... ]
从计数器绘制条形图:将社区比较绘制为条形图。
ARG:
- ax=none重置字符T
- counter=从match_maker()返回的元组列表,
- path=所需目录路径的字符串,
- output=所需文件名的字符串值(.png)
community_grouper()
:用于在语料库中跨时段将相似的社区分组的进程的控制器函数。它使用1)group_reader()和2)final_grouper()函数来完成这个分类过程。
- args:接受网络对象(net_obj),该对象的返回值来自nttc.match_maker(),该值应保存为.sorted_filtered_comms属性:具有已排序和筛选的社区对及其分数的元组列表,但它仅使用社区值。
- 返回:集合的列表,其中每个集合是一个分组的递归社区:例如,1_0,其中1是句点,0是指定的社区号。α
[{'1_8', '2_18'}, {'3_7', '4_2'}, {'7_11', '8_0'}, {'10_11', '4_14', '5_14', '6_7', '9_11'}, {'1_0', '2_11', '3_5', '4_0', '5_5', '6_12'}, {'10_10', '1_9', '2_3', '3_3', '4_6', '5_2', '6_3', '7_0', '8_2', '9_4'}, {'10_6', '1_2', '2_4', '3_4', '4_13', '5_6', '6_5', '7_4', '8_7', '9_0'}, {'10_0', '1_12', '2_6', '3_0', '4_5', '5_7', '6_6', '7_3', '8_9', '9_5'}]
group_reader()
:获取period_community对,如果发生交叉,则追加到dict。但是,由于排序和筛选的社区的顺序和内容未知,返回的dict需要更深入的分析和处理,这就是为什么在这里完成后,社区会将它们发送到最终的_grouper。
- args:接受初始组dict,它由通过regex表达式提取的一对period_community值交叉引用。
- 返回:过饱和比较的dict,发送到final_grouper()进行最终分析、还原和完成。
final_grouper()
:获取period_社区词典并测试它们的交集。然后,它接受任何交叉点并将它们与.union连接,并将它们附加到本地化的运行列表中,所有这些都将累积到该社区的运行主列表中。从这里开始,每个社区结果将按其长度降序排序。
- args:从group_reader()接受组dict。
- 返回:找到的所有唯一句点社区元素(2个或更多)的dict相似。
为每个社区构建主题模型,并将所有变量保存到相应的对象属性中。
importnttcdata_path='//Users/name/project/periods/top_rts/encoded'__file__='p1_comm_top500mentions_in_top10000_rts_count_uid.csv'dtype_dict={'community':str,'tweets':str,'retweets_count':float,'link':str,'username':str,'user_id':float}# 1. Load CSVdf_tweets=nttc.get_csv(data_path,__file__,dtype_dict)# 2. Get community numbers into a Listcomm_list=nttc.get_comm_nums(df_tweets)# 3. Write dictionary of tweets organized by per Community perspectivedict_all_comms=nttc.comm_dict_writer(comm_list,df_tweets,'community','tweets')# 4 . Process tweets for each communitysplit_dict_all_comms=nttc.split_community_tweets(dict_all_comms,'tweets')# 5. Build the topic modeltms_full_dict=nttc.tm_maker(random_seed=2018,split_comms=split_dict_all_comms,num_topics=5,random_state=100,update_every=1,chunksize=100,passes=10,alpha='auto',per_word_topics=True)#pass any of the following gensim LDATopicModel() object arguments here
以上代码的示例输出
3 Perplexity: -7.618915328673395
3 Coherence Score: 0.3740323991406477
5 Perplexity: -7.749282621692275
5 Coherence Score: 0.36001967258313305
6 Perplexity: -7.475628335657981
6 Coherence Score: 0.32547481443269244
7 Perplexity: -7.264458923588148
7 Coherence Score: 0.31947706630738704
8 Perplexity: -7.839326042415438
8 Coherence Score: 0.31957579040223866
9 Perplexity: -7.670416717009498
9 Coherence Score: 0.28534510836872357
10 Perplexity: -7.370800819131035
10 Coherence Score: 0.34724361008183413
12 Perplexity: -6.9411620263614795
12 Coherence Score: 0.397521213421681
17 Perplexity: -6.068761633181642
17 Coherence Score: 0.44224500342072987
27 Perplexity: -6.345910693707283
27 Coherence Score: 0.41525260201784386
Modeling complete.
将最受关注的用户添加到每个社区的中。最受关注的是
属性
您还可以将整个集线器输出为csv以进行更深入的分析
nttc.create_hub_csv_files(full_obj=full_obj,sys_path=data_path,output_file='p1_full_hubs.csv',drop_dup_cols=True)
绘制社区相似性指数(Jaccard的共同效率)
分析并返回跨时段的相似社区列表
matchingcommunitiesobject
并用matching\u dict\u processor()
编写一个用户指令发送到match\u maker()
。
sorted_filtered_提到的值的交集和并集,并输出一个集合列表,其中每个集合包含跨语料库中各个时段的相似社区。
推荐PyPI第三方库