drawing

Introduction

The image above (Figure 0) shows a network visualization representing data from Crunchbase, a leading platform for finding business information about private and public companies.

Red dots are individuals (e.g. Mark Zuckerberg). Gold dots are companies (e.g. Facebook). Violets are funds (e.g. Sequoia Capital). Finally, green dots represents school degrees (e.g. "BS in Computer Science at Stanford" or "MBA at Harvard") that these people (red dots) attended in the past.

We'll train a Graph Auto-Encoder and build embeddings from this network. Then, we'll use the embeddings to predict fund-company affinity, and whether a fund will invest in a given company. We'll also use this model to predict if a company will be acquired by another company.

Additionally, we'll outline a detailed solution using PyG, a library built upon PyTorch to easily write and train Graph Neural Networks.

import numpy as np # linear algebra
import pandas as pd


import torch
import torch_geometric.transforms as T
from torch_geometric.nn import GCNConv
from torch_geometric.utils import train_test_split_edges
from datetime import datetime as dt

# print torch version
print(torch.__version__)
1.10.2
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print(device)
cpu

1) The Dataset

Throughout the tutorial we'll use the Crunchbase 2013 Snapshot © 2013 data set. which contains information about the startup ecosystem back in 2013: financial organizations, individuals, company news, funding rounds, acquisitions, and IPOs.

It can be found here

In this very first section we are going to describe briefely the dataset and how to process it in order to get featured input for our analysis.

The dataset consists of 6 .csv files with 3 typse of content:

  • relationships between entities
  • relationships attributes
  • entities attributes.

Nodes

Every entity (from here on "node") represents a unique entity (Person, Company, Fund and School) with it's inherent attributes. For example, a Company is set up in a Country/State/City, has a status (operating, acquired, closed, ipo), and is associated to a category (e.g. social), to a list of tags (e.g. college, students, profiles, social-networking), and the date it was founded (2004–02–01). Same runs for Funds. Person and School, on the other hand, do not have attributes.

Companies and Funds metadata consists of different attributes like category of the organization, date of foundation (founded_at), geographical data of the location where the organization is located (country_code, state_code, city, region), whether the company or fund is still operating, closed or have been acquired (status) and a list of tags that describe the company field of work or technology used by that company (tag_list).

Persons metadata, on the other hand, has no attributes of interest.

companies_df = pd.read_csv('../data/companies.csv')
companies_df.head()
id name category_code status founded_at tag_list country_code state_code city region
0 c:1 Wetpaint web operating 2005-10-17 wiki, seattle, elowitz, media-industry, media-... USA WA Seattle Seattle
1 c:10 Flektor games_video acquired NaN flektor, photo, video USA CA Culver City Los Angeles
2 c:100 There games_video acquired NaN virtualworld, there, teens USA CA San Mateo SF Bay
3 c:10000 MYWEBBO network_hosting operating 2008-07-26 social-network, new, website, web, friends, ch... NaN NaN NaN unknown
4 c:10001 THE Movie Streamer games_video operating 2008-07-26 watch, full-length, moives, online, for, free,... NaN NaN NaN unknown
funds_df = pd.read_csv('../data/funds.csv')
funds_df.head()
id name category_code status founded_at tag_list country_code state_code city region
0 f:1 Greylock Partners NaN operating 1965-01-01 venture-capital, growth-capital, startup, entr... USA CA Menlo Park SF Bay
1 f:10 Mission Ventures NaN operating 1996-01-01 NaN USA CA San Diego San Diego
2 f:100 Kapor Enterprises, Inc. NaN operating NaN NaN USA NaN NaN TBD
3 f:1000 Speed Ventures NaN operating NaN NaN NaN NaN NaN unknown
4 f:10000 3x5 Special Opportunity Partners NaN operating NaN NaN NaN NaN NaN unknown
persons_df = pd.read_csv('../data/persons.csv')
persons_df.head()
id name category_code status founded_at tag_list country_code state_code city region
0 p:10 Mark Zuckerberg NaN operating NaN facebook, ceo, social-network NaN NaN NaN unknown
1 p:100 Peter Lester NaN operating NaN NaN NaN NaN NaN unknown
2 p:1000 Dr. Steven E. Saunders NaN operating NaN NaN NaN NaN NaN unknown
3 p:10000 Neil Capel NaN operating NaN NaN NaN NaN NaN unknown
4 p:100000 Sue Pilsch NaN operating NaN NaN NaN NaN NaN unknown

Edges

Every two pairs of nodes can be linked in one or more of the following ways:

  • Person worked_at Company
  • Person worked_at Fund
  • Fund invested_in Company
  • Company invested_in Company
  • Company acquired Company
  • Person attended School

The following diagram (Figure 2) shows how these entities are related and displays the possible ways they can connect to each other.

drawing

Alongside node attributes, the network comes with edge attributes, which depends on the type of link between two nodes have. For example, the edge invested_in is associated to the type of investment (seed, angel, series-a, series-b, series-c, etc.), the money raised in the funding round both investor and funded company participated in (*) and the date of investment. Similarly, we have the the year of graduation of the people that attended to a school/degree. Thus, two people are implicitly connected if they have attended to the same school/degree having graduated on the same year. Same idea goes for the edge worked_at, except that in those cases links are asociated to a start_date and end_date (dates in which a person started/ended to work at a company/fund).

(*) Unfortunately, we do not count with the the amount of money invested by different funds that participated in the same funding round with a given company. We have instead the overall amount raised by the company in that funding round.

relationships_df = pd.read_csv('../data/relationships.csv')
relationships_df.head()
id relationship_id person_object_id relationship_object_id start_at end_at is_past sequence title created_at updated_at
0 1 1 p:2 c:1 NaN NaN 0 8 Co-Founder/CEO/Board of Directors 2007-05-25 07:03:54 2013-06-03 09:58:46
1 2 2 p:3 c:1 NaN NaN 1 279242 VP Marketing 2007-05-25 07:04:16 2010-05-21 16:31:34
2 3 3 p:4 c:3 NaN NaN 0 4 Evangelist 2007-05-25 19:33:03 2013-06-29 13:36:58
3 4 4 p:5 c:3 2006-03-01 2009-12-01 1 4 Senior Director Strategic Alliances 2007-05-25 19:34:53 2013-06-29 10:25:34
4 6 6 p:7 c:4 2005-07-01 2010-04-05 1 1 Chief Executive Officer 2007-05-25 20:05:33 2010-04-05 18:41:41
funding_rounds_df = pd.read_csv('../data/funding_rounds.csv', parse_dates=[3])
funding_rounds_df.head()
id funding_round_id object_id funded_at funding_round_type funding_round_code raised_amount_usd raised_amount raised_currency_code pre_money_valuation_usd ... post_money_valuation post_money_currency_code participants is_first_round is_last_round source_url source_description created_by created_at updated_at
0 1 1 c:4 2006-12-01 series-b b 8500000.0 8500000.0 USD 0.0 ... 0.0 NaN 2 0 0 http://www.marketingvox.com/archives/2006/12/2... NaN initial-importer 2007-07-04 04:52:57 2008-02-27 23:14:29
1 2 2 c:5 2004-09-01 angel angel 500000.0 500000.0 USD 0.0 ... 0.0 USD 2 0 1 NaN NaN initial-importer 2007-05-27 06:08:18 2013-06-28 20:07:23
2 3 3 c:5 2005-05-01 series-a a 12700000.0 12700000.0 USD 115000000.0 ... 0.0 USD 3 0 0 http://www.techcrunch.com/2007/11/02/jim-breye... Jim Breyer: Extra $500 Million Round For Faceb... initial-importer 2007-05-27 06:09:10 2013-06-28 20:07:23
3 4 4 c:5 2006-04-01 series-b b 27500000.0 27500000.0 USD 525000000.0 ... 0.0 USD 4 0 0 http://www.facebook.com/press/info.php?factsheet Facebook Funding initial-importer 2007-05-27 06:09:36 2013-06-28 20:07:24
4 5 5 c:7299 2006-05-01 series-b b 10500000.0 10500000.0 USD 0.0 ... 0.0 NaN 2 0 0 http://www.techcrunch.com/2006/05/14/photobuck... PhotoBucket Closes $10.5M From Trinity Ventures initial-importer 2007-05-29 11:05:59 2008-04-16 17:09:12

5 rows × 23 columns

investments_df = pd.read_csv('../data/investments.csv')
investments_df.head()
id funding_round_id funded_object_id investor_object_id created_at updated_at
0 1 1 c:4 f:1 2007-07-04 04:52:57 2008-02-27 23:14:29
1 2 1 c:4 f:2 2007-07-04 04:52:57 2008-02-27 23:14:29
2 3 3 c:5 f:4 2007-05-27 06:09:10 2013-06-28 20:07:23
3 4 4 c:5 f:1 2007-05-27 06:09:36 2013-06-28 20:07:24
4 5 4 c:5 f:5 2007-05-27 06:09:36 2013-06-28 20:07:24
investments_df = pd.read_csv('../data/investments.csv')
degrees_df =  pd.read_csv('../data/degrees.csv')
#acquisitions_df =  pd.read_csv('../data/acquisitions.csv')
edges_investment_df = pd.merge(funding_rounds_df, investments_df, on='funding_round_id')[
    ['investor_object_id', 'funded_object_id', 'funding_round_type', 'raised_amount_usd', 
     'is_first_round', 'is_last_round', 'funded_at']]

#edges_investment_df = edges_investment_df[edges_investment_df.is_first_round==1]

edges_investment_df['funded_at'] = pd.to_datetime(edges_investment_df['funded_at'])

edges_investment_df = edges_investment_df.sort_values('funded_at', ascending=True)
edges_investment_df = edges_investment_df.drop_duplicates(subset=['investor_object_id', 'funded_object_id'], keep="last")


edges_investment_df = pd.merge(edges_investment_df, companies_df, 
                    left_on='funded_object_id', 
                    right_on='id',
                    how='inner')[edges_investment_df.columns]

fund_invest_in_company_edges_investment_df = pd.merge(edges_investment_df, funds_df, 
                    left_on='investor_object_id', 
                    right_on='id',
                    how='inner')[edges_investment_df.columns]

company_invest_in_company_edges_investment_df = pd.merge(edges_investment_df, companies_df, 
                    left_on='investor_object_id', 
                    right_on='id',
                    how='inner')[edges_investment_df.columns]

person_invest_in_company_edges_investment_df = pd.merge(edges_investment_df, persons_df, 
                    left_on='investor_object_id', 
                    right_on='id',
                    how='inner')[edges_investment_df.columns]
degrees_df_ = degrees_df.copy()

degrees_df_['degree_full'] = (degrees_df_['degree_type']+ ' '+ \
                             degrees_df_['subject']+ ' ' + \
                             degrees_df_['institution']).str.lower()

degrees_df_['graduated_at'] = pd.to_datetime(degrees_df_['graduated_at'])


degrees_df_['days_since_graduation'] = degrees_df_['graduated_at'].apply(lambda x: 
                                                              int((dt.today() - x).days) 
                                                              if not pd.isna(x) else x)

degrees_df_['days_since_graduation'] = degrees_df_['days_since_graduation']\
           .fillna(-1)
edges_study_df = degrees_df_[['object_id', 'degree_full', 'days_since_graduation']].drop_duplicates().dropna()
degrees_codes_df = pd.DataFrame(edges_study_df['degree_full'].drop_duplicates().dropna().reset_index(drop=True))
degrees_codes_df['degree_id'] = np.arange(len(degrees_codes_df))
degrees_codes_df['degree_id'] = degrees_codes_df['degree_id'].map(lambda x: 'd:'+str(int(x)))

edges_study_df = pd.merge(edges_study_df, 
                       degrees_codes_df, 
                       how='left',
                       left_on='degree_full', 
                       right_on='degree_full')

Data Description

This data is extensively sparse. For example, some data points from funding rounds like "raised_amount_usd" are deliberately kept undisclosed, so in those cases we would get null values. Despite this sparsity, it presents a good opportunity to experiment with graph-based algorithms to solve predictive problems like the one we are attending in this article.

2) Problem Statement

Given data from previous funding rounds, we want to predict new investments. In other words, we want to predict fund-company affinity and whether a Fund will invest in a given Company.

Like many recommender systems, our methodology will rely on learning an appropriate embedding representation for every Company and Fund. This will provide us with features that are not only useful for training a binary classifier able to predict labels (Invest / No Invest) upon all possible edges between funds and companies, but to measure the affinity between all possible company-fund pair of nodes, and thus to estimate the propensity of funds to invest in each company.

For this purpose, we trained a Varational Graph AutoEncoder (GAE), a type of graph neural network (GNN) used for unsupervised learning on graph structured data.

3) Background Theory

What are autoencoders?

The traditional autoencoder is a neural network that contains an encoder and a decoder. The encoder takes a data point X as input and converts it to a lower-dimensional representation (embedding) Z. Then, the decoder takes the lower-dimensional representation Z and try to reconstruct X.

drawing

The loss function these network is trying to minimize is given by:

drawing

where X is the value of the real X (input) and X_hat is the reconstructed value (output). A good model will be able to reconstruct the original image by returning an image (X_hat) almost alike the original, which implies both are very proximate in the euclidean space. Therefore, we can be sure that the hidden layer (the embedding) provides with sufficient information to reconstruct original images. In other words, one can establish a 1–1 mapping between the original images and the embedding vectors, although the latter relies in a lower dimension.

Autoencoders on Graphs (GAE)

We want to apply the idea of GAE to graph-structured data but this isn't straightforward because graph data are irregular: each graph has a variable size of unordered nodes and each node in a graph has a different number of neighbours. However, understanding how autencoders, and neural networks in general, works with graph data is very simple. Just think of an image as a special case of a graph, in which each pixel is connected to its adjacent pixels: the one at its right, left, upper side and downside. Conversely, a graph can be represented with a matrix (aka adjacency matrix) that stores all edges between it's nodes. This matrix representation is called adjacency matrix, and allows graphs to be processed and "understood" by neural networks. Normally we assume the adjacency matrix is binary. The value 1 at row i and column j means that there is an edge between node i and node j. The value 0 at row m and column n means that there is no edge between node m and node n.

drawing

We use the feature matrix X to represent the features of each node from the input graph. Row i of the feature matrix X represents the feature embeddings for vertex i.

drawing

Given a graph with matrix adjacency A and feature matrix , we feed the encoder in order to produce a low dimensional embedding representation for each node in the graph. (We do this by using) This encoder consists of a graph convolutional network (GCN) that takes the adjacency matrix A and the feature matrix X as inputs and produces a low dimensional representation embedding X_hat (or Z) of the graph.

drawing

where A-tilde is the symmetrically normalized adjacency matrix.

drawing

Having an embedding in a latent space Z for each node of the graph, we want to reconstruct the adjacency matrix. One way to do that is by learning the similarity between each pair of nodes in the latent space. Since the inner product is a measure of similarity, we can learn the similarity of each node inside Z by applying the inner product on the latent variable Z and Z^T, and the we can use these similarities to predict our adjacency matrix.

Therefore, the decoder (generative model) is defined by an inner product between latent variable Z. The output of our decoder is a reconstructed adjacency matrix A-hat, which is defined as

drawing

#                     +company_invest_in_company_edges_investment_df['investor_object_id'].tolist())

# fund_nodes = set(fund_invest_in_company_edges_investment_df['investor_object_id'].tolist())

# persons_nodes = set(person_invest_in_company_edges_investment_df['investor_object_id'].tolist())

company_nodes = set(
    companies_df['id'].tolist()
    #+edges_investment_df['funded_object_id'].tolist()
    #+company_invest_in_company_edges_investment_df['investor_object_id'].tolist()
    #+relationships_df[relationships_df.relationship_object_id.str[0]=='c']['relationship_object_id'].tolist()+
)

fund_nodes = set(
    funds_df.id.tolist()
    #+fund_invest_in_company_edges_investment_df['investor_object_id'].tolist()
    #+relationships_df[relationships_df.relationship_object_id.str[0]=='f']['relationship_object_id'].tolist()
)

person_nodes = set(
   persons_df.id.tolist()
   #+person_invest_in_company_edges_investment_df['investor_object_id'].tolist()
   #+edges_study_df.object_id.tolist()
   #+relationships_df.person_object_id.tolist()
)

school_nodes = set(
    edges_study_df['degree_id'].tolist()
)


# companies_df = companies_df[companies_df.id.isin(company_nodes)]
# funds_df = funds_df[funds_df.id.isin(fund_nodes)]
# persons_df = persons_df[persons_df.id.isin(persons_nodes)]

# companies_id_mapper = {old_id: f'{new_id}' for new_id, old_id in enumerate(companies_df.id.tolist())}
# funds_id_mapper = {old_id: f'{new_id}' for new_id, old_id in enumerate(funds_df.id.tolist())}
# persons_id_mapper = {old_id: f'{new_id}' for new_id, old_id in enumerate(persons_df.id.tolist())}

companies_id_mapper = {old_id: f'{new_id}' for new_id, old_id in enumerate(company_nodes)}
funds_id_mapper = {old_id: f'{new_id}' for new_id, old_id in enumerate(fund_nodes)}
persons_id_mapper = {old_id: f'{new_id}' for new_id, old_id in enumerate(person_nodes)}
#school_id_mapper = {old_id: f'{new_id}' for new_id, old_id in enumerate(person_nodes)}
def create_persons_features_tensor():
    
    X_ = persons_df.copy()
    
    X_['tag_list'] = X_['tag_list'].apply(lambda x: x.split(', ') if not pd.isna(x) else None)
    
    top_tags = X_['tag_list'].explode().value_counts().head(20).index.tolist()

    for tag in top_tags:
        X_[f'tag_{tag}'] = X_['tag_list'].map(lambda x: (1 if tag in x else 0 )if x is not None else 0)

    cat_cols = ['category_code', 
              'status', 
              'country_code', 
              'state_code'
               ]

    num_cols = []
    
    bool_cols = ['tag_'+tag for tag in top_tags]

    X_ = X_[cat_cols+num_cols+bool_cols]
    for col in cat_cols:
        X_ = X_.join(pd.get_dummies(X_[col]).add_prefix(f'{col}_').fillna(0))
        del X_[col]

    return torch.from_numpy(X_.to_numpy()).float()


def create_funds_features_tensor():
    
    X_ = funds_df.copy()
    
    X_['tag_list'] = X_['tag_list'].apply(lambda x: x.split(', ') if not pd.isna(x) else None)
    
    top_tags = X_['tag_list'].explode().value_counts().head(20).index.tolist()

    for tag in top_tags:
        X_[f'tag_{tag}'] = X_['tag_list'].map(lambda x: (1 if tag in x else 0 )if x is not None else 0)

    cat_cols = ['category_code', 
              'status', 
              'country_code', 
              'state_code'
               ]

    num_cols = []
    
    bool_cols = ['tag_'+tag for tag in top_tags]

    X_ = X_[cat_cols+num_cols+bool_cols]
    for col in cat_cols:
        X_ = X_.join(pd.get_dummies(X_[col]).add_prefix(f'{col}_').fillna(0))
        del X_[col]

    return torch.from_numpy(X_.to_numpy()).float()


def create_companies_features_tensor():
    
    X_ = companies_df.copy()
    
    X_['tag_list'] = X_['tag_list'].apply(lambda x: x.split(', ') if not pd.isna(x) else None)

    top_tags = X_['tag_list'].explode().value_counts().head(20).index.tolist()

    for tag in top_tags:
        X_[f'tag_{tag}'] = X_['tag_list'].map(lambda x: (1 if tag in x else 0 )if x is not None else 0)

    cat_cols = ['category_code', 
              'status', 
              'country_code', 
              'state_code'
               ]


    num_cols = []

    bool_cols = ['tag_'+tag for tag in top_tags]

    X_ = X_[cat_cols+num_cols+bool_cols]
    for col in cat_cols:
        X_ = X_.join(pd.get_dummies(X_[col]).add_prefix(f'{col}_').fillna(0))
        del X_[col]

    return torch.from_numpy(X_.to_numpy()).float()
def create_person_invest_in_company_edges_features_tensor():
    
    X_ = edges_investment_df.copy()
    X_ = X_[X_.investor_object_id.str[0]=='p']
    
    # Maps ids
    X_['funded_object_id'] = X_['funded_object_id'].map(companies_id_mapper)
    X_['investor_object_id'] = X_['investor_object_id'].map(persons_id_mapper)
    
    # Filter out edges with ids that do not exist in persons_df/companies_df
    X_ = X_[~X_['funded_object_id'].isna()]
    X_ = X_[~X_['investor_object_id'].isna()]
    
    X_['days_since_funding'] = X_['funded_at'].apply(lambda x: int((dt.today() - x).days) 
                                  if not pd.isna(x) else x).fillna(-1)
    del X_['funded_at']
    
    X_ = X_.join(pd.get_dummies(X_['funding_round_type']).add_prefix('fundint_type'))
    del X_['funding_round_type']
    
    X_['funded_object_id'] = X_['funded_object_id'].astype(int)
    X_['investor_object_id'] = X_['investor_object_id'].astype(int)
    
    return torch.from_numpy(X_.fillna(0).to_numpy()).float()

def create_fund_invest_in_company_edges_features_tensor():
    
    X_ = edges_investment_df.copy()
    X_ = X_[X_.investor_object_id.str[0]=='f']
    
    # Maps ids
    X_['funded_object_id'] = X_['funded_object_id'].map(companies_id_mapper)
    X_['investor_object_id'] = X_['investor_object_id'].map(funds_id_mapper)
    
    # Filter out edges with ids that do not exist in persons_df/companies_df
    X_ = X_[~X_['funded_object_id'].isna()]
    X_ = X_[~X_['investor_object_id'].isna()]
    
    X_['days_since_funding'] = X_['funded_at'].apply(lambda x: int((dt.today() - x).days) 
                                  if not pd.isna(x) else x).fillna(-1)
    del X_['funded_at']
    
    X_ = X_.join(pd.get_dummies(X_['funding_round_type']).add_prefix('fundint_type'))
    del X_['funding_round_type']
    
    X_['funded_object_id'] = X_['funded_object_id'].astype(int)
    X_['investor_object_id'] = X_['investor_object_id'].astype(int)
    
    return torch.from_numpy(X_.fillna(0).to_numpy()).float()

def create_company_invest_in_company_edges_features_tensor():
    
    X_ = edges_investment_df.copy()
    X_ = X_[X_.investor_object_id.str[0]=='c']
    
    # Maps ids
    X_['funded_object_id'] = X_['funded_object_id'].map(companies_id_mapper)
    X_['investor_object_id'] = X_['investor_object_id'].map(companies_id_mapper)
    
    # Filter out edges with ids that do not exist in persons_df/companies_df
    X_ = X_[~X_['funded_object_id'].isna()]
    X_ = X_[~X_['investor_object_id'].isna()]
    
    X_['days_since_funding'] = X_['funded_at'].apply(lambda x: int((dt.today() - x).days) 
                                  if not pd.isna(x) else x).fillna(-1)
    del X_['funded_at']
    
    X_ = X_.join(pd.get_dummies(X_['funding_round_type']).add_prefix('fundint_type'))
    del X_['funding_round_type']
    
    X_['funded_object_id'] = X_['funded_object_id'].astype(int)
    X_['investor_object_id'] = X_['investor_object_id'].astype(int)
    
    return torch.from_numpy(X_.fillna(0).to_numpy()).float()

def create_person_went_to_school_edges():
    X_ = edges_study_df[['object_id', 'degree_id', 'days_since_graduation']].copy()
    
    # # Maps ids
    X_['object_id'] = X_['object_id'].map(persons_id_mapper)
    X_ = X_[~X_['object_id'].isna()]
    X_['object_id'] = X_['object_id'].astype(int)
    X_['degree_id'] = X_['degree_id'].str[2:].astype(int)
    X_ = X_[['object_id', 'degree_id', 'days_since_graduation']]

    return torch.from_numpy(X_.to_numpy()).float()


def create_relationship_edges_features_tensor(relationship_object_type):
    
    X_ = relationships_df[['person_object_id', 
                          'relationship_object_id', 
                          'start_at', 
                          'end_at',
                          'is_past']].copy()
    
    X_ = X_[X_.relationship_object_id.str[0]==relationship_object_type]
    
    # Map ids
    X_['person_object_id'] = X_['person_object_id'].map(persons_id_mapper)
    id_mapper = companies_id_mapper if relationship_object_type=='c' else \
                funds_id_mapper
    
    X_['relationship_object_id'] = X_['relationship_object_id'].map(id_mapper)
    
    # Filter out edges with object ids that do not exist in main nodes dataframe
    X_ = X_[~X_['person_object_id'].isna()]
    X_ = X_[~X_['relationship_object_id'].isna()]

    
    X_['start_at'] = pd.to_datetime(X_['start_at'])
    X_['end_at'] = pd.to_datetime(X_['end_at'])

    X_['days_since_start'] = X_['start_at'].apply(lambda x: int((dt.today() - x).days) 
                                  if not pd.isna(x) else x).fillna(-1)
    X_['days_since_end'] = X_['end_at'].apply(lambda x: int((dt.today() - x).days) 
                                  if not pd.isna(x) else x).fillna(-1)
    
    del X_['start_at'], X_['end_at']
    
    
    X_['person_object_id'] = X_['person_object_id'].astype(int)
    X_['relationship_object_id'] = X_['relationship_object_id'].astype(int)
    
    return torch.from_numpy(X_.fillna(0).to_numpy()).float()
# # TODO: PASAR A DICCIONARIOS

# data = HeteroData()

# # Nodes
# data['fund'].x = create_funds_features_tensor()
# data['company'].x = create_companies_features_tensor()
# data['person'].x = create_persons_features_tensor()
# data['school'].num_nodes = len(school_nodes)


# # Edges

# fund_invested_in_company_edges = create_fund_invest_in_company_edges_features_tensor()
# data['fund', 'invested_in', 'company'].edge_index = fund_invested_in_company_edges[:, :2].T.long()
# data['fund', 'invested_in', 'company'].edge_attr = fund_invested_in_company_edges[:, 2:].long()
# # data['fund', 'invested_in', 'company'].edge_label= torch.ones(fund_invested_in_company_edges.shape[0])\
# #                 .reshape(-1).long()

# company_invested_in_company_edges = create_company_invest_in_company_edges_features_tensor()
# data['company', 'invested_in', 'company'].edge_index = company_invested_in_company_edges[:, :2].T.long()
# data['company', 'invested_in', 'company'].edge_attr = company_invested_in_company_edges[:, 2:].long()
# # data['company', 'invested_in', 'company'].edge_label= torch.ones(company_invested_in_company_edges.shape[0])\
# #                 .reshape(-1).long()


# person_invested_in_company_edges = create_person_invest_in_company_edges_features_tensor()
# data['person', 'invested_in', 'company'].edge_index = person_invested_in_company_edges[:, :2].T.long()
# data['person', 'invested_in', 'company'].edge_attr = person_invested_in_company_edges[:, 2:].long()
# # data['person', 'invested_in', 'company'].edge_label= torch.ones(person_invested_in_company_edges.shape[0])\
# #                 .reshape(-1).long()

# person_works_at_copmany_edges = create_relationship_edges_features_tensor('c')
# data['person', 'works_at', 'company'].edge_index = person_works_at_copmany_edges[:, :2].T.long()
# data['person', 'works_at', 'company'].edge_attr = person_works_at_copmany_edges[:, 2:].long()
# # data['person', 'works_at', 'company'].edge_label = torch.ones(person_works_at_copmany_edges.shape[0])\
# #                 .reshape(-1, 1).long()

# person_works_at_fund_edges = create_relationship_edges_features_tensor('f')
# data['person', 'works_at', 'fund'].edge_index = person_works_at_fund_edges[:, :2].T.long()
# data['person', 'works_at', 'fund'].edge_attr = person_works_at_fund_edges[:, 2:].long()
# # data['person', 'works_at', 'fund'].edge_label = torch.ones(person_works_at_fund_edges.shape[0])\
# #                 .reshape(-1, 1).long()


# person_went_to_school_edges = create_person_went_to_school_edges()
# data['person', 'went_to', 'school'].edge_index = person_went_to_school_edges[:, :2].T.long()
# data['person', 'went_to', 'school'].edge_attr = person_went_to_school_edges[:, 2:].long()
# #data['person', 'went_to', 'school'].edge_label = torch.ones(person_went_to_school_edges.shape[0])\
# #                 .reshape(-1, 1).long()
from torch_geometric.data import HeteroData

# TODO: PASAR A DICCIONARIOS

data = HeteroData()

# Nodes
data['fund'].num_nodes = len(fund_nodes)
data['company'].num_nodes = len(company_nodes)
data['person'].num_nodes = len(person_nodes)
data['school'].num_nodes = len(school_nodes)


# Edges

fund_invested_in_company_edges = create_fund_invest_in_company_edges_features_tensor()
data['fund', 'invested_in', 'company'].edge_index = fund_invested_in_company_edges[:, :2].T.long()

company_invested_in_company_edges = create_company_invest_in_company_edges_features_tensor()
data['company', 'invested_in', 'company'].edge_index = company_invested_in_company_edges[:, :2].T.long()


person_invested_in_company_edges = create_person_invest_in_company_edges_features_tensor()
data['person', 'invested_in', 'company'].edge_index = person_invested_in_company_edges[:, :2].T.long()

person_works_at_copmany_edges = create_relationship_edges_features_tensor('c')
data['person', 'works_at', 'company'].edge_index = person_works_at_copmany_edges[:, :2].T.long()

person_works_at_fund_edges = create_relationship_edges_features_tensor('f')
data['person', 'works_at', 'fund'].edge_index = person_works_at_fund_edges[:, :2].T.long()

person_went_to_school_edges = create_person_went_to_school_edges()
data['person', 'went_to', 'school'].edge_index = person_went_to_school_edges[:, :2].T.long()
data
HeteroData(
  fund={ num_nodes=11652 },
  company={ num_nodes=196553 },
  person={ num_nodes=226708 },
  school={ num_nodes=59147 },
  (fund, invested_in, company)={ edge_index=[2, 45621] },
  (company, invested_in, company)={ edge_index=[2, 5693] },
  (person, invested_in, company)={ edge_index=[2, 12319] },
  (person, works_at, company)={ edge_index=[2, 364884] },
  (person, works_at, fund)={ edge_index=[2, 35292] },
  (person, went_to, school)={ edge_index=[2, 75628] }
)
data.metadata()
(['fund', 'company', 'person', 'school'],
 [('fund', 'invested_in', 'company'),
  ('company', 'invested_in', 'company'),
  ('person', 'invested_in', 'company'),
  ('person', 'works_at', 'company'),
  ('person', 'works_at', 'fund'),
  ('person', 'went_to', 'school')])
data['fund'].x = torch.ones(data['fund'].num_nodes, device=device).reshape(-1, 1)
del data['fund'].num_nodes

data['company'].x = torch.ones(data['company'].num_nodes, device=device).reshape(-1, 1)
del data['company'].num_nodes

data['person'].x = torch.ones(data['person'].num_nodes, device=device).reshape(-1, 1)
del data['person'].num_nodes

data['school'].x = torch.ones(data['school'].num_nodes, device=device).reshape(-1, 1)
del data['school'].num_nodes
# data['school'].x = torch.eye(data['school'].num_nodes, device=device)
# del data['school'].num_nodes
data = T.ToUndirected()(data)
data
HeteroData(
  fund={ x=[11652, 1] },
  company={ x=[196553, 1] },
  person={ x=[226708, 1] },
  school={ x=[59147, 1] },
  (fund, invested_in, company)={ edge_index=[2, 45621] },
  (company, invested_in, company)={ edge_index=[2, 11374] },
  (person, invested_in, company)={ edge_index=[2, 12319] },
  (person, works_at, company)={ edge_index=[2, 364884] },
  (person, works_at, fund)={ edge_index=[2, 35292] },
  (person, went_to, school)={ edge_index=[2, 75628] },
  (company, rev_invested_in, fund)={ edge_index=[2, 45621] },
  (company, rev_invested_in, person)={ edge_index=[2, 12319] },
  (company, rev_works_at, person)={ edge_index=[2, 364884] },
  (fund, rev_works_at, person)={ edge_index=[2, 35292] },
  (school, rev_went_to, person)={ edge_index=[2, 75628] }
)
train_data, val_data, test_data = T.RandomLinkSplit(
    num_val=0.3,
    num_test=0.1,
    neg_sampling_ratio=0.0,
    edge_types=[('fund', 'invested_in', 'company')],
    rev_edge_types=[('company', 'rev_invested_in', 'fund')],
)(data)
# We have an unbalanced dataset with many labels for rating 3 and 4, and very
# few for 0 and 1. Therefore we use a weighted MSE loss.

use_weighted_loss = False
if use_weighted_loss:
    weight = torch.bincount(train_data['fund', 'company'].edge_label)
    weight = weight.max() / weight
else:
    weight = None


def weighted_mse_loss(pred, target, weight=None):
    weight = 1. if weight is None else weight[target].to(pred.dtype)
    return (weight * (pred - target.to(pred.dtype)).pow(2)).mean()
import torch.nn.functional as F
from torch.nn import Linear
import torch_geometric.transforms as T
from torch_geometric.nn import SAGEConv, to_hetero

class GNNEncoder(torch.nn.Module):
    def __init__(self, hidden_channels, out_channels):
        super().__init__()
        self.conv1 = SAGEConv((-1, -1), hidden_channels)
        self.conv2 = SAGEConv((-1, -1), out_channels)

    def forward(self, x, edge_index):
        x = self.conv1(x, edge_index).relu()
        x = self.conv2(x, edge_index)
        return x


class EdgeDecoder(torch.nn.Module):
    def __init__(self, hidden_channels):
        super().__init__()
        self.lin1 = Linear(2 * hidden_channels, hidden_channels)
        self.lin2 = Linear(hidden_channels, 1)

    def forward(self, z_dict, edge_label_index):
        row, col = edge_label_index
        z = torch.cat([z_dict['fund'][row], z_dict['company'][col]], dim=-1)

        z = self.lin1(z).relu()
        z = self.lin2(z)
        return z.view(-1)


class Model(torch.nn.Module):
    def __init__(self, hidden_channels):
        super().__init__()
        self.encoder = GNNEncoder(hidden_channels, hidden_channels)
        self.encoder = to_hetero(self.encoder, data.metadata(), aggr='sum')
        #self.encoder = HeteroGNN(data.metadata(), hidden_channels, hidden_channels)
        self.decoder = EdgeDecoder(hidden_channels)

    def forward(self, x_dict, edge_index_dict, edge_label_index):
        z_dict = self.encoder(x_dict, edge_index_dict)
        return self.decoder(z_dict, edge_label_index)
    
model = Model(hidden_channels=32).to(device)
# of parameters can be inferred:

with torch.no_grad():
    model.encoder(train_data.x_dict, train_data.edge_index_dict)

optimizer = torch.optim.Adam(model.parameters(), lr=0.01)


def train():
    model.train()
    optimizer.zero_grad()
    pred = model(train_data.x_dict, train_data.edge_index_dict,
                 train_data['fund', 'company'].edge_label_index)
    target = train_data['fund', 'company'].edge_label
    loss = weighted_mse_loss(pred, target, weight)
    loss.backward()
    optimizer.step()
    return float(loss)


@torch.no_grad()
def test(data):
    model.eval()
    pred = model(data.x_dict, data.edge_index_dict,
                 data['fund', 'company'].edge_label_index)
    pred = pred.clamp(min=0, max=1)
    target = data['fund', 'company'].edge_label.float()
    rmse = F.mse_loss(pred, target).sqrt()
    return float(rmse)


for epoch in range(0, 301):
    loss = train()
    train_rmse = test(train_data)
    val_rmse = test(val_data)
    test_rmse = test(test_data)
    print(f'Epoch: {epoch:03d}, Loss: {loss:.4f}, Train: {train_rmse:.4f}, '
          f'Val: {val_rmse:.4f}, Test: {test_rmse:.4f}')
Epoch: 000, Loss: 1.7377, Train: 0.0000, Val: 0.0000, Test: 0.0000
Epoch: 001, Loss: 2.2870, Train: 0.0000, Val: 0.0111, Test: 0.0099
Epoch: 002, Loss: 0.1861, Train: 0.2997, Val: 0.3363, Test: 0.3263
Epoch: 003, Loss: 0.0898, Train: 0.5201, Val: 0.5408, Test: 0.5349
Epoch: 004, Loss: 0.2705, Train: 0.4316, Val: 0.4574, Test: 0.4507
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
/var/folders/by/t7qyz4pn5jsg1132688qnk780000gn/T/ipykernel_83961/3316225540.py in <module>
     34     loss = train()
     35     train_rmse = test(train_data)
---> 36     val_rmse = test(val_data)
     37     test_rmse = test(test_data)
     38     print(f'Epoch: {epoch:03d}, Loss: {loss:.4f}, Train: {train_rmse:.4f}, '

~/anaconda3/lib/python3.8/site-packages/torch/autograd/grad_mode.py in decorate_context(*args, **kwargs)
     26         def decorate_context(*args, **kwargs):
     27             with self.__class__():
---> 28                 return func(*args, **kwargs)
     29         return cast(F, decorate_context)
     30 

/var/folders/by/t7qyz4pn5jsg1132688qnk780000gn/T/ipykernel_83961/3316225540.py in test(data)
     23 def test(data):
     24     model.eval()
---> 25     pred = model(data.x_dict, data.edge_index_dict,
     26                  data['fund', 'company'].edge_label_index)
     27     pred = pred.clamp(min=0, max=1)

~/anaconda3/lib/python3.8/site-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
   1100         if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks
   1101                 or _global_forward_hooks or _global_forward_pre_hooks):
-> 1102             return forward_call(*input, **kwargs)
   1103         # Do not call functions when jit is used
   1104         full_backward_hooks, non_full_backward_hooks = [], []

/var/folders/by/t7qyz4pn5jsg1132688qnk780000gn/T/ipykernel_83961/2799978733.py in forward(self, x_dict, edge_index_dict, edge_label_index)
     40 
     41     def forward(self, x_dict, edge_index_dict, edge_label_index):
---> 42         z_dict = self.encoder(x_dict, edge_index_dict)
     43         return self.decoder(z_dict, edge_label_index)
     44 

~/anaconda3/lib/python3.8/site-packages/torch/fx/graph_module.py in wrapped_call(self, *args, **kwargs)
    604             try:
    605                 if cls_call is not None:
--> 606                     return cls_call(self, *args, **kwargs)
    607                 else:
    608                     return super(type(self), self).__call__(*args, **kwargs)

~/anaconda3/lib/python3.8/site-packages/torch/fx/graph_module.py in wrapped_call(self, *args, **kwargs)
    606                     return cls_call(self, *args, **kwargs)
    607                 else:
--> 608                     return super(type(self), self).__call__(*args, **kwargs)
    609             except Exception as e:
    610                 assert e.__traceback__

~/anaconda3/lib/python3.8/site-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
   1100         if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks
   1101                 or _global_forward_hooks or _global_forward_pre_hooks):
-> 1102             return forward_call(*input, **kwargs)
   1103         # Do not call functions when jit is used
   1104         full_backward_hooks, non_full_backward_hooks = [], []

<eval_with_key>.1 in forward(self, x, edge_index)
     43     conv2__company2 = self.conv2.company__invested_in__company(relu__company, edge_index__company__invested_in__company);  edge_index__company__invested_in__company = None
     44     conv2__company3 = self.conv2.person__invested_in__company((relu__person, relu__company), edge_index__person__invested_in__company);  edge_index__person__invested_in__company = None
---> 45     conv2__company4 = self.conv2.person__works_at__company((relu__person, relu__company), edge_index__person__works_at__company);  edge_index__person__works_at__company = None
     46     conv2__fund1 = self.conv2.person__works_at__fund((relu__person, relu__fund), edge_index__person__works_at__fund);  edge_index__person__works_at__fund = None
     47     conv2__school = self.conv2.person__went_to__school((relu__person, relu__school), edge_index__person__went_to__school);  edge_index__person__went_to__school = None

~/anaconda3/lib/python3.8/site-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
   1100         if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks
   1101                 or _global_forward_hooks or _global_forward_pre_hooks):
-> 1102             return forward_call(*input, **kwargs)
   1103         # Do not call functions when jit is used
   1104         full_backward_hooks, non_full_backward_hooks = [], []

~/anaconda3/lib/python3.8/site-packages/torch_geometric/nn/conv/sage_conv.py in forward(self, x, edge_index, size)
    120 
    121         # propagate_type: (x: OptPairTensor)
--> 122         out = self.propagate(edge_index, x=x, size=size)
    123         out = self.lin_l(out)
    124 

~/anaconda3/lib/python3.8/site-packages/torch_geometric/nn/conv/message_passing.py in propagate(self, edge_index, size, **kwargs)
    378                         aggr_kwargs = res[0] if isinstance(res, tuple) else res
    379 
--> 380                 out = self.aggregate(out, **aggr_kwargs)
    381 
    382                 for hook in self._aggregate_forward_hooks.values():

~/anaconda3/lib/python3.8/site-packages/torch_geometric/nn/conv/message_passing.py in aggregate(self, inputs, index, ptr, dim_size)
    501         as specified in :meth:`__init__` by the :obj:`aggr` argument.
    502         """
--> 503         return self.aggr_module(inputs, index, ptr=ptr, dim_size=dim_size,
    504                                 dim=self.node_dim)
    505 

~/anaconda3/lib/python3.8/site-packages/torch_geometric/nn/aggr/base.py in __call__(self, x, index, ptr, dim_size, dim)
     63                                  f">= '{int(index.max()) + 1}')")
     64 
---> 65         return super().__call__(x, index, ptr, dim_size, dim)
     66 
     67     def __repr__(self) -> str:

~/anaconda3/lib/python3.8/site-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
   1100         if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks
   1101                 or _global_forward_hooks or _global_forward_pre_hooks):
-> 1102             return forward_call(*input, **kwargs)
   1103         # Do not call functions when jit is used
   1104         full_backward_hooks, non_full_backward_hooks = [], []

~/anaconda3/lib/python3.8/site-packages/torch_geometric/nn/aggr/basic.py in forward(self, x, index, ptr, dim_size, dim)
     13                 ptr: Optional[Tensor] = None, dim_size: Optional[int] = None,
     14                 dim: int = -2) -> Tensor:
---> 15         return self.reduce(x, index, ptr, dim_size, dim, reduce='mean')
     16 
     17 

~/anaconda3/lib/python3.8/site-packages/torch_geometric/nn/aggr/base.py in reduce(self, x, index, ptr, dim_size, dim, reduce)
    102 
    103         assert index is not None
--> 104         return scatter(x, index, dim=dim, dim_size=dim_size, reduce=reduce)
    105 
    106     def to_dense_batch(self, x: Tensor, index: Optional[Tensor] = None,

~/anaconda3/lib/python3.8/site-packages/torch_scatter/scatter.py in scatter(src, index, dim, out, dim_size, reduce)
    154         return scatter_mul(src, index, dim, out, dim_size)
    155     elif reduce == 'mean':
--> 156         return scatter_mean(src, index, dim, out, dim_size)
    157     elif reduce == 'min':
    158         return scatter_min(src, index, dim, out, dim_size)[0]

~/anaconda3/lib/python3.8/site-packages/torch_scatter/scatter.py in scatter_mean(src, index, dim, out, dim_size)
     39                  out: Optional[torch.Tensor] = None,
     40                  dim_size: Optional[int] = None) -> torch.Tensor:
---> 41     out = scatter_sum(src, index, dim, out, dim_size)
     42     dim_size = out.size(dim)
     43 

~/anaconda3/lib/python3.8/site-packages/torch_scatter/scatter.py in scatter_sum(src, index, dim, out, dim_size)
     19             size[dim] = int(index.max()) + 1
     20         out = torch.zeros(size, dtype=src.dtype, device=src.device)
---> 21         return out.scatter_add_(dim, index, src)
     22     else:
     23         return out.scatter_add_(dim, index, src)

KeyboardInterrupt: 
with torch.no_grad():
    p = model.encoder(test_data.x_dict, test_data.edge_index_dict)
emb_torch = torch.cat([p['company'],
                       p['fund'],
                       p['person'],
                       p['school']], 0)
emb_df = (
    pd.DataFrame(
        emb_torch
    )
)

company_emb_df = (
    pd.DataFrame(
        p['company']
    )
)

fund_emb_df = (
    pd.DataFrame(
        p['fund']
    )
)


person_emb_df = (
    pd.DataFrame(
        p['person']
    )
)


school_emb_df = (
    pd.DataFrame(
        p['school']
    )
)
from sklearn.decomposition import PCA

# fit and transform using PCA

pca = PCA(n_components=2)
emb2d = pca.fit_transform(emb_df)

pca = PCA(n_components=2)
company_emb2d = pca.fit_transform(company_emb_df)

pca = PCA(n_components=2)
fund_emb2d = pca.fit_transform(fund_emb_df)

pca = PCA(n_components=2)
person_emb2d = pca.fit_transform(person_emb_df)

pca = PCA(n_components=2)
school_emb2d = pca.fit_transform(school_emb_df)
len(school_emb2d)
494060
import matplotlib.pyplot as plt


plt.title("node embedding in 2D")
plt.scatter(emb2d[:len(p['company']), 0],
            emb2d[:len(p['company']), 1], label='company')

plt.scatter(emb2d[len(p['company']):len(p['company'])+len(p['fund']), 0], 
            emb2d[len(p['company']):len(p['company'])+len(p['fund']), 1], label='fund')

plt.scatter(emb2d[len(p['company'])+len(p['fund']):len(p['company'])+len(p['fund'])+len(p['person']), 0], 
            emb2d[len(p['company'])+len(p['fund']):len(p['company'])+len(p['fund'])+len(p['person']), 1], label='person')

plt.scatter( emb2d[len(p['company'])+len(p['fund'])+len(p['person']):, 0], 
             emb2d[len(p['company'])+len(p['fund'])+len(p['person']):, 1], label='school')
plt.legend()
plt.show()
plt.title("Companies embedding in 2D")
plt.scatter(company_emb2d[:, 0], company_emb2d[:, 1], label='company')
plt.legend()
plt.show()
plt.title("Funds embedding in 2D")
plt.scatter(fund_emb2d[:, 0], fund_emb2d[:, 1], label='fund')
plt.legend()
plt.show()
edges_investment_df.funding_round_type.value_counts()
series-a          15390
angel             13973
venture           13938
series-c+         10128
series-b           8377
other              1294
private-equity      784
post-ipo             38
crowdfunding         21
Name: funding_round_type, dtype: int64
#                     ][['investor_object_id', 'funded_object_id']].to_numpy().tolist()

edges_investing_list = edges_investment_df[['investor_object_id', 'funded_object_id']].to_numpy().tolist()
                                           
edges_degree_list = edges_study_df[['object_id', 'degree_id']].to_numpy().tolist()

edges_work_list = relationships_df[['person_object_id', 'relationship_object_id']].to_numpy().tolist()
edges_fund_company_investing_list = [(x, y) for x, y in edges_investing_list if x[0]=='f' and y[0]=='c']
print(len(edges_investing_list))
print(len(edges_fund_company_investing_list))
63943
45777
school_nodes = edges_study_df.degree_id.unique().tolist()
import networkx as nx
G = nx.Graph()
G.add_nodes_from(company_nodes, bipartite='companies')
G.add_nodes_from(fund_nodes, bipartite='funds')
G.add_nodes_from(school_nodes, bipartite='schools')
G.add_nodes_from(person_nodes, bipartite='persons')

G.add_edges_from(edges_fund_company_investing_list, bipartite='invested_in')
G.add_edges_from(edges_degree_list, bipartite='study_at')
G.add_edges_from(edges_work_list, bipartite='worked_at')
from tqdm import tqdm_notebook as tqdm

nodes_bi = [node[0] for node in tqdm(list(G.nodes(data=True))) 
            if node[1].get('bipartite') is not None
           ]
/var/folders/by/t7qyz4pn5jsg1132688qnk780000gn/T/ipykernel_83961/892818454.py:3: TqdmDeprecationWarning: This function will be removed in tqdm==5.0.0
Please use `tqdm.notebook.tqdm` instead of `tqdm.tqdm_notebook`
  nodes_bi = [node[0] for node in tqdm(list(G.nodes(data=True)))
list(G.nodes(data=True))[0]
('c:264657', {'bipartite': 'companies'})
G_bi = G.subgraph(nodes_bi)
Gcc = G_bi.subgraph(sorted(nx.connected_components(G_bi), key=len, reverse=True)[1])
len(Gcc.edges())
50
edges_fund_company_investing_list[0]
('f:17', 'c:28')
Gcc = nx.ego_graph(G, 'f:1985', radius=3, center=False, undirected=False, distance=None)
len(Gcc.edges())
3480
degrees_Gcc = Gcc.degree()
Gcc.nodes(data=True)
NodeDataView({'c:264884': {'bipartite': 'companies'}, 'c:13927': {'bipartite': 'companies'}, 'c:231763': {'bipartite': 'companies'}, 'p:232832': {'bipartite': 'persons'}, 'c:520': {'bipartite': 'companies'}, 'f:5568': {'bipartite': 'funds'}, 'c:40310': {'bipartite': 'companies'}, 'd:38612': {'bipartite': 'schools'}, 'p:43129': {'bipartite': 'persons'}, 'c:136044': {'bipartite': 'companies'}, 'c:13039': {'bipartite': 'companies'}, 'c:150384': {'bipartite': 'companies'}, 'c:13679': {'bipartite': 'companies'}, 'c:159048': {'bipartite': 'companies'}, 'c:46032': {'bipartite': 'companies'}, 'c:274612': {'bipartite': 'companies'}, 'p:110515': {'bipartite': 'persons'}, 'p:205200': {'bipartite': 'persons'}, 'c:46080': {'bipartite': 'companies'}, 'c:104607': {'bipartite': 'companies'}, 'c:11307': {'bipartite': 'companies'}, 'c:668': {'bipartite': 'companies'}, 'p:26309': {'bipartite': 'persons'}, 'p:197896': {'bipartite': 'persons'}, 'c:65484': {'bipartite': 'companies'}, 'p:121661': {'bipartite': 'persons'}, 'c:149052': {'bipartite': 'companies'}, 'c:39358': {'bipartite': 'companies'}, 'p:23637': {'bipartite': 'persons'}, 'p:26500': {'bipartite': 'persons'}, 'c:17884': {'bipartite': 'companies'}, 'c:49442': {'bipartite': 'companies'}, 'f:691': {'bipartite': 'funds'}, 'p:168059': {'bipartite': 'persons'}, 'c:73484': {'bipartite': 'companies'}, 'p:228336': {'bipartite': 'persons'}, 'p:63304': {'bipartite': 'persons'}, 'c:6357': {'bipartite': 'companies'}, 'p:229684': {'bipartite': 'persons'}, 'p:29655': {'bipartite': 'persons'}, 'c:15585': {'bipartite': 'companies'}, 'p:23316': {'bipartite': 'persons'}, 'p:232193': {'bipartite': 'persons'}, 'c:17315': {'bipartite': 'companies'}, 'p:12879': {'bipartite': 'persons'}, 'c:1733': {'bipartite': 'companies'}, 'p:30160': {'bipartite': 'persons'}, 'p:263695': {'bipartite': 'persons'}, 'p:7139': {'bipartite': 'persons'}, 'c:9263': {'bipartite': 'companies'}, 'c:322': {'bipartite': 'companies'}, 'f:4106': {'bipartite': 'funds'}, 'c:81425': {'bipartite': 'companies'}, 'c:38123': {'bipartite': 'companies'}, 'p:86304': {'bipartite': 'persons'}, 'c:20057': {'bipartite': 'companies'}, 'p:232166': {'bipartite': 'persons'}, 'p:236377': {'bipartite': 'persons'}, 'c:163002': {'bipartite': 'companies'}, 'p:32908': {'bipartite': 'persons'}, 'c:3644': {'bipartite': 'companies'}, 'c:36934': {'bipartite': 'companies'}, 'c:35413': {'bipartite': 'companies'}, 'p:255821': {'bipartite': 'persons'}, 'p:191948': {'bipartite': 'persons'}, 'c:20751': {'bipartite': 'companies'}, 'p:194496': {'bipartite': 'persons'}, 'c:222785': {'bipartite': 'companies'}, 'c:23695': {'bipartite': 'companies'}, 'p:251109': {'bipartite': 'persons'}, 'p:191952': {'bipartite': 'persons'}, 'c:259513': {'bipartite': 'companies'}, 'c:42841': {'bipartite': 'companies'}, 'c:40051': {'bipartite': 'companies'}, 'c:9784': {'bipartite': 'companies'}, 'p:205462': {'bipartite': 'persons'}, 'c:43823': {'bipartite': 'companies'}, 'c:22299': {'bipartite': 'companies'}, 'p:238356': {'bipartite': 'persons'}, 'p:222881': {'bipartite': 'persons'}, 'c:48307': {'bipartite': 'companies'}, 'p:27500': {'bipartite': 'persons'}, 'c:215550': {'bipartite': 'companies'}, 'p:255797': {'bipartite': 'persons'}, 'c:55121': {'bipartite': 'companies'}, 'p:259416': {'bipartite': 'persons'}, 'c:256491': {'bipartite': 'companies'}, 'c:10856': {'bipartite': 'companies'}, 'c:42550': {'bipartite': 'companies'}, 'c:280': {'bipartite': 'companies'}, 'p:35255': {'bipartite': 'persons'}, 'c:13341': {'bipartite': 'companies'}, 'c:1068': {'bipartite': 'companies'}, 'p:10896': {'bipartite': 'persons'}, 'c:16551': {'bipartite': 'companies'}, 'c:264843': {'bipartite': 'companies'}, 'c:140521': {'bipartite': 'companies'}, 'c:58494': {'bipartite': 'companies'}, 'p:22578': {'bipartite': 'persons'}, 'p:221343': {'bipartite': 'persons'}, 'p:152032': {'bipartite': 'persons'}, 'p:239609': {'bipartite': 'persons'}, 'p:93563': {'bipartite': 'persons'}, 'c:17575': {'bipartite': 'companies'}, 'p:77176': {'bipartite': 'persons'}, 'c:25507': {'bipartite': 'companies'}, 'p:21465': {'bipartite': 'persons'}, 'p:191403': {'bipartite': 'persons'}, 'c:15563': {'bipartite': 'companies'}, 'p:3315': {'bipartite': 'persons'}, 'c:18224': {'bipartite': 'companies'}, 'c:46475': {'bipartite': 'companies'}, 'c:148716': {'bipartite': 'companies'}, 'p:72956': {'bipartite': 'persons'}, 'c:53625': {'bipartite': 'companies'}, 'p:23639': {'bipartite': 'persons'}, 'p:191405': {'bipartite': 'persons'}, 'p:225092': {'bipartite': 'persons'}, 'c:16892': {'bipartite': 'companies'}, 'c:37647': {'bipartite': 'companies'}, 'c:45212': {'bipartite': 'companies'}, 'c:51890': {'bipartite': 'companies'}, 'p:232187': {'bipartite': 'persons'}, 'c:41538': {'bipartite': 'companies'}, 'p:67630': {'bipartite': 'persons'}, 'c:53695': {'bipartite': 'companies'}, 'p:210569': {'bipartite': 'persons'}, 'c:44952': {'bipartite': 'companies'}, 'p:58875': {'bipartite': 'persons'}, 'c:45964': {'bipartite': 'companies'}, 'c:71824': {'bipartite': 'companies'}, 'p:195239': {'bipartite': 'persons'}, 'c:44733': {'bipartite': 'companies'}, 'c:79681': {'bipartite': 'companies'}, 'c:24884': {'bipartite': 'companies'}, 'c:60': {'bipartite': 'companies'}, 'd:38611': {'bipartite': 'schools'}, 'p:253843': {'bipartite': 'persons'}, 'f:334': {'bipartite': 'funds'}, 'c:5674': {'bipartite': 'companies'}, 'p:193400': {'bipartite': 'persons'}, 'p:223522': {'bipartite': 'persons'}, 'c:15294': {'bipartite': 'companies'}, 'c:3825': {'bipartite': 'companies'}, 'c:28193': {'bipartite': 'companies'}, 'p:89520': {'bipartite': 'persons'}, 'c:1345': {'bipartite': 'companies'}, 'c:630': {'bipartite': 'companies'}, 'p:255722': {'bipartite': 'persons'}, 'c:46181': {'bipartite': 'companies'}, 'd:259': {'bipartite': 'schools'}, 'p:1258': {'bipartite': 'persons'}, 'p:190746': {'bipartite': 'persons'}, 'f:13100': {'bipartite': 'funds'}, 'c:9599': {'bipartite': 'companies'}, 'p:30161': {'bipartite': 'persons'}, 'c:30037': {'bipartite': 'companies'}, 'c:177606': {'bipartite': 'companies'}, 'f:152': {'bipartite': 'funds'}, 'c:28033': {'bipartite': 'companies'}, 'p:48645': {'bipartite': 'persons'}, 'c:226452': {'bipartite': 'companies'}, 'p:8326': {'bipartite': 'persons'}, 'c:1448': {'bipartite': 'companies'}, 'c:190417': {'bipartite': 'companies'}, 'c:36484': {'bipartite': 'companies'}, 'c:233670': {'bipartite': 'companies'}, 'c:77139': {'bipartite': 'companies'}, 'p:224495': {'bipartite': 'persons'}, 'p:1223': {'bipartite': 'persons'}, 'c:25553': {'bipartite': 'companies'}, 'c:215669': {'bipartite': 'companies'}, 'p:228689': {'bipartite': 'persons'}, 'c:30234': {'bipartite': 'companies'}, 'c:18163': {'bipartite': 'companies'}, 'p:132563': {'bipartite': 'persons'}, 'c:27701': {'bipartite': 'companies'}, 'p:224503': {'bipartite': 'persons'}, 'p:228142': {'bipartite': 'persons'}, 'f:1032': {'bipartite': 'funds'}, 'p:189151': {'bipartite': 'persons'}, 'c:1745': {'bipartite': 'companies'}, 'p:187115': {'bipartite': 'persons'}, 'c:1205': {'bipartite': 'companies'}, 'c:56137': {'bipartite': 'companies'}, 'c:162946': {'bipartite': 'companies'}, 'p:128550': {'bipartite': 'persons'}, 'p:34142': {'bipartite': 'persons'}, 'c:142052': {'bipartite': 'companies'}, 'd:9794': {'bipartite': 'schools'}, 'p:251524': {'bipartite': 'persons'}, 'p:6228': {'bipartite': 'persons'}, 'p:34822': {'bipartite': 'persons'}, 'p:196227': {'bipartite': 'persons'}, 'c:282595': {'bipartite': 'companies'}, 'c:21203': {'bipartite': 'companies'}, 'p:196239': {'bipartite': 'persons'}, 'c:58133': {'bipartite': 'companies'}, 'c:40631': {'bipartite': 'companies'}, 'c:24295': {'bipartite': 'companies'}, 'c:59120': {'bipartite': 'companies'}, 'c:182777': {'bipartite': 'companies'}, 'p:46075': {'bipartite': 'persons'}, 'c:61768': {'bipartite': 'companies'}, 'c:35622': {'bipartite': 'companies'}, 'p:238377': {'bipartite': 'persons'}, 'c:168703': {'bipartite': 'companies'}, 'c:20062': {'bipartite': 'companies'}, 'p:9662': {'bipartite': 'persons'}, 'c:5926': {'bipartite': 'companies'}, 'c:143221': {'bipartite': 'companies'}, 'p:29656': {'bipartite': 'persons'}, 'c:7100': {'bipartite': 'companies'}, 'p:261394': {'bipartite': 'persons'}, 'c:9038': {'bipartite': 'companies'}, 'p:204789': {'bipartite': 'persons'}, 'c:2647': {'bipartite': 'companies'}, 'c:63362': {'bipartite': 'companies'}, 'c:241734': {'bipartite': 'companies'}, 'c:17751': {'bipartite': 'companies'}, 'c:162667': {'bipartite': 'companies'}, 'c:39871': {'bipartite': 'companies'}, 'c:61977': {'bipartite': 'companies'}, 'c:833': {'bipartite': 'companies'}, 'p:124059': {'bipartite': 'persons'}, 'c:44640': {'bipartite': 'companies'}, 'c:149850': {'bipartite': 'companies'}, 'p:191950': {'bipartite': 'persons'}, 'p:109648': {'bipartite': 'persons'}, 'c:9310': {'bipartite': 'companies'}, 'c:77443': {'bipartite': 'companies'}, 'p:8434': {'bipartite': 'persons'}, 'p:266318': {'bipartite': 'persons'}, 'p:228125': {'bipartite': 'persons'}, 'c:28382': {'bipartite': 'companies'}, 'c:2372': {'bipartite': 'companies'}, 'c:17654': {'bipartite': 'companies'}, 'c:72219': {'bipartite': 'companies'}, 'c:12196': {'bipartite': 'companies'}, 'p:12891': {'bipartite': 'persons'}, 'c:152645': {'bipartite': 'companies'}, 'p:22159': {'bipartite': 'persons'}, 'p:212620': {'bipartite': 'persons'}, 'c:15808': {'bipartite': 'companies'}, 'c:58169': {'bipartite': 'companies'}, 'p:120684': {'bipartite': 'persons'}, 'c:144847': {}, 'p:187145': {'bipartite': 'persons'}, 'c:20953': {'bipartite': 'companies'}, 'c:43700': {'bipartite': 'companies'}, 'c:158305': {'bipartite': 'companies'}, 'p:1261': {'bipartite': 'persons'}, 'c:5611': {'bipartite': 'companies'}, 'c:49179': {'bipartite': 'companies'}, 'p:12884': {'bipartite': 'persons'}, 'p:53504': {'bipartite': 'persons'}, 'p:231570': {'bipartite': 'persons'}, 'c:246': {'bipartite': 'companies'}, 'p:268522': {'bipartite': 'persons'}, 'c:15611': {'bipartite': 'companies'}, 'c:6725': {'bipartite': 'companies'}, 'c:37709': {'bipartite': 'companies'}, 'c:80610': {'bipartite': 'companies'}, 'c:72062': {'bipartite': 'companies'}, 'p:196238': {'bipartite': 'persons'}, 'c:158405': {'bipartite': 'companies'}, 'p:23638': {'bipartite': 'persons'}, 'p:205654': {'bipartite': 'persons'}, 'c:58237': {'bipartite': 'companies'}, 'c:4021': {'bipartite': 'companies'}, 'p:259321': {'bipartite': 'persons'}, 'p:189771': {'bipartite': 'persons'}, 'c:260007': {'bipartite': 'companies'}, 'p:207913': {'bipartite': 'persons'}, 'c:45528': {'bipartite': 'companies'}, 'p:177185': {'bipartite': 'persons'}, 'c:76870': {'bipartite': 'companies'}, 'p:205171': {'bipartite': 'persons'}, 'c:281938': {'bipartite': 'companies'}, 'p:227370': {'bipartite': 'persons'}, 'p:49130': {'bipartite': 'persons'}, 'c:71141': {'bipartite': 'companies'}, 'c:104377': {'bipartite': 'companies'}, 'c:188647': {'bipartite': 'companies'}, 'c:33614': {'bipartite': 'companies'}, 'c:15458': {'bipartite': 'companies'}, 'c:173430': {'bipartite': 'companies'}, 'p:182674': {'bipartite': 'persons'}, 'c:1518': {'bipartite': 'companies'}, 'p:205197': {'bipartite': 'persons'}, 'c:454': {'bipartite': 'companies'}, 'f:1801': {'bipartite': 'funds'}, 'c:206': {'bipartite': 'companies'}, 'p:109899': {'bipartite': 'persons'}, 'c:5271': {'bipartite': 'companies'}, 'p:8423': {'bipartite': 'persons'}, 'c:147164': {'bipartite': 'companies'}, 'c:20059': {'bipartite': 'companies'}, 'c:5378': {'bipartite': 'companies'}, 'c:16612': {'bipartite': 'companies'}, 'p:12887': {'bipartite': 'persons'}, 'p:168317': {'bipartite': 'persons'}, 'c:183095': {'bipartite': 'companies'}, 'c:20712': {'bipartite': 'companies'}, 'f:1312': {'bipartite': 'funds'}, 'c:48225': {'bipartite': 'companies'}, 'c:27806': {'bipartite': 'companies'}, 'c:792': {'bipartite': 'companies'}, 'p:230686': {'bipartite': 'persons'}, 'c:17851': {'bipartite': 'companies'}, 'c:13986': {'bipartite': 'companies'}, 'c:171966': {'bipartite': 'companies'}, 'p:231951': {'bipartite': 'persons'}, 'c:42862': {'bipartite': 'companies'}, 'c:48811': {'bipartite': 'companies'}, 'c:38206': {'bipartite': 'companies'}, 'c:16224': {'bipartite': 'companies'}, 'p:8417': {'bipartite': 'persons'}, 'p:1136': {'bipartite': 'persons'}, 'p:85892': {'bipartite': 'persons'}, 'f:1132': {'bipartite': 'funds'}, 'p:214865': {'bipartite': 'persons'}, 'c:11901': {'bipartite': 'companies'}, 'c:167777': {'bipartite': 'companies'}, 'f:3789': {'bipartite': 'funds'}, 'c:36192': {'bipartite': 'companies'}, 'p:222903': {'bipartite': 'persons'}, 'p:187146': {'bipartite': 'persons'}, 'p:253839': {'bipartite': 'persons'}, 'c:269041': {'bipartite': 'companies'}, 'c:48711': {'bipartite': 'companies'}, 'c:128427': {'bipartite': 'companies'}, 'c:40972': {'bipartite': 'companies'}, 'p:205198': {'bipartite': 'persons'}, 'c:153536': {'bipartite': 'companies'}, 'c:768': {'bipartite': 'companies'}, 'c:70933': {'bipartite': 'companies'}, 'c:21393': {'bipartite': 'companies'}, 'c:35668': {'bipartite': 'companies'}, 'c:38368': {'bipartite': 'companies'}, 'c:1582': {'bipartite': 'companies'}, 'p:79028': {'bipartite': 'persons'}, 'p:255798': {'bipartite': 'persons'}, 'c:265452': {'bipartite': 'companies'}, 'd:2130': {'bipartite': 'schools'}, 'c:29636': {'bipartite': 'companies'}, 'c:144482': {'bipartite': 'companies'}, 'c:37713': {'bipartite': 'companies'}, 'c:70': {'bipartite': 'companies'}, 'c:20': {'bipartite': 'companies'}, 'c:31480': {'bipartite': 'companies'}, 'p:108837': {'bipartite': 'persons'}, 'c:1365': {'bipartite': 'companies'}, 'c:40405': {'bipartite': 'companies'}, 'p:223514': {'bipartite': 'persons'}, 'p:187871': {'bipartite': 'persons'}, 'p:8435': {'bipartite': 'persons'}, 'p:228135': {'bipartite': 'persons'}, 'p:222768': {'bipartite': 'persons'}, 'c:6158': {'bipartite': 'companies'}, 'p:5854': {'bipartite': 'persons'}, 'p:238907': {'bipartite': 'persons'}, 'c:51818': {'bipartite': 'companies'}, 'c:3429': {'bipartite': 'companies'}, 'p:104916': {'bipartite': 'persons'}, 'p:215042': {'bipartite': 'persons'}, 'c:17829': {'bipartite': 'companies'}, 'c:40504': {'bipartite': 'companies'}, 'c:9659': {'bipartite': 'companies'}, 'c:12257': {'bipartite': 'companies'}, 'c:20534': {'bipartite': 'companies'}, 'd:58636': {'bipartite': 'schools'}, 'c:57976': {'bipartite': 'companies'}, 'd:41831': {'bipartite': 'schools'}, 'c:57960': {'bipartite': 'companies'}, 'p:205459': {'bipartite': 'persons'}, 'p:205463': {'bipartite': 'persons'}, 'c:37849': {'bipartite': 'companies'}, 'p:70426': {'bipartite': 'persons'}, 'p:185504': {'bipartite': 'persons'}, 'c:36882': {'bipartite': 'companies'}, 'c:15768': {'bipartite': 'companies'}, 'd:46613': {'bipartite': 'schools'}, 'c:163802': {'bipartite': 'companies'}, 'c:46073': {'bipartite': 'companies'}, 'c:59107': {'bipartite': 'companies'}, 'c:67881': {'bipartite': 'companies'}, 'p:46868': {'bipartite': 'persons'}, 'p:196231': {'bipartite': 'persons'}, 'c:16263': {'bipartite': 'companies'}, 'p:24019': {'bipartite': 'persons'}, 'c:6520': {'bipartite': 'companies'}, 'p:55926': {'bipartite': 'persons'}, 'c:39735': {'bipartite': 'companies'}, 'c:1236': {'bipartite': 'companies'}, 'p:75768': {'bipartite': 'persons'}, 'c:261636': {'bipartite': 'companies'}, 'c:156690': {'bipartite': 'companies'}, 'c:6734': {'bipartite': 'companies'}, 'c:14903': {'bipartite': 'companies'}, 'p:224684': {'bipartite': 'persons'}, 'c:51767': {'bipartite': 'companies'}, 'c:551': {'bipartite': 'companies'}, 'c:79663': {'bipartite': 'companies'}, 'p:18734': {'bipartite': 'persons'}, 'c:46508': {'bipartite': 'companies'}, 'c:519': {'bipartite': 'companies'}, 'p:189152': {'bipartite': 'persons'}, 'p:187013': {'bipartite': 'persons'}, 'p:153492': {'bipartite': 'persons'}, 'c:30687': {'bipartite': 'companies'}, 'c:56247': {'bipartite': 'companies'}, 'p:12894': {'bipartite': 'persons'}, 'p:30495': {'bipartite': 'persons'}, 'c:731': {'bipartite': 'companies'}, 'c:33180': {'bipartite': 'companies'}, 'c:155566': {'bipartite': 'companies'}, 'f:637': {'bipartite': 'funds'}, 'c:32798': {'bipartite': 'companies'}, 'c:84715': {'bipartite': 'companies'}, 'p:23667': {'bipartite': 'persons'}, 'p:74782': {'bipartite': 'persons'}, 'p:241280': {'bipartite': 'persons'}, 'c:29746': {'bipartite': 'companies'}, 'p:45014': {'bipartite': 'persons'}, 'f:2417': {'bipartite': 'funds'}, 'c:31143': {'bipartite': 'companies'}, 'c:8626': {'bipartite': 'companies'}, 'c:54298': {'bipartite': 'companies'}, 'c:153326': {'bipartite': 'companies'}, 'c:71535': {'bipartite': 'companies'}, 'p:8440': {'bipartite': 'persons'}, 'c:2735': {'bipartite': 'companies'}, 'c:6157': {'bipartite': 'companies'}, 'c:15141': {'bipartite': 'companies'}, 'd:41582': {'bipartite': 'schools'}, 'p:21448': {'bipartite': 'persons'}, 'c:36872': {'bipartite': 'companies'}, 'p:195241': {'bipartite': 'persons'}, 'p:12890': {'bipartite': 'persons'}, 'c:17780': {'bipartite': 'companies'}, 'c:11852': {'bipartite': 'companies'}, 'c:43739': {'bipartite': 'companies'}, 'c:42392': {'bipartite': 'companies'}, 'p:50832': {'bipartite': 'persons'}, 'p:98075': {'bipartite': 'persons'}, 'c:56452': {'bipartite': 'companies'}, 'p:185503': {'bipartite': 'persons'}, 'c:13082': {'bipartite': 'companies'}, 'p:232411': {'bipartite': 'persons'}, 'c:264247': {'bipartite': 'companies'}, 'c:42003': {'bipartite': 'companies'}, 'p:30159': {'bipartite': 'persons'}, 'p:255717': {'bipartite': 'persons'}, 'c:234953': {'bipartite': 'companies'}, 'c:15760': {'bipartite': 'companies'}, 'c:11814': {'bipartite': 'companies'}, 'c:38473': {'bipartite': 'companies'}, 'c:49085': {'bipartite': 'companies'}, 'c:25380': {'bipartite': 'companies'}, 'c:56359': {'bipartite': 'companies'}, 'c:15554': {'bipartite': 'companies'}, 'p:205295': {'bipartite': 'persons'}, 'c:21863': {'bipartite': 'companies'}, 'p:112786': {'bipartite': 'persons'}, 'p:196173': {'bipartite': 'persons'}, 'p:53364': {'bipartite': 'persons'}, 'p:72591': {'bipartite': 'persons'}, 'p:210043': {'bipartite': 'persons'}, 'p:187142': {'bipartite': 'persons'}, 'c:29869': {'bipartite': 'companies'}, 'c:25756': {'bipartite': 'companies'}, 'c:29321': {'bipartite': 'companies'}, 'c:46968': {'bipartite': 'companies'}, 'p:22018': {'bipartite': 'persons'}, 'p:255170': {'bipartite': 'persons'}, 'c:231764': {'bipartite': 'companies'}, 'c:17783': {'bipartite': 'companies'}, 'p:7178': {'bipartite': 'persons'}, 'c:60049': {'bipartite': 'companies'}, 'c:3193': {'bipartite': 'companies'}, 'c:5192': {'bipartite': 'companies'}, 'c:71918': {'bipartite': 'companies'}, 'c:47867': {'bipartite': 'companies'}, 'p:161': {'bipartite': 'persons'}, 'c:1204': {'bipartite': 'companies'}, 'p:16110': {'bipartite': 'persons'}, 'p:98373': {'bipartite': 'persons'}, 'c:6110': {'bipartite': 'companies'}, 'c:282707': {'bipartite': 'companies'}, 'c:51571': {'bipartite': 'companies'}, 'c:11899': {'bipartite': 'companies'}, 'p:188220': {'bipartite': 'persons'}, 'c:15652': {'bipartite': 'companies'}, 'c:42679': {'bipartite': 'companies'}, 'c:269817': {'bipartite': 'companies'}, 'p:190453': {'bipartite': 'persons'}, 'c:40318': {'bipartite': 'companies'}, 'p:217831': {'bipartite': 'persons'}, 'c:16304': {'bipartite': 'companies'}, 'p:261032': {'bipartite': 'persons'}, 'c:80846': {'bipartite': 'companies'}, 'c:14516': {'bipartite': 'companies'}, 'c:57923': {'bipartite': 'companies'}, 'p:8421': {'bipartite': 'persons'}, 'c:19877': {'bipartite': 'companies'}, 'c:8623': {'bipartite': 'companies'}, 'p:60605': {'bipartite': 'persons'}, 'p:16149': {'bipartite': 'persons'}, 'c:171025': {'bipartite': 'companies'}, 'p:221294': {'bipartite': 'persons'}, 'p:221357': {'bipartite': 'persons'}, 'c:15833': {'bipartite': 'companies'}, 'c:17689': {'bipartite': 'companies'}, 'c:5700': {'bipartite': 'companies'}, 'c:77097': {'bipartite': 'companies'}, 'p:52694': {'bipartite': 'persons'}, 'c:16995': {'bipartite': 'companies'}, 'p:58588': {'bipartite': 'persons'}, 'p:8441': {'bipartite': 'persons'}, 'c:416': {'bipartite': 'companies'}, 'p:65240': {'bipartite': 'persons'}, 'p:228706': {'bipartite': 'persons'}, 'c:144909': {'bipartite': 'companies'}, 'c:20402': {'bipartite': 'companies'}, 'c:4179': {'bipartite': 'companies'}, 'p:30167': {'bipartite': 'persons'}, 'p:228371': {'bipartite': 'persons'}, 'c:17828': {'bipartite': 'companies'}, 'p:227230': {'bipartite': 'persons'}, 'c:274034': {'bipartite': 'companies'}, 'p:89526': {'bipartite': 'persons'}, 'p:91684': {'bipartite': 'persons'}, 'c:1563': {'bipartite': 'companies'}, 'p:253841': {'bipartite': 'persons'}, 'p:227296': {'bipartite': 'persons'}, 'd:51850': {'bipartite': 'schools'}, 'p:255827': {'bipartite': 'persons'}, 'c:264257': {'bipartite': 'companies'}, 'c:77172': {'bipartite': 'companies'}, 'c:285258': {'bipartite': 'companies'}, 'p:196236': {'bipartite': 'persons'}, 'p:227259': {'bipartite': 'persons'}, 'p:234359': {'bipartite': 'persons'}, 'c:189723': {'bipartite': 'companies'}, 'c:26086': {'bipartite': 'companies'}, 'c:243716': {'bipartite': 'companies'}, 'p:24018': {'bipartite': 'persons'}, 'c:234539': {'bipartite': 'companies'}, 'p:41089': {'bipartite': 'persons'}, 'c:56556': {'bipartite': 'companies'}, 'c:25791': {'bipartite': 'companies'}, 'c:9602': {'bipartite': 'companies'}, 'c:7800': {'bipartite': 'companies'}, 'c:28434': {'bipartite': 'companies'}, 'c:79936': {'bipartite': 'companies'}, 'c:27891': {'bipartite': 'companies'}, 'p:234623': {'bipartite': 'persons'}, 'c:44576': {'bipartite': 'companies'}, 'c:13129': {'bipartite': 'companies'}, 'c:36590': {'bipartite': 'companies'}, 'c:1388': {'bipartite': 'companies'}, 'p:227319': {'bipartite': 'persons'}, 'c:38363': {'bipartite': 'companies'}, 'c:25194': {'bipartite': 'companies'}, 'c:18225': {'bipartite': 'companies'}, 'p:12883': {'bipartite': 'persons'}, 'c:17272': {'bipartite': 'companies'}, 'd:10263': {'bipartite': 'schools'}, 'p:61467': {'bipartite': 'persons'}, 'c:15535': {'bipartite': 'companies'}, 'p:227264': {'bipartite': 'persons'}, 'p:89527': {'bipartite': 'persons'}, 'p:27000': {'bipartite': 'persons'}, 'c:45018': {'bipartite': 'companies'}, 'c:21144': {'bipartite': 'companies'}, 'c:26243': {'bipartite': 'companies'}, 'p:187867': {'bipartite': 'persons'}, 'p:221210': {'bipartite': 'persons'}, 'p:89522': {'bipartite': 'persons'}, 'p:228110': {'bipartite': 'persons'}, 'p:255719': {'bipartite': 'persons'}, 'c:16290': {'bipartite': 'companies'}, 'c:1584': {'bipartite': 'companies'}, 'p:116295': {'bipartite': 'persons'}, 'c:49947': {'bipartite': 'companies'}, 'c:206594': {'bipartite': 'companies'}, 'p:12902': {'bipartite': 'persons'}, 'c:48073': {'bipartite': 'companies'}, 'd:9784': {'bipartite': 'schools'}, 'c:5487': {'bipartite': 'companies'}, 'p:232147': {'bipartite': 'persons'}, 'c:15407': {'bipartite': 'companies'}, 'p:255800': {'bipartite': 'persons'}, 'c:131': {'bipartite': 'companies'}, 'c:649': {'bipartite': 'companies'}, 'c:22786': {'bipartite': 'companies'}, 'p:204254': {'bipartite': 'persons'}, 'f:323': {'bipartite': 'funds'}, 'c:80153': {'bipartite': 'companies'}, 'p:191622': {'bipartite': 'persons'}, 'c:145250': {'bipartite': 'companies'}, 'c:5040': {'bipartite': 'companies'}, 'c:33416': {'bipartite': 'companies'}, 'p:114242': {'bipartite': 'persons'}, 'c:3194': {'bipartite': 'companies'}, 'c:57657': {'bipartite': 'companies'}, 'f:1793': {'bipartite': 'funds'}, 'p:77967': {'bipartite': 'persons'}, 'c:45195': {'bipartite': 'companies'}, 'c:41005': {'bipartite': 'companies'}, 'p:34355': {'bipartite': 'persons'}, 'p:259477': {'bipartite': 'persons'}, 'c:16130': {'bipartite': 'companies'}, 'c:247699': {'bipartite': 'companies'}, 'p:101135': {'bipartite': 'persons'}, 'd:13268': {'bipartite': 'schools'}, 'c:65827': {'bipartite': 'companies'}, 'p:58030': {'bipartite': 'persons'}, 'c:42237': {'bipartite': 'companies'}, 'p:148830': {'bipartite': 'persons'}, 'f:215': {'bipartite': 'funds'}, 'c:1063': {'bipartite': 'companies'}, 'c:255697': {'bipartite': 'companies'}, 'p:12054': {'bipartite': 'persons'}, 'p:253844': {'bipartite': 'persons'}, 'p:258806': {'bipartite': 'persons'}, 'p:205213': {'bipartite': 'persons'}, 'c:95330': {'bipartite': 'companies'}, 'p:218445': {'bipartite': 'persons'}, 'c:81446': {'bipartite': 'companies'}, 'c:924': {'bipartite': 'companies'}, 'c:43050': {'bipartite': 'companies'}, 'c:710': {'bipartite': 'companies'}, 'c:15863': {'bipartite': 'companies'}, 'p:191703': {'bipartite': 'persons'}, 'p:14074': {'bipartite': 'persons'}, 'c:54488': {'bipartite': 'companies'}, 'c:529': {'bipartite': 'companies'}, 'c:208475': {'bipartite': 'companies'}, 'c:37335': {'bipartite': 'companies'}, 'p:144875': {'bipartite': 'persons'}, 'c:182': {'bipartite': 'companies'}, 'c:36508': {'bipartite': 'companies'}, 'c:35659': {'bipartite': 'companies'}, 'p:267898': {'bipartite': 'persons'}, 'p:30494': {'bipartite': 'persons'}, 'p:255823': {'bipartite': 'persons'}, 'c:78143': {'bipartite': 'companies'}, 'c:27487': {'bipartite': 'companies'}, 'd:33850': {'bipartite': 'schools'}, 'p:188219': {'bipartite': 'persons'}, 'p:143384': {'bipartite': 'persons'}, 'c:32375': {'bipartite': 'companies'}, 'c:29420': {'bipartite': 'companies'}, 'c:222387': {'bipartite': 'companies'}, 'p:186457': {'bipartite': 'persons'}, 'c:8351': {'bipartite': 'companies'}, 'c:45723': {'bipartite': 'companies'}, 'c:37805': {'bipartite': 'companies'}, 'c:61769': {'bipartite': 'companies'}, 'c:40967': {'bipartite': 'companies'}, 'c:260822': {'bipartite': 'companies'}, 'c:62293': {'bipartite': 'companies'}, 'c:40197': {'bipartite': 'companies'}, 'p:227798': {'bipartite': 'persons'}, 'd:42607': {'bipartite': 'schools'}, 'c:49822': {'bipartite': 'companies'}, 'c:30016': {'bipartite': 'companies'}, 'c:43628': {'bipartite': 'companies'}, 'c:77893': {'bipartite': 'companies'}, 'c:26116': {'bipartite': 'companies'}, 'c:59551': {'bipartite': 'companies'}, 'c:264': {'bipartite': 'companies'}, 'c:61775': {'bipartite': 'companies'}, 'c:27873': {'bipartite': 'companies'}, 'c:138886': {'bipartite': 'companies'}, 'c:48056': {'bipartite': 'companies'}, 'p:133725': {'bipartite': 'persons'}, 'p:221261': {'bipartite': 'persons'}, 'c:38578': {'bipartite': 'companies'}, 'c:25383': {'bipartite': 'companies'}, 'p:235469': {'bipartite': 'persons'}, 'p:205781': {'bipartite': 'persons'}, 'p:22983': {'bipartite': 'persons'}, 'c:42223': {'bipartite': 'companies'}, 'p:42964': {'bipartite': 'persons'}, 'f:5376': {'bipartite': 'funds'}, 'c:24827': {'bipartite': 'companies'}, 'p:58874': {'bipartite': 'persons'}, 'p:198125': {'bipartite': 'persons'}, 'p:55067': {'bipartite': 'persons'}, 'p:31994': {'bipartite': 'persons'}, 'c:48210': {'bipartite': 'companies'}, 'c:197594': {'bipartite': 'companies'}, 'p:152393': {'bipartite': 'persons'}, 'c:45502': {'bipartite': 'companies'}, 'c:16140': {'bipartite': 'companies'}, 'c:232370': {'bipartite': 'companies'}, 'p:45013': {'bipartite': 'persons'}, 'p:256774': {'bipartite': 'persons'}, 'c:166156': {'bipartite': 'companies'}, 'c:51488': {'bipartite': 'companies'}, 'c:11920': {'bipartite': 'companies'}, 'c:52303': {'bipartite': 'companies'}, 'c:9949': {'bipartite': 'companies'}, 'c:261963': {'bipartite': 'companies'}, 'c:160604': {'bipartite': 'companies'}, 'p:27575': {'bipartite': 'persons'}, 'c:226817': {'bipartite': 'companies'}, 'c:233445': {'bipartite': 'companies'}, 'c:30515': {'bipartite': 'companies'}, 'c:26974': {'bipartite': 'companies'}, 'p:231056': {'bipartite': 'persons'}, 'c:42280': {'bipartite': 'companies'}, 'c:16921': {'bipartite': 'companies'}, 'c:172269': {'bipartite': 'companies'}, 'p:12900': {'bipartite': 'persons'}, 'c:49268': {'bipartite': 'companies'}, 'p:228129': {'bipartite': 'persons'}, 'c:219860': {'bipartite': 'companies'}, 'p:203751': {'bipartite': 'persons'}, 'c:16620': {'bipartite': 'companies'}, 'p:226475': {'bipartite': 'persons'}, 'c:5332': {'bipartite': 'companies'}, 'c:22715': {'bipartite': 'companies'}, 'c:16886': {'bipartite': 'companies'}, 'c:18505': {'bipartite': 'companies'}, 'p:62153': {'bipartite': 'persons'}, 'c:231757': {'bipartite': 'companies'}, 'c:3147': {'bipartite': 'companies'}, 'c:46081': {'bipartite': 'companies'}, 'p:253863': {'bipartite': 'persons'}, 'p:65990': {'bipartite': 'persons'}, 'c:48293': {'bipartite': 'companies'}, 'p:12895': {'bipartite': 'persons'}, 'c:20168': {'bipartite': 'companies'}, 'f:1782': {'bipartite': 'funds'}, 'p:4312': {'bipartite': 'persons'}, 'c:49339': {'bipartite': 'companies'}, 'c:78364': {'bipartite': 'companies'}, 'p:188066': {'bipartite': 'persons'}, 'c:25464': {'bipartite': 'companies'}, 'p:46113': {'bipartite': 'persons'}, 'c:38438': {'bipartite': 'companies'}, 'c:25177': {'bipartite': 'companies'}, 'p:196223': {'bipartite': 'persons'}, 'c:231762': {'bipartite': 'companies'}, 'c:8104': {'bipartite': 'companies'}, 'c:13999': {'bipartite': 'companies'}, 'c:190': {'bipartite': 'companies'}, 'c:60348': {'bipartite': 'companies'}, 'c:38': {'bipartite': 'companies'}, 'c:270241': {'bipartite': 'companies'}, 'p:226992': {'bipartite': 'persons'}, 'p:8424': {'bipartite': 'persons'}, 'p:524': {'bipartite': 'persons'}, 'c:38342': {'bipartite': 'companies'}, 'p:30164': {'bipartite': 'persons'}, 'p:258920': {'bipartite': 'persons'}, 'p:8425': {'bipartite': 'persons'}, 'c:20060': {'bipartite': 'companies'}, 'p:228701': {'bipartite': 'persons'}, 'p:25272': {'bipartite': 'persons'}, 'p:267895': {'bipartite': 'persons'}, 'p:224674': {'bipartite': 'persons'}, 'c:187958': {'bipartite': 'companies'}, 'c:15920': {'bipartite': 'companies'}, 'p:51247': {'bipartite': 'persons'}, 'p:205646': {'bipartite': 'persons'}, 'c:48443': {'bipartite': 'companies'}, 'p:221356': {'bipartite': 'persons'}, 'c:32507': {'bipartite': 'companies'}, 'c:5482': {'bipartite': 'companies'}, 'p:263522': {'bipartite': 'persons'}, 'c:12917': {'bipartite': 'companies'}, 'p:205167': {'bipartite': 'persons'}, 'p:134417': {'bipartite': 'persons'}, 'c:176019': {'bipartite': 'companies'}, 'p:109003': {'bipartite': 'persons'}, 'p:12893': {'bipartite': 'persons'}, 'p:8433': {'bipartite': 'persons'}, 'c:1882': {'bipartite': 'companies'}, 'c:24369': {'bipartite': 'companies'}, 'c:23314': {'bipartite': 'companies'}, 'p:255822': {'bipartite': 'persons'}, 'c:80844': {'bipartite': 'companies'}, 'p:198856': {'bipartite': 'persons'}, 'c:26122': {'bipartite': 'companies'}, 'f:1080': {'bipartite': 'funds'}, 'c:42212': {'bipartite': 'companies'}, 'c:247492': {'bipartite': 'companies'}, 'c:365': {'bipartite': 'companies'}, 'p:196242': {'bipartite': 'persons'}, 'p:98593': {'bipartite': 'persons'}, 'p:36208': {'bipartite': 'persons'}, 'p:92217': {'bipartite': 'persons'}, 'p:10507': {'bipartite': 'persons'}, 'c:22257': {'bipartite': 'companies'}, 'p:188342': {'bipartite': 'persons'}, 'c:29930': {'bipartite': 'companies'}, 'p:5383': {'bipartite': 'persons'}, 'c:38041': {'bipartite': 'companies'}, 'c:274941': {'bipartite': 'companies'}, 'p:215339': {'bipartite': 'persons'}, 'c:3007': {'bipartite': 'companies'}, 'c:148848': {'bipartite': 'companies'}, 'p:201486': {'bipartite': 'persons'}, 'c:39661': {'bipartite': 'companies'}, 'c:30920': {'bipartite': 'companies'}, 'f:641': {'bipartite': 'funds'}, 'c:14608': {'bipartite': 'companies'}, 'c:242596': {'bipartite': 'companies'}, 'c:43928': {'bipartite': 'companies'}, 'c:67872': {'bipartite': 'companies'}, 'p:207093': {'bipartite': 'persons'}, 'p:8439': {'bipartite': 'persons'}, 'p:239072': {'bipartite': 'persons'}, 'p:235463': {'bipartite': 'persons'}, 'f:1600': {'bipartite': 'funds'}, 'c:264934': {'bipartite': 'companies'}, 'c:153221': {'bipartite': 'companies'}, 'c:27882': {'bipartite': 'companies'}, 'c:1915': {'bipartite': 'companies'}, 'p:52899': {'bipartite': 'persons'}, 'c:5807': {'bipartite': 'companies'}, 'p:229350': {'bipartite': 'persons'}, 'f:214': {'bipartite': 'funds'}, 'c:174288': {'bipartite': 'companies'}, 'c:264838': {'bipartite': 'companies'}, 'c:36943': {'bipartite': 'companies'}, 'p:8443': {'bipartite': 'persons'}, 'c:22967': {'bipartite': 'companies'}, 'c:24505': {'bipartite': 'companies'}, 'p:22158': {'bipartite': 'persons'}, 'f:717': {'bipartite': 'funds'}, 'c:172': {'bipartite': 'companies'}, 'c:17832': {'bipartite': 'companies'}, 'c:57831': {'bipartite': 'companies'}, 'c:77342': {'bipartite': 'companies'}, 'c:26813': {'bipartite': 'companies'}, 'c:154649': {'bipartite': 'companies'}, 'p:191408': {'bipartite': 'persons'}, 'c:280027': {'bipartite': 'companies'}, 'c:16047': {'bipartite': 'companies'}, 'c:1280': {'bipartite': 'companies'}, 'p:205187': {'bipartite': 'persons'}, 'c:1853': {'bipartite': 'companies'}, 'c:71453': {'bipartite': 'companies'}, 'p:189113': {'bipartite': 'persons'}, 'p:104062': {'bipartite': 'persons'}, 'p:23369': {'bipartite': 'persons'}, 'c:173': {'bipartite': 'companies'}, 'p:1132': {'bipartite': 'persons'}, 'c:48637': {'bipartite': 'companies'}, 'p:226652': {'bipartite': 'persons'}, 'c:22421': {'bipartite': 'companies'}, 'p:228151': {'bipartite': 'persons'}, 'p:196229': {'bipartite': 'persons'}, 'p:259228': {'bipartite': 'persons'}, 'c:36509': {'bipartite': 'companies'}, 'c:45429': {'bipartite': 'companies'}, 'c:85709': {'bipartite': 'companies'}, 'p:217832': {'bipartite': 'persons'}, 'c:8972': {'bipartite': 'companies'}, 'c:60395': {'bipartite': 'companies'}, 'p:200579': {'bipartite': 'persons'}, 'f:951': {'bipartite': 'funds'}, 'p:114831': {'bipartite': 'persons'}, 'c:169407': {'bipartite': 'companies'}, 'p:6322': {'bipartite': 'persons'}, 'c:1400': {'bipartite': 'companies'}, 'c:23080': {'bipartite': 'companies'}, 'c:80892': {'bipartite': 'companies'}, 'p:16040': {'bipartite': 'persons'}, 'c:31804': {'bipartite': 'companies'}, 'c:43605': {'bipartite': 'companies'}, 'c:8214': {'bipartite': 'companies'}, 'p:158536': {'bipartite': 'persons'}, 'p:196234': {'bipartite': 'persons'}, 'p:89517': {'bipartite': 'persons'}, 'c:42689': {'bipartite': 'companies'}, 'f:111': {'bipartite': 'funds'}, 'c:43665': {'bipartite': 'companies'}, 'c:78489': {'bipartite': 'companies'}, 'c:2549': {'bipartite': 'companies'}, 'p:221354': {'bipartite': 'persons'}, 'c:67924': {'bipartite': 'companies'}, 'c:25094': {'bipartite': 'companies'}, 'c:47693': {'bipartite': 'companies'}, 'c:30855': {'bipartite': 'companies'}, 'p:254543': {'bipartite': 'persons'}, 'p:261316': {'bipartite': 'persons'}, 'c:39640': {'bipartite': 'companies'}, 'c:49694': {'bipartite': 'companies'}, 'c:1870': {'bipartite': 'companies'}, 'c:53684': {'bipartite': 'companies'}, 'c:39263': {'bipartite': 'companies'}, 'c:260008': {'bipartite': 'companies'}, 'p:167891': {'bipartite': 'persons'}, 'p:26311': {'bipartite': 'persons'}, 'p:12899': {'bipartite': 'persons'}, 'c:227789': {'bipartite': 'companies'}, 'p:227284': {'bipartite': 'persons'}, 'c:68715': {'bipartite': 'companies'}, 'c:157546': {'bipartite': 'companies'}, 'p:187622': {'bipartite': 'persons'}, 'p:24021': {'bipartite': 'persons'}, 'c:14805': {'bipartite': 'companies'}, 'd:29211': {'bipartite': 'schools'}, 'p:231502': {'bipartite': 'persons'}, 'c:206584': {'bipartite': 'companies'}, 'p:240018': {'bipartite': 'persons'}, 'p:24016': {'bipartite': 'persons'}, 'c:51532': {'bipartite': 'companies'}, 'p:265953': {'bipartite': 'persons'}, 'c:67579': {'bipartite': 'companies'}, 'p:173055': {'bipartite': 'persons'}, 'p:7108': {'bipartite': 'persons'}, 'c:170601': {'bipartite': 'companies'}, 'p:188217': {'bipartite': 'persons'}, 'd:38639': {'bipartite': 'schools'}, 'p:191949': {'bipartite': 'persons'}, 'c:2352': {'bipartite': 'companies'}, 'p:250049': {'bipartite': 'persons'}, 'p:258747': {'bipartite': 'persons'}, 'p:202252': {'bipartite': 'persons'}, 'c:38203': {'bipartite': 'companies'}, 'p:16504': {'bipartite': 'persons'}, 'c:27828': {'bipartite': 'companies'}, 'p:8844': {'bipartite': 'persons'}, 'c:28039': {'bipartite': 'companies'}, 'p:119964': {'bipartite': 'persons'}, 'c:1107': {'bipartite': 'companies'}, 'p:42965': {'bipartite': 'persons'}, 'p:205291': {'bipartite': 'persons'}, 'c:27783': {'bipartite': 'companies'}, 'c:264196': {'bipartite': 'companies'}, 'c:6104': {'bipartite': 'companies'}, 'c:45339': {'bipartite': 'companies'}, 'p:197329': {'bipartite': 'persons'}, 'c:20131': {'bipartite': 'companies'}, 'c:164452': {'bipartite': 'companies'}, 'p:185765': {'bipartite': 'persons'}, 'p:12897': {'bipartite': 'persons'}, 'c:47845': {'bipartite': 'companies'}, 'p:11110': {'bipartite': 'persons'}, 'c:488': {'bipartite': 'companies'}, 'c:15847': {'bipartite': 'companies'}, 'c:30991': {'bipartite': 'companies'}, 'c:172912': {'bipartite': 'companies'}, 'c:189208': {'bipartite': 'companies'}, 'c:35660': {'bipartite': 'companies'}, 'c:144467': {'bipartite': 'companies'}, 'c:36544': {'bipartite': 'companies'}, 'c:23877': {'bipartite': 'companies'}, 'p:255799': {'bipartite': 'persons'}, 'p:222897': {'bipartite': 'persons'}, 'c:29909': {'bipartite': 'companies'}, 'c:929': {'bipartite': 'companies'}, 'p:29653': {'bipartite': 'persons'}, 'c:23083': {'bipartite': 'companies'}, 'p:228642': {'bipartite': 'persons'}, 'c:24962': {'bipartite': 'companies'}, 'p:205482': {'bipartite': 'persons'}, 'p:22172': {'bipartite': 'persons'}, 'c:62791': {'bipartite': 'companies'}, 'p:222894': {'bipartite': 'persons'}, 'c:607': {'bipartite': 'companies'}, 'c:142688': {'bipartite': 'companies'}, 'p:743': {'bipartite': 'persons'}, 'c:54068': {'bipartite': 'companies'}, 'c:21760': {'bipartite': 'companies'}, 'c:18028': {'bipartite': 'companies'}, 'p:22574': {'bipartite': 'persons'}, 'c:10200': {'bipartite': 'companies'}, 'p:196237': {'bipartite': 'persons'}, 'c:49465': {'bipartite': 'companies'}, 'c:39101': {'bipartite': 'companies'}, 'c:7366': {'bipartite': 'companies'}, 'p:191533': {'bipartite': 'persons'}, 'c:69834': {'bipartite': 'companies'}, 'c:25543': {'bipartite': 'companies'}, 'c:65123': {'bipartite': 'companies'}, 'p:234627': {'bipartite': 'persons'}, 'c:16291': {'bipartite': 'companies'}, 'f:248': {'bipartite': 'funds'}, 'c:25870': {'bipartite': 'companies'}, 'c:5915': {'bipartite': 'companies'}, 'c:46614': {'bipartite': 'companies'}, 'c:1694': {'bipartite': 'companies'}, 'p:200955': {'bipartite': 'persons'}, 'c:209533': {'bipartite': 'companies'}, 'p:9991': {'bipartite': 'persons'}, 'p:108332': {'bipartite': 'persons'}, 'p:51058': {'bipartite': 'persons'}, 'p:255723': {'bipartite': 'persons'}, 'c:17527': {'bipartite': 'companies'}, 'p:11709': {'bipartite': 'persons'}, 'p:149573': {'bipartite': 'persons'}, 'p:205313': {'bipartite': 'persons'}, 'c:25827': {'bipartite': 'companies'}, 'c:17320': {'bipartite': 'companies'}, 'c:75051': {'bipartite': 'companies'}, 'p:221281': {'bipartite': 'persons'}, 'c:39543': {'bipartite': 'companies'}, 'p:233569': {'bipartite': 'persons'}, 'c:78583': {'bipartite': 'companies'}, 'c:13101': {'bipartite': 'companies'}, 'c:68917': {'bipartite': 'companies'}, 'c:34587': {'bipartite': 'companies'}, 'c:33369': {'bipartite': 'companies'}, 'c:8339': {'bipartite': 'companies'}, 'c:145675': {'bipartite': 'companies'}, 'c:24029': {'bipartite': 'companies'}, 'p:26304': {'bipartite': 'persons'}, 'c:43696': {'bipartite': 'companies'}, 'f:650': {'bipartite': 'funds'}, 'c:174545': {'bipartite': 'companies'}, 'p:23630': {'bipartite': 'persons'}, 'p:48911': {'bipartite': 'persons'}, 'c:81434': {'bipartite': 'companies'}, 'c:187349': {'bipartite': 'companies'}, 'c:60115': {'bipartite': 'companies'}, 'p:225515': {'bipartite': 'persons'}, 'c:52245': {'bipartite': 'companies'}, 'c:259683': {'bipartite': 'companies'}, 'p:6444': {'bipartite': 'persons'}, 'c:260110': {'bipartite': 'companies'}, 'c:143311': {'bipartite': 'companies'}, 'p:257920': {'bipartite': 'persons'}, 'p:225239': {'bipartite': 'persons'}, 'p:5255': {'bipartite': 'persons'}, 'c:25544': {'bipartite': 'companies'}, 'c:50937': {'bipartite': 'companies'}, 'c:26017': {'bipartite': 'companies'}, 'c:136625': {'bipartite': 'companies'}, 'c:30152': {'bipartite': 'companies'}, 'c:1773': {'bipartite': 'companies'}, 'c:55928': {'bipartite': 'companies'}, 'p:258805': {'bipartite': 'persons'}, 'p:12888': {'bipartite': 'persons'}, 'p:196241': {'bipartite': 'persons'}, 'c:3860': {'bipartite': 'companies'}, 'c:168371': {'bipartite': 'companies'}, 'c:5454': {'bipartite': 'companies'}, 'c:3005': {'bipartite': 'companies'}, 'c:415': {'bipartite': 'companies'}, 'c:156901': {'bipartite': 'companies'}, 'p:14525': {'bipartite': 'persons'}, 'c:151918': {'bipartite': 'companies'}, 'p:21454': {'bipartite': 'persons'}, 'c:24206': {'bipartite': 'companies'}, 'p:110058': {'bipartite': 'persons'}, 'c:40961': {'bipartite': 'companies'}, 'p:89523': {'bipartite': 'persons'}, 'c:198742': {'bipartite': 'companies'}, 'c:218941': {'bipartite': 'companies'}, 'c:7389': {'bipartite': 'companies'}, 'c:83971': {'bipartite': 'companies'}, 'c:23905': {'bipartite': 'companies'}, 'c:30987': {'bipartite': 'companies'}, 'p:138087': {'bipartite': 'persons'}, 'c:21598': {'bipartite': 'companies'}, 'p:217830': {'bipartite': 'persons'}, 'c:61756': {'bipartite': 'companies'}, 'c:165910': {'bipartite': 'companies'}, 'c:40017': {'bipartite': 'companies'}, 'p:208670': {'bipartite': 'persons'}, 'p:203739': {'bipartite': 'persons'}, 'p:42963': {'bipartite': 'persons'}, 'd:33993': {'bipartite': 'schools'}, 'p:38606': {'bipartite': 'persons'}, 'p:170391': {'bipartite': 'persons'}, 'p:223501': {'bipartite': 'persons'}, 'c:79154': {'bipartite': 'companies'}, 'c:28832': {'bipartite': 'companies'}, 'p:230072': {'bipartite': 'persons'}, 'c:143124': {'bipartite': 'companies'}, 'p:7132': {'bipartite': 'persons'}, 'p:14075': {'bipartite': 'persons'}, 'p:205286': {'bipartite': 'persons'}, 'c:303': {'bipartite': 'companies'}, 'p:205492': {'bipartite': 'persons'}, 'p:192623': {'bipartite': 'persons'}, 'p:251666': {'bipartite': 'persons'}, 'c:41368': {'bipartite': 'companies'}, 'c:21511': {'bipartite': 'companies'}, 'c:48756': {'bipartite': 'companies'}, 'c:77886': {'bipartite': 'companies'}, 'c:75989': {'bipartite': 'companies'}, 'c:28810': {'bipartite': 'companies'}, 'c:1695': {'bipartite': 'companies'}, 'p:12892': {'bipartite': 'persons'}, 'c:34961': {'bipartite': 'companies'}, 'c:175264': {'bipartite': 'companies'}, 'p:43881': {'bipartite': 'persons'}, 'c:17330': {'bipartite': 'companies'}, 'c:50139': {'bipartite': 'companies'}, 'c:823': {'bipartite': 'companies'}, 'p:210322': {'bipartite': 'persons'}, 'c:13365': {'bipartite': 'companies'}, 'c:5894': {'bipartite': 'companies'}, 'c:20050': {'bipartite': 'companies'}, 'c:48717': {'bipartite': 'companies'}, 'c:43950': {'bipartite': 'companies'}, 'c:42154': {'bipartite': 'companies'}, 'p:253842': {'bipartite': 'persons'}, 'p:33577': {'bipartite': 'persons'}, 'd:38613': {'bipartite': 'schools'}, 'c:3869': {'bipartite': 'companies'}, 'c:25749': {'bipartite': 'companies'}, 'c:183623': {'bipartite': 'companies'}, 'p:229375': {'bipartite': 'persons'}, 'p:261131': {'bipartite': 'persons'}, 'p:260272': {'bipartite': 'persons'}, 'p:227265': {'bipartite': 'persons'}, 'c:86077': {'bipartite': 'companies'}, 'c:34199': {'bipartite': 'companies'}, 'c:67809': {'bipartite': 'companies'}, 'c:57921': {'bipartite': 'companies'}, 'p:258474': {'bipartite': 'persons'}, 'c:71852': {'bipartite': 'companies'}, 'c:1075': {'bipartite': 'companies'}, 'c:279000': {'bipartite': 'companies'}, 'c:610': {'bipartite': 'companies'}, 'c:27947': {'bipartite': 'companies'}, 'p:191940': {'bipartite': 'persons'}, 'c:11644': {'bipartite': 'companies'}, 'p:49601': {'bipartite': 'persons'}, 'c:176166': {'bipartite': 'companies'}, 'c:60430': {'bipartite': 'companies'}, 'c:28049': {'bipartite': 'companies'}, 'c:26723': {'bipartite': 'companies'}, 'c:949': {'bipartite': 'companies'}, 'c:213159': {'bipartite': 'companies'}, 'p:255720': {'bipartite': 'persons'}, 'c:31292': {'bipartite': 'companies'}, 'c:24108': {'bipartite': 'companies'}, 'c:264216': {'bipartite': 'companies'}, 'p:265782': {'bipartite': 'persons'}, 'p:35133': {'bipartite': 'persons'}, 'c:46696': {'bipartite': 'companies'}, 'c:208476': {'bipartite': 'companies'}, 'c:6979': {'bipartite': 'companies'}, 'c:16289': {'bipartite': 'companies'}, 'p:30163': {'bipartite': 'persons'}, 'c:200': {'bipartite': 'companies'}, 'c:42193': {'bipartite': 'companies'}, 'c:28499': {'bipartite': 'companies'}, 'c:32288': {'bipartite': 'companies'}, 'c:47036': {'bipartite': 'companies'}, 'p:171285': {'bipartite': 'persons'}, 'c:42277': {'bipartite': 'companies'}, 'p:227344': {'bipartite': 'persons'}, 'c:24419': {'bipartite': 'companies'}, 'p:205190': {'bipartite': 'persons'}, 'c:26690': {'bipartite': 'companies'}, 'f:837': {'bipartite': 'funds'}, 'p:201441': {'bipartite': 'persons'}, 'c:188541': {'bipartite': 'companies'}, 'p:266315': {'bipartite': 'persons'}, 'c:26685': {'bipartite': 'companies'}, 'c:77339': {'bipartite': 'companies'}, 'c:39058': {'bipartite': 'companies'}, 'c:45266': {'bipartite': 'companies'}, 'c:53451': {'bipartite': 'companies'}, 'p:121293': {'bipartite': 'persons'}, 'p:96580': {'bipartite': 'persons'}, 'c:8123': {'bipartite': 'companies'}, 'c:189271': {'bipartite': 'companies'}, 'p:198094': {'bipartite': 'persons'}, 'p:223464': {'bipartite': 'persons'}, 'c:42308': {'bipartite': 'companies'}, 'c:65620': {'bipartite': 'companies'}, 'c:3751': {'bipartite': 'companies'}, 'c:40417': {'bipartite': 'companies'}, 'c:47013': {'bipartite': 'companies'}, 'c:81700': {'bipartite': 'companies'}, 'p:255794': {'bipartite': 'persons'}, 'c:16582': {'bipartite': 'companies'}, 'c:32874': {'bipartite': 'companies'}, 'c:58895': {'bipartite': 'companies'}, 'p:36026': {'bipartite': 'persons'}, 'c:187840': {'bipartite': 'companies'}, 'c:40828': {'bipartite': 'companies'}, 'c:204784': {'bipartite': 'companies'}, 'c:15607': {'bipartite': 'companies'}, 'p:147307': {'bipartite': 'persons'}, 'p:223518': {'bipartite': 'persons'}, 'c:39725': {'bipartite': 'companies'}, 'c:56569': {'bipartite': 'companies'}, 'p:21951': {'bipartite': 'persons'}, 'c:283417': {'bipartite': 'companies'}, 'c:162': {'bipartite': 'companies'}, 'c:47778': {'bipartite': 'companies'}, 'c:7005': {'bipartite': 'companies'}, 'c:60570': {'bipartite': 'companies'}, 'p:217833': {'bipartite': 'persons'}, 'f:5374': {'bipartite': 'funds'}, 'c:48066': {'bipartite': 'companies'}, 'p:228651': {'bipartite': 'persons'}, 'c:29938': {'bipartite': 'companies'}, 'c:1794': {'bipartite': 'companies'}, 'c:22991': {'bipartite': 'companies'}, 'p:255382': {'bipartite': 'persons'}, 'p:253838': {'bipartite': 'persons'}, 'c:3197': {'bipartite': 'companies'}, 'p:31123': {'bipartite': 'persons'}, 'c:49561': {'bipartite': 'companies'}, 'c:29451': {'bipartite': 'companies'}, 'p:23194': {'bipartite': 'persons'}, 'c:53255': {'bipartite': 'companies'}, 'p:9660': {'bipartite': 'persons'}, 'c:838': {'bipartite': 'companies'}, 'p:175678': {'bipartite': 'persons'}, 'p:205274': {'bipartite': 'persons'}, 'c:48619': {'bipartite': 'companies'}, 'c:80675': {'bipartite': 'companies'}, 'c:160619': {'bipartite': 'companies'}, 'p:196235': {'bipartite': 'persons'}, 'p:6366': {'bipartite': 'persons'}, 'c:26303': {'bipartite': 'companies'}, 'c:16258': {'bipartite': 'companies'}, 'c:46415': {'bipartite': 'companies'}, 'c:49773': {'bipartite': 'companies'}, 'p:216584': {'bipartite': 'persons'}, 'p:203888': {'bipartite': 'persons'}, 'c:36871': {'bipartite': 'companies'}, 'c:29898': {'bipartite': 'companies'}, 'p:6209': {'bipartite': 'persons'}, 'p:61038': {'bipartite': 'persons'}, 'p:14457': {'bipartite': 'persons'}, 'p:205477': {'bipartite': 'persons'}, 'c:21202': {'bipartite': 'companies'}, 'p:191953': {'bipartite': 'persons'}, 'p:64344': {'bipartite': 'persons'}, 'p:27423': {'bipartite': 'persons'}, 'c:65947': {'bipartite': 'companies'}, 'p:158537': {'bipartite': 'persons'}, 'c:276210': {'bipartite': 'companies'}, 'c:179': {'bipartite': 'companies'}, 'c:20048': {'bipartite': 'companies'}, 'p:27275': {'bipartite': 'persons'}, 'c:6713': {'bipartite': 'companies'}, 'c:47686': {'bipartite': 'companies'}, 'p:6515': {'bipartite': 'persons'}, 'p:195379': {'bipartite': 'persons'}, 'c:149425': {'bipartite': 'companies'}, 'c:56373': {'bipartite': 'companies'}, 'p:66375': {'bipartite': 'persons'}, 'c:17886': {'bipartite': 'companies'}, 'p:23632': {'bipartite': 'persons'}, 'c:182813': {'bipartite': 'companies'}, 'c:26440': {'bipartite': 'companies'}, 'p:227651': {'bipartite': 'persons'}, 'c:34073': {'bipartite': 'companies'}, 'p:103125': {'bipartite': 'persons'}, 'p:67127': {'bipartite': 'persons'}, 'c:5347': {'bipartite': 'companies'}, 'p:226706': {'bipartite': 'persons'}, 'c:147072': {'bipartite': 'companies'}, 'c:37878': {'bipartite': 'companies'}, 'p:12889': {'bipartite': 'persons'}, 'c:70904': {'bipartite': 'companies'}, 'c:255715': {'bipartite': 'companies'}, 'p:113384': {'bipartite': 'persons'}, 'p:198453': {'bipartite': 'persons'}, 'c:18077': {'bipartite': 'companies'}, 'p:255828': {'bipartite': 'persons'}, 'c:38477': {'bipartite': 'companies'}, 'c:22703': {'bipartite': 'companies'}, 'p:240663': {'bipartite': 'persons'}, 'p:210546': {'bipartite': 'persons'}, 'c:185604': {'bipartite': 'companies'}, 'c:240365': {'bipartite': 'companies'}, 'c:27408': {'bipartite': 'companies'}, 'p:255388': {'bipartite': 'persons'}, 'c:24567': {'bipartite': 'companies'}, 'c:29303': {'bipartite': 'companies'}, 'p:2941': {'bipartite': 'persons'}, 'c:45541': {'bipartite': 'companies'}, 'p:187132': {'bipartite': 'persons'}, 'c:24257': {'bipartite': 'companies'}, 'p:117272': {'bipartite': 'persons'}, 'p:21922': {'bipartite': 'persons'}, 'c:16888': {'bipartite': 'companies'}, 'c:46156': {'bipartite': 'companies'}, 'd:49943': {'bipartite': 'schools'}, 'c:78624': {'bipartite': 'companies'}, 'c:49172': {'bipartite': 'companies'}, 'p:23635': {'bipartite': 'persons'}, 'p:255803': {'bipartite': 'persons'}, 'c:19744': {'bipartite': 'companies'}, 'p:205481': {'bipartite': 'persons'}, 'p:57950': {'bipartite': 'persons'}, 'c:35887': {'bipartite': 'companies'}, 'c:50716': {'bipartite': 'companies'}, 'c:140305': {'bipartite': 'companies'}, 'c:2361': {'bipartite': 'companies'}, 'c:70791': {'bipartite': 'companies'}, 'c:50764': {'bipartite': 'companies'}, 'p:94891': {'bipartite': 'persons'}, 'p:228138': {'bipartite': 'persons'}, 'c:5924': {'bipartite': 'companies'}, 'p:68518': {'bipartite': 'persons'}, 'c:40456': {'bipartite': 'companies'}, 'p:191954': {'bipartite': 'persons'}, 'c:61123': {'bipartite': 'companies'}, 'c:53593': {'bipartite': 'companies'}, 'c:58731': {'bipartite': 'companies'}, 'p:159173': {'bipartite': 'persons'}, 'c:1961': {'bipartite': 'companies'}, 'p:119795': {'bipartite': 'persons'}, 'p:12906': {'bipartite': 'persons'}, 'p:258803': {'bipartite': 'persons'}, 'c:8540': {'bipartite': 'companies'}, 'p:1133': {'bipartite': 'persons'}, 'p:240793': {'bipartite': 'persons'}, 'f:13318': {'bipartite': 'funds'}, 'p:34505': {'bipartite': 'persons'}, 'p:226698': {'bipartite': 'persons'}, 'c:1325': {'bipartite': 'companies'}, 'p:3445': {'bipartite': 'persons'}, 'p:205659': {'bipartite': 'persons'}, 'f:834': {'bipartite': 'funds'}, 'c:84746': {'bipartite': 'companies'}, 'p:217306': {'bipartite': 'persons'}, 'p:190777': {'bipartite': 'persons'}, 'c:52463': {'bipartite': 'companies'}, 'p:255820': {'bipartite': 'persons'}, 'p:227242': {'bipartite': 'persons'}, 'c:262105': {'bipartite': 'companies'}, 'c:41847': {'bipartite': 'companies'}, 'p:9264': {'bipartite': 'persons'}, 'd:3867': {'bipartite': 'schools'}, 'c:188519': {'bipartite': 'companies'}, 'c:46355': {'bipartite': 'companies'}, 'c:1367': {'bipartite': 'companies'}, 'p:140056': {'bipartite': 'persons'}, 'p:10786': {'bipartite': 'persons'}, 'c:17247': {'bipartite': 'companies'}, 'c:32058': {'bipartite': 'companies'}, 'p:205299': {'bipartite': 'persons'}, 'p:254560': {'bipartite': 'persons'}, 'f:225': {'bipartite': 'funds'}, 'c:231765': {'bipartite': 'companies'}, 'p:223502': {'bipartite': 'persons'}, 'c:146555': {'bipartite': 'companies'}, 'p:223460': {'bipartite': 'persons'}, 'c:130': {'bipartite': 'companies'}, 'c:6525': {'bipartite': 'companies'}, 'c:4312': {'bipartite': 'companies'}, 'p:262237': {'bipartite': 'persons'}, 'p:19622': {'bipartite': 'persons'}, 'c:150415': {'bipartite': 'companies'}, 'c:17072': {'bipartite': 'companies'}, 'p:23372': {'bipartite': 'persons'}, 'c:36006': {'bipartite': 'companies'}, 'p:30491': {'bipartite': 'persons'}, 'p:235944': {'bipartite': 'persons'}, 'c:66920': {'bipartite': 'companies'}, 'p:257922': {'bipartite': 'persons'}, 'c:1224': {'bipartite': 'companies'}, 'p:58590': {'bipartite': 'persons'}, 'p:186589': {'bipartite': 'persons'}, 'p:256156': {'bipartite': 'persons'}, 'c:12900': {'bipartite': 'companies'}, 'c:1038': {'bipartite': 'companies'}, 'c:3078': {'bipartite': 'companies'}, 'c:53693': {'bipartite': 'companies'}, 'c:184091': {'bipartite': 'companies'}, 'c:20927': {'bipartite': 'companies'}, 'p:239608': {'bipartite': 'persons'}, 'f:2058': {'bipartite': 'funds'}, 'c:61254': {'bipartite': 'companies'}, 'p:205172': {'bipartite': 'persons'}, 'p:228682': {'bipartite': 'persons'}, 'p:12901': {'bipartite': 'persons'}, 'p:113780': {'bipartite': 'persons'}, 'p:235460': {'bipartite': 'persons'}, 'p:253840': {'bipartite': 'persons'}, 'p:2939': {'bipartite': 'persons'}, 'c:140800': {'bipartite': 'companies'}, 'c:49770': {'bipartite': 'companies'}, 'p:2040': {'bipartite': 'persons'}, 'p:158538': {'bipartite': 'persons'}, 'c:39251': {'bipartite': 'companies'}, 'c:65830': {'bipartite': 'companies'}, 'p:170389': {'bipartite': 'persons'}, 'c:49838': {'bipartite': 'companies'}, 'c:57418': {'bipartite': 'companies'}, 'p:255003': {'bipartite': 'persons'}, 'c:38660': {'bipartite': 'companies'}, 'c:15829': {'bipartite': 'companies'}, 'p:263011': {'bipartite': 'persons'}, 'p:221273': {'bipartite': 'persons'}, 'p:153491': {'bipartite': 'persons'}, 'p:23636': {'bipartite': 'persons'}, 'c:58189': {'bipartite': 'companies'}, 'c:1663': {'bipartite': 'companies'}, 'c:24834': {'bipartite': 'companies'}, 'c:42472': {'bipartite': 'companies'}, 'p:150534': {'bipartite': 'persons'}, 'f:160': {'bipartite': 'funds'}, 'p:190700': {'bipartite': 'persons'}, 'd:33261': {'bipartite': 'schools'}, 'p:225256': {'bipartite': 'persons'}, 'c:20064': {'bipartite': 'companies'}, 'p:133801': {'bipartite': 'persons'}, 'p:225813': {'bipartite': 'persons'}, 'c:81291': {'bipartite': 'companies'}, 'c:760': {'bipartite': 'companies'}, 'c:47769': {'bipartite': 'companies'}, 'p:205305': {'bipartite': 'persons'}, 'c:42145': {'bipartite': 'companies'}, 'c:42416': {'bipartite': 'companies'}, 'p:175428': {'bipartite': 'persons'}, 'c:193733': {'bipartite': 'companies'}, 'p:223511': {'bipartite': 'persons'}, 'c:3839': {'bipartite': 'companies'}, 'c:27113': {'bipartite': 'companies'}, 'c:69351': {'bipartite': 'companies'}, 'c:50597': {'bipartite': 'companies'}, 'c:19700': {'bipartite': 'companies'}, 'c:73': {'bipartite': 'companies'}, 'c:1462': {'bipartite': 'companies'}, 'p:109197': {'bipartite': 'persons'}, 'c:57575': {'bipartite': 'companies'}, 'p:227293': {'bipartite': 'persons'}, 'p:58589': {'bipartite': 'persons'}, 'p:223483': {'bipartite': 'persons'}, 'c:69820': {'bipartite': 'companies'}, 'c:63337': {'bipartite': 'companies'}, 'p:186569': {'bipartite': 'persons'}, 'p:193043': {'bipartite': 'persons'}, 'p:205453': {'bipartite': 'persons'}, 'c:23102': {'bipartite': 'companies'}, 'c:47871': {'bipartite': 'companies'}, 'p:33060': {'bipartite': 'persons'}, 'p:230771': {'bipartite': 'persons'}, 'p:70369': {'bipartite': 'persons'}, 'c:65806': {'bipartite': 'companies'}, 'c:209133': {'bipartite': 'companies'}, 'c:28465': {'bipartite': 'companies'}, 'p:203644': {'bipartite': 'persons'}, 'p:246789': {'bipartite': 'persons'}, 'p:227015': {'bipartite': 'persons'}, 'c:640': {'bipartite': 'companies'}, 'p:23668': {'bipartite': 'persons'}, 'c:8883': {'bipartite': 'companies'}, 'p:30490': {'bipartite': 'persons'}, 'c:37776': {'bipartite': 'companies'}, 'c:195354': {'bipartite': 'companies'}, 'c:17724': {'bipartite': 'companies'}, 'c:44121': {'bipartite': 'companies'}, 'c:32376': {'bipartite': 'companies'}, 'c:78759': {'bipartite': 'companies'}, 'c:17729': {'bipartite': 'companies'}, 'c:209956': {'bipartite': 'companies'}, 'p:255789': {'bipartite': 'persons'}, 'c:156114': {'bipartite': 'companies'}, 'c:26025': {'bipartite': 'companies'}, 'c:47286': {'bipartite': 'companies'}, 'c:69282': {'bipartite': 'companies'}, 'c:147795': {'bipartite': 'companies'}, 'c:20721': {'bipartite': 'companies'}, 'p:115509': {'bipartite': 'persons'}, 'p:73140': {'bipartite': 'persons'}, 'c:23988': {'bipartite': 'companies'}, 'p:202262': {'bipartite': 'persons'}, 'c:4143': {'bipartite': 'companies'}, 'c:2874': {'bipartite': 'companies'}, 'c:62548': {'bipartite': 'companies'}, 'c:149458': {'bipartite': 'companies'}, 'c:1266': {'bipartite': 'companies'}, 'p:189198': {'bipartite': 'persons'}, 'c:30444': {'bipartite': 'companies'}, 'p:264105': {'bipartite': 'persons'}, 'c:67008': {'bipartite': 'companies'}, 'p:22505': {'bipartite': 'persons'}, 'c:233792': {'bipartite': 'companies'}, 'p:63627': {'bipartite': 'persons'}, 'p:196240': {'bipartite': 'persons'}, 'p:30162': {'bipartite': 'persons'}, 'c:21513': {'bipartite': 'companies'}, 'p:30165': {'bipartite': 'persons'}, 'c:56049': {'bipartite': 'companies'}, 'c:15834': {'bipartite': 'companies'}, 'c:32836': {'bipartite': 'companies'}, 'c:30256': {'bipartite': 'companies'}, 'c:11391': {'bipartite': 'companies'}, 'c:24880': {'bipartite': 'companies'}, 'c:4893': {'bipartite': 'companies'}, 'c:26783': {'bipartite': 'companies'}, 'p:255826': {'bipartite': 'persons'}, 'p:255055': {'bipartite': 'persons'}, 'c:45704': {'bipartite': 'companies'}, 'c:9669': {'bipartite': 'companies'}, 'f:3276': {'bipartite': 'funds'}, 'c:44876': {'bipartite': 'companies'}, 'p:265963': {'bipartite': 'persons'}, 'c:39164': {'bipartite': 'companies'}, 'p:42967': {'bipartite': 'persons'}, 'p:222118': {'bipartite': 'persons'}, 'c:175584': {'bipartite': 'companies'}, 'c:24795': {'bipartite': 'companies'}, 'c:22992': {'bipartite': 'companies'}, 'c:821': {'bipartite': 'companies'}, 'c:27620': {'bipartite': 'companies'}, 'c:42635': {'bipartite': 'companies'}, 'p:57047': {'bipartite': 'persons'}, 'p:255621': {'bipartite': 'persons'}, 'p:155838': {'bipartite': 'persons'}, 'c:103233': {'bipartite': 'companies'}, 'c:49601': {'bipartite': 'companies'}, 'c:50768': {'bipartite': 'companies'}, 'c:637': {'bipartite': 'companies'}, 'c:38204': {'bipartite': 'companies'}, 'c:934': {'bipartite': 'companies'}, 'c:17989': {'bipartite': 'companies'}, 'c:7199': {'bipartite': 'companies'}, 'p:224655': {'bipartite': 'persons'}, 'c:22936': {'bipartite': 'companies'}, 'f:6594': {'bipartite': 'funds'}, 'p:7185': {'bipartite': 'persons'}, 'c:3432': {'bipartite': 'companies'}, 'c:162753': {'bipartite': 'companies'}, 'c:15146': {'bipartite': 'companies'}, 'c:79120': {'bipartite': 'companies'}, 'p:227731': {'bipartite': 'persons'}, 'c:1434': {'bipartite': 'companies'}, 'p:42220': {'bipartite': 'persons'}, 'c:67696': {'bipartite': 'companies'}, 'd:9793': {'bipartite': 'schools'}, 'p:253879': {'bipartite': 'persons'}, 'p:89524': {'bipartite': 'persons'}, 'c:60342': {'bipartite': 'companies'}, 'c:50379': {'bipartite': 'companies'}, 'p:22575': {'bipartite': 'persons'}, 'p:205203': {'bipartite': 'persons'}, 'p:253866': {'bipartite': 'persons'}, 'p:24050': {'bipartite': 'persons'}, 'c:32499': {'bipartite': 'companies'}, 'c:183279': {'bipartite': 'companies'}, 'p:263693': {'bipartite': 'persons'}, 'c:26573': {'bipartite': 'companies'}, 'c:25097': {'bipartite': 'companies'}, 'c:8793': {'bipartite': 'companies'}, 'c:18323': {'bipartite': 'companies'}, 'p:252559': {'bipartite': 'persons'}, 'p:167686': {'bipartite': 'persons'}, 'p:226894': {'bipartite': 'persons'}, 'c:74062': {'bipartite': 'companies'}, 'p:221266': {'bipartite': 'persons'}, 'c:362': {'bipartite': 'companies'}, 'c:27486': {'bipartite': 'companies'}, 'p:232164': {'bipartite': 'persons'}, 'c:232553': {'bipartite': 'companies'}, 'p:225573': {'bipartite': 'persons'}, 'c:325': {'bipartite': 'companies'}, 'c:9260': {'bipartite': 'companies'}, 'c:20055': {'bipartite': 'companies'}, 'p:227817': {'bipartite': 'persons'}, 'c:9573': {'bipartite': 'companies'}, 'c:48442': {'bipartite': 'companies'}, 'c:71711': {'bipartite': 'companies'}, 'p:91618': {'bipartite': 'persons'}, 'p:202263': {'bipartite': 'persons'}, 'p:24020': {'bipartite': 'persons'}, 'c:16998': {'bipartite': 'companies'}, 'c:34268': {'bipartite': 'companies'}, 'c:3183': {'bipartite': 'companies'}, 'c:39056': {'bipartite': 'companies'}, 'c:536': {'bipartite': 'companies'}, 'c:49031': {'bipartite': 'companies'}, 'c:149635': {'bipartite': 'companies'}, 'c:38714': {'bipartite': 'companies'}, 'c:157594': {'bipartite': 'companies'}, 'c:31683': {'bipartite': 'companies'}, 'c:11279': {'bipartite': 'companies'}, 'p:224606': {'bipartite': 'persons'}, 'p:227302': {'bipartite': 'persons'}, 'c:228741': {'bipartite': 'companies'}, 'c:209384': {'bipartite': 'companies'}, 'c:54008': {'bipartite': 'companies'}, 'c:49148': {'bipartite': 'companies'}, 'c:45540': {'bipartite': 'companies'}, 'p:6242': {'bipartite': 'persons'}, 'c:6992': {'bipartite': 'companies'}, 'c:64895': {'bipartite': 'companies'}, 'c:43049': {'bipartite': 'companies'}, 'c:49574': {'bipartite': 'companies'}, 'c:31781': {'bipartite': 'companies'}, 'c:44072': {'bipartite': 'companies'}, 'p:228159': {'bipartite': 'persons'}, 'c:20009': {'bipartite': 'companies'}, 'c:36717': {'bipartite': 'companies'}, 'p:171003': {'bipartite': 'persons'}, 'd:15804': {'bipartite': 'schools'}, 'c:2964': {'bipartite': 'companies'}, 'c:480': {'bipartite': 'companies'}, 'c:4832': {'bipartite': 'companies'}, 'p:89519': {'bipartite': 'persons'}, 'p:50170': {'bipartite': 'persons'}, 'd:10787': {'bipartite': 'schools'}, 'p:195932': {'bipartite': 'persons'}, 'f:607': {'bipartite': 'funds'}, 'p:8422': {'bipartite': 'persons'}, 'c:22519': {'bipartite': 'companies'}, 'c:85971': {'bipartite': 'companies'}, 'c:45185': {'bipartite': 'companies'}, 'c:129': {'bipartite': 'companies'}, 'c:42150': {'bipartite': 'companies'}, 'c:42236': {'bipartite': 'companies'}, 'c:149': {'bipartite': 'companies'}, 'p:192503': {'bipartite': 'persons'}, 'c:164489': {'bipartite': 'companies'}, 'c:104093': {'bipartite': 'companies'}, 'f:5698': {'bipartite': 'funds'}, 'c:7850': {'bipartite': 'companies'}, 'c:5895': {'bipartite': 'companies'}, 'c:80551': {'bipartite': 'companies'}, 'c:6523': {'bipartite': 'companies'}, 'c:267013': {'bipartite': 'companies'}, 'c:17737': {'bipartite': 'companies'}, 'c:219505': {'bipartite': 'companies'}, 'c:32738': {'bipartite': 'companies'}, 'p:233203': {'bipartite': 'persons'}, 'c:48419': {'bipartite': 'companies'}, 'p:26307': {'bipartite': 'persons'}, 'p:22834': {'bipartite': 'persons'}, 'p:132564': {'bipartite': 'persons'}, 'c:200012': {'bipartite': 'companies'}, 'c:212640': {'bipartite': 'companies'}, 'p:228128': {'bipartite': 'persons'}, 'p:227837': {'bipartite': 'persons'}, 'c:8938': {'bipartite': 'companies'}, 'c:65811': {'bipartite': 'companies'}, 'p:222761': {'bipartite': 'persons'}, 'c:183574': {'bipartite': 'companies'}, 'p:221353': {'bipartite': 'persons'}, 'c:1498': {'bipartite': 'companies'}, 'p:83162': {'bipartite': 'persons'}, 'c:23323': {'bipartite': 'companies'}, 'p:257522': {'bipartite': 'persons'}, 'f:1770': {'bipartite': 'funds'}, 'p:205281': {'bipartite': 'persons'}, 'c:278633': {'bipartite': 'companies'}, 'p:13099': {'bipartite': 'persons'}, 'c:38467': {'bipartite': 'companies'}, 'c:18082': {'bipartite': 'companies'}, 'c:20049': {'bipartite': 'companies'}, 'c:20506': {'bipartite': 'companies'}, 'c:1209': {'bipartite': 'companies'}, 'c:8772': {'bipartite': 'companies'}, 'c:6191': {'bipartite': 'companies'}, 'c:195749': {'bipartite': 'companies'}, 'c:189021': {'bipartite': 'companies'}, 'c:46624': {'bipartite': 'companies'}, 'p:74251': {'bipartite': 'persons'}, 'c:45040': {'bipartite': 'companies'}, 'p:12268': {'bipartite': 'persons'}, 'c:195727': {'bipartite': 'companies'}, 'p:12878': {'bipartite': 'persons'}, 'p:191946': {'bipartite': 'persons'}, 'c:50702': {'bipartite': 'companies'}, 'c:139768': {'bipartite': 'companies'}, 'c:168450': {'bipartite': 'companies'}, 'c:20172': {'bipartite': 'companies'}, 'c:15673': {'bipartite': 'companies'}, 'p:259916': {'bipartite': 'persons'}, 'p:213878': {'bipartite': 'persons'}, 'p:71959': {'bipartite': 'persons'}, 'p:24740': {'bipartite': 'persons'}, 'c:10272': {'bipartite': 'companies'}, 'c:33090': {'bipartite': 'companies'}, 'f:3790': {'bipartite': 'funds'}, 'f:65': {'bipartite': 'funds'}, 'c:1385': {'bipartite': 'companies'}, 'c:37754': {'bipartite': 'companies'}, 'p:228357': {'bipartite': 'persons'}, 'p:1465': {'bipartite': 'persons'}, 'p:15888': {'bipartite': 'persons'}, 'c:138502': {'bipartite': 'companies'}, 'c:20051': {'bipartite': 'companies'}, 'c:26556': {'bipartite': 'companies'}, 'p:248070': {'bipartite': 'persons'}, 'c:38317': {'bipartite': 'companies'}, 'c:262262': {'bipartite': 'companies'}, 'p:222271': {'bipartite': 'persons'}, 'p:227602': {'bipartite': 'persons'}, 'p:72270': {'bipartite': 'persons'}, 'c:48285': {'bipartite': 'companies'}, 'c:9658': {'bipartite': 'companies'}, 'p:21551': {'bipartite': 'persons'}, 'c:164501': {'bipartite': 'companies'}, 'c:5584': {'bipartite': 'companies'}, 'p:19542': {'bipartite': 'persons'}, 'c:20392': {'bipartite': 'companies'}, 'c:140377': {'bipartite': 'companies'}, 'p:1134': {'bipartite': 'persons'}, 'p:248382': {'bipartite': 'persons'}, 'c:32594': {'bipartite': 'companies'}, 'c:142877': {'bipartite': 'companies'}, 'p:241972': {'bipartite': 'persons'}, 'p:168325': {'bipartite': 'persons'}, 'c:50815': {'bipartite': 'companies'}, 'c:168014': {'bipartite': 'companies'}, 'p:228140': {'bipartite': 'persons'}, 'p:22837': {'bipartite': 'persons'}, 'p:127117': {'bipartite': 'persons'}, 'c:32731': {'bipartite': 'companies'}, 'c:37683': {'bipartite': 'companies'}, 'c:40250': {'bipartite': 'companies'}, 'p:46338': {'bipartite': 'persons'}, 'p:255802': {'bipartite': 'persons'}, 'f:9018': {'bipartite': 'funds'}, 'c:24044': {'bipartite': 'companies'}, 'p:197631': {'bipartite': 'persons'}, 'p:29652': {'bipartite': 'persons'}, 'c:204657': {'bipartite': 'companies'}, 'p:72752': {'bipartite': 'persons'}, 'c:16283': {'bipartite': 'companies'}, 'p:2771': {'bipartite': 'persons'}, 'p:24051': {'bipartite': 'persons'}, 'c:170386': {'bipartite': 'companies'}, 'c:175412': {'bipartite': 'companies'}, 'c:35595': {'bipartite': 'companies'}, 'p:185754': {'bipartite': 'persons'}, 'p:201577': {'bipartite': 'persons'}, 'c:24452': {'bipartite': 'companies'}, 'p:22835': {'bipartite': 'persons'}, 'c:53558': {'bipartite': 'companies'}, 'c:6489': {'bipartite': 'companies'}, 'p:128358': {'bipartite': 'persons'}, 'p:185666': {'bipartite': 'persons'}, 'c:49333': {'bipartite': 'companies'}, 'p:244770': {'bipartite': 'persons'}, 'c:43183': {'bipartite': 'companies'}, 'c:26806': {'bipartite': 'companies'}, 'c:34998': {'bipartite': 'companies'}, 'c:72357': {'bipartite': 'companies'}, 'p:227833': {'bipartite': 'persons'}, 'p:58396': {'bipartite': 'persons'}, 'c:43822': {'bipartite': 'companies'}, 'p:264501': {'bipartite': 'persons'}, 'c:3655': {'bipartite': 'companies'}, 'c:45553': {'bipartite': 'companies'}, 'c:158808': {'bipartite': 'companies'}, 'p:50061': {'bipartite': 'persons'}, 'c:57536': {'bipartite': 'companies'}, 'c:203183': {'bipartite': 'companies'}, 'c:40': {'bipartite': 'companies'}, 'p:205493': {'bipartite': 'persons'}, 'p:178699': {'bipartite': 'persons'}, 'p:232190': {'bipartite': 'persons'}, 'p:221009': {'bipartite': 'persons'}, 'c:1043': {'bipartite': 'companies'}, 'c:967': {'bipartite': 'companies'}, 'c:84302': {'bipartite': 'companies'}, 'c:195453': {'bipartite': 'companies'}, 'c:52572': {'bipartite': 'companies'}, 'f:2020': {'bipartite': 'funds'}, 'c:263978': {'bipartite': 'companies'}, 'c:51306': {'bipartite': 'companies'}, 'p:8398': {'bipartite': 'persons'}, 'p:64256': {'bipartite': 'persons'}, 'p:7354': {'bipartite': 'persons'}, 'c:38132': {'bipartite': 'companies'}, 'c:1472': {'bipartite': 'companies'}, 'p:8427': {'bipartite': 'persons'}, 'c:25747': {'bipartite': 'companies'}, 'c:41020': {'bipartite': 'companies'}, 'p:20445': {'bipartite': 'persons'}, 'p:86737': {'bipartite': 'persons'}, 'c:17441': {'bipartite': 'companies'}, 'c:46308': {'bipartite': 'companies'}, 'c:348': {'bipartite': 'companies'}, 'p:8432': {'bipartite': 'persons'}, 'c:46558': {'bipartite': 'companies'}, 'c:24278': {'bipartite': 'companies'}, 'p:34739': {'bipartite': 'persons'}, 'c:20052': {'bipartite': 'companies'}, 'p:231313': {'bipartite': 'persons'}, 'p:4235': {'bipartite': 'persons'}, 'p:7705': {'bipartite': 'persons'}, 'p:48581': {'bipartite': 'persons'}, 'p:6231': {'bipartite': 'persons'}, 'c:25023': {'bipartite': 'companies'}, 'p:221340': {'bipartite': 'persons'}, 'c:275869': {'bipartite': 'companies'}, 'c:195134': {'bipartite': 'companies'}, 'c:20154': {'bipartite': 'companies'}, 'p:228127': {'bipartite': 'persons'}, 'f:2318': {'bipartite': 'funds'}, 'c:203257': {'bipartite': 'companies'}, 'c:3396': {'bipartite': 'companies'}, 'p:255825': {'bipartite': 'persons'}, 'p:21512': {'bipartite': 'persons'}, 'c:21608': {'bipartite': 'companies'}, 'p:196232': {'bipartite': 'persons'}, 'c:155758': {'bipartite': 'companies'}, 'c:47848': {'bipartite': 'companies'}, 'c:24342': {'bipartite': 'companies'}, 'p:194642': {'bipartite': 'persons'}, 'c:240957': {'bipartite': 'companies'}, 'c:49520': {'bipartite': 'companies'}, 'c:59637': {'bipartite': 'companies'}, 'c:2804': {'bipartite': 'companies'}, 'p:8429': {'bipartite': 'persons'}, 'c:225946': {'bipartite': 'companies'}, 'c:18465': {'bipartite': 'companies'}, 'c:27855': {'bipartite': 'companies'}, 'c:15605': {'bipartite': 'companies'}, 'c:28768': {'bipartite': 'companies'}, 'c:156471': {'bipartite': 'companies'}, 'c:9175': {'bipartite': 'companies'}, 'p:213570': {'bipartite': 'persons'}, 'p:25273': {'bipartite': 'persons'}, 'c:27786': {'bipartite': 'companies'}, 'p:1137': {'bipartite': 'persons'}, 'c:20313': {'bipartite': 'companies'}, 'c:7286': {'bipartite': 'companies'}, 'c:61752': {'bipartite': 'companies'}, 'p:259227': {'bipartite': 'persons'}, 'p:196179': {'bipartite': 'persons'}, 'c:72639': {'bipartite': 'companies'}, 'c:24735': {'bipartite': 'companies'}, 'c:231760': {'bipartite': 'companies'}, 'p:205458': {'bipartite': 'persons'}, 'c:84252': {'bipartite': 'companies'}, 'p:145398': {'bipartite': 'persons'}, 'p:258804': {'bipartite': 'persons'}, 'c:156735': {'bipartite': 'companies'}, 'c:43741': {'bipartite': 'companies'}, 'p:1255': {'bipartite': 'persons'}, 'c:1651': {'bipartite': 'companies'}, 'c:171204': {'bipartite': 'companies'}, 'c:1517': {'bipartite': 'companies'}, 'd:11601': {'bipartite': 'schools'}, 'c:47183': {'bipartite': 'companies'}, 'c:1348': {'bipartite': 'companies'}, 'p:205185': {'bipartite': 'persons'}, 'c:25510': {'bipartite': 'companies'}, 'c:78535': {'bipartite': 'companies'}, 'p:108327': {'bipartite': 'persons'}, 'd:16520': {'bipartite': 'schools'}, 'p:63628': {'bipartite': 'persons'}, 'c:20170': {'bipartite': 'companies'}, 'p:253887': {'bipartite': 'persons'}, 'c:179530': {'bipartite': 'companies'}, 'p:223470': {'bipartite': 'persons'}, 'c:38079': {'bipartite': 'companies'}, 'c:13816': {'bipartite': 'companies'}, 'c:232160': {'bipartite': 'companies'}, 'f:8134': {'bipartite': 'funds'}, 'p:228344': {'bipartite': 'persons'}, 'c:24639': {'bipartite': 'companies'}, 'c:45523': {'bipartite': 'companies'}, 'c:214139': {'bipartite': 'companies'}, 'p:133067': {'bipartite': 'persons'}, 'c:25014': {'bipartite': 'companies'}, 'p:46100': {'bipartite': 'persons'}, 'c:61904': {'bipartite': 'companies'}, 'p:149328': {'bipartite': 'persons'}, 'c:212459': {'bipartite': 'companies'}, 'c:5389': {'bipartite': 'companies'}, 'c:40812': {'bipartite': 'companies'}, 'c:34607': {'bipartite': 'companies'}, 'p:8420': {'bipartite': 'persons'}, 'p:235270': {'bipartite': 'persons'}, 'c:30198': {'bipartite': 'companies'}, 'p:89518': {'bipartite': 'persons'}, 'c:4': {'bipartite': 'companies'}, 'c:122626': {'bipartite': 'companies'}, 'c:43755': {'bipartite': 'companies'}, 'c:25839': {'bipartite': 'companies'}, 'c:280832': {'bipartite': 'companies'}, 'c:75365': {'bipartite': 'companies'}, 'p:205169': {'bipartite': 'persons'}, 'c:31142': {'bipartite': 'companies'}, 'c:3760': {'bipartite': 'companies'}, 'p:21294': {'bipartite': 'persons'}, 'p:23634': {'bipartite': 'persons'}, 'c:148372': {'bipartite': 'companies'}, 'p:159680': {'bipartite': 'persons'}, 'p:227279': {'bipartite': 'persons'}, 'c:193539': {'bipartite': 'companies'}, 'c:27745': {'bipartite': 'companies'}, 'c:20572': {'bipartite': 'companies'}, 'c:162892': {'bipartite': 'companies'}, 'c:959': {'bipartite': 'companies'}, 'p:227305': {'bipartite': 'persons'}, 'p:8418': {'bipartite': 'persons'}, 'c:171927': {'bipartite': 'companies'}, 'p:35257': {'bipartite': 'persons'}, 'c:46320': {'bipartite': 'companies'}, 'c:12543': {'bipartite': 'companies'}, 'p:190753': {'bipartite': 'persons'}, 'p:264384': {'bipartite': 'persons'}, 'c:153451': {'bipartite': 'companies'}, 'p:232173': {'bipartite': 'persons'}, 'p:205457': {'bipartite': 'persons'}, 'c:20058': {'bipartite': 'companies'}, 'p:255718': {'bipartite': 'persons'}, 'c:38916': {'bipartite': 'companies'}, 'c:16404': {'bipartite': 'companies'}, 'c:182871': {'bipartite': 'companies'}, 'c:1165': {'bipartite': 'companies'}, 'c:193317': {'bipartite': 'companies'}, 'p:232174': {'bipartite': 'persons'}, 'c:565': {'bipartite': 'companies'}, 'c:273843': {'bipartite': 'companies'}, 'p:184904': {'bipartite': 'persons'}, 'c:52363': {'bipartite': 'companies'}, 'c:24773': {'bipartite': 'companies'}, 'p:261142': {'bipartite': 'persons'}, 'c:160007': {'bipartite': 'companies'}, 'p:8438': {'bipartite': 'persons'}, 'c:37840': {'bipartite': 'companies'}, 'c:175546': {'bipartite': 'companies'}, 'p:147453': {'bipartite': 'persons'}, 'p:267896': {'bipartite': 'persons'}, 'f:881': {'bipartite': 'funds'}, 'c:23849': {'bipartite': 'companies'}, 'p:212319': {'bipartite': 'persons'}, 'c:1579': {'bipartite': 'companies'}, 'p:145818': {'bipartite': 'persons'}, 'p:188905': {'bipartite': 'persons'}, 'p:191947': {'bipartite': 'persons'}, 'c:80820': {'bipartite': 'companies'}, 'f:123': {'bipartite': 'funds'}, 'c:26807': {'bipartite': 'companies'}, 'p:44926': {'bipartite': 'persons'}, 'c:16567': {'bipartite': 'companies'}, 'p:255140': {'bipartite': 'persons'}, 'p:255790': {'bipartite': 'persons'}, 'c:84429': {'bipartite': 'companies'}, 'p:232175': {'bipartite': 'persons'}, 'p:253865': {'bipartite': 'persons'}, 'p:223508': {'bipartite': 'persons'}, 'p:49600': {'bipartite': 'persons'}, 'c:16302': {'bipartite': 'companies'}, 'c:57893': {'bipartite': 'companies'}, 'c:4046': {'bipartite': 'companies'}, 'p:196175': {'bipartite': 'persons'}, 'c:72294': {'bipartite': 'companies'}, 'c:25844': {'bipartite': 'companies'}, 'c:174449': {'bipartite': 'companies'}, 'p:21445': {'bipartite': 'persons'}, 'c:81438': {'bipartite': 'companies'}, 'c:222369': {'bipartite': 'companies'}, 'p:21482': {'bipartite': 'persons'}, 'f:1313': {'bipartite': 'funds'}, 'c:5032': {'bipartite': 'companies'}, 'c:71': {'bipartite': 'companies'}, 'c:49815': {'bipartite': 'companies'}, 'd:925': {'bipartite': 'schools'}, 'p:65137': {'bipartite': 'persons'}, 'c:208473': {'bipartite': 'companies'}, 'c:80445': {'bipartite': 'companies'}, 'c:44295': {'bipartite': 'companies'}, 'c:60537': {'bipartite': 'companies'}, 'c:20157': {'bipartite': 'companies'}, 'c:41894': {'bipartite': 'companies'}, 'c:259514': {'bipartite': 'companies'}, 'c:257959': {'bipartite': 'companies'}, 'c:29374': {'bipartite': 'companies'}, 'c:10716': {'bipartite': 'companies'}, 'c:74364': {'bipartite': 'companies'}, 'c:2972': {'bipartite': 'companies'}, 'c:77049': {'bipartite': 'companies'}, 'p:240748': {'bipartite': 'persons'}, 'p:83191': {'bipartite': 'persons'}, 'p:12896': {'bipartite': 'persons'}, 'c:41976': {'bipartite': 'companies'}, 'c:31794': {'bipartite': 'companies'}, 'p:106171': {'bipartite': 'persons'}, 'c:17867': {'bipartite': 'companies'}, 'd:22055': {'bipartite': 'schools'}, 'c:1575': {'bipartite': 'companies'}, 'c:53367': {'bipartite': 'companies'}, 'p:205202': {'bipartite': 'persons'}, 'p:83788': {'bipartite': 'persons'}, 'p:89634': {'bipartite': 'persons'}, 'p:224665': {'bipartite': 'persons'}, 'c:47465': {'bipartite': 'companies'}, 'p:255792': {'bipartite': 'persons'}, 'p:170194': {'bipartite': 'persons'}, 'p:248776': {'bipartite': 'persons'}, 'c:41671': {'bipartite': 'companies'}, 'f:83': {'bipartite': 'funds'}, 'c:273896': {'bipartite': 'companies'}, 'c:15125': {'bipartite': 'companies'}, 'c:4638': {'bipartite': 'companies'}, 'c:6746': {'bipartite': 'companies'}, 'c:259682': {'bipartite': 'companies'}, 'c:37674': {'bipartite': 'companies'}, 'd:43310': {'bipartite': 'schools'}, 'c:162610': {'bipartite': 'companies'}, 'c:144290': {'bipartite': 'companies'}, 'c:30072': {'bipartite': 'companies'}, 'p:128491': {'bipartite': 'persons'}, 'c:215583': {'bipartite': 'companies'}, 'c:44687': {'bipartite': 'companies'}, 'c:50710': {'bipartite': 'companies'}, 'c:20398': {'bipartite': 'companies'}, 'p:25258': {'bipartite': 'persons'}, 'c:68': {'bipartite': 'companies'}, 'p:34353': {'bipartite': 'persons'}, 'c:16305': {'bipartite': 'companies'}, 'c:27889': {'bipartite': 'companies'}, 'c:58115': {'bipartite': 'companies'}, 'c:3196': {'bipartite': 'companies'}, 'c:49358': {'bipartite': 'companies'}, 'p:262545': {'bipartite': 'persons'}, 'p:24047': {'bipartite': 'persons'}, 'c:43053': {'bipartite': 'companies'}, 'c:48199': {'bipartite': 'companies'}, 'c:8757': {'bipartite': 'companies'}, 'p:227802': {'bipartite': 'persons'}, 'p:132562': {'bipartite': 'persons'}, 'c:67911': {'bipartite': 'companies'}, 'c:1820': {'bipartite': 'companies'}, 'c:26236': {'bipartite': 'companies'}, 'p:60569': {'bipartite': 'persons'}, 'c:55634': {'bipartite': 'companies'}, 'c:203972': {'bipartite': 'companies'}, 'p:223443': {'bipartite': 'persons'}, 'p:253845': {'bipartite': 'persons'}, 'c:226364': {'bipartite': 'companies'}, 'c:20155': {'bipartite': 'companies'}, 'c:29561': {'bipartite': 'companies'}, 'f:1984': {'bipartite': 'funds'}, 'p:21446': {'bipartite': 'persons'}, 'p:255829': {'bipartite': 'persons'}, 'p:159174': {'bipartite': 'persons'}, 'c:26441': {'bipartite': 'companies'}, 'c:26988': {'bipartite': 'companies'}, 'p:228134': {'bipartite': 'persons'}, 'c:80845': {'bipartite': 'companies'}, 'c:31852': {'bipartite': 'companies'}, 'p:50176': {'bipartite': 'persons'}, 'p:186489': {'bipartite': 'persons'}, 'c:29184': {'bipartite': 'companies'}, 'c:16744': {'bipartite': 'companies'}, 'p:232189': {'bipartite': 'persons'}, 'c:139037': {'bipartite': 'companies'}, 'c:21940': {'bipartite': 'companies'}, 'c:46444': {'bipartite': 'companies'}, 'c:44810': {'bipartite': 'companies'}, 'p:12882': {'bipartite': 'persons'}, 'c:40632': {'bipartite': 'companies'}, 'c:37822': {'bipartite': 'companies'}, 'c:45691': {'bipartite': 'companies'}, 'p:10938': {'bipartite': 'persons'}, 'p:241285': {'bipartite': 'persons'}, 'c:63018': {'bipartite': 'companies'}, 'p:255721': {'bipartite': 'persons'}, 'p:225139': {'bipartite': 'persons'}, 'p:267179': {'bipartite': 'persons'}, 'c:25289': {'bipartite': 'companies'}, 'c:13997': {'bipartite': 'companies'}, 'p:263697': {'bipartite': 'persons'}, 'p:12881': {'bipartite': 'persons'}, 'c:5274': {'bipartite': 'companies'}, 'p:35396': {'bipartite': 'persons'}, 'c:36506': {'bipartite': 'companies'}, 'c:259512': {'bipartite': 'companies'}, 'p:22833': {'bipartite': 'persons'}, 'p:184750': {'bipartite': 'persons'}, 'p:20927': {'bipartite': 'persons'}, 'c:18038': {'bipartite': 'companies'}, 'p:115508': {'bipartite': 'persons'}, 'p:121512': {'bipartite': 'persons'}, 'p:189899': {'bipartite': 'persons'}, 'c:10570': {'bipartite': 'companies'}, 'c:176250': {'bipartite': 'companies'}, 'p:210663': {'bipartite': 'persons'}, 'c:20132': {'bipartite': 'companies'}, 'c:25497': {'bipartite': 'companies'}, 'c:59014': {'bipartite': 'companies'}, 'c:3448': {'bipartite': 'companies'}, 'c:2834': {'bipartite': 'companies'}, 'd:29890': {'bipartite': 'schools'}, 'c:57103': {'bipartite': 'companies'}, 'c:17990': {'bipartite': 'companies'}, 'p:189074': {'bipartite': 'persons'}, 'p:202267': {'bipartite': 'persons'}, 'c:23969': {'bipartite': 'companies'}, 'c:555': {'bipartite': 'companies'}, 'c:45106': {'bipartite': 'companies'}, 'c:211': {'bipartite': 'companies'}, 'c:10731': {'bipartite': 'companies'}, 'c:55975': {'bipartite': 'companies'}, 'c:24530': {'bipartite': 'companies'}, 'c:404': {'bipartite': 'companies'}, 'p:221298': {'bipartite': 'persons'}, 'p:227800': {'bipartite': 'persons'}, 'p:223477': {'bipartite': 'persons'}, 'p:30028': {'bipartite': 'persons'}, 'c:152119': {'bipartite': 'companies'}, 'c:47689': {'bipartite': 'companies'}, 'p:4331': {'bipartite': 'persons'}, 'p:17878': {'bipartite': 'persons'}, 'p:21444': {'bipartite': 'persons'}, 'p:226235': {'bipartite': 'persons'}, 'p:54929': {'bipartite': 'persons'}, 'p:235459': {'bipartite': 'persons'}, 'c:33607': {'bipartite': 'companies'}, 'p:106842': {'bipartite': 'persons'}, 'c:36507': {'bipartite': 'companies'}, 'c:1600': {'bipartite': 'companies'}, 'c:166739': {'bipartite': 'companies'}, 'p:7189': {'bipartite': 'persons'}, 'c:1812': {'bipartite': 'companies'}, 'p:223438': {'bipartite': 'persons'}, 'c:4830': {'bipartite': 'companies'}, 'c:137403': {'bipartite': 'companies'}, 'p:190234': {'bipartite': 'persons'}, 'c:37441': {'bipartite': 'companies'}, 'p:221319': {'bipartite': 'persons'}, 'c:229': {'bipartite': 'companies'}, 'p:23370': {'bipartite': 'persons'}, 'c:1668': {'bipartite': 'companies'}, 'p:8428': {'bipartite': 'persons'}, 'f:3341': {'bipartite': 'funds'}, 'c:1242': {'bipartite': 'companies'}, 'c:33381': {'bipartite': 'companies'}, 'c:14084': {'bipartite': 'companies'}, 'c:173674': {'bipartite': 'companies'}, 'c:149227': {'bipartite': 'companies'}, 'p:223485': {'bipartite': 'persons'}, 'p:204829': {'bipartite': 'persons'}, 'c:62432': {'bipartite': 'companies'}, 'p:31880': {'bipartite': 'persons'}, 'p:6792': {'bipartite': 'persons'}, 'p:23371': {'bipartite': 'persons'}, 'p:122260': {'bipartite': 'persons'}, 'd:41748': {'bipartite': 'schools'}, 'c:6522': {'bipartite': 'companies'}, 'p:235848': {'bipartite': 'persons'}, 'c:31740': {'bipartite': 'companies'}, 'c:336': {'bipartite': 'companies'}, 'c:79491': {'bipartite': 'companies'}, 'p:188218': {'bipartite': 'persons'}, 'c:6524': {'bipartite': 'companies'}, 'c:6386': {'bipartite': 'companies'}, 'p:262767': {'bipartite': 'persons'}, 'c:152695': {'bipartite': 'companies'}, 'c:228568': {'bipartite': 'companies'}, 'p:89521': {'bipartite': 'persons'}, 'f:5017': {'bipartite': 'funds'}, 'c:42030': {'bipartite': 'companies'}, 'p:189309': {'bipartite': 'persons'}, 'p:190572': {'bipartite': 'persons'}, 'c:5429': {'bipartite': 'companies'}, 'c:24623': {'bipartite': 'companies'}, 'c:144778': {'bipartite': 'companies'}, 'c:165791': {'bipartite': 'companies'}, 'c:275146': {'bipartite': 'companies'}, 'c:11363': {'bipartite': 'companies'}, 'd:38640': {'bipartite': 'schools'}, 'p:5214': {'bipartite': 'persons'}, 'p:38121': {'bipartite': 'persons'}, 'c:39596': {'bipartite': 'companies'}, 'p:205480': {'bipartite': 'persons'}, 'c:157278': {'bipartite': 'companies'}, 'd:24018': {'bipartite': 'schools'}, 'c:41953': {'bipartite': 'companies'}, 'p:226677': {'bipartite': 'persons'}, 'p:2700': {'bipartite': 'persons'}, 'p:227835': {'bipartite': 'persons'}, 'c:16285': {'bipartite': 'companies'}, 'p:89525': {'bipartite': 'persons'}, 'c:43622': {'bipartite': 'companies'}, 'p:200225': {'bipartite': 'persons'}, 'p:232161': {'bipartite': 'persons'}, 'c:144046': {'bipartite': 'companies'}, 'c:14669': {'bipartite': 'companies'}, 'c:4359': {'bipartite': 'companies'}, 'p:255801': {'bipartite': 'persons'}, 'p:227407': {'bipartite': 'persons'}, 'c:279988': {'bipartite': 'companies'}, 'c:40018': {'bipartite': 'companies'}, 'c:6117': {'bipartite': 'companies'}, 'c:43832': {'bipartite': 'companies'}, 'c:12657': {'bipartite': 'companies'}, 'c:21321': {'bipartite': 'companies'}, 'c:31774': {'bipartite': 'companies'}, 'c:23689': {'bipartite': 'companies'}, 'c:6048': {'bipartite': 'companies'}, 'c:38873': {'bipartite': 'companies'}, 'c:17774': {'bipartite': 'companies'}, 'p:205204': {'bipartite': 'persons'}, 'c:85162': {'bipartite': 'companies'}, 'c:12349': {'bipartite': 'companies'}, 'c:20156': {'bipartite': 'companies'}, 'c:46707': {'bipartite': 'companies'}, 'p:224670': {'bipartite': 'persons'}, 'p:255791': {'bipartite': 'persons'}, 'c:37777': {'bipartite': 'companies'}, 'p:253862': {'bipartite': 'persons'}, 'c:25316': {'bipartite': 'companies'}, 'p:30493': {'bipartite': 'persons'}, 'c:173523': {'bipartite': 'companies'}, 'c:44328': {'bipartite': 'companies'}, 'c:57818': {'bipartite': 'companies'}, 'p:42930': {'bipartite': 'persons'}, 'p:153564': {'bipartite': 'persons'}, 'c:5661': {'bipartite': 'companies'}, 'p:198999': {'bipartite': 'persons'}, 'c:18167': {'bipartite': 'companies'}, 'c:15166': {'bipartite': 'companies'}, 'c:17705': {'bipartite': 'companies'}, 'p:188366': {'bipartite': 'persons'}, 'c:12630': {'bipartite': 'companies'}, 'p:224577': {'bipartite': 'persons'}, 'c:195752': {'bipartite': 'companies'}, 'c:43765': {'bipartite': 'companies'}, 'c:191425': {'bipartite': 'companies'}, 'c:4060': {'bipartite': 'companies'}, 'c:17522': {'bipartite': 'companies'}, 'p:205357': {'bipartite': 'persons'}, 'c:68991': {'bipartite': 'companies'}, 'c:178079': {'bipartite': 'companies'}, 'c:57502': {'bipartite': 'companies'}, 'p:89516': {'bipartite': 'persons'}, 'c:58222': {'bipartite': 'companies'}, 'p:187144': {'bipartite': 'persons'}, 'c:17894': {'bipartite': 'companies'}, 'c:17672': {'bipartite': 'companies'}, 'c:147845': {'bipartite': 'companies'}, 'p:228171': {'bipartite': 'persons'}, 'c:24638': {'bipartite': 'companies'}, 'c:120997': {'bipartite': 'companies'}, 'p:7287': {'bipartite': 'persons'}, 'c:247266': {'bipartite': 'companies'}, 'c:655': {'bipartite': 'companies'}, 'c:43486': {'bipartite': 'companies'}, 'f:1681': {'bipartite': 'funds'}, 'p:253864': {'bipartite': 'persons'}, 'f:367': {'bipartite': 'funds'}, 'p:254519': {'bipartite': 'persons'}, 'c:21307': {'bipartite': 'companies'}, 'p:8426': {'bipartite': 'persons'}, 'p:205484': {'bipartite': 'persons'}, 'c:1483': {'bipartite': 'companies'}, 'c:29549': {'bipartite': 'companies'}, 'p:25274': {'bipartite': 'persons'}, 'c:471': {'bipartite': 'companies'}, 'c:1672': {'bipartite': 'companies'}, 'p:144882': {'bipartite': 'persons'}, 'c:21084': {'bipartite': 'companies'}, 'c:22675': {'bipartite': 'companies'}, 'p:248035': {'bipartite': 'persons'}, 'c:34401': {'bipartite': 'companies'}, 'c:57889': {'bipartite': 'companies'}, 'c:275152': {'bipartite': 'companies'}, 'p:266314': {'bipartite': 'persons'}, 'c:659': {'bipartite': 'companies'}, 'p:255725': {'bipartite': 'persons'}, 'c:851': {'bipartite': 'companies'}, 'c:17962': {'bipartite': 'companies'}, 'f:385': {'bipartite': 'funds'}, 'c:257205': {'bipartite': 'companies'}, 'c:22100': {'bipartite': 'companies'}, 'c:167055': {'bipartite': 'companies'}, 'c:82443': {'bipartite': 'companies'}, 'p:197630': {'bipartite': 'persons'}, 'c:24853': {'bipartite': 'companies'}, 'c:39625': {'bipartite': 'companies'}, 'c:8532': {'bipartite': 'companies'}, 'p:228350': {'bipartite': 'persons'}, 'c:48371': {'bipartite': 'companies'}, 'c:45235': {'bipartite': 'companies'}, 'c:145689': {'bipartite': 'companies'}, 'c:145557': {'bipartite': 'companies'}, 'c:165258': {'bipartite': 'companies'}, 'p:42962': {'bipartite': 'persons'}, 'c:2210': {'bipartite': 'companies'}, 'p:263497': {'bipartite': 'persons'}, 'p:8419': {'bipartite': 'persons'}, 'p:205478': {'bipartite': 'persons'}, 'c:14642': {'bipartite': 'companies'}, 'c:74360': {'bipartite': 'companies'}, 'c:224653': {'bipartite': 'companies'}, 'c:6273': {'bipartite': 'companies'}, 'p:7080': {'bipartite': 'persons'}, 'c:46491': {'bipartite': 'companies'}, 'c:261604': {'bipartite': 'companies'}, 'c:16568': {'bipartite': 'companies'}, 'p:191951': {'bipartite': 'persons'}, 'c:1187': {'bipartite': 'companies'}, 'p:224574': {'bipartite': 'persons'}, 'c:1194': {'bipartite': 'companies'}, 'c:264252': {'bipartite': 'companies'}, 'c:1227': {'bipartite': 'companies'}, 'p:12905': {'bipartite': 'persons'}, 'c:14333': {'bipartite': 'companies'}, 'p:22982': {'bipartite': 'persons'}, 'c:264842': {'bipartite': 'companies'}, 'c:7632': {'bipartite': 'companies'}, 'p:235473': {'bipartite': 'persons'}, 'c:142018': {'bipartite': 'companies'}, 'c:189572': {'bipartite': 'companies'}, 'p:82596': {'bipartite': 'persons'}, 'c:238986': {'bipartite': 'companies'}, 'c:179566': {'bipartite': 'companies'}, 'p:196233': {'bipartite': 'persons'}, 'c:25963': {'bipartite': 'companies'}, 'c:5543': {'bipartite': 'companies'}, 'p:258902': {'bipartite': 'persons'}, 'c:76543': {'bipartite': 'companies'}, 'c:153007': {'bipartite': 'companies'}, 'c:29610': {'bipartite': 'companies'}, 'c:14721': {'bipartite': 'companies'}, 'p:255804': {'bipartite': 'persons'}, 'c:234879': {'bipartite': 'companies'}, 'c:874': {'bipartite': 'companies'}, 'p:196230': {'bipartite': 'persons'}, 'p:117240': {'bipartite': 'persons'}, 'c:45113': {'bipartite': 'companies'}, 'c:34633': {'bipartite': 'companies'}, 'c:118308': {'bipartite': 'companies'}, 'c:56894': {'bipartite': 'companies'}, 'c:264878': {'bipartite': 'companies'}, 'c:7201': {'bipartite': 'companies'}, 'c:231744': {'bipartite': 'companies'}, 'c:215668': {'bipartite': 'companies'}, 'c:42027': {'bipartite': 'companies'}, 'c:47599': {'bipartite': 'companies'}, 'p:12880': {'bipartite': 'persons'}, 'p:185362': {'bipartite': 'persons'}, 'p:255788': {'bipartite': 'persons'}, 'c:191559': {'bipartite': 'companies'}, 'p:227251': {'bipartite': 'persons'}, 'c:80682': {'bipartite': 'companies'}, 'p:236897': {'bipartite': 'persons'}, 'p:187071': {'bipartite': 'persons'}, 'p:2854': {'bipartite': 'persons'}, 'c:38196': {'bipartite': 'companies'}, 'c:16284': {'bipartite': 'companies'}, 'p:42966': {'bipartite': 'persons'}, 'c:27441': {'bipartite': 'companies'}, 'c:84735': {'bipartite': 'companies'}, 'p:61594': {'bipartite': 'persons'}, 'p:79434': {'bipartite': 'persons'}, 'c:203213': {'bipartite': 'companies'}, 'p:196228': {'bipartite': 'persons'}, 'p:196226': {'bipartite': 'persons'}, 'p:243080': {'bipartite': 'persons'}, 'c:273924': {'bipartite': 'companies'}, 'c:1190': {'bipartite': 'companies'}, 'c:35': {'bipartite': 'companies'}, 'd:1014': {'bipartite': 'schools'}, 'c:55834': {'bipartite': 'companies'}, 'f:3440': {'bipartite': 'funds'}, 'p:579': {'bipartite': 'persons'}, 'p:255793': {'bipartite': 'persons'}, 'c:43414': {'bipartite': 'companies'}, 'c:57002': {'bipartite': 'companies'}, 'p:227840': {'bipartite': 'persons'}, 'p:192880': {'bipartite': 'persons'}, 'c:34004': {'bipartite': 'companies'}, 'p:27453': {'bipartite': 'persons'}, 'p:12886': {'bipartite': 'persons'}, 'p:22981': {'bipartite': 'persons'}, 'p:8436': {'bipartite': 'persons'}, 'c:355': {'bipartite': 'companies'}, 'f:4430': {'bipartite': 'funds'}, 'c:263296': {'bipartite': 'companies'}, 'c:35360': {'bipartite': 'companies'}, 'p:53505': {'bipartite': 'persons'}, 'c:16593': {'bipartite': 'companies'}, 'c:129609': {'bipartite': 'companies'}, 'c:114782': {'bipartite': 'companies'}, 'p:227810': {'bipartite': 'persons'}, 'c:6526': {'bipartite': 'companies'}, 'p:202257': {'bipartite': 'persons'}, 'p:258918': {'bipartite': 'persons'}, 'c:9372': {'bipartite': 'companies'}, 'c:53578': {'bipartite': 'companies'}, 'c:37712': {'bipartite': 'companies'}, 'c:162672': {'bipartite': 'companies'}, 'p:223458': {'bipartite': 'persons'}, 'p:59850': {'bipartite': 'persons'}, 'c:178991': {'bipartite': 'companies'}, 'c:1214': {'bipartite': 'companies'}, 'c:3705': {'bipartite': 'companies'}, 'c:58129': {'bipartite': 'companies'}, 'c:48909': {'bipartite': 'companies'}, 'c:58118': {'bipartite': 'companies'}, 'p:2041': {'bipartite': 'persons'}, 'p:145397': {'bipartite': 'persons'}, 'c:24287': {'bipartite': 'companies'}, 'c:22571': {'bipartite': 'companies'}, 'c:36066': {'bipartite': 'companies'}, 'c:1637': {'bipartite': 'companies'}, 'c:20395': {'bipartite': 'companies'}, 'p:8430': {'bipartite': 'persons'}, 'c:29553': {'bipartite': 'companies'}, 'c:29361': {'bipartite': 'companies'}, 'c:21448': {'bipartite': 'companies'}, 'c:701': {'bipartite': 'companies'}, 'p:267183': {'bipartite': 'persons'}, 'c:238607': {'bipartite': 'companies'}, 'c:141688': {'bipartite': 'companies'}, 'p:189149': {'bipartite': 'persons'}, 'p:692': {'bipartite': 'persons'}, 'c:59529': {'bipartite': 'companies'}, 'c:38721': {'bipartite': 'companies'}, 'd:16229': {'bipartite': 'schools'}, 'p:246114': {'bipartite': 'persons'}, 'c:38058': {'bipartite': 'companies'}, 'c:146635': {'bipartite': 'companies'}, 'c:12611': {'bipartite': 'companies'}, 'f:624': {'bipartite': 'funds'}, 'c:42062': {'bipartite': 'companies'}, 'c:44884': {'bipartite': 'companies'}, 'c:144918': {'bipartite': 'companies'}, 'c:59369': {'bipartite': 'companies'}, 'p:228126': {'bipartite': 'persons'}, 'p:22836': {'bipartite': 'persons'}, 'c:11700': {'bipartite': 'companies'}, 'p:227268': {'bipartite': 'persons'}, 'p:263624': {'bipartite': 'persons'}, 'c:144382': {'bipartite': 'companies'}, 'c:36591': {'bipartite': 'companies'}, 'c:22714': {'bipartite': 'companies'}, 'p:223455': {'bipartite': 'persons'}, 'p:76348': {'bipartite': 'persons'}, 'c:243507': {'bipartite': 'companies'}, 'p:24017': {'bipartite': 'persons'}, 'c:196998': {'bipartite': 'companies'}, 'c:240367': {'bipartite': 'companies'}, 'c:187433': {'bipartite': 'companies'}, 'c:153725': {'bipartite': 'companies'}, 'p:228154': {'bipartite': 'persons'}, 'c:42384': {'bipartite': 'companies'}, 'p:1135': {'bipartite': 'persons'}, 'c:70898': {'bipartite': 'companies'}, 'c:48183': {'bipartite': 'companies'}, 'c:73908': {'bipartite': 'companies'}, 'c:18260': {'bipartite': 'companies'}, 'c:67916': {'bipartite': 'companies'}, 'c:25950': {'bipartite': 'companies'}, 'p:111512': {'bipartite': 'persons'}, 'c:56748': {'bipartite': 'companies'}, 'c:45268': {'bipartite': 'companies'}, 'c:531': {'bipartite': 'companies'}, 'c:5139': {'bipartite': 'companies'}, 'c:28530': {'bipartite': 'companies'}, 'c:2550': {'bipartite': 'companies'}, 'c:34545': {'bipartite': 'companies'}, 'p:228353': {'bipartite': 'persons'}, 'c:48864': {'bipartite': 'companies'}, 'c:63021': {'bipartite': 'companies'}, 'c:274942': {'bipartite': 'companies'}, 'c:28786': {'bipartite': 'companies'}, 'c:139295': {'bipartite': 'companies'}, 'c:60815': {'bipartite': 'companies'}, 'c:71777': {'bipartite': 'companies'}, 'c:46152': {'bipartite': 'companies'}, 'p:255724': {'bipartite': 'persons'}, 'c:8045': {'bipartite': 'companies'}, 'c:8037': {'bipartite': 'companies'}, 'p:97766': {'bipartite': 'persons'}, 'c:58788': {'bipartite': 'companies'}, 'c:81886': {'bipartite': 'companies'}, 'c:26571': {'bipartite': 'companies'}, 'c:1571': {'bipartite': 'companies'}, 'p:22576': {'bipartite': 'persons'}, 'c:34057': {'bipartite': 'companies'}, 'c:181388': {'bipartite': 'companies'}, 'c:59080': {'bipartite': 'companies'}, 'c:53588': {'bipartite': 'companies'}, 'c:64604': {'bipartite': 'companies'}, 'c:1621': {'bipartite': 'companies'}, 'p:71208': {'bipartite': 'persons'}, 'c:52333': {'bipartite': 'companies'}, 'c:52018': {'bipartite': 'companies'}, 'c:700': {'bipartite': 'companies'}, 'c:34651': {'bipartite': 'companies'}, 'c:23794': {'bipartite': 'companies'}, 'p:255824': {'bipartite': 'persons'}, 'p:253837': {'bipartite': 'persons'}, 'f:6457': {'bipartite': 'funds'}, 'c:154602': {'bipartite': 'companies'}, 'p:115208': {'bipartite': 'persons'}, 'c:26298': {'bipartite': 'companies'}, 'p:182786': {'bipartite': 'persons'}, 'p:229971': {'bipartite': 'persons'}, 'd:24017': {'bipartite': 'schools'}, 'c:30288': {'bipartite': 'companies'}, 'c:175840': {'bipartite': 'companies'}, 'c:57962': {'bipartite': 'companies'}, 'c:38901': {'bipartite': 'companies'}, 'c:150080': {'bipartite': 'companies'}, 'p:137952': {'bipartite': 'persons'}, 'p:108922': {'bipartite': 'persons'}, 'c:42454': {'bipartite': 'companies'}, 'p:24392': {'bipartite': 'persons'}, 'c:44311': {'bipartite': 'companies'}, 'c:24869': {'bipartite': 'companies'}, 'c:82598': {'bipartite': 'companies'}, 'p:30492': {'bipartite': 'persons'}, 'c:2381': {'bipartite': 'companies'}, 'p:21447': {'bipartite': 'persons'}, 'f:750': {'bipartite': 'funds'}, 'c:241569': {'bipartite': 'companies'}, 'p:228158': {'bipartite': 'persons'}, 'c:29609': {'bipartite': 'companies'}, 'p:8442': {'bipartite': 'persons'}, 'c:274936': {'bipartite': 'companies'}, 'c:48866': {'bipartite': 'companies'}, 'p:88617': {'bipartite': 'persons'}, 'p:30166': {'bipartite': 'persons'}, 'p:1131': {'bipartite': 'persons'}, 'p:228144': {'bipartite': 'persons'}, 'c:30128': {'bipartite': 'companies'}, 'c:26007': {'bipartite': 'companies'}, 'p:227386': {'bipartite': 'persons'}, 'c:35157': {'bipartite': 'companies'}, 'c:45434': {'bipartite': 'companies'}, 'c:83752': {'bipartite': 'companies'}, 'p:267187': {'bipartite': 'persons'}, 'c:215670': {'bipartite': 'companies'}, 'p:255805': {'bipartite': 'persons'}, 'p:226987': {'bipartite': 'persons'}, 'c:22631': {'bipartite': 'companies'}, 'c:71619': {'bipartite': 'companies'}, 'c:16180': {'bipartite': 'companies'}, 'c:41624': {'bipartite': 'companies'}, 'p:260373': {'bipartite': 'persons'}, 'p:261247': {'bipartite': 'persons'}, 'c:56580': {'bipartite': 'companies'}, 'p:189150': {'bipartite': 'persons'}, 'c:41249': {'bipartite': 'companies'}, 'c:17511': {'bipartite': 'companies'}, 'c:15972': {'bipartite': 'companies'}, 'c:10015': {'bipartite': 'companies'}, 'p:217578': {'bipartite': 'persons'}, 'c:66714': {'bipartite': 'companies'}, 'p:221321': {'bipartite': 'persons'}, 'c:81790': {'bipartite': 'companies'}, 'c:8235': {'bipartite': 'companies'}, 'c:4873': {'bipartite': 'companies'}, 'c:88478': {'bipartite': 'companies'}, 'p:22577': {'bipartite': 'persons'}, 'c:83809': {'bipartite': 'companies'}, 'p:73596': {'bipartite': 'persons'}, 'p:23541': {'bipartite': 'persons'}, 'c:23076': {'bipartite': 'companies'}, 'p:22579': {'bipartite': 'persons'}, 'c:261232': {'bipartite': 'companies'}, 'c:199': {'bipartite': 'companies'}, 'p:187223': {'bipartite': 'persons'}, 'c:21082': {'bipartite': 'companies'}, 'p:192308': {'bipartite': 'persons'}, 'p:190965': {'bipartite': 'persons'}, 'p:12885': {'bipartite': 'persons'}, 'p:24741': {'bipartite': 'persons'}, 'c:16070': {'bipartite': 'companies'}, 'p:12904': {'bipartite': 'persons'}, 'c:17800': {'bipartite': 'companies'}, 'c:104598': {'bipartite': 'companies'}, 'f:340': {'bipartite': 'funds'}, 'c:25944': {'bipartite': 'companies'}, 'c:60517': {'bipartite': 'companies'}, 'c:208474': {'bipartite': 'companies'}, 'p:32388': {'bipartite': 'persons'}, 'c:3320': {'bipartite': 'companies'}, 'p:14088': {'bipartite': 'persons'}, 'c:255298': {'bipartite': 'companies'}, 'c:1867': {'bipartite': 'companies'}})
for v, data in Gcc.nodes(data=True):
    print(subset_color[data["bipartite"]])
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
/var/folders/by/t7qyz4pn5jsg1132688qnk780000gn/T/ipykernel_83961/796429915.py in <module>
      1 for v, data in Gcc.nodes(data=True):
----> 2     print(subset_color[data["bipartite"]])

KeyError: 'companies'
v
'c:264884'
from matplotlib import pyplot as plt

# subset_color = {
#     "companies": "gold",
#     "funds": "violet",
#     "schools": 'green',
#     "persons": 'red'
# }

#color = [subset_color[data["bipartite"]] for v, data in Gcc.nodes(data=True)]

subset_color = {
    "c": "gold",
    "f": "violet",
    "d": 'green',
    "p": 'red'
}

color = [subset_color[v[0]] for v, data in Gcc.nodes(data=True)]

plt.figure(num=None, figsize=(20, 20), dpi=150, facecolor='w', edgecolor='k')

#pos = nx.multipartite_layout(G, subset_key="bipartite")
pos = nx.spring_layout(Gcc, seed=10396953)
nx.draw(Gcc, 
        pos,
        node_color=color,
        with_labels=False,
        width=0.3,
        alpha=0.3,
        node_size=[v * 40 for v in dict(degrees_Gcc).values()],
        edge_color='b')

plt.axis("equal")
plt.show()
# subset_color = {
#     "companies": "gold",
#     "funds": "violet",
#     "schools": 'green',
#     "persons": 'red'
# }

# plt.figure(num=None, figsize=(20, 20), dpi=150, facecolor='w', edgecolor='k')

# color = [subset_color[data["bipartite"]] for v, data in Gcc.nodes(data=True)]
# #pos = nx.multipartite_layout(G, subset_key="bipartite")
# pos = nx.spring_layout(Gcc, seed=10396953)
# nx.draw(Gcc, 
#         pos,
#         node_color=color,
#         with_labels=False,
#         width=0.3,
#         alpha=0.6,
#         node_size=[v * 40 for v in dict(degrees_Gcc).values()],
#         edge_color='b')

# plt.axis("equal")
# plt.show()
edges_investment_df
investor_object_id funded_object_id funding_round_type raised_amount_usd is_first_round is_last_round funded_at
0 c:262573 c:63200 series-a 0.0 1 1 1974-01-01
1 f:17 c:28 series-a 2500000.0 1 1 1987-01-01
2 c:1242 c:15766 series-c+ 0.0 1 1 1987-06-16
3 f:789 c:15766 series-c+ 0.0 1 1 1987-06-16
4 f:1059 c:151866 venture 2000000.0 0 1 1992-02-22
... ... ... ... ... ... ... ...
63938 p:36810 c:81134 series-a 1000000.0 0 0 NaT
63939 p:99377 c:81134 series-a 1000000.0 0 0 NaT
63940 c:81351 c:81352 angel 0.0 0 0 NaT
63941 p:726 c:81544 venture 0.0 0 0 NaT
63942 c:81654 c:81655 angel 0.0 0 0 NaT

63943 rows × 7 columns

edges_list = list(G.edges(data=True))
edges_invest_in = [(edge[1], edge[0]) for edge in tqdm(list(G.edges(data=True))) if
                   edge[2].get('bipartite')=='invested_in']
len(edges_invest_in)
unique_nodes = list(set([x[0] for x in edges_invest_in if x[0][0]=='f'] + \
                        [x[1] for x in edges_invest_in if x[1][0]=='c']))
len(unique_nodes)
from itertools import product

#unique_nodes = list(G.nodes())
from tqdm import tqdm_notebook as tqdm

all_possible_edges = [(x,y) for (x,y) in tqdm(product(unique_nodes, unique_nodes)) 
                      if (x[0]=='f' and y[0]=='c')]
def get_emb():
    with torch.no_grad():
        model.encoder(train_data.x_dict, train_data.edge_index_dict)
model.encoder(train_data.x_dict, train_data.edge_index_dict)
edge_features = [
    (z[companies_idx[i]] + z[funds_idx[j]]) for i,j in tqdm(all_possible_edges)
]