def network_pro_hashtags(): # Extract interaction networks from proed and pro-recoveryed hashtaged tweeets # Select only recovery users who have hashtags from ED hashtag topics # rec_tag_users = set(iot.get_values_one_field('fed', 'tag_com', 'id', {'rec_tageted': True})) # ped_tag_users = set(iot.get_values_one_field('fed', 'tag_com', 'id', {'ped_tageted': True})) # rec_tag_users = set(iot.get_values_one_field('fed', 'prorec_tag', 'user.id')) # ped_tag_users = set(iot.get_values_one_field('fed', 'proed_tag', 'user.id')) # fedusers = iot.get_values_one_field('fed', 'com', 'id') fedusers = pickle.load(open('fed-user-id-str.pick', 'r')) print len(fedusers) users = [int(uid) for uid in fedusers] # only_ped = ped_tag_users - rec_tag_users # only_rec = rec_tag_users - ped_tag_users # all_users = list(rec_tag_users.union(ped_tag_users)) for btype in ['communication']: # gb = gt.load_beh_network('fed', 'bnet_ed_tag', btype) gb = gt.load_beh_network_subset(users, 'fed', 'bnet_ed_tag', btype) # for v in gb.vs: # if int(v['name']) in only_ped: # v['set'] = -1 # elif int(v['name']) in only_rec: # v['set'] = 1 # else: # v['set'] = 0 gt.summary(gb) gb.write_graphml(btype+'-only-fed.graphml')
def network_analysis(): # output network among depression users # user1 = iot.get_values_one_field('depression', 'users1', 'id') # user2 = iot.get_values_one_field('depression', 'users2', 'id') # print len(user1), len(user2) # alluser = user1 + user2 alluser = iot.get_values_one_field('depression', 'depressive', 'id') follow_net = gt.load_network_subset('depression', 'net', { 'user': { '$in': alluser }, 'follower': { '$in': alluser } }) gt.net_stat(follow_net) follow_net.write_graphml('data/follow_net.graphml') for beh in ['retweet', 'communication']: print beh bnetwork = gt.load_beh_network_subset(userlist=alluser, db_name='depression', collection='bnet', btype=beh) gt.net_stat(bnetwork) bnetwork.write_graphml('data/' + beh + '_net.graphml')
def generate(dbname, comname, netname, type): if type == 'follow': g = gt.load_network(dbname, netname) else: # uids = iot.get_values_one_field(dbname, comname, 'id') # pickle.dump(uids, open('data/'+dbname+'-ids.pick', 'w')) uids = pickle.load(open('data/'+dbname+'-ids.pick', 'r')) g = gt.load_beh_network_subset(uids, dbname, netname, type) pickle.dump(g, open('data/'+dbname+type+'.pick', 'w'))
def generate(dbname, comname, netname, type): if type == 'follow': g = gt.load_network(dbname, netname) else: # uids = iot.get_values_one_field(dbname, comname, 'id') # pickle.dump(uids, open('data/'+dbname+'-ids.pick', 'w')) uids = pickle.load(open('data/' + dbname + '-ids.pick', 'r')) g = gt.load_beh_network_subset(uids, dbname, netname, type) pickle.dump(g, open('data/' + dbname + type + '.pick', 'w'))
def diversity_db(dbname, comname, behavior, netname): userlist = iot.get_values_one_field(dbname, comname, 'id', # {'timeline_count': {'$gt': 0}} ) g = gt.load_beh_network_subset(userlist, dbname, netname, behavior) gt.summary(g) # g = bahavior_net(dbname, comname, netname, behavior) # pickle.dump(g, open('data/'+dbname+'_'+behavior+'.pick', 'w')) print dbname, behavior # g = pickle.load(open('data/' + dbname + '_' + behavior + '.pick', 'r')) return netstatis(dbname, behavior, g, [str(i) for i in userlist], comname)
def behavior_network(dbname, colname, filepath): '''out retweet and communication network''' uids = iot.get_values_one_field(dbname, 'com', 'id') print len(uids) for beh in ['retweet', 'communication']: print beh g = gt.load_beh_network_subset(uids, dbname, colname, beh) with open(filepath + beh + '.txt', 'wb') as fw: for e in g.es: source_vertex_id = e.source target_vertex_id = e.target source_vertex = g.vs[source_vertex_id] target_vertex = g.vs[target_vertex_id] fw.write('%s\t%s\t%d\n' % ('u' + source_vertex['name'], 'u' + target_vertex['name'], e['weight']))
def bahavior_net(dbname, comname, bnetname, btype): userlist = iot.get_values_one_field(dbname, comname, 'id', {'timeline_count': {'$gt': 0}}) return gt.load_beh_network_subset(userlist, dbname, bnetname, btype)
def bahavior_net(dbname, comname, bnetname, btype): userlist = iot.get_values_one_field(dbname, comname, 'id', # {'timeline_count': {'$gt': 0}} ) return gt.load_beh_network_subset(userlist, dbname, bnetname, btype)
def recover_proed_community_all_connection(): ''' First filter users: pro-recovery and pro-ed, as well as their followings. Construct interaction networks among these users, including the outlinks from followings to pro-* users :return: ''' # Filtering users # prorec, proed = edrelatedcom.rec_proed() ## based on profiles # prorec, proed = filter_recovery_sentiment() # based on tweets' sentiments # users = iot.get_values_one_field('fed', 'recover', 'user.id') # based on tweet content # prorec = [str(i) for i in users] # cols = dbt.db_connect_col('fed', 'follownet') proed, prorec, proboth = pro_tag_user() # based on hashtags cols = dbt.db_connect_col('fed', 'snet') name_map, edges, set_map = {}, set(), {} for row in cols.find({}, no_cursor_timeout=True): n1 = str(row['follower']) # if n1 in prorec or n1 in proed: n2 = str(row['user']) n1id = name_map.get(n1, len(name_map)) name_map[n1] = n1id n2id = name_map.get(n2, len(name_map)) name_map[n2] = n2id edges.add((n1id, n2id)) g = Graph(len(name_map), directed=True) g.vs["name"] = list(sorted(name_map, key=name_map.get)) # return keys ordered by values g.add_edges(list(edges)) g.es["weight"] = 1 g.vs["set"] = 0 for v in g.vs: if v['name'] in prorec: v['set'] = 1 elif v['name'] in proed: v['set'] = 2 elif v['name'] in proboth: v['set'] = 3 gt.summary(g) # g.vs['deg'] = g.indegree() # nodes = [] # for v in g.vs: # if v['set'] == 1 or v['set'] == -1: # nodes.append(v) # elif v['deg'] > 3: # nodes.append(v) # else: # pass # print 'Filtered nodes: %d' %len(nodes) # g = g.subgraph(nodes) # gt.summary(g) g.write_graphml('rec-proed-follow-core-hashtag.graphml') # sbnet have extended all interactions posted by ED users edusers = [int(v['name']) for v in g.vs] # gf = gt.load_network_subset('fed', 'net') for btype in ['retweet', 'reply', 'mention']: gb = gt.load_beh_network_subset(edusers, 'fed', 'sbnet', btype) for v in gb.vs: v['set'] = g.vs.find(name=v['name'])['set'] gt.summary(gb) gb.write_graphml('rec-proed-'+btype+'-core-hashtag.graphml')