【问题标题】:How can I calculate network measures for each account only considering the last 6 month period prior to the transaction date in r?如何仅考虑 r 中交易日期之前的最后 6 个月期间计算每个帐户的网络度量?
【发布时间】:2021-01-01 11:23:15
【问题描述】:

这是我的交易数据:

data:

id          from    to          date        amount  
<int>       <fctr>  <fctr>      <date>      <dbl>
19521       6644    6934        2005-01-01  700.0
19524       6753    8456        2005-01-01  600.0
19523       9242    9333        2005-01-01  1000.0
…           …       …           …           …
1056317     7819    7454        2010-12-31  60.2
1056318     6164    7497        2010-12-31  107.5
1056319     7533    7492        2010-12-31  164.1

之前我问this question,我需要在指定的时间间隔内形成一个网络,然后对网络进行网络测量。 现在,我需要更进一步。
我想做的如下:

  • 例如让我们考虑row 1。在row 1中,交易日期为"2005-01-01",所以我们需要提取date_trx位于"2004-07-05"-"2005-01-01"(即"2005-01-01"之前的最后6个月)的数据,然后在此形成网络提取数据以计算网络的度量,例如网络中帐户的度中心性、中介中心性。最后,新列degree_centralitybetweenness_centrality的第一行将分别包含账户6644的度中心性和账户6644的中介中心性。
  • 同样,在row 2中,交易日期又是"2005-01-01",所以我们需要提取date_trx位于"2004-07-05"-"2005-01-01"的数据(这是日期"2005-01-01"之前的最后6个月)和然后在这个提取的数据上形成网络,计算网络的度量,例如网络中账户的度中心性、介数中心性。最后,新列degree_centralitybetweenness_centrality的第二行将分别包含账户6753的度中心性和账户6753的中介中心性。
  • 所有数据行都是这样的。

PS:

  • 让我们考虑row 1row 2row 3。由于日期相同,因此将由日期在"2004-07-05"-"2005-01-01" 范围内的数据创建的网络对于所有三行将完全相同。但是,由于degree centr.betweenness centr. 等网络度量将根据from 列中的帐户添加到数据中,因此664467539242 的这些网络度量很可能会有所不同彼此。
  • 此外,当我们提取日期范围之间的数据以形成网络时,会考虑日期间隔的边界。例如,我数据中的第一个日期是"2005-01-01"(实际上在该日期进行了 4 笔交易)。但是,假设在第一个日期"2005-01-01" 上只有一个观察(交易)并且在此日期之前没有任何观察,现在我们要创建一个介于"2004-07-05"-"2005-01-01" 之间的数据网络。因为正如我所说,边界也很重要,所以我们可以在这个指定的日期范围内进行的唯一观察来形成网络是日期为"2005-01-01" 的观察。因此,由于一笔交易由两个账户组成,因此只有这两个账户(节点)会出现在网络中。因此,归根结底,一次观察就足以构建网络并在其上计算网络指标。

数据样本的dput()输出:

structure(list(id = c(18529L, 13742L, 9913L, 956L, 2557L, 1602L, 
18669L, 35900L, 48667L, 51341L, 53713L, 60126L, 60545L, 65113L, 
66783L, 83324L, 87614L, 88898L, 89874L, 94765L, 100277L, 101587L, 
103444L, 108414L, 113319L, 121516L, 126607L, 130170L, 131771L, 
135002L, 149431L, 157403L, 157645L, 158831L, 162597L, 162680L, 
163901L, 165044L, 167082L, 168562L, 168940L, 172578L, 173031L, 
173267L, 177507L, 179167L, 182612L, 183499L, 188171L, 189625L, 
193940L, 198764L, 199342L, 200134L, 203328L, 203763L, 204733L, 
205651L, 209672L, 210242L, 210979L, 214532L, 214741L, 215738L, 
216709L, 220828L, 222140L, 222905L, 226133L, 226527L, 227160L, 
228193L, 231782L, 232454L, 233774L, 237836L, 237837L, 238860L, 
240223L, 245032L, 246673L, 247561L, 251611L, 251696L, 252663L, 
254410L, 255126L, 255230L, 258484L, 258485L, 259309L, 259910L, 
260542L, 262091L, 264462L, 264887L, 264888L, 266125L, 268574L, 
272959L, 273519L, 274064L, 274276L, 275121L, 277368L, 279699L, 
280009L, 280771L, 283004L, 285434L, 286555L, 287519L, 287672L, 
292464L, 292967L, 293761L, 298688L, 299828L, 301001L, 305967L, 
306733L, 307195L, 307690L, 312021L, 312387L, 313201L, 313617L, 
314821L, 319220L, 319431L, 319896L, 319898L, 320552L, 321169L, 
321489L, 323363L, 326642L, 327878L, 329300L, 329693L, 334956L, 
336257L, 337051L, 337453L, 341921L, 342486L, 343779L, 345045L, 
346051L, 350569L, 351775L, 351776L, 351982L, 352926L, 357909L, 
359279L, 360537L, 360625L, 360626L, 360893L, 366453L, 367527L, 
369371L, 372062L, 372399L, 374143L, 375554L, 376953L, 383066L, 
383834L, 388124L, 390941L, 391457L, 392392L, 393886L, 394712L, 
400161L, 400163L, 400293L, 400947L, 408385L, 408433L, 408770L, 
409130L, 409884L, 409957L, 411094L, 411473L, 417931L, 417933L, 
423987L, 426306L, 427859L, 427933L, 429862L, 437299L, 437302L, 
439673L, 440086L, 442868L, 445391L, 447715L, 449318L, 452670L, 
453274L, 458907L, 462533L, 463977L, 463978L, 465277L, 466227L, 
466334L, 468656L, 468984L, 469658L, 470878L, 471085L, 475595L, 
479825L, 480706L, 482107L, 482396L, 484029L, 487872L, 489049L, 
489244L, 491078L, 492645L, 494182L, 494770L, 499833L, 501560L, 
503281L, 506762L, 507155L, 510635L, 510636L, 511456L, 518516L, 
520256L, 522059L, 523879L, 526605L, 531419L, 541120L, 542984L, 
543255L, 544835L, 552145L, 552249L, 552599L, 556641L, 558437L, 
560182L, 560316L, 561661L, 562757L, 564655L, 566807L, 568924L, 
569579L, 572454L, 575342L, 583113L, 584735L, 586566L, 588467L, 
588650L, 590397L, 593263L, 596176L, 596991L, 598516L, 600036L, 
600890L, 601217L, 605716L, 608700L, 608986L, 610955L, 611554L, 
612369L, 612912L, 614413L, 614581L, 615689L, 617839L, 621218L, 
625643L, 631926L, 632402L, 632634L, 632971L, 633878L, 634037L, 
635879L, 635881L, 641722L, 644074L, 644363L, 647383L, 648449L, 
648705L, 651123L, 653520L, 653632L, 655184L, 657159L, 659304L, 
659383L, 664298L, 667950L, 670871L, 671575L, 674758L, 679149L, 
681217L, 683256L, 686397L, 690087L, 692048L, 693581L, 698475L, 
702839L, 703263L, 705359L, 707965L, 708472L, 709573L, 711538L, 
717942L, 724743L, 728282L, 728648L, 729681L, 731550L, 733199L, 
733615L, 735554L, 736414L, 738424L, 738745L, 740422L, 741730L, 
742188L, 744849L, 749384L, 752006L, 752873L, 755237L, 757632L, 
759299L, 759719L, 761893L, 763247L, 766302L, 773620L, 773833L, 
774422L, 776563L, 778547L, 779605L, 779717L, 781104L, 785381L, 
787524L, 796458L, 798356L, 799486L, 800502L, 801384L, 801958L, 
802663L, 806221L, 809515L, 810634L, 811948L, 811977L, 814180L, 
814464L, 817624L, 818373L, 823705L, 825916L, 827123L, 828005L, 
830594L, 835990L, 836925L, 837301L, 842136L, 848963L, 849984L, 
851164L, 853383L, 856965L, 857455L, 862780L, 868448L, 869178L, 
871528L, 872324L, 873608L, 874589L, 876773L, 877903L, 879305L, 
884153L, 888738L, 888830L, 889369L, 890395L, 891820L, 894176L, 
901068L, 902416L, 904059L, 904624L, 906822L, 916201L, 926644L, 
927983L, 929856L, 930224L, 931276L, 932214L, 932332L, 934410L, 
934979L, 935556L, 937221L, 937603L, 941771L, 944454L, 946767L, 
950291L, 950302L, 951398L, 953147L, 953606L, 955816L, 957054L, 
957102L, 957984L, 967407L, 973595L, 974085L, 978109L, 979048L, 
979900L, 981315L, 983423L, 985428L, 985680L, 986613L, 992879L, 
997651L, 999781L, 1004742L, 1006958L, 1009140L, 1009227L, 1009644L, 
1013484L, 1018535L, 1019671L, 1030067L, 1030636L, 1032335L, 1033712L, 
1035096L, 1036537L, 1038682L, 1042439L, 1045492L, 1050247L, 1054737L, 
1056136L), from = c("5370", "5370", "5370", "8605", "5370", "6390", 
"5370", "5370", "8934", "5370", "5635", "6046", "5680", "8026", 
"9037", "5370", "7816", "8046", "5492", "8756", "5370", "9254", 
"5370", "5370", "7078", "6615", "5370", "9817", "8228", "8822", 
"5735", "7058", "5370", "8667", "9315", "6053", "7990", "8247", 
"8165", "5656", "9261", "5929", "8251", "5370", "6725", "5370", 
"6004", "7022", "7442", "5370", "8679", "6491", "7078", "5370", 
"5370", "5370", "5658", "5370", "9296", "8386", "5370", "5370", 
"5370", "9535", "5370", "7541", "5370", "9621", "5370", "7158", 
"8240", "5370", "5370", "8025", "5370", "5370", "5370", "6989", 
"5370", "7059", "5370", "5370", "5370", "9121", "5608", "5370", 
"5370", "7551", "5370", "5370", "5370", "5370", "9163", "9362", 
"6072", "5370", "5370", "5370", "5370", "5370", "5370", "6169", 
"5370", "5370", "7034", "8313", "7930", "7151", "8914", "5370", 
"9277", "5370", "5370", "6376", "5939", "6253", "5370", "8629", 
"5370", "6778", "5370", "5370", "7783", "5370", "5370", "5370", 
"7319", "5370", "6644", "9221", "6820", "5370", "5370", "5370", 
"6326", "5370", "5370", "6495", "5370", "5370", "7818", "9788", 
"6831", "5370", "7986", "5370", "5700", "5370", "5679", "7074", 
"5370", "6125", "5370", "6806", "5370", "5841", "5370", "5370", 
"5370", "5370", "7177", "8369", "5370", "7420", "9686", "5370", 
"5875", "5370", "6196", "5370", "7538", "5370", "5370", "8761", 
"5370", "9837", "5370", "6214", "7755", "5370", "7824", "5370", 
"5370", "5370", "8115", "8941", "8582", "5370", "5583", "5370", 
"5990", "5370", "7497", "5370", "5370", "8336", "5370", "5370", 
"9847", "7269", "8479", "5370", "6973", "5370", "5370", "5870", 
"9500", "5370", "9406", "6806", "6644", "6255", "9135", "5370", 
"7008", "5370", "8197", "5370", "5370", "5370", "5921", "8951", 
"5370", "8726", "8384", "5370", "9446", "5370", "5370", "8435", 
"5370", "7220", "5370", "9427", "7664", "5370", "6996", "8811", 
"6455", "5370", "6022", "5370", "7827", "7290", "5370", "5409", 
"6988", "5370", "5698", "5844", "8754", "5370", "5370", "5370", 
"5370", "9003", "5370", "9024", "5370", "5370", "5370", "5370", 
"8650", "5370", "5370", "5370", "5924", "7815", "5370", "6876", 
"8445", "8524", "6799", "6951", "7606", "5950", "9421", "5370", 
"5370", "9301", "9409", "8810", "5370", "8892", "5370", "8843", 
"5370", "6891", "5370", "5370", "5370", "5370", "5370", "9869", 
"7880", "5370", "5370", "8346", "7427", "8308", "6452", "7104", 
"5370", "7228", "5370", "7694", "5370", "6296", "5370", "8624", 
"5393", "5982", "8619", "8494", "6354", "5370", "8954", "5370", 
"5370", "5370", "8356", "5370", "5370", "5370", "5370", "6342", 
"5370", "5636", "5370", "5370", "6195", "7265", "5370", "5370", 
"5370", "5370", "7504", "9289", "6814", "5370", "5370", "5370", 
"6649", "9706", "5370", "7385", "8110", "6359", "6557", "6338", 
"5370", "5370", "7937", "9238", "5370", "5370", "6511", "5370", 
"5370", "9038", "5370", "9646", "5370", "5370", "5370", "5516", 
"5370", "5370", "5370", "6020", "7005", "9824", "5370", "5370", 
"5370", "5370", "7131", "6629", "5370", "7683", "5370", "9720", 
"5370", "9586", "5370", "5370", "5370", "8984", "5505", "5789", 
"5370", "5370", "5370", "7272", "5370", "5370", "5370", "5907", 
"5370", "9731", "5370", "5370", "8359", "5370", "7879", "8048", 
"5370", "9458", "7931", "7918", "5983", "5939", "6592", "5370", 
"5765", "5370", "5370", "5898", "5370", "9558", "9372", "5370", 
"5936", "9580", "5370", "8458", "5370", "5370", "9692", "5370", 
"6290", "5703", "5747", "9788", "6540", "8600", "7420", "6459", 
"5370", "5370", "6768", "7523", "5370", "5370", "9177", "5370", 
"8898", "7257", "5370", "5370", "6395", "5370", "7168", "7671", 
"6158", "5372", "7983", "8919", "5370", "7614", "5370", "8631", 
"5370", "8342", "7227", "5370", "5370", "5370", "6700", "5370", 
"5370", "7078", "7349", "5370", "8210", "9427", "5370", "5613"
), to = c("9356", "5605", "8567", "5370", "5636", "5370", "8933", 
"8483", "5370", "7626", "5370", "5370", "5370", "5370", "5370", 
"9676", "5370", "5370", "5370", "5370", "9105", "5370", "9772", 
"6979", "5370", "5370", "7564", "5370", "5370", "5370", "5370", 
"5370", "8744", "5370", "5370", "5370", "5370", "5370", "5370", 
"5370", "5370", "5370", "5370", "7318", "5370", "8433", "5370", 
"5370", "5370", "7122", "5370", "5370", "5370", "8566", "6728", 
"9689", "5370", "8342", "5370", "5370", "5614", "5596", "5953", 
"5370", "7336", "5370", "7247", "5370", "7291", "5370", "5370", 
"6282", "7236", "5370", "8866", "8613", "9247", "5370", "6767", 
"5370", "9273", "7320", "9533", "5370", "5370", "8930", "9343", 
"5370", "9499", "7693", "7830", "5392", "5370", "5370", "5370", 
"7497", "8516", "9023", "7310", "8939", "9736", "5370", "8679", 
"5585", "5370", "5370", "5370", "5370", "5370", "7691", "5370", 
"7332", "9476", "5370", "5370", "5370", "9239", "5370", "6417", 
"5370", "8445", "6016", "5370", "7933", "6929", "7437", "5370", 
"6672", "5370", "5370", "5370", "9118", "6640", "7429", "5370", 
"9149", "7979", "5370", "5716", "9405", "5370", "5370", "5370", 
"6433", "5370", "8747", "5370", "6675", "5370", "5370", "6621", 
"5370", "8237", "5370", "6934", "5370", "9361", "7366", "8699", 
"9564", "5370", "5370", "5373", "5370", "5370", "8457", "5370", 
"6650", "5370", "7033", "5370", "9807", "6984", "5370", "6269", 
"5370", "6510", "5370", "5370", "9001", "5370", "6445", "6874", 
"8926", "5370", "5370", "5370", "9188", "5370", "5660", "5370", 
"6061", "5370", "7523", "8130", "5370", "9570", "6142", "5370", 
"5370", "5370", "9272", "5370", "8558", "7020", "5370", "5370", 
"8890", "5370", "5370", "5370", "5370", "5370", "5684", "5370", 
"6282", "5370", "8422", "7715", "6404", "5370", "5370", "7182", 
"5370", "5370", "9635", "5370", "7395", "9352", "5370", "6450", 
"5370", "5640", "5370", "5370", "8654", "5370", "5370", "5370", 
"6601", "5370", "6029", "5370", "5370", "9251", "5370", "5370", 
"9809", "5370", "5370", "5370", "7687", "5417", "8629", "6171", 
"5370", "8927", "5370", "9675", "8547", "8601", "6474", "5370", 
"9295", "9699", "7161", "5370", "5370", "9359", "5370", "5370", 
"5370", "5370", "5370", "5370", "5370", "5370", "8142", "7801", 
"5370", "5370", "5370", "8378", "5370", "5460", "5370", "9495", 
"5370", "8673", "8990", "6929", "7061", "9469", "5370", "5370", 
"8067", "7833", "5370", "5370", "5370", "5370", "5370", "7064", 
"5370", "8462", "5370", "6096", "5370", "6985", "5370", "5370", 
"5370", "5370", "5370", "5370", "7698", "5370", "5872", "5894", 
"9164", "5370", "5554", "5872", "5592", "5565", "5370", "6805", 
"5370", "8188", "8041", "5370", "5370", "7622", "8610", "9157", 
"8521", "5370", "5370", "5370", "7297", "5802", "6610", "5370", 
"5370", "6019", "5370", "5370", "5370", "5370", "5370", "6422", 
"7773", "5370", "5370", "6673", "7844", "5370", "7257", "5786", 
"5370", "7486", "5370", "8512", "7647", "6112", "5370", "6670", 
"9836", "9514", "5370", "5370", "5370", "7172", "8962", "6249", 
"9216", "5370", "5370", "8584", "5370", "7282", "5370", "8202", 
"5370", "8537", "9829", "8265", "5370", "5370", "5370", "7361", 
"8598", "9051", "5370", "9602", "5926", "5719", "5370", "9278", 
"5370", "8702", "8958", "5370", "5862", "5370", "5370", "7666", 
"5370", "5370", "5370", "5370", "5370", "5370", "6352", "5370", 
"6251", "5722", "5370", "8564", "5370", "5370", "8219", "5370", 
"5370", "9731", "5370", "5473", "6430", "5370", "8813", "5370", 
"5370", "5370", "5370", "5370", "5370", "5370", "5370", "5692", 
"6612", "5370", "5370", "7801", "8606", "5370", "9652", "5370", 
"5370", "7143", "7007", "5370", "7474", "5370", "5370", "5370", 
"5370", "5370", "5370", "6555", "5370", "9065", "5370", "5623", 
"5370", "5370", "6888", "8494", "6909", "5370", "5827", "5852", 
"5370", "5370", "6710", "5370", "5370", "7836", "5370"), date = structure(c(12934, 
13000, 13038, 13061, 13099, 13113, 13117, 13179, 13238, 13249, 
13268, 13296, 13299, 13309, 13314, 13391, 13400, 13404, 13409, 
13428, 13452, 13452, 13460, 13482, 13493, 13518, 13526, 13537, 
13542, 13544, 13596, 13616, 13617, 13626, 13633, 13633, 13639, 
13642, 13646, 13656, 13660, 13664, 13667, 13669, 13677, 13686, 
13694, 13694, 13707, 13716, 13725, 13738, 13739, 13746, 13756, 
13756, 13756, 13761, 13769, 13770, 13776, 13786, 13786, 13786, 
13791, 13799, 13806, 13813, 13817, 13817, 13817, 13822, 13829, 
13830, 13836, 13847, 13847, 13847, 13852, 13860, 13866, 13871, 
13878, 13878, 13878, 13882, 13883, 13883, 13887, 13887, 13888, 
13889, 13890, 13891, 13895, 13896, 13896, 13899, 13905, 13909, 
13909, 13909, 13910, 13914, 13918, 13922, 13923, 13926, 13938, 
13938, 13938, 13943, 13943, 13951, 13952, 13956, 13969, 13969, 
13974, 13982, 13983, 13986, 13989, 13999, 13999, 13999, 13999, 
14004, 14011, 14011, 14012, 14012, 14013, 14016, 14018, 14030, 
14030, 14030, 14035, 14036, 14043, 14046, 14050, 14052, 14060, 
14060, 14060, 14065, 14067, 14073, 14076, 14076, 14077, 14083, 
14091, 14091, 14096, 14096, 14096, 14097, 14104, 14106, 14117, 
14122, 14122, 14122, 14122, 14127, 14135, 14136, 14152, 14152, 
14152, 14152, 14157, 14158, 14165, 14165, 14165, 14166, 14183, 
14183, 14183, 14183, 14183, 14183, 14188, 14188, 14196, 14196, 
14213, 14213, 14213, 14213, 14218, 14226, 14226, 14231, 14232, 
14243, 14244, 14244, 14244, 14249, 14249, 14254, 14256, 14257, 
14257, 14258, 14259, 14259, 14263, 14263, 14264, 14266, 14267, 
14274, 14275, 14275, 14275, 14275, 14280, 14285, 14286, 14286, 
14288, 14291, 14299, 14302, 14303, 14303, 14308, 14312, 14313, 
14316, 14316, 14317, 14334, 14334, 14334, 14339, 14342, 14347, 
14364, 14364, 14364, 14369, 14377, 14377, 14377, 14391, 14395, 
14395, 14395, 14395, 14395, 14395, 14400, 14402, 14403, 14406, 
14408, 14425, 14425, 14425, 14425, 14425, 14430, 14433, 14436, 
14437, 14438, 14440, 14443, 14445, 14456, 14456, 14456, 14456, 
14458, 14461, 14461, 14463, 14463, 14464, 14466, 14469, 14484, 
14487, 14487, 14487, 14487, 14487, 14487, 14492, 14492, 14498, 
14500, 14500, 14508, 14513, 14514, 14517, 14517, 14517, 14517, 
14517, 14522, 14522, 14527, 14530, 14537, 14540, 14548, 14548, 
14548, 14553, 14556, 14560, 14561, 14563, 14578, 14578, 14578, 
14578, 14583, 14584, 14585, 14586, 14591, 14607, 14609, 14609, 
14609, 14609, 14609, 14609, 14611, 14612, 14614, 14614, 14615, 
14616, 14616, 14618, 14620, 14622, 14622, 14624, 14626, 14628, 
14629, 14631, 14633, 14637, 14640, 14640, 14640, 14640, 14645, 
14646, 14646, 14648, 14652, 14653, 14668, 14668, 14668, 14668, 
14670, 14673, 14673, 14676, 14679, 14680, 14681, 14681, 14685, 
14686, 14699, 14699, 14699, 14699, 14703, 14704, 14707, 14711, 
14712, 14712, 14727, 14729, 14729, 14729, 14734, 14737, 14738, 
14742, 14760, 14760, 14760, 14760, 14760, 14760, 14760, 14763, 
14765, 14769, 14773, 14773, 14773, 14774, 14777, 14784, 14790, 
14790, 14790, 14790, 14795, 14803, 14821, 14821, 14821, 14821, 
14824, 14826, 14826, 14828, 14829, 14829, 14830, 14831, 14834, 
14840, 14850, 14852, 14852, 14852, 14852, 14852, 14852, 14856, 
14856, 14857, 14865, 14882, 14882, 14882, 14882, 14882, 14882, 
14887, 14889, 14889, 14890, 14895, 14910, 14913, 14913, 14913, 
14918, 14918, 14919, 14922, 14926, 14927, 14943, 14943, 14943, 
14946, 14948, 14949, 14951, 14954, 14956, 14967, 14974, 14974
), class = "Date"), amount = c(24.4, 7618, 21971, 5245, 2921, 
8000, 169.2, 71.5, 14.6, 4214, 14.6, 13920, 14.6, 24640, 1600, 
261.1, 16400, 3500, 2700, 19882, 182, 14.6, 16927, 25653, 3059, 
2880, 9658, 4500, 12480, 14.6, 1000, 3679, 34430, 12600, 14.6, 
19.2, 4900, 826, 3679, 2100, 38000, 79, 11400, 21495, 3679, 200, 
14.6, 100.6, 3679, 5300, 108.9, 3679, 2696, 7500, 171.6, 14.6, 
99.2, 2452, 3679, 3218, 700, 69.7, 14.6, 91.5, 2452, 3679, 2900, 
17572, 14.6, 14.6, 90.5, 2452, 49752, 3679, 1900, 14.6, 870, 
85.2, 2452, 3679, 1600, 540, 14.6, 14.6, 79, 210, 2452, 28400, 
720, 180, 420, 44289, 489, 3679, 840, 2900, 150, 870, 420, 14.6, 
152.9, 64.1, 41464, 2452, 205, 3679, 2166, 100, 14.6, 14.6, 59.7, 
6588, 2452, 3679, 65, 200, 14.6, 65.7, 2452, 3679, 15792, 2000, 
2200, 99.7, 14.6, 140.3, 67.6, 2452, 5600, 873, 3679, 660, 36258, 
1900, 2002, 263, 14.6, 63.3, 2452, 14607, 3679, 1400, 7680, 360, 
14.6, 14.6, 65.5, 2452, 344, 3679, 990, 1000, 19652, 1080, 14.6, 
72.8, 22991, 2452, 1140, 9226, 3679, 2400, 1410, 18300, 14.6, 
14.6, 75.7, 2452, 3679, 1700, 14.6, 14.6, 65.4, 78.8, 2452, 6846, 
270, 3679, 6339, 3000, 14.6, 14.6, 358.3, 102.3, 14.6, 73.2, 
3869, 2452, 3679, 2800, 14.6, 14.6, 72.4, 228.2, 2452, 3679, 
3700, 180, 6900, 350, 14.6, 14.6, 59.2, 23131, 2452, 2880, 1200, 
630, 3679, 2400, 1680, 17100, 720, 390, 2520, 450, 1920, 840, 
137.9, 14.6, 14.6, 55.4, 2452, 5800, 1700, 24977, 3679, 570, 
630, 11700, 14.6, 58.3, 2452, 1347, 1455, 4600, 3679, 3300, 14.6, 
14.6, 51.9, 2452, 2038, 3679, 14.6, 49.6, 14.6, 2452, 9252, 3294, 
3679, 1170, 70.5, 70.1, 91.3, 14.6, 14.6, 54.1, 2452, 46181, 
15586, 74529, 3679, 189.5, 318.1, 14.6, 55.2, 14.6, 2452, 6446, 
1500, 6300, 3679, 8600, 300, 6500, 2600, 185.2, 14.6, 64.1, 11200, 
3041, 2452, 2895, 14037, 3103, 1200, 3679, 870, 14.6, 57.9, 93, 
109.1, 67.1, 14.6, 2452, 390, 13200, 7746, 3679, 2300, 2960, 
18292, 14.6, 136.9, 7500, 14.6, 65, 2452, 2974, 331, 3679, 1300, 
14600, 14.6, 14.6, 72.4, 2452, 1100, 10315, 3679, 39864, 94.1, 
101.2, 14.6, 72.4, 2452, 1469, 27132, 4700, 3679, 1000, 101.8, 
58.4, 76, 14.6, 14.6, 61.6, 38200, 570, 2400, 2452, 600, 400, 
100, 2412, 4485, 1320, 3679, 2500, 600, 810, 1800, 2400, 330, 
480, 14.6, 114, 14.6, 55.9, 2452, 500, 4356, 7045, 11889, 3679, 
146.1, 14.6, 288.5, 56.3, 1300, 3, 2452, 7156, 24784, 24423, 
3679, 822, 810, 20800, 2.2, 1800, 14.6, 63, 1050, 2452, 15976, 
4755, 11100, 3679, 180, 14.6, 166.6, 59.9, 2452, 5411, 13405, 
3679, 183.9, 14.6, 35.4, 10.8, 14.6, 14.6, 66.7, 1800, 2452, 
2277, 511, 800, 3679, 65, 5040, 450, 14.6, 14.6, 93.5, 71.5, 
2452, 3679, 14.6, 14.6, 14.6, 75.4, 270, 14, 2452, 4622, 145, 
24324, 1523, 372, 3679, 1400, 3100, 14.6, 14.6, 14.6, 77.9, 14.6, 
77.1, 14989, 6500, 2452, 3679, 247.3, 14.6, 14.6, 14.6, 190.6, 
58.7, 2452, 1398, 4268, 3597, 3679, 1800, 14.6, 14.6, 63.1, 2452, 
12400, 5106, 4633, 3679, 510, 14.6, 204.7, 67.1, 4500, 2452, 
5800, 1275, 6460, 3679, 6406, 78.7, 52.6)), row.names = c(NA, 
-478L), class = "data.frame")

编辑:
根据@pseudospin 的解决方案,代码如下:

library(data.table)
setDT(dt)
measure_graph <- function(dt) {
  network <- graph_from_data_frame(dt[,.(from, to)], directed=TRUE)
  accounts <- dt[date == max(date), from]
  list(
    account = accounts,
    degree = degree(network, mode = "all")[accounts],
    in_degree = degree(network, mode = "in")[accounts],
    out_degree = degree(network, mode = "out")[accounts]
  )
}

dt[, measure_graph(dt[(date >= end_date - 180) & (date <= end_date)]), .(end_date = date)]

当使用上面提供的数据应用时,会返回此输出:

end_date    account     degree    in_degree    out_degree
<date>      <fctr>       <dbl>    <dbl>        <dbl>
2005-05-31  5370        1         0            1
2005-08-05  5370        2         0            2
2005-09-12  5370        3         0            3
2005-10-05  8605        NA        NA           NA
2005-11-12  5370        5         1            4
2005-11-26  6390        NA        NA           NA
2005-11-30  5370        6         2            4
2006-01-31  5370        7         2            5
2006-03-31  8934        NA        NA           NA
2006-04-11  5370        6         2            4
...

这里,为什么帐户8605,6390,8934 没有degree=1, in_degree=0out_degree=1 而有NA?此外,有些值是正确的,但有些不是。例如,考虑帐户 5370 的日期 "2010-12-11"
按此日期和帐户过滤输出:

end_date    account     degree   in_degree    out_degree
<date>      <fctr>      <dbl>    <dbl>        <dbl>
2010-12-11  5370        1        0            1

但是,当我在日期 "2010-12-11" 和帐户 5370 之前的最后 6 个月期间(即 "2010-06-14"-"2010-12-11")过滤上面提供的示例数据时,由

data[(date <="2010-12-11" & date>=as.Date(as.numeric(as.Date("2010-12-11"))-180, origin="1970-01-01")) & (from==5370 | to==5370)]

它给出:

id          from    to          date        amount  
<int>       <fctr>  <fctr>      <date>      <dbl>
890395       5939   5370        2010-06-14  65.0
891820       6592   5370        2010-06-17  5040.0
894176       5370   6352        2010-06-24  450.0
901068       5765   5370        2010-06-30  14.6
902416       5370   6251        2010-06-30  14.6
904059       5370   5722        2010-06-30  93.5
904624       5898   5370        2010-06-30  71.5
...
1032335      6700   5370        2010-11-30  67.1
1033712      5370   5827        2010-12-03  4500.0
1035096      5370   5852        2010-12-05  2452.0
1036537      7078   5370        2010-12-06  5800.0
1038682      7349   5370        2010-12-08  1275.0
1042439      5370   6710        2010-12-11  6460.0  

(63 rows in total)

因此,根据这个,实际上5370 应该有degree=63,如果我们只过滤to==5370,我们会看到它应该有in_degree=37,同样如果我们只过滤from==5370,我们'会看到它应该有out_degree=26,对于指定的日期范围"2010-06-14"-"2010-12-11",而代码分别计算为1,01。 为什么代码对某些人给出正确的结果,而对另一些人给出错误的结果?

【问题讨论】:

  • 我复制了您的代码版本,它似乎可以工作 - 我没有看到您看到的 NA。这可能与数据表的名称有关 - 您使用的是data,我在函数外部和内部都使用了dt。尝试为它们设置不同的名称,并从您的环境中删除任何旧名称。此外,问题中的示例数据在 2008 年停止,因此我无法检查问题的其余部分。
  • 我刚刚注意到,fromto 列在形成网络时应该是字符格式,而不是因子。这样,所有值都可以正确计算。我认为当这两列是因素时,会发生错误,因为这些因素列的级别包含的帐户数量超过了构成网络的帐户数量。将这两列转换为字符即可解决问题。

标签: r data.table igraph social-networking network-analysis


【解决方案1】:

我认为您只需要按照您的描述进行操作即可。我会这样安排:

library(data.table)
setDT(dt)
measure_graph <- function(dt) {
  network <- graph_from_data_frame(dt[,.(from, to)], directed=TRUE)
  accounts <- dt[date == max(date), from]
  list(
    account = accounts,
    closeness = closeness(network, normalized = TRUE)[accounts],
    betweenness = betweenness(network, normalized = TRUE)[accounts]
  )
}

dt[, measure_graph(dt[(date >= end_date - 180) & (date <= end_date)]), .(end_date = date)]

这只会为每个日期创建一次图表,并为该日期的所有 from 帐户提取您想要的统计信息。

【讨论】:

  • 谢谢!我知道您在dt[date == max(date), from] 中指定了一个条件以防止多算,但我不清楚通过指定条件date == max(date) 是如何工作的。你能详细说明一下那部分吗?此外,当我计算度中心性只是为了检查代码是否正常工作时,它实际上为大多数帐户创建了“NA”值,实际上应该计算了度中心性,而且计算的值没有正确计算。会不会有任何可能的错误?
  • max(date) 只是end_date。我想您可以将其传递给函数以使其更清晰。是的,可能会有错误——样本数据(必然)有点稀疏,我收到了很多警告closeness centrality is not well-defined for disconnected graphs。我想你已经掌握了你正在做的图形计算,并且可以调整上面的代码大纲来做你想要对实际数据做的事情。如果您有与上述代码和数据进行比较的示例,我可以查看并找出差异。
  • 我编辑了我的帖子,讨论了我遇到的问题。你能检查一下吗?顺便说一句,是的,因此我不会在分析中使用closeness centrality。我之前已经意识到这个错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-13
  • 1970-01-01
  • 2021-10-26
  • 2019-04-12
相关资源
最近更新 更多