Python 使用pandas计算节点之间的社交距离

Python 使用pandas计算节点之间的社交距离,python,pandas,dataframe,Python,Pandas,Dataframe,我想创建一个数据框,指示专利之间的社会距离。我已经有了一个数据框,显示了(共同)发明人和专利的关联网络。其思想是根据关联发明人计算连接两项专利的最小节点数(专利)。例如,同一个inventor A正在处理P1和P2,因此距离应为0。P3和P1之间的距离为1,因为A(P1)在P2上与C一起工作,C在P3上工作。然而,仅当目标(种类)专利比源专利年轻时,才应计算距离,例如,不应包括从P3到P1的距离。inventor_id和patent_id是真实数据集中的int值 >>> imp

我想创建一个数据框,指示专利之间的社会距离。我已经有了一个数据框,显示了(共同)发明人和专利的关联网络。其思想是根据关联发明人计算连接两项专利的最小节点数(专利)。例如,同一个inventor A正在处理P1和P2,因此距离应为0。P3和P1之间的距离为1,因为A(P1)在P2上与C一起工作,C在P3上工作。然而,仅当目标(种类)专利比源专利年轻时,才应计算距离,例如,不应包括从P3到P1的距离。inventor_id和patent_id是真实数据集中的int值

>>> import pandas as pd
>>> df_affiliation = pd.DataFrame({'inventor_id':['A','A','B','B','C','C','D'],
...                               'patent_id':['P1','P2','P1','P4','P2','P3','P3','P5'],
...                               'year':[1986,1987,1986,1989,1987,1988,1988]})
>>> df_affiliation
  inventor_id  patent_id  year
0           A         P1  1986
1           A         P2  1987
2           B         P1  1986
3           B         P4  1989
4           C         P2  1987
5           C         P3  1988
6           D         P3  1988
新的数据帧应如下所示:

>>> df_distance = pd.DataFrame({'source_patent_id':['P1','P1','P1','P2','P2','P3'],
...                             'destination_patent_id':['P2','P3','P4','P3','P4','P4'],
...                             'distance':[0,1,0,0,1,2]})
>>> df_distance
  source_patent_id destination_patent_id  distance
0               P1                    P2         0
1               P1                    P3         1
2               P1                    P4         0
3               P2                    P3         0
4               P2                    P4         1
5               P3                    P4         2

为了使潜在的社会联系更加清晰,请参阅附件中Singh(2005)的陈述。协作网络是知识扩散模式的决定因素。

我们如何区分源专利和子专利?如果您创建一个更简单的问题版本,使用通用的列名和组名,并直接用数据而不是组名来解释您的问题,您也更有可能得到答案研究我们不熟悉的背景。就我而言,我发现在解析术语时很难弄清楚数据中发生了什么,以及它与数据格式的关系。源和子(目的地)专利之间的区别应该基于df_所属的年份。然而,我也有一个数据集链接源和儿童专利,但我认为在计算上更可行的方法是为社会距离创建一个df,然后从中获取相应的值。你能详细说明距离度量的计算吗?具体来说,为什么P3和P4之间的距离为2?我认为这个想法是计算至少有一个共同发明人的专利的“节间”。然而,P3和P4没有共同的发明人,但P3和P4有共同的发明人。这个想法是为了看看知识是否通过共同发明人从P3流向P4。我附上的图片更清楚地显示了这一点。P3与P2(第一个节点)共享同一个inventor,P2与P1(第二个节点)共享一个inventor。P1随后也通过共同的共同发明人链接到P4。因此,发明者链将是:C-A-B,而产生的专利链是:P3-P2-P1-P4(>中间的两个节点)。我希望这能让事情变得更清楚:)