相关网络

时间:2019-12-04 20:05:08

标签: python pandas matplotlib

对于我的Basic DataScience Semester的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

现在,我想计算标签之间的相关性。 例如在第一行中,“ panorama”对“ schweiz”,“ verkehr”,“ news”有1行 “ schweiz”与“ panorama”,“ verkehr”,“ news”有1行 等等。有时有3个标签,有时最多有7个。

我想在所有行中运行一个脚本,并计算此相关性并将其汇总。

第一个问题,有人可以提示我如何执行此操作吗?是否有可以帮助的模块?即使有一点暗示,我也将非常感激。
最后一个问题,是否有人可以给我一个提示,让我可以形象地看到这一点。我想要一个可以看到整个地图的网络图。最常用的标签越大,最常用连接的线宽也越粗。

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

非常感谢,来自瑞士的欢呼声 马可

edit,PS:为了更正确地指定。列表中的所有标签都是标签。所以,如果我有:

  

panorama,schweiz,verkehr,news

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

2 个答案:

答案 0 :(得分:2)

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

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
...

然后您可以在该矩阵上进行关联

答案 1 :(得分:0)

有人给我一个提示或提示,我如何创建一个在X轴和Y轴上带有所有标签的矩阵,并将这种关系的出现数记入值?