首页 > 解决方案 > 相关网络

问题描述

对于我的基本数据科学学期的 CAS 学期论文,我正在解析一个包含所有文章及其元数据(作者、标题、副标题、摘要、标签、类别、子类别、创建 dt、更新 dt 等)的新闻网站 - 启发通过这个人https://www.youtube.com/watch?v=-YpwsdRKt8Q

一切运行良好,我的树莓派 15 分钟内都在收集这些数据,依此类推。

我只有一个问题。我想从标签中创建一个关联网络。这个标签列看起来像

0 panorama,schweiz,verkehr,news 1 sport,schweiz,eishockey,news 2 stans,panorama,verkehr,strassenverkehr,news 3 eishockey,sport,davos,news 4 wirtschaft,schweiz,konsum,kaffeetee,news 5 jeanclaudegerber,news,srilanka,tiere,wissen 6 schule,bellinzona,panorama,news 7 luzern,jrgenklopp,fussball,news 8 panorama,klima,gretathunberg,lissabon,news 9 australien,vermisstmeldung,gesellschaft,news 10 gesellschaft,amerika,news,ausstellung

现在我想计算标签之间的相关性。例如,在第一行“全景”有 1 行到“schweiz”、“verkehr”、“news” “schweiz”有 1 行到“全景”、“verkehr”、“新闻”等等。有时有 3 个标签,有时多达 7、8 个。

我想要一个脚本贯穿所有行并计算这种相关性并总结它。

第一个问题,有人可以给我一个提示我该怎么做吗?有没有可以提供帮助的模块?即使是一个小小的提示,我也会非常感激。
最后一个问题,有人也可以给我一个提示,我可以如何想象这一点。我想要一个可以看到整个地图的网络图。最常见的标签越大,最常见的连接线宽也越粗。

我的主要问题是,我什至不知道我要看什么。您可能注意到英语不是我的母语,而在德语中我还没有找到真正帮助我的东西;-)

非常感谢和来自瑞士马可的干杯

编辑,PS:为了指定更恰当。列表中的所有标签都是标签。所以如果我有:

panorama,schweiz,verkehr,news

这是 4 个标签,每个标签都与其他三个标签相关。

标签: pythonpandasmatplotlib

解决方案


我认为您要做的第一件事是计算每个标签的每个类别的出现次数,因此从一个以 Pandas 数据框tags为索引的数据框开始:

df =
                                1              2                3       4
tags                                                                     
panorama                  schweiz        verkehr             news    None
sport                     schweiz      eishockey             news    None
stans                    panorama        verkehr  strassenverkehr    news
eishockey                   sport          davos             news    None
wirtschaft                schweiz         konsum        kaffeetee    news
jeanclaudegerber             news       srilanka            tiere  wissen
schule                 bellinzona       panorama             news    None
luzern                 jrgenklopp       fussball             news    None
panorama                    klima  gretathunberg         lissabon    news
australien        vermisstmeldung   gesellschaft             news    None
gesellschaft              amerika           news      ausstellung    None   

我会:

  1. 堆叠数据框(熔化所有列的特殊情况)
  2. 按标签分组
  3. 计算每个类别出现每个标签的次数
# This does all of the above at once
counts = df.stack().rename('category').reset_index('tags').groupby('tags').category.value_counts()

这使

counts = 
tags              category       
australien        gesellschaft       1
                  news               1
                  vermisstmeldung    1
eishockey         davos              1
                  news               1
                  sport              1
gesellschaft      amerika            1
                  ausstellung        1
                  news               1
jeanclaudegerber  news               1
                  srilanka           1
                  tiere              1
                  wissen             1
luzern            fussball           1
                  jrgenklopp         1
                  news               1
panorama          news               2
                  gretathunberg      1
                  klima              1
                  lissabon           1
                  schweiz            1
                  verkehr            1
schule            bellinzona         1
                  news               1
                  panorama           1
sport             eishockey          1
                  news               1
                  schweiz            1
stans             news               1
                  panorama           1
                  strassenverkehr    1
                  verkehr            1
wirtschaft        kaffeetee          1
                  konsum             1
                  news               1
                  schweiz            1
Name: category, dtype: int64

然后你可以解开这个系列给出一个表格:

counts.unstack()

category          amerika  ausstellung  bellinzona  davos  eishockey  \
tags                                                                   
australien            NaN          NaN         NaN    NaN        NaN   
eishockey             NaN          NaN         NaN    1.0        NaN   
gesellschaft          1.0          1.0         NaN    NaN        NaN   
jeanclaudegerber      NaN          NaN         NaN    NaN        NaN   
luzern                NaN          NaN         NaN    NaN        NaN   
panorama              NaN          NaN         NaN    NaN        NaN   
schule                NaN          NaN         1.0    NaN        NaN   
sport                 NaN          NaN         NaN    NaN        1.0   
stans                 NaN          NaN         NaN    NaN        NaN   
wirtschaft            NaN          NaN         NaN    NaN        NaN
...

然后你可以对该矩阵进行相关性


推荐阅读