{ "cells": [ { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "from aki_prj23_transparenzregister.utils.sql import connector, entities\n", "from aki_prj23_transparenzregister.config.config_providers import JsonFileConfigProvider\n", "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "session = connector.get_session(JsonFileConfigProvider(\"../../../../secrets.json\"))\n", "query_companies = session.query(entities.Company) # .all()\n", "query_relations = session.query(entities.CompanyRelation) # .all()\n", "\n", "companies_df: pd.DataFrame = pd.read_sql(str(query_companies), session.bind) # type: ignore\n", "companies_relations_df: pd.DataFrame = pd.read_sql(str(query_relations), session.bind) # type: ignore" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
company_idcompany_hrcompany_court_idcompany_namecompany_company_typecompany_founding_datecompany_business_purposecompany_streetcompany_house_numbercompany_zip_codecompany_citycompany_longitudecompany_latitudecompany_pos_accuracycompany_capital_valuecompany_original_currencycompany_capital_typecompany_last_updatecompany_sector
01HRB 14804810 10 24 Telefondienste GmbHGMBH2000-09-18Gegenstand des Unternehmens ist die Entwicklun...Deelbögenkamp422297Hamburg10.01770053.6026204.025000.0EUROSTAMMKAPITAL2020-05-11None
12HRA 30111421. Staiger Grundstücksverwaltung GmbH & Co. KGKG2003-07-03NoneJohannes-Bieg-Straße874391Erligheim9.09720049.0225004.0200000.0EUROHAFTEINLAGE2020-05-04None
23HRA 72001531 A Autenrieth Kunststofftechnik GmbH & Co. KGKGNoneNoneGewerbestraße872535Heroldstatt9.66423348.4456334.0146000.0EUROHAFTEINLAGE2016-08-23None
34HRB 97262101050.com GmbHGMBH2006-03-02die Entwicklung und Bereitstellung von Dienstl...Deelbögenkamp422297Hamburg10.01770053.6026204.025000.0EUROSTAMMKAPITAL2020-05-13None
45HRA 1761742. Schaper Objekt GmbH & Co. Kiel KGKGNoneNoneMetro-Straße240235Düsseldorf6.82160051.2301004.0500.0EUROHAFTEINLAGE2021-05-27None
............................................................
31423143HRB 1387458WINGAS Holding GmbHGMBH2005-01-18Die Beteiligung an Unternehmen, die den Einkau...Königstor2034117Kassel9.49120051.3166004.025200.0EUROSTAMMKAPITAL2023-03-28None
31433144HRB 715914WohnServicePlus GmbHGMBH2013-11-27Die Erbringung von Servicedienstleistungen run...Flughafenstraße9940474Düsseldorf6.74800051.2696004.025000.0EUROSTAMMKAPITAL2022-03-29None
31443145HRB 5297102Wohnungsbaugesellschaft mit beschränkter Haftu...GMBH1989-07-04Die Gesellschaft errichtet, bewirtschaftet, be...Taubenstraße4747443Moers6.66790051.4542004.06168500.0EUROSTAMMKAPITAL2022-02-16None
31453146HRA 48546 B12Zalando Customer Care International SE & Co. KGKG2013-08-16NoneMühlenstraße1510243Berlin13.43940052.5123006.0100.0EUROHAFTEINLAGE2021-11-26None
31463147HRB 3820189zebotec GmbHGMBH2002-04-03ist Consulting und Dienstleistungen im Bereich...August-Borsig-Straße1178467Konstanz9.16490047.6744004.025000.0EUROSTAMMKAPITAL2021-12-15None
\n", "

3146 rows × 19 columns

\n", "
" ], "text/plain": [ " company_id company_hr company_court_id \\\n", "0 1 HRB 148048 1 \n", "1 2 HRA 301114 2 \n", "2 3 HRA 720015 3 \n", "3 4 HRB 97262 1 \n", "4 5 HRA 17617 4 \n", "... ... ... ... \n", "3142 3143 HRB 13874 58 \n", "3143 3144 HRB 71591 4 \n", "3144 3145 HRB 5297 102 \n", "3145 3146 HRA 48546 B 12 \n", "3146 3147 HRB 382018 9 \n", "\n", " company_name company_company_type \\\n", "0 0 10 24 Telefondienste GmbH GMBH \n", "1 1. Staiger Grundstücksverwaltung GmbH & Co. KG KG \n", "2 1 A Autenrieth Kunststofftechnik GmbH & Co. KG KG \n", "3 01050.com GmbH GMBH \n", "4 2. Schaper Objekt GmbH & Co. Kiel KG KG \n", "... ... ... \n", "3141 WINGAS Holding GmbH GMBH \n", "3142 WohnServicePlus GmbH GMBH \n", "3143 Wohnungsbaugesellschaft mit beschränkter Haftu... GMBH \n", "3144 Zalando Customer Care International SE & Co. KG KG \n", "3145 zebotec GmbH GMBH \n", "\n", " company_founding_date company_business_purpose \\\n", "0 2000-09-18 Gegenstand des Unternehmens ist die Entwicklun... \n", "1 2003-07-03 None \n", "2 None None \n", "3 2006-03-02 die Entwicklung und Bereitstellung von Dienstl... \n", "4 None None \n", "... ... ... \n", "3141 2005-01-18 Die Beteiligung an Unternehmen, die den Einkau... \n", "3142 2013-11-27 Die Erbringung von Servicedienstleistungen run... \n", "3143 1989-07-04 Die Gesellschaft errichtet, bewirtschaftet, be... \n", "3144 2013-08-16 None \n", "3145 2002-04-03 ist Consulting und Dienstleistungen im Bereich... \n", "\n", " company_street company_house_number company_zip_code company_city \\\n", "0 Deelbögenkamp 4 22297 Hamburg \n", "1 Johannes-Bieg-Straße 8 74391 Erligheim \n", "2 Gewerbestraße 8 72535 Heroldstatt \n", "3 Deelbögenkamp 4 22297 Hamburg \n", "4 Metro-Straße 2 40235 Düsseldorf \n", "... ... ... ... ... \n", "3141 Königstor 20 34117 Kassel \n", "3142 Flughafenstraße 99 40474 Düsseldorf \n", "3143 Taubenstraße 47 47443 Moers \n", "3144 Mühlenstraße 15 10243 Berlin \n", "3145 August-Borsig-Straße 11 78467 Konstanz \n", "\n", " company_longitude company_latitude company_pos_accuracy \\\n", "0 10.017700 53.602620 4.0 \n", "1 9.097200 49.022500 4.0 \n", "2 9.664233 48.445633 4.0 \n", "3 10.017700 53.602620 4.0 \n", "4 6.821600 51.230100 4.0 \n", "... ... ... ... \n", "3141 9.491200 51.316600 4.0 \n", "3142 6.748000 51.269600 4.0 \n", "3143 6.667900 51.454200 4.0 \n", "3144 13.439400 52.512300 6.0 \n", "3145 9.164900 47.674400 4.0 \n", "\n", " company_capital_value company_original_currency company_capital_type \\\n", "0 25000.0 EURO STAMMKAPITAL \n", "1 200000.0 EURO HAFTEINLAGE \n", "2 146000.0 EURO HAFTEINLAGE \n", "3 25000.0 EURO STAMMKAPITAL \n", "4 500.0 EURO HAFTEINLAGE \n", "... ... ... ... \n", "3141 25200.0 EURO STAMMKAPITAL \n", "3142 25000.0 EURO STAMMKAPITAL \n", "3143 6168500.0 EURO STAMMKAPITAL \n", "3144 100.0 EURO HAFTEINLAGE \n", "3145 25000.0 EURO STAMMKAPITAL \n", "\n", " company_last_update company_sector \n", "0 2020-05-11 None \n", "1 2020-05-04 None \n", "2 2016-08-23 None \n", "3 2020-05-13 None \n", "4 2021-05-27 None \n", "... ... ... \n", "3141 2023-03-28 None \n", "3142 2022-03-29 None \n", "3143 2022-02-16 None \n", "3144 2021-11-26 None \n", "3145 2021-12-15 None \n", "\n", "[3146 rows x 19 columns]" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "companies_df" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [], "source": [ "def to_dict(data: object):\n", " return data.__dict__" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
indexlabeltypeshapecolor
0company_10 10 24 Telefondienste GmbHCompanydot#729b79ff
1person_1Nicolas, TetauPersondotblue
2person_2Lutz, DammastPersondotblue
3company_21. Staiger Grundstücksverwaltung GmbH & Co. KGCompanydot#729b79ff
4person_3Rosemarie, TutschPersondotblue
\n", "
" ], "text/plain": [ " index label type shape \\\n", "0 company_1 0 10 24 Telefondienste GmbH Company dot \n", "1 person_1 Nicolas, Tetau Person dot \n", "2 person_2 Lutz, Dammast Person dot \n", "3 company_2 1. Staiger Grundstücksverwaltung GmbH & Co. KG Company dot \n", "4 person_3 Rosemarie, Tutsch Person dot \n", "\n", " color \n", "0 #729b79ff \n", "1 blue \n", "2 blue \n", "3 #729b79ff \n", "4 blue " ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def get_data():\n", " nodes = {}\n", " edges = []\n", " network_data = []\n", " edge_template = {\n", " \"from\": {\n", " \"name\": \"Hans Wurst\",\n", " \"type\": \"Person\",\n", " },\n", " \"to\": {\"name\": \"Atos :D\", \"type\": \"Company\"},\n", " \"type\": \"Vorstand\",\n", " }\n", " node_template = {\n", " \"id\": \"(company|person)_\\d\",\n", " \"label\": \"Name from entries\",\n", " \"type\": \"Company|Person\",\n", " \"shape\": \"dot\",\n", " \"color\": \"#729b79ff\",\n", " # TODO add title for hover effect in graph \"title\": \"\"\n", " }\n", " data = session.query(entities.Relation).all()\n", " for entry in data[:1000]:\n", " company = (\n", " session.query(entities.Company)\n", " .filter(entities.Company.id == entry.company_id)\n", " .first()\n", " )\n", " if (\"company_\" + str(company.id)) not in nodes:\n", " nodes[\"company_\" + str(company.id)] = {\n", " \"label\": company.name,\n", " \"type\": \"Company\",\n", " \"shape\": \"dot\",\n", " \"color\": \"#729b79ff\",\n", " }\n", " person_relations = (\n", " session.query(entities.PersonRelation)\n", " .filter(entities.PersonRelation.id == entry.id)\n", " .all()\n", " )\n", " for relation in person_relations:\n", " person = (\n", " session.query(entities.Person)\n", " .filter(entities.Person.id == relation.person_id)\n", " .first()\n", " )\n", " if (\"person_\" + str(person.id)) not in nodes:\n", " nodes[\"person_\" + str(person.id)] = {\n", " \"label\": f\"{person.firstname}, {person.lastname}\",\n", " \"type\": \"Person\",\n", " \"shape\": \"dot\",\n", " \"color\": \"blue\",\n", " }\n", " edges.append(\n", " {\n", " \"from\": \"person_\" + str(person.id),\n", " \"to\": \"company_\" + str(company.id),\n", " # \"label\": int(entry.relation)\n", " \"label\": RelationTypeEnum.get_string_from_enum(entry.relation),\n", " }\n", " )\n", " company_relations = (\n", " session.query(entities.CompanyRelation)\n", " .filter(entities.CompanyRelation.id == entry.id)\n", " .all()\n", " )\n", " for relation in company_relations:\n", " company_2 = (\n", " session.query(entities.Company)\n", " .filter(entities.Company.id == relation.company2_id)\n", " .first()\n", " )\n", " if (\"company_\" + str(company_2.id)) not in nodes:\n", " nodes[\"company_\" + str(company_2.id)] = {\n", " \"label\": company_2.name,\n", " \"type\": \"Company\",\n", " \"shape\": \"dot\",\n", " \"color\": \"#729b79ff\",\n", " }\n", " edges.append(\n", " {\n", " \"from\": \"company_\" + str(company_2.id),\n", " \"to\": \"company_\" + str(company.id),\n", " \"label\": RelationTypeEnum.get_string_from_enum(entry.relation),\n", " }\n", " )\n", " return pd.DataFrame.from_dict(nodes, orient=\"index\").reset_index(), pd.DataFrame(\n", " edges\n", " )\n", "\n", "\n", "nodes, edges = get_data()\n", "nodes.head()" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
fromtolabel
0person_1company_1RelationshipRoleEnum.GESCHAEFTSFUEHRER
1person_2company_1RelationshipRoleEnum.PROKURIST
2person_3company_2RelationshipRoleEnum.KOMMANDITIST
3person_4company_2RelationshipRoleEnum.KOMMANDITIST
4person_5company_2RelationshipRoleEnum.KOMMANDITIST
\n", "
" ], "text/plain": [ " from to label\n", "0 person_1 company_1 RelationshipRoleEnum.GESCHAEFTSFUEHRER\n", "1 person_2 company_1 RelationshipRoleEnum.PROKURIST\n", "2 person_3 company_2 RelationshipRoleEnum.KOMMANDITIST\n", "3 person_4 company_2 RelationshipRoleEnum.KOMMANDITIST\n", "4 person_5 company_2 RelationshipRoleEnum.KOMMANDITIST" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "edges.head()" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+AAAAPbCAYAAADcmuETAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA2EElEQVR4nO3de5TXdZ348dcAMoNyU4Hh0ijh/QoGSmiuazs2nTwY20VWO4AsZiaaOscUvDAqq7ClHipRjmSLu5tBtuq6wcFsksqEUJDSI+AqKZx+DYolQ2jc5vP7o3Vq4iJfYF6APh7nfM/x+573+/t5fzkfkCef76WsKIoiAAAAgFbVZm9vAAAAAD4IBDgAAAAkEOAAAACQQIADAABAAgEOAAAACQQ4AAAAJBDgAAAAkECAAwAAQAIBDgAAAAkEOADsg/7+7/8+rrrqqr1y7IsuuiiGDRu2V44NAO9nAhwA/kZDQ0NceeWVceSRR0ZFRUVUVlbGGWecEffee2+8/fbbe3t7u2369OnRv3//6NixY3Tt2jVOOeWUmDRp0t7eFgC877Xb2xsAgH3JihUr4owzzoiuXbvG7bffHieddFKUl5fH888/H/fdd1/06dMnzjvvvG2u3bRpUxxwwAHJOy7Nd77znbjqqqvim9/8Zpx11lmxYcOG+PWvfx0vvPDC3t4aALzvuQIOAH/lsssui3bt2sWzzz4b559/fhx33HHRr1+/+PSnPx2zZ8+OoUOHNs8tKyuLe++9N84777w46KCD4rbbbostW7bEmDFj4sMf/nB06NAhjjnmmPjGN77R4hjvvsT7lltuie7du0fnzp3j0ksvjY0bN7aY19TUFNdee20ccsgh0bNnz7j55pt3+/k99thjcf7558eYMWPiyCOPjBNOOCEuuOCCuO2227aae8cdd0SvXr3i0EMPjbFjx8amTZuaf/Yf//EfMWjQoOjUqVP07NkzLrzwwnj99debfz5v3rwoKyuL2bNnx8knnxwVFRXx0Y9+dKvQf+qpp+LMM8+MDh06RFVVVXzlK1+J9evXN//8nnvuiaOOOqr5lQif+9zndvvXAAD2FgEOAP/nzTffjB/96EcxduzYOOigg7Y5p6ysrMX9m2++Of7xH/8xnn/++fjnf/7naGpqig996EPx0EMPxYsvvhgTJkyI66+/Pr7//e+3WFdfXx9Lly6NefPmxfe+9714+OGH45Zbbmkx54EHHoiDDjoofvnLX8bXvva1uPXWW+OJJ57YrefYs2fPWLBgQbz22ms7nPfkk0/GK6+8Ek8++WQ88MADMWPGjJgxY0bzzzdt2hQTJ06MX/3qV/Hoo4/Gq6++GhdddNFWj/PVr3417rzzznjmmWeie/fuMXTo0OaQf+WVV+KTn/xkfPazn41f//rXMWvWrHjqqafi8ssvj4iIZ599Nr7yla/ErbfeGsuXL4+5c+fG3/3d3+3W8weAvaoAAIqiKIoFCxYUEVE8/PDDLcYPPfTQ4qCDDioOOuig4tprr20ej4jiqquues/HHTt2bPHZz362+f6oUaOKQw45pFi/fn3z2L333lt07Nix2LJlS1EURXHWWWcVH/vYx1o8zqmnnlpcd911u/Tc3vX//t//Kz760Y8WEVEcffTRxahRo4pZs2Y1H/fd/R1++OHF5s2bm8c+//nPF8OHD9/u4z7zzDNFRBTr1q0riqIonnzyySIiipkzZzbPefPNN4sOHToUs2bNKoqiKMaMGVNccsklLR7n5z//edGmTZvinXfeKf7rv/6r6Ny5c9HY2LhbzxkA9hWugAPAe1i4cGEsWbIkTjjhhNiwYUOLnw0aNGir+VOnTo2BAwdG9+7do2PHjnHffffFypUrW8zp379/HHjggc33hwwZEn/84x9j1apVzWMnn3xyizW9evVq8TLvv/bzn/88Onbs2Hz77ne/u815vXr1ivnz58fzzz8fV155ZWzevDlGjRoVn/zkJ6Opqal53gknnBBt27bd7rEXLVoUQ4cOjcMOOyw6deoUZ511VkTEVs9zyJAhzf99yCGHxDHHHBNLly6NiIhf/epXMWPGjBb7rqmpiaampvjNb34T55xzThx++OHRr1+/GDFiRHz3u999X3wIHgAfXD6EDQD+z5FHHhllZWWxfPnyFuP9+vWLiIgOHTpsteZvX6o+c+bMuOaaa+LOO++MIUOGRKdOneLrX/96/PKXvyx5P3/7gW5lZWUtIvmvDRo0KJYsWdJ8v7KycoePfeKJJ8aJJ54Yl112WVx66aVx5plnxk9/+tM4++yz3/PY69evj5qamqipqYnvfve70b1791i5cmXU1NRs9T72HfnjH/8YX/rSl+IrX/nKVj877LDDon379rF48eKYN29e/OhHP4oJEybEzTffHM8880x07dp1p48DAPsKAQ4A/+fQQw+Nc845J+6+++644oortvs+8B35xS9+EaeffnpcdtllzWOvvPLKVvN+9atfxTvvvNMc9QsWLIiOHTtGVVXVLu29Q4cOceSRR+7S2uOPPz4iosWHn+3IsmXL4s0334zJkyc37/fZZ5/d5twFCxbEYYcdFhERf/jDH+Kll16K4447LiIiPvKRj8SLL764w323a9cuqquro7q6Ourq6qJr167xk5/8JD7zmc/s9PMDgH2Fl6ADwF+55557YvPmzTFo0KCYNWtWLF26NJYvXx7/+Z//GcuWLWvxsuxtOeqoo+LZZ5+Nxx9/PF566aW46aab4plnntlq3saNG2PMmDHx4osvxpw5c6Kuri4uv/zyaNOmdf/X/OUvfzkmTpwYv/jFL+K1116LBQsWxMiRI6N79+4tXi6+I+9enf7Wt74VK1asiMceeywmTpy4zbm33npr1NfXxwsvvBAXXXRRdOvWLYYNGxYREdddd108/fTTcfnll8eSJUvif//3f+O///u/mz+E7Yc//GF885vfjCVLlsRrr70W//7v/x5NTU1xzDHH7JFfCwDIJsAB4K8cccQR8dxzz0V1dXWMHz8++vfvH4MGDYpvfetbcc0112w3NN/1pS99KT7zmc/E8OHDY/DgwfHmm2+2uBr+rn/4h3+Io446Kv7u7/4uhg8fHuedd94e+Zqx91JdXR0LFiyIz3/+83H00UfHZz/72aioqIj6+vo49NBDd+oxunfvHjNmzIiHHnoojj/++Jg8eXLccccd25w7efLkuPLKK2PgwIHR0NAQ//M//xPt27ePiD+/x/2nP/1pvPTSS3HmmWfGKaecEhMmTIjevXtHRETXrl3j4Ycfjo9//ONx3HHHxbRp0+J73/tenHDCCXvmFwMAkpUVRVHs7U0AwAfJRRddFG+99VY8+uije3srrWbevHlx9tlnxx/+8Afv1waA/+MKOAAAACQQ4AAAAJDAS9ABAAAgQclXwH/2s5/F0KFDo3fv3lFWVrZT71+bN29efOQjH4ny8vI48sgjY8aMGbuwVQAAANh/lRzg69evj/79+8fUqVN3av5vfvObOPfcc+Pss8+OJUuWxFVXXRUXX3xxPP744yVvFgAAAPZXu/US9LKysnjkkUeav89zW6677rqYPXt2vPDCC81j//RP/xRvvfVWzJ07d1cPDQAAAPuVdq19gPnz50d1dXWLsZqamrjqqqu2u2bDhg2xYcOG5vtNTU3x+9//Pg499NAoKytrra0CAABAREQURRHr1q2L3r17R5s2e+bzy1s9wBsaGqKysrLFWGVlZTQ2NsY777wTHTp02GrNpEmT4pZbbmntrQEAAMAOrVq1Kj70oQ/tkcdq9QDfFePHj4/a2trm+2vXro3DDjssVq1aFZ07d96LOwMAAOCDoLGxMaqqqqJTp0577DFbPcB79uwZq1evbjG2evXq6Ny58zavfkdElJeXR3l5+VbjnTt3FuAAAACk2ZNvg94zL2TfgSFDhkR9fX2LsSeeeCKGDBnS2ocGAACAfUbJAf7HP/4xlixZEkuWLImIP3/N2JIlS2LlypUR8eeXj48cObJ5/qWXXhorVqyIa6+9NpYtWxb33HNPfP/734+rr756zzwDAAAA2A+UHODPPvtsnHLKKXHKKadERERtbW2ccsopMWHChIiI+N3vftcc4xERH/7wh2P27NnxxBNPRP/+/ePOO++Mb3/721FTU7OHngIAAADs+3bre8CzNDY2RpcuXWLt2rXeAw4AAECra40ObfX3gAMAAAACHAAAAFIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAAS7FKAT506Nfr27RsVFRUxePDgWLhw4Q7nT5kyJY455pjo0KFDVFVVxdVXXx1/+tOfdmnDAAAAsD8qOcBnzZoVtbW1UVdXF4sXL47+/ftHTU1NvP7669uc/+CDD8a4ceOirq4uli5dGvfff3/MmjUrrr/++t3ePAAAAOwvSg7wu+66K774xS/G6NGj4/jjj49p06bFgQceGN/5zne2Of/pp5+OM844Iy688MLo27dvfOITn4gLLrjgPa+aAwAAwPtJSQG+cePGWLRoUVRXV//lAdq0ierq6pg/f/4215x++umxaNGi5uBesWJFzJkzJz71qU9t9zgbNmyIxsbGFjcAAADYn7UrZfKaNWtiy5Yt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mD59enTr1m2n102aNCm6dOnSfKuqqmrFXQIAAEDrK+kKeLdu3aJt27axevXqFuOrV6+Onj17bjX/lVdeiVdffTWGDh3aPNbU1PTnA7drF8uXL48jjjhiq3Xjx4+P2tra5vuNjY0iHAAAgP1aSQHevn37GDhwYNTX1zd/lVhTU1PU19fH5ZdfvtX8Y489Np5//vkWYzfeeGOsW7cuvvGNb2w3qsvLy6O8vLyUrQEAAMA+raQAj4iora2NUaNGxaBBg+K0006LKVOmxPr162P06NERETFy5Mjo06dPTJo0KSoqKuLEE09ssb5r164REVuNAwAAwPtZyQE+fPjweOONN2LChAnR0NAQAwYMiLlz5zZ/MNvKlSujTZtWfWs5AAAA7HfKiqIo9vYm3ktjY2N06dIl1q5dG507d97b2wEAAOB9rjU61KVqAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAASCHAAAABIIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACDBLgX41KlTo2/fvlFRURGDBw+OhQsXbnfu9OnT48wzz4yDDz44Dj744Kiurt7hfAAAAHg/KjnAZ82aFbW1tVFXVxeLFy+O/v37R01NTbz++uvbnD9v3ry44IIL4sknn4z58+dHVVVVfOITn4jf/va3u715AAAA2F+UFUVRlLJg8ODBceqpp8bdd98dERFNTU1RVVUVV1xxRYwbN+4912/ZsiUOPvjguPvuu2PkyJE7dczGxsbo0qVLrF27Njp37lzKdgEAAKBkrdGhJV0B37hxYyxatCiqq6v/8gBt2kR1dXXMnz9/px7j7bffjk2bNsUhhxyy3TkbNmyIxsbGFjcAAADYn5UU4GvWrIktW7ZEZWVli/HKyspoaGjYqce47rrronfv3i0i/m9NmjQpunTp0nyrqqoqZZsAAACwz0n9FPTJkyfHzJkz45FHHomKiortzhs/fnysXbu2+bZq1arEXQIAAMCe166Uyd26dYu2bdvG6tWrW4yvXr06evbsucO1d9xx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xe9+97vm27p16/bWU4D3VOp5/rd8Cjr7g1LP85UrVxadOnUqLr/88mL58uXFD3/4w6JHjx7Fv/zLv+ytpwDvqdTzvK6urujUqVPxve99r1ixYkXxox/9qDjiiCOK888/f289BdihdevWFc8991zx3HPPFRFR3HXXXcVzzz1XvPbaa0VRFMW4ceOKESNGNM9fsWJFceCBBxZf/epXi6VLlxZTp04t2rZtW8ydO7ek4+4TAV4URfGtb32rOOyww4r27dsXp512WrFgwYLmn5111lnFqFGjWsz//ve/Xxx99NFF+/btixNOOKGYPXt28o6hdKWc54cffngREVvd6urq8jcOJSj1z/O/JsDZX5R6nj/99NPF4MGDi/Ly8qJfv37FbbfdVmzevDl511CaUs7zTZs2FTfffHNxxBFHFBUVFUVVVVVx2WWXFX/4wx/yNw474cknn9zm37XfPa9HjRpVnHXWWVutGTBgQNG+ffuiX79+xb/927+VfNyyovCaEAAAAGhte/094AAAAPBBIMABAAAggQAHAACABAIcAAAAEghwAAAASCDAAQAAIIEABwAAgAQCHAAAABIIcAAAAEggwAEAACCBAAcAAIAEAhwAAAAS/H/RsKdJFu0GogAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import networkx as nx\n", "import matplotlib.pyplot as plt\n", "\n", "fig = plt.figure(figsize=(12, 12))\n", "ax = plt.subplot(111)\n", "ax.set_title(\"Graph - Shapes\", fontsize=10)\n", "\n", "# initiate graph\n", "graph = nx.MultiGraph()\n", "\n", "# create edges from dataframe\n", "graph = nx.from_pandas_edgelist(edges, source=\"from\", target=\"to\", edge_attr=\"label\")\n", "\n", "# update node attributes from dataframe\n", "nodes_attr = nodes.set_index(\"index\").to_dict(orient=\"index\")\n", "nx.set_node_attributes(graph, nodes_attr)" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [], "source": [ "from pyvis.network import Network\n", "\n", "net = Network(\n", " directed=False, neighborhood_highlight=True, bgcolor=\"white\", font_color=\"black\"\n", ")\n", "\n", "# pass networkx graph to pyvis\n", "net.from_nx(graph)\n", "\n", "net.inherit_edge_colors(False)\n", "net.set_edge_smooth(\"dynamic\")\n", "\n", "net.repulsion()\n", "net.show_buttons(filter_=[\"physics\"])\n", "\n", "# net.show_buttons()\n", "\n", "# save graph as HTML\n", "net.save_graph(\"./tmp.html\")" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n

\\n
\\n\\n\\n \\n \\n\\n\\n
\\n

\\n
\\n \\n \\n\\n\\n \\n
\\n \\n \\n
\\n
\\n\\n \\n
\\n
\\n
0%
\\n
\\n
\\n
\\n
\\n
\\n \\n \\n
\\n \\n\\n \\n \\n'" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "net.generate_html(\"./tmp.html\")" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'person_1': array([-0.94645625, -0.09531674]),\n", " 'company_1': array([-0.94813806, -0.08389861]),\n", " 'person_2': array([-0.97526002, -0.0871018 ]),\n", " 'person_3': array([0.54134536, 0.64503521]),\n", " 'company_2': array([0.51604873, 0.62229675]),\n", " 'person_4': array([0.5037812 , 0.62973112]),\n", " 'person_5': array([0.5285213 , 0.65385073]),\n", " 'person_6': array([0.52969128, 0.61765826]),\n", " 'person_7': array([0.49968848, 0.60013074]),\n", " 'person_8': array([0.5363701 , 0.65151918]),\n", " 'person_9': array([-0.77727145, 0.30530825]),\n", " 'company_3': array([-0.81598961, 0.32018232]),\n", " 'person_10': array([-0.8483026, 0.332434 ]),\n", " 'company_4': array([-0.97412682, -0.09859657]),\n", " 'company_2213': array([ 0.38867021, -0.93487197]),\n", " 'company_5': array([ 0.39772275, -0.94155639]),\n", " 'person_11': array([-0.29175109, -0.17030789]),\n", " 'company_6': array([-0.29339093, -0.13240719]),\n", " 'person_12': array([-0.29848012, -0.19507937]),\n", " 'person_13': array([-0.32924238, -0.13631371]),\n", " 'person_14': array([-0.35154879, -0.12680687]),\n", " 'person_15': array([-0.34310305, -0.10627093]),\n", " 'person_16': array([-0.23552611, -0.16592056]),\n", " 'person_17': array([-0.24874705, -0.18067214]),\n", " 'person_18': array([-0.32502359, -0.14743052]),\n", " 'person_19': array([-0.31562042, -0.09711537]),\n", " 'person_20': array([-0.34951004, -0.12192237]),\n", " 'person_21': array([-0.33635387, -0.18849233]),\n", " 'person_22': array([-0.33080184, -0.12710813]),\n", " 'person_23': array([-0.24246007, -0.16528203]),\n", " 'person_24': array([-0.26356915, -0.09336084]),\n", " 'person_25': array([-0.23849528, -0.12071636]),\n", " 'person_26': array([-0.30277765, -0.14981653]),\n", " 'person_27': array([-0.34759021, -0.09525438]),\n", " 'person_28': array([-0.22937499, -0.1492146 ]),\n", " 'person_29': array([-0.25415164, -0.17853956]),\n", " 'person_30': array([-0.27666426, -0.18549836]),\n", " 'person_31': array([-0.27674809, -0.17531732]),\n", " 'person_32': array([-0.35591117, -0.15576491]),\n", " 'person_33': array([-0.27401137, -0.07199298]),\n", " 'person_34': array([-0.34639099, -0.17925061]),\n", " 'person_35': array([-0.23612511, -0.15300302]),\n", " 'person_36': array([-0.34957319, -0.15907429]),\n", " 'person_37': array([-0.2585243 , -0.14643718]),\n", " 'person_38': array([-0.27503318, -0.16592352]),\n", " 'person_39': array([-0.2268457 , -0.14214373]),\n", " 'person_40': array([-0.33319759, -0.08393148]),\n", " 'person_41': array([-0.25063512, -0.08446116]),\n", " 'person_42': array([-0.36065874, -0.14271824]),\n", " 'person_43': array([-0.2559768 , -0.08336009]),\n", " 'person_44': array([-0.29265791, -0.11994884]),\n", " 'person_45': array([-0.28746808, -0.09585708]),\n", " 'person_46': array([-0.30676436, -0.10049116]),\n", " 'person_47': array([-0.33626893, -0.10389478]),\n", " 'person_48': array([-0.29634419, -0.1066076 ]),\n", " 'person_49': array([-0.25568298, -0.17198077]),\n", " 'person_50': array([-0.28405654, -0.06668834]),\n", " 'person_51': array([-0.32179609, -0.13053083]),\n", " 'person_52': array([-0.2653006 , -0.18520828]),\n", " 'person_53': array([-0.28927353, -0.20091902]),\n", " 'person_54': array([-0.28396797, -0.17398784]),\n", " 'person_55': array([-0.24099757, -0.09950114]),\n", " 'person_56': array([-0.26412135, -0.11836554]),\n", " 'person_57': array([-0.33753172, -0.11729389]),\n", " 'person_58': array([-0.34249121, -0.18461512]),\n", " 'person_59': array([-0.24211307, -0.10677598]),\n", " 'person_60': array([-0.34635359, -0.13722599]),\n", " 'person_61': array([-0.25506011, -0.0984504 ]),\n", " 'person_62': array([-0.27482426, -0.13117769]),\n", " 'person_63': array([-0.36155722, -0.11806162]),\n", " 'person_64': array([-0.35711035, -0.16349809]),\n", " 'person_65': array([-0.30454987, -0.09386024]),\n", " 'person_66': array([-0.30570704, -0.12325798]),\n", " 'person_67': array([-0.26150358, -0.10069295]),\n", " 'person_68': array([-0.26771837, -0.11121737]),\n", " 'person_69': array([-0.35327289, -0.1348343 ]),\n", " 'person_70': array([-0.29553381, -0.18889698]),\n", " 'person_71': array([-0.36388421, -0.12411621]),\n", " 'person_72': array([-0.30633852, -0.15865022]),\n", " 'person_73': array([-0.31611109, -0.15192898]),\n", " 'person_74': array([-0.33572704, -0.09055942]),\n", " 'person_75': array([-0.32628727, -0.1879421 ]),\n", " 'person_76': array([-0.28807777, -0.18834905]),\n", " 'person_77': array([-0.34216365, -0.15327291]),\n", " 'person_78': array([-0.23144235, -0.1303439 ]),\n", " 'person_79': array([-0.29887101, -0.08192118]),\n", " 'person_80': array([-0.30366912, -0.06944449]),\n", " 'person_81': array([-0.34248638, -0.14517525]),\n", " 'person_82': array([-0.33797169, -0.12936948]),\n", " 'person_83': array([-0.29858708, -0.17432821]),\n", " 'person_84': array([-0.28869048, -0.1799521 ]),\n", " 'person_85': array([-0.25333053, -0.12910315]),\n", " 'person_86': array([-0.3396996 , -0.08197703]),\n", " 'person_87': array([-0.33310816, -0.17658722]),\n", " 'person_88': array([-0.30958718, -0.07417209]),\n", " 'person_89': array([-0.22711581, -0.13401406]),\n", " 'person_90': array([-0.29502481, -0.1598009 ]),\n", " 'person_91': array([-0.29545891, -0.20110004]),\n", " 'person_92': array([-0.28458446, -0.08131039]),\n", " 'person_93': array([-0.32938036, -0.16172211]),\n", " 'person_94': array([-0.34091777, -0.12312736]),\n", " 'person_95': array([-0.25413662, -0.16188113]),\n", " 'person_96': array([-0.30210349, -0.20136121]),\n", " 'person_97': array([-0.35971785, -0.10945469]),\n", " 'person_98': array([-0.34795102, -0.10139088]),\n", " 'person_99': array([-0.32198447, -0.10080085]),\n", " 'person_100': array([-0.27565601, -0.11897936]),\n", " 'person_101': array([-0.32232347, -0.15734047]),\n", " 'person_102': array([-0.25773147, -0.09014112]),\n", " 'person_103': array([-0.32007191, -0.10830058]),\n", " 'person_104': array([-0.33657196, -0.14957471]),\n", " 'person_105': array([-0.32008606, -0.06953587]),\n", " 'person_106': array([-0.27546057, -0.10764173]),\n", " 'person_107': array([-0.31599981, -0.19854243]),\n", " 'person_108': array([-0.28358132, -0.15003833]),\n", " 'person_109': array([-0.33064809, -0.15360624]),\n", " 'person_110': array([-0.30513799, -0.19570234]),\n", " 'person_111': array([-0.35108596, -0.10630029]),\n", " 'person_112': array([-0.2699343, -0.1752588]),\n", " 'person_113': array([-0.30235353, -0.08712091]),\n", " 'person_114': array([-0.36130774, -0.14949211]),\n", " 'person_115': array([-0.31118539, -0.19315623]),\n", " 'person_116': array([-0.32425973, -0.115748 ]),\n", " 'person_117': array([-0.33773968, -0.1662745 ]),\n", " 'person_118': array([-0.28248101, -0.16562799]),\n", " 'person_119': array([-0.28330615, -0.19272357]),\n", " 'person_120': array([-0.34252441, -0.1751582 ]),\n", " 'person_121': array([-0.26442012, -0.19363256]),\n", " 'person_122': array([-0.32087761, -0.09130382]),\n", " 'person_123': array([-0.24182765, -0.15494514]),\n", " 'person_124': array([-0.23110683, -0.15691864]),\n", " 'person_125': array([-0.26984686, -0.1018667 ]),\n", " 'person_126': array([-0.25849685, -0.190953 ]),\n", " 'person_127': array([-0.23719391, -0.16029818]),\n", " 'person_128': array([-0.31414136, -0.07009578]),\n", " 'person_129': array([-0.3608833, -0.1361005]),\n", " 'person_130': array([-0.30973211, -0.20032363]),\n", " 'person_131': array([-0.29182872, -0.06551932]),\n", " 'person_132': array([-0.31116545, -0.09004549]),\n", " 'person_133': array([-0.27721065, -0.14235254]),\n", " 'person_134': array([-0.33111295, -0.18925884]),\n", " 'person_135': array([-0.3171078 , -0.12261007]),\n", " 'person_136': array([-0.30786574, -0.17140229]),\n", " 'person_137': array([-0.26969752, -0.19040138]),\n", " 'person_138': array([-0.24411146, -0.12569062]),\n", " 'person_139': array([-0.23618245, -0.10806785]),\n", " 'person_140': array([-0.33688942, -0.15975361]),\n", " 'person_141': array([-0.26466373, -0.08654434]),\n", " 'person_142': array([-0.24481973, -0.17223406]),\n", " 'person_143': array([-0.25521392, -0.13911767]),\n", " 'person_144': array([-0.35885474, -0.12687126]),\n", " 'person_145': array([-0.29341483, -0.09035993]),\n", " 'person_146': array([-0.24878855, -0.10024062]),\n", " 'person_147': array([-0.29925019, -0.06536503]),\n", " 'person_148': array([-0.32028595, -0.19525304]),\n", " 'person_149': array([-0.27812955, -0.06839554]),\n", " 'person_150': array([-0.2388086 , -0.17180853]),\n", " 'person_151': array([-0.27214855, -0.09459578]),\n", " 'person_152': array([-0.35966849, -0.15716751]),\n", " 'person_153': array([-0.25879639, -0.1852358 ]),\n", " 'person_154': array([-0.32128677, -0.07502811]),\n", " 'person_155': array([-0.23833998, -0.13017254]),\n", " 'person_156': array([-0.270511 , -0.08618389]),\n", " 'person_157': array([-0.34483397, -0.09038094]),\n", " 'person_158': array([-0.26398477, -0.13696922]),\n", " 'person_159': array([-0.35423067, -0.14922142]),\n", " 'person_160': array([-0.23377162, -0.12400025]),\n", " 'person_161': array([-0.3169232 , -0.07871289]),\n", " 'person_162': array([-0.2913169 , -0.19486848]),\n", " 'person_163': array([-0.25747752, -0.1231555 ]),\n", " 'person_164': array([-0.31368151, -0.0841317 ]),\n", " 'person_165': array([-0.24953678, -0.1195419 ]),\n", " 'person_166': array([-0.31372544, -0.16174915]),\n", " 'person_167': array([-0.28781334, -0.11143665]),\n", " 'person_168': array([-0.25135517, -0.09228915]),\n", " 'person_169': array([-0.29629523, -0.07150467]),\n", " 'person_170': array([-0.29029462, -0.08472709]),\n", " 'person_171': array([-0.25985792, -0.15596719]),\n", " 'person_172': array([-0.36200643, -0.13082623]),\n", " 'person_173': array([-0.36532846, -0.13962942]),\n", " 'person_174': array([-0.33989909, -0.13591783]),\n", " 'person_175': array([-0.33621931, -0.17149328]),\n", " 'person_176': array([-0.23595402, -0.10096996]),\n", " 'person_177': array([-0.26501215, -0.12808612]),\n", " 'person_178': array([-0.27120963, -0.18224059]),\n", " 'person_179': array([-0.31634104, -0.18395349]),\n", " 'person_180': array([-0.34882769, -0.11178296]),\n", " 'person_181': array([-0.28672624, -0.15867458]),\n", " 'person_182': array([-0.24731468, -0.16160429]),\n", " 'person_183': array([-0.33712119, -0.11065499]),\n", " 'person_184': array([-0.28381744, -0.19959599]),\n", " 'person_185': array([-0.31166458, -0.14072569]),\n", " 'person_186': array([-0.24924822, -0.13474645]),\n", " 'person_187': array([-0.32861003, -0.08866172]),\n", " 'person_188': array([-0.34983265, -0.17378041]),\n", " 'person_189': array([-0.32165 , -0.1407997]),\n", " 'person_190': array([-0.35406747, -0.11852243]),\n", " 'person_191': array([-0.26341456, -0.17306204]),\n", " 'person_192': array([-0.33466858, -0.14168544]),\n", " 'person_193': array([-0.30889809, -0.06642918]),\n", " 'person_194': array([-0.32865357, -0.18165964]),\n", " 'person_195': array([-0.24559295, -0.11198439]),\n", " 'person_196': array([-0.32185495, -0.17998117]),\n", " 'person_197': array([-0.34442183, -0.16827418]),\n", " 'person_198': array([-0.24411876, -0.09475746]),\n", " 'person_199': array([-0.33036637, -0.11796038]),\n", " 'person_200': array([-0.2671257 , -0.16632527]),\n", " 'person_201': array([-0.30177242, -0.18231125]),\n", " 'person_202': array([-0.2930516, -0.0778314]),\n", " 'person_203': array([-0.23265606, -0.13782749]),\n", " 'person_204': array([-0.34503484, -0.11642298]),\n", " 'person_205': array([-0.32178032, -0.08460148]),\n", " 'person_206': array([-0.2440332 , -0.17839493]),\n", " 'person_207': array([-0.34902596, -0.15228869]),\n", " 'person_208': array([-0.27794567, -0.1987088 ]),\n", " 'person_209': array([-0.26093122, -0.17903952]),\n", " 'person_210': array([-0.24246714, -0.1406489 ]),\n", " 'person_211': array([-0.28251511, -0.10261877]),\n", " 'person_212': array([-0.25291038, -0.15048315]),\n", " 'person_213': array([-0.30213702, -0.075909 ]),\n", " 'person_214': array([-0.33364704, -0.07757835]),\n", " 'person_215': array([-0.33425444, -0.09759662]),\n", " 'person_216': array([-0.27893758, -0.09419606]),\n", " 'person_217': array([-0.25221163, -0.18624796]),\n", " 'person_218': array([-0.25510305, -0.11376907]),\n", " 'person_219': array([-0.34335935, -0.16070066]),\n", " 'person_220': array([-0.35045302, -0.16576217]),\n", " 'person_221': array([-0.22834022, -0.11469944]),\n", " 'person_222': array([-0.30358118, -0.18917699]),\n", " 'person_223': array([-0.30903101, -0.1070931 ]),\n", " 'person_224': array([-0.3277829 , -0.07384476]),\n", " 'person_225': array([-0.24584529, -0.08897725]),\n", " 'person_226': array([-0.27297825, -0.15297757]),\n", " 'person_227': array([-0.32904494, -0.17344593]),\n", " 'person_228': array([-0.27542794, -0.08266915]),\n", " 'person_229': array([-0.32282442, -0.1726789 ]),\n", " 'person_230': array([-0.32615292, -0.19424482]),\n", " 'person_231': array([-0.35569215, -0.10243949]),\n", " 'person_232': array([-0.32871997, -0.10612521]),\n", " 'person_233': array([-0.23283327, -0.11210861]),\n", " 'person_234': array([-0.24267364, -0.11722376]),\n", " 'person_235': array([-0.3424325 , -0.08640245]),\n", " 'person_236': array([-0.25865221, -0.07890566]),\n", " 'person_237': array([-0.32671022, -0.08038931]),\n", " 'person_238': array([-0.35250273, -0.09533908]),\n", " 'person_239': array([-0.34687948, -0.13040006]),\n", " 'person_240': array([-0.31160167, -0.11439496]),\n", " 'person_241': array([-0.2690877 , -0.07346647]),\n", " 'person_242': array([-0.24994205, -0.10633726]),\n", " 'person_243': array([-0.24139555, -0.13474838]),\n", " 'person_244': array([-0.23490468, -0.1442053 ]),\n", " 'person_245': array([-0.34092984, -0.09711611]),\n", " 'person_246': array([-0.24736744, -0.14519688]),\n", " 'person_247': array([-0.31944054, -0.18935986]),\n", " 'person_248': array([-0.35619909, -0.14365619]),\n", " 'person_249': array([-0.27810174, -0.07709685]),\n", " 'person_250': array([-0.27147946, -0.19708283]),\n", " 'person_251': array([-0.28232709, -0.18313722]),\n", " 'person_252': array([-0.28445387, -0.07459529]),\n", " 'person_253': array([-0.35533354, -0.17027247]),\n", " 'person_254': array([-0.31584728, -0.16982235]),\n", " 'person_255': array([-0.32752156, -0.09587284]),\n", " 'person_256': array([-0.3488076, -0.1431351]),\n", " 'person_257': array([-0.2661292 , -0.07928302]),\n", " 'person_258': array([-0.35565594, -0.11293326]),\n", " 'person_259': array([-0.30186555, -0.16682148]),\n", " 'person_260': array([-0.24827398, -0.15470658]),\n", " 'person_261': array([-0.25962672, -0.10798042]),\n", " 'person_262': array([-0.32361701, -0.16548169]),\n", " 'person_263': array([-0.2811338 , -0.08757194]),\n", " 'person_264': array([-0.29620138, -0.09812378]),\n", " 'person_265': array([-0.30793014, -0.08066995]),\n", " 'person_266': array([-0.28939083, -0.07124583]),\n", " 'person_267': array([-0.25980672, -0.16525091]),\n", " 'person_268': array([-0.25017574, -0.16947731]),\n", " 'person_269': array([-0.23954843, -0.14720881]),\n", " 'person_270': array([-0.27643541, -0.19196527]),\n", " 'person_271': array([-0.26265508, -0.07424586]),\n", " 'person_272': array([-0.33781454, -0.18183184]),\n", " 'person_273': array([-0.29497415, -0.18174928]),\n", " 'person_274': array([-0.22878696, -0.12270802]),\n", " 'person_275': array([-0.3079555 , -0.18025157]),\n", " 'person_276': array([-0.31096753, -0.18747669]),\n", " 'person_277': array([-0.31447831, -0.17731422]),\n", " 'person_278': array([-0.26817611, -0.15879087]),\n", " 'person_279': array([-0.26626343, -0.14641608]),\n", " 'person_280': array([0.76546466, 0.51142812]),\n", " 'company_7': array([0.77644122, 0.51908648]),\n", " 'person_281': array([ 0.14806524, -0.89926249]),\n", " 'company_8': array([ 0.14003529, -0.86849111]),\n", " 'person_282': array([ 0.13896646, -0.90096533]),\n", " 'person_283': array([ 0.80375147, -0.41634136]),\n", " 'company_9': array([ 0.77352953, -0.39914945]),\n", " 'person_284': array([ 0.74361908, -0.38244921]),\n", " 'person_285': array([ 0.302652 , -0.66282827]),\n", " 'company_10': array([ 0.30911034, -0.69328517]),\n", " 'company_11': array([ 0.29653847, -0.68200964]),\n", " 'person_286': array([-0.15678515, -0.77359235]),\n", " 'company_12': array([-0.16676562, -0.80605441]),\n", " 'person_287': array([-0.16209953, -0.81855541]),\n", " 'company_13': array([-0.17181288, -0.79528618]),\n", " 'person_288': array([ 0.031348 , -0.81539774]),\n", " 'company_14': array([ 0.03458273, -0.79448736]),\n", " 'person_289': array([ 0.04263325, -0.81525582]),\n", " 'person_290': array([ 0.03497952, -0.82879829]),\n", " 'person_291': array([ 0.04007478, -0.79840034]),\n", " 'person_292': array([ 0.04545384, -0.86097932]),\n", " 'company_15': array([ 0.04471132, -0.82503182]),\n", " 'person_293': array([ 0.0825047 , -0.57439178]),\n", " 'company_16': array([ 0.08398267, -0.60917449]),\n", " 'person_294': array([ 0.07371303, -0.63152725]),\n", " 'person_295': array([ 0.09819786, -0.57835168]),\n", " 'person_296': array([ 0.09748627, -0.63143951]),\n", " 'person_297': array([ 0.08360413, -0.6356926 ]),\n", " 'person_298': array([ 0.06818838, -0.63716394]),\n", " 'person_299': array([ 0.07728314, -0.64305311]),\n", " 'person_300': array([ 0.08744648, -0.64503741]),\n", " 'person_301': array([ 0.09352504, -0.6379596 ]),\n", " 'person_302': array([ 0.13521369, -0.63663954]),\n", " 'company_17': array([ 0.12053125, -0.61125791]),\n", " 'person_303': array([ 0.127349 , -0.64204323]),\n", " 'person_304': array([-0.89297879, 0.56725734]),\n", " 'company_18': array([-0.86483884, 0.55060148]),\n", " 'person_305': array([-0.25162897, 0.9686811 ]),\n", " 'company_19': array([-0.24565965, 0.93700242]),\n", " 'person_306': array([-0.23823677, 0.89832532]),\n", " 'person_307': array([ 0.82969701, -0.13422643]),\n", " 'company_20': array([ 0.8385421 , -0.12747966]),\n", " 'person_308': array([-0.92568612, -0.20312753]),\n", " 'company_21': array([-0.89545161, -0.19460441]),\n", " 'person_309': array([-0.87389374, -0.19011062]),\n", " 'person_310': array([-0.89532232, -0.18205003]),\n", " 'person_311': array([0.29060802, 0.77535838]),\n", " 'company_22': array([0.27514246, 0.74658656]),\n", " 'person_312': array([0.28191134, 0.77849835]),\n", " 'person_313': array([0.26624691, 0.72217286]),\n", " 'person_314': array([ 0.14276658, -0.47123381]),\n", " 'company_23': array([ 0.14855844, -0.45495015]),\n", " 'person_315': array([ 0.13501705, -0.46915165]),\n", " 'person_316': array([ 0.16086225, -0.46227744]),\n", " 'person_317': array([ 0.16671902, -0.45515037]),\n", " 'person_318': array([ 0.4971067 , -0.57231957]),\n", " 'company_24': array([ 0.53440535, -0.61248386]),\n", " 'person_319': array([ 0.56149256, -0.6211229 ]),\n", " 'person_320': array([ 0.52710718, -0.60471123]),\n", " 'person_321': array([ 0.56334764, -0.62885213]),\n", " 'person_322': array([ 0.5524115 , -0.64194071]),\n", " 'person_323': array([ 0.55424458, -0.6328702 ]),\n", " 'person_324': array([ 0.5616805 , -0.63868028]),\n", " 'person_325': array([ 0.54411405, -0.64261556]),\n", " 'person_326': array([ 0.53646982, -0.63239145]),\n", " 'company_25': array([ 0.30768064, -0.68524772]),\n", " 'company_26': array([ 0.28846809, -0.6959812 ]),\n", " 'company_27': array([ 0.31793761, -0.66283512]),\n", " 'person_327': array([-0.76257575, 0.68681365]),\n", " 'company_28': array([-0.74745333, 0.67341423]),\n", " 'person_328': array([ 0.53487509, -0.74886489]),\n", " 'company_29': array([ 0.52041507, -0.72086573]),\n", " 'person_329': array([ 0.50829941, -0.72232908]),\n", " 'person_330': array([ 0.54276437, -0.74355727]),\n", " 'person_331': array([ 0.4985196 , -0.69002944]),\n", " 'person_332': array([0.11007923, 0.6949963 ]),\n", " 'company_30': array([0.11893582, 0.6899637 ]),\n", " 'person_333': array([0.12611362, 0.70226794]),\n", " 'person_334': array([0.1192488 , 0.67013222]),\n", " 'person_335': array([0.11825121, 0.70104545]),\n", " 'person_336': array([0.13091367, 0.69440413]),\n", " 'person_337': array([0.10699769, 0.68602943]),\n", " 'person_338': array([-0.67259526, 0.55194008]),\n", " 'company_31': array([-0.70192057, 0.5722236 ]),\n", " 'person_339': array([0.42514554, 0.24329174]),\n", " 'company_32': array([0.4011074 , 0.20151511]),\n", " 'person_340': array([0.35758197, 0.23103809]),\n", " 'person_341': array([0.35184973, 0.18555902]),\n", " 'person_342': array([0.43520072, 0.164904 ]),\n", " 'person_343': array([0.45715815, 0.19650966]),\n", " 'person_344': array([0.46153361, 0.19222358]),\n", " 'person_345': array([0.37085459, 0.2419187 ]),\n", " 'person_346': array([0.45350158, 0.2357364 ]),\n", " 'person_347': array([0.3646358 , 0.16776308]),\n", " 'person_348': array([0.40618637, 0.18732595]),\n", " 'person_349': array([0.4561201 , 0.22073708]),\n", " 'person_350': array([0.38183179, 0.23564015]),\n", " 'person_351': array([0.36615476, 0.17564949]),\n", " 'person_352': array([0.40942043, 0.15414228]),\n", " 'person_353': array([0.39887774, 0.24859387]),\n", " 'person_354': array([0.45199731, 0.17182067]),\n", " 'person_355': array([0.38528749, 0.24419653]),\n", " 'person_356': array([0.35466579, 0.20166345]),\n", " 'person_357': array([0.44047445, 0.24529846]),\n", " 'person_358': array([0.37083277, 0.23446025]),\n", " 'person_359': array([0.45271942, 0.2139522 ]),\n", " 'person_360': array([0.43278855, 0.15423089]),\n", " 'person_361': array([0.3907046 , 0.23810819]),\n", " 'person_362': array([0.44129136, 0.17856967]),\n", " 'person_363': array([0.39473355, 0.14733578]),\n", " 'person_364': array([0.45005116, 0.22073051]),\n", " 'person_365': array([0.41227871, 0.16771895]),\n", " 'person_366': array([0.37659875, 0.16886902]),\n", " 'person_367': array([0.4100818 , 0.24598829]),\n", " 'person_368': array([0.43463564, 0.2323045 ]),\n", " 'person_369': array([0.38119352, 0.25054732]),\n", " 'person_370': array([0.36119431, 0.19855255]),\n", " 'person_371': array([0.36482182, 0.21742579]),\n", " 'person_372': array([0.44695494, 0.16722707]),\n", " 'person_373': array([0.43912876, 0.22279555]),\n", " 'person_374': array([0.40008208, 0.26016292]),\n", " 'person_375': array([0.36013281, 0.17276374]),\n", " 'person_376': array([0.42431751, 0.22622386]),\n", " 'person_377': array([0.45392564, 0.18864293]),\n", " 'person_378': array([0.3935681 , 0.16738296]),\n", " 'person_379': array([0.40794998, 0.17667514]),\n", " 'person_380': array([0.404816 , 0.14571722]),\n", " 'person_381': array([0.39515689, 0.25649384]),\n", " 'person_382': array([0.42296523, 0.21628341]),\n", " 'person_383': array([0.42771825, 0.23392606]),\n", " 'person_384': array([0.42081803, 0.2344878 ]),\n", " 'person_385': array([0.38103518, 0.21935572]),\n", " 'person_386': array([0.35602888, 0.17880383]),\n", " 'person_387': array([0.36738908, 0.16256924]),\n", " 'person_388': array([0.44902161, 0.20619908]),\n", " 'person_389': array([0.35766682, 0.21575159]),\n", " 'person_390': array([0.34944093, 0.21664242]),\n", " 'person_391': array([0.45314234, 0.18212554]),\n", " 'person_392': array([0.43183973, 0.25243217]),\n", " 'person_393': array([0.4131822 , 0.14731213]),\n", " 'person_394': array([0.37931034, 0.19287071]),\n", " 'person_395': array([0.42603785, 0.15135799]),\n", " 'person_396': array([0.41960129, 0.2573427 ]),\n", " 'person_397': array([0.43770272, 0.24019012]),\n", " 'person_398': array([0.41842496, 0.16053428]),\n", " 'person_399': array([0.43193734, 0.20387551]),\n", " 'person_400': array([0.42742568, 0.17412159]),\n", " 'person_401': array([0.44878575, 0.17706238]),\n", " 'person_402': array([0.37333345, 0.21384428]),\n", " 'person_403': array([0.41866645, 0.19986305]),\n", " 'person_404': array([0.39811677, 0.24076864]),\n", " 'person_405': array([0.38670406, 0.15023343]),\n", " 'person_406': array([0.4054814 , 0.24008963]),\n", " 'person_407': array([0.39121994, 0.24875242]),\n", " 'person_408': array([0.44143182, 0.22903955]),\n", " 'person_409': array([0.43003073, 0.21207659]),\n", " 'person_410': array([0.39451391, 0.22964652]),\n", " 'person_411': array([0.35823566, 0.23780008]),\n", " 'person_412': array([0.36430132, 0.23538244]),\n", " 'person_413': array([0.43649587, 0.18406877]),\n", " 'person_414': array([0.425087 , 0.25038549]),\n", " 'person_415': array([0.42045212, 0.14851215]),\n", " 'person_416': array([0.39821824, 0.16063102]),\n", " 'person_417': array([0.38625583, 0.1617637 ]),\n", " 'person_418': array([0.42703158, 0.16463439]),\n", " 'person_419': array([0.38164642, 0.1826493 ]),\n", " 'person_420': array([0.43742076, 0.25034288]),\n", " 'person_421': array([0.41741672, 0.18706334]),\n", " 'person_422': array([0.42688319, 0.1581507 ]),\n", " 'person_423': array([0.4509567 , 0.19818512]),\n", " 'person_424': array([0.38518524, 0.22716543]),\n", " 'person_425': array([0.46181086, 0.20183653]),\n", " 'person_426': array([0.44139901, 0.17102294]),\n", " 'person_427': array([0.44760317, 0.24253879]),\n", " 'person_428': array([0.37754184, 0.24240531]),\n", " 'person_429': array([0.37013263, 0.24877651]),\n", " 'person_430': array([0.39710286, 0.15354484]),\n", " 'person_431': array([0.35742152, 0.22262813]),\n", " 'person_432': array([0.38871902, 0.17745349]),\n", " 'person_433': array([0.40237013, 0.21995503]),\n", " 'person_434': array([0.44164601, 0.19877774]),\n", " 'person_435': array([0.41451663, 0.22189152]),\n", " 'person_436': array([0.3972483 , 0.17647752]),\n", " 'person_437': array([0.4075487 , 0.26087815]),\n", " 'person_438': array([0.38980779, 0.21562122]),\n", " 'person_439': array([0.45817655, 0.22767182]),\n", " 'person_440': array([0.40341276, 0.15172888]),\n", " 'person_441': array([0.42957637, 0.19458716]),\n", " 'person_442': array([0.36462805, 0.18945991]),\n", " 'person_443': array([0.37511814, 0.25225154]),\n", " 'person_444': array([0.41290578, 0.23394898]),\n", " 'person_445': array([0.39014938, 0.15614605]),\n", " 'person_446': array([0.38025647, 0.1538254 ]),\n", " 'person_447': array([0.37428734, 0.175478 ]),\n", " 'person_448': array([0.38893527, 0.25859529]),\n", " 'person_449': array([0.45811349, 0.18116713]),\n", " 'person_450': array([0.3849389 , 0.25498164]),\n", " 'person_451': array([0.41013727, 0.25312248]),\n", " 'person_452': array([0.43774307, 0.15838796]),\n", " 'person_453': array([0.41728917, 0.24951345]),\n", " 'person_454': array([0.40304121, 0.25303167]),\n", " 'person_455': array([0.43870381, 0.19178054]),\n", " 'person_456': array([0.35156491, 0.21016875]),\n", " 'person_457': array([0.37258816, 0.18431494]),\n", " 'person_458': array([0.37172842, 0.22328816]),\n", " 'person_459': array([0.41339517, 0.25839838]),\n", " 'person_460': array([0.36443403, 0.22693078]),\n", " 'person_461': array([0.44825971, 0.23266722]),\n", " 'person_462': array([0.43127424, 0.22172333]),\n", " 'person_463': array([0.44668895, 0.18555817]),\n", " 'person_464': array([0.44341537, 0.16237094]),\n", " 'person_465': array([0.44295505, 0.23663825]),\n", " 'person_466': array([0.34848532, 0.20338313]),\n", " 'person_467': array([0.36867407, 0.19588327]),\n", " 'person_468': array([0.35975692, 0.2079969 ]),\n", " 'person_469': array([0.41948336, 0.17786424]),\n", " 'person_470': array([0.43140286, 0.24324724]),\n", " 'person_471': array([0.46062303, 0.20817636]),\n", " 'person_472': array([0.42010874, 0.16858791]),\n", " 'person_473': array([0.36795196, 0.20760065]),\n", " 'person_474': array([0.44016275, 0.20560798]),\n", " 'company_845': array([0.35210893, 0.22583176]),\n", " 'person_475': array([0.40337527, 0.16843495]),\n", " 'person_476': array([0.44966778, 0.22666702]),\n", " 'person_477': array([0.45391095, 0.20628417]),\n", " 'person_478': array([0.35620868, 0.18987025]),\n", " 'person_479': array([0.37791184, 0.16088367]),\n", " 'person_480': array([0.40481946, 0.23021244]),\n", " 'person_481': array([0.38383639, 0.16930091]),\n", " 'person_482': array([0.41660151, 0.15415165]),\n", " 'person_483': array([0.36404973, 0.24373949]),\n", " 'person_484': array([0.37557301, 0.2028679 ]),\n", " 'person_485': array([0.38570672, 0.20529574]),\n", " 'person_486': array([0.4281607 , 0.18399702]),\n", " 'person_487': array([0.40761143, 0.16097142]),\n", " 'person_488': array([0.41715351, 0.24184549]),\n", " 'person_489': array([0.45819679, 0.2142646 ]),\n", " 'person_490': array([0.44724008, 0.1925278 ]),\n", " 'person_491': array([0.43911871, 0.21313173]),\n", " 'person_492': array([0.44415152, 0.21632403]),\n", " 'person_493': array([0.42634571, 0.25693104]),\n", " 'person_494': array([0.3518241 , 0.19531693]),\n", " 'person_495': array([0.37233517, 0.15788324]),\n", " 'person_496': array([0.43417451, 0.17280313]),\n", " 'person_497': array([0.37591419, 0.22956552]),\n", " 'person_498': array([0.36246616, 0.18267053]),\n", " 'person_499': array([0.3923378 , 0.18985257]),\n", " 'person_500': array([-0.59277385, -0.9258728 ]),\n", " 'company_33': array([-0.60637212, -0.94723308]),\n", " 'company_1903': array([0.73459131, 0.59329832]),\n", " 'company_34': array([0.72547996, 0.59961599]),\n", " 'company_35': array([0.12099539, 0.68499517]),\n", " 'person_501': array([-0.21041225, -0.93496042]),\n", " 'company_36': array([-0.20198978, -0.90188956]),\n", " 'person_502': array([-0.74105364, -0.2445958 ]),\n", " 'company_37': array([-0.78236651, -0.25943914]),\n", " 'person_503': array([-0.81705397, -0.27204236]),\n", " 'person_504': array([-0.80727023, -0.26825547]),\n", " 'company_38': array([ 0.03857515, -0.81962395]),\n", " 'person_505': array([ 0.0781742 , -0.50889677]),\n", " 'company_39': array([ 0.08542939, -0.54293036]),\n", " 'person_506': array([0.84964973, 0.45300704]),\n", " 'company_40': array([0.82003951, 0.43536586]),\n", " 'person_507': array([-0.70342696, -0.37877026]),\n", " 'company_41': array([-0.70214385, -0.36733562]),\n", " 'person_508': array([-0.73423713, -0.38616475]),\n", " 'person_509': array([-0.7143414 , -0.35624823]),\n", " 'person_510': array([-0.72792757, -0.37323922]),\n", " 'person_511': array([-0.72066134, -0.38507783]),\n", " 'person_512': array([-0.69460064, -0.38339743]),\n", " 'person_513': array([ 0.37466952, -0.25757602]),\n", " 'company_42': array([ 0.34485242, -0.2603521 ]),\n", " 'person_514': array([ 0.32203496, -0.27331692]),\n", " 'person_515': array([ 0.32806486, -0.28172782]),\n", " 'person_516': array([ 0.30176091, -0.28198719]),\n", " 'company_43': array([ 0.29876676, -0.25028044]),\n", " 'person_517': array([ 0.30757302, -0.27237582]),\n", " 'person_518': array([ 0.31141269, -0.23098554]),\n", " 'person_519': array([ 0.30252463, -0.23535763]),\n", " 'person_520': array([0.05517333, 0.27127498]),\n", " 'company_44': array([0.04680906, 0.25936341]),\n", " 'person_521': array([0.04747488, 0.27557999]),\n", " 'person_522': array([0.04995235, 0.27146944]),\n", " 'person_523': array([0.03512469, 0.24862768]),\n", " 'person_524': array([0.03040545, 0.25816375]),\n", " 'person_525': array([0.0420857 , 0.27495894]),\n", " 'person_526': array([0.06089814, 0.26720789]),\n", " 'person_527': array([0.03159533, 0.26360154]),\n", " 'person_528': array([0.05836022, 0.25054812]),\n", " 'person_529': array([0.04753298, 0.24543227]),\n", " 'person_530': array([0.03749603, 0.27249038]),\n", " 'person_531': array([0.0405782 , 0.24626713]),\n", " 'person_532': array([0.05769029, 0.26250264]),\n", " 'person_533': array([0.05359032, 0.24789846]),\n", " 'person_534': array([0.03392363, 0.26850545]),\n", " 'person_535': array([0.05959525, 0.25611785]),\n", " 'person_536': array([0.03086506, 0.25178018]),\n", " 'person_537': array([ 0.23194273, -0.87178671]),\n", " 'company_45': array([ 0.24280252, -0.87599659]),\n", " 'person_538': array([ 0.23706232, -0.84709704]),\n", " 'person_539': array([-0.1142306 , -0.91126353]),\n", " 'company_46': array([-0.10953114, -0.87764883]),\n", " 'company_47': array([0.11583935, 0.67904103]),\n", " 'person_540': array([ 0.78104138, -0.65998101]),\n", " 'company_48': array([ 0.76290965, -0.65351981]),\n", " 'person_541': array([ 0.75118273, -0.65943998]),\n", " 'person_542': array([ 0.76178396, -0.666188 ]),\n", " 'person_543': array([0.31753176, 0.91695797]),\n", " 'company_49': array([0.30738825, 0.91235828]),\n", " 'company_50': array([ 0.30820301, -0.70383191]),\n", " 'person_544': array([ 0.91583979, -0.01010715]),\n", " 'company_51': array([ 0.94940013, -0.00987044]),\n", " 'company_52': array([ 0.28425884, -0.68195945]),\n", " 'person_545': array([ 0.65691799, -0.29309881]),\n", " 'company_53': array([ 0.63752651, -0.27700272]),\n", " 'person_546': array([ 0.6629594 , -0.26589403]),\n", " 'person_547': array([ 0.63079703, -0.31050247]),\n", " 'person_548': array([ 0.6413241 , -0.24907225]),\n", " 'person_549': array([ 0.65697867, -0.31454825]),\n", " 'person_550': array([ 0.67006248, -0.30000466]),\n", " 'person_551': array([ 0.64845783, -0.25619203]),\n", " 'person_552': array([ 0.60517424, -0.26017711]),\n", " 'person_553': array([ 0.65595537, -0.25415796]),\n", " 'person_554': array([ 0.66752845, -0.25549111]),\n", " 'person_555': array([ 0.6752699 , -0.25837582]),\n", " 'person_556': array([ 0.68158376, -0.28496677]),\n", " 'person_557': array([ 0.64122558, -0.2606329 ]),\n", " 'person_558': array([ 0.62799394, -0.28963915]),\n", " 'person_559': array([ 0.65005124, -0.2454986 ]),\n", " 'person_560': array([ 0.67658806, -0.28954902]),\n", " 'person_561': array([ 0.63036364, -0.2638658 ]),\n", " 'person_562': array([ 0.67084438, -0.26455864]),\n", " 'person_563': array([ 0.6624136 , -0.30265588]),\n", " 'person_564': array([ 0.61699426, -0.29537022]),\n", " 'person_565': array([ 0.67864734, -0.29705137]),\n", " 'person_566': array([ 0.66744614, -0.27557799]),\n", " 'person_567': array([ 0.6555329 , -0.27419922]),\n", " 'person_568': array([ 0.64487529, -0.29006341]),\n", " 'person_569': array([ 0.67144704, -0.28174058]),\n", " 'person_570': array([ 0.65581095, -0.30674067]),\n", " 'person_571': array([ 0.6824218 , -0.27750349]),\n", " 'person_572': array([ 0.62326175, -0.30718923]),\n", " 'person_573': array([ 0.63870019, -0.30430079]),\n", " 'person_574': array([ 0.66580844, -0.31157941]),\n", " 'person_575': array([ 0.67242557, -0.30626875]),\n", " 'person_576': array([ 0.66247743, -0.24904256]),\n", " 'person_577': array([ 0.64868474, -0.31708983]),\n", " 'person_578': array([ 0.61051935, -0.27079254]),\n", " 'person_579': array([ 0.67520899, -0.27268276]),\n", " 'person_580': array([ 0.64633143, -0.30986369]),\n", " 'person_581': array([ 0.66912895, -0.2930043 ]),\n", " 'person_582': array([ 0.68059897, -0.26753005]),\n", " 'person_583': array([ 0.62376857, -0.25406221]),\n", " 'person_584': array([ 0.62568736, -0.2992079 ]),\n", " 'person_585': array([ 0.61615556, -0.28266093]),\n", " 'person_586': array([ 0.63837087, -0.31520125]),\n", " 'person_587': array([ 0.64770645, -0.29995048]),\n", " 'person_588': array([ 0.66418725, -0.28657612]),\n", " 'company_54': array([ 0.02908284, -0.82175499]),\n", " 'person_589': array([-0.85296786, 0.45784444]),\n", " 'company_55': array([-0.82673132, 0.44529951]),\n", " 'company_56': array([ 0.3220101 , -0.24859716]),\n", " 'person_590': array([ 0.34456408, -0.23551469]),\n", " 'person_591': array([0.86036074, 0.28222594]),\n", " 'company_57': array([0.89560455, 0.29085609]),\n", " 'person_592': array([0.90633613, 0.28175071]),\n", " 'person_593': array([0.91862214, 0.29953763]),\n", " 'person_594': array([0.93185234, 0.30133742]),\n", " 'person_595': array([0.07971173, 0.80693489]),\n", " 'company_58': array([0.07510949, 0.7797364 ]),\n", " 'person_596': array([0.08348119, 0.81484628]),\n", " 'person_597': array([0.06575287, 0.73748881]),\n", " 'person_598': array([-0.13639326, 0.84653085]),\n", " 'company_59': array([-0.13484603, 0.81138092]),\n", " 'person_599': array([-0.13818638, 0.83105183]),\n", " 'person_600': array([-0.13168548, 0.77068758]),\n", " 'person_601': array([-0.16449033, 0.90570658]),\n", " 'company_60': array([-0.1622569 , 0.88225722]),\n", " 'person_602': array([-0.16530171, 0.91891056]),\n", " 'person_603': array([0.92195457, 0.12401067]),\n", " 'company_61': array([0.92358601, 0.13731764]),\n", " 'person_604': array([0.91562903, 0.14813225]),\n", " 'person_605': array([0.94589484, 0.14055401]),\n", " 'company_62': array([ 0.28264368, -0.61294073]),\n", " 'person_606': array([-0.51661307, -0.81210947]),\n", " 'company_63': array([-0.50371391, -0.81683111]),\n", " 'person_607': array([-0.61272591, -0.71456945]),\n", " 'company_64': array([-0.59449285, -0.70333266]),\n", " 'person_608': array([-0.60245782, -0.7216416 ]),\n", " 'person_609': array([-0.3866865 , 0.54121912]),\n", " 'company_65': array([-0.36361757, 0.50176871]),\n", " 'person_610': array([-0.34181905, 0.47201735]),\n", " 'person_611': array([-0.39899102, 0.50548702]),\n", " 'person_612': array([-0.3656745 , 0.53618652]),\n", " 'person_613': array([-0.4025749 , 0.47876617]),\n", " 'person_614': array([-0.40417588, 0.54378331]),\n", " 'person_615': array([-0.3960931 , 0.48212314]),\n", " 'person_616': array([-0.36383036, 0.55909079]),\n", " 'person_617': array([-0.37843782, 0.54360098]),\n", " 'person_618': array([-0.41482955, 0.48363444]),\n", " 'person_619': array([-0.35522461, 0.46209118]),\n", " 'person_620': array([-0.36430693, 0.55189711]),\n", " 'person_621': array([-0.41955656, 0.49630791]),\n", " 'person_622': array([-0.37637204, 0.49560514]),\n", " 'person_623': array([-0.34497568, 0.51951039]),\n", " 'person_624': array([-0.33939978, 0.53274244]),\n", " 'person_625': array([-0.41338262, 0.50634015]),\n", " 'person_626': array([-0.40189558, 0.52843457]),\n", " 'person_627': array([-0.39180177, 0.52023375]),\n", " 'person_628': array([-0.31765312, 0.48834682]),\n", " 'person_629': array([-0.372379 , 0.54800403]),\n", " 'person_630': array([-0.38457495, 0.465305 ]),\n", " 'person_631': array([-0.34759814, 0.53452301]),\n", " 'person_632': array([-0.40120766, 0.53578258]),\n", " 'person_633': array([-0.34114605, 0.49345526]),\n", " 'person_634': array([-0.39162847, 0.4687328 ]),\n", " 'person_635': array([-0.33358574, 0.50052792]),\n", " 'person_636': array([-0.33294028, 0.54158461]),\n", " 'person_637': array([-0.41225937, 0.5184418 ]),\n", " 'person_638': array([-0.40854511, 0.52425236]),\n", " 'person_639': array([-0.40198019, 0.46643168]),\n", " 'person_640': array([-0.41306478, 0.49665633]),\n", " 'person_641': array([-0.33626622, 0.46636465]),\n", " 'person_642': array([-0.31496885, 0.52019364]),\n", " 'person_643': array([-0.35659251, 0.53449619]),\n", " 'person_644': array([-0.35053921, 0.54270881]),\n", " 'person_645': array([-0.40117323, 0.55107933]),\n", " 'person_646': array([-0.3757678 , 0.48168612]),\n", " 'person_647': array([-0.32150826, 0.51474553]),\n", " 'person_648': array([-0.39034155, 0.48628962]),\n", " 'person_649': array([-0.36563632, 0.47930193]),\n", " 'person_650': array([-0.38065583, 0.51003909]),\n", " 'person_651': array([-0.33875847, 0.48034123]),\n", " 'person_652': array([-0.39609477, 0.46256384]),\n", " 'person_653': array([-0.36764997, 0.46460885]),\n", " 'person_654': array([-0.37201098, 0.55410707]),\n", " 'person_655': array([-0.32519558, 0.53052813]),\n", " 'person_656': array([-0.41442525, 0.53103548]),\n", " 'person_657': array([-0.32686567, 0.47684389]),\n", " 'person_658': array([-0.39793074, 0.47298411]),\n", " 'person_659': array([-0.32341999, 0.49261349]),\n", " 'person_660': array([-0.34579608, 0.46477389]),\n", " 'person_661': array([-0.36814174, 0.52398914]),\n", " 'person_662': array([-0.31863818, 0.50706118]),\n", " 'person_663': array([-0.38578627, 0.55647582]),\n", " 'person_664': array([-0.37137663, 0.56008518]),\n", " 'person_665': array([-0.38279465, 0.4576517 ]),\n", " 'person_666': array([-0.41917437, 0.51784116]),\n", " 'person_667': array([-0.41109106, 0.4771519 ]),\n", " 'person_668': array([-0.35220757, 0.50188637]),\n", " 'person_669': array([-0.40143055, 0.5191012 ]),\n", " 'person_670': array([-0.31360295, 0.51340008]),\n", " 'person_671': array([-0.40824142, 0.50163019]),\n", " 'person_672': array([-0.40684772, 0.47178861]),\n", " 'person_673': array([-0.31570852, 0.49691185]),\n", " 'person_674': array([-0.37949613, 0.55872309]),\n", " 'person_675': array([-0.32337776, 0.48373088]),\n", " 'person_676': array([-0.34896713, 0.45802858]),\n", " 'person_677': array([-0.35576063, 0.52586359]),\n", " 'person_678': array([-0.37642774, 0.46422049]),\n", " 'person_679': array([-0.37997067, 0.54940259]),\n", " 'person_680': array([-0.38093126, 0.52179414]),\n", " 'person_681': array([-0.34512609, 0.55621195]),\n", " 'person_682': array([-0.33169401, 0.51788408]),\n", " 'person_683': array([-0.41673663, 0.52473783]),\n", " 'person_684': array([-0.39977339, 0.51343697]),\n", " 'person_685': array([-0.32509843, 0.53983808]),\n", " 'person_686': array([-0.4085649 , 0.53827351]),\n", " 'person_687': array([-0.39511076, 0.54586202]),\n", " 'person_688': array([-0.31744796, 0.52611214]),\n", " 'person_689': array([-0.39156133, 0.53473109]),\n", " 'person_690': array([-0.3614668 , 0.45745534]),\n", " 'person_691': array([-0.3898176 , 0.45914617]),\n", " 'person_692': array([-0.39314416, 0.55335605]),\n", " 'person_693': array([-0.34641251, 0.54900116]),\n", " 'person_694': array([-0.38379595, 0.52930671]),\n", " 'person_695': array([-0.3315658 , 0.52671188]),\n", " 'person_696': array([-0.35666114, 0.47421369]),\n", " 'person_697': array([-0.35677704, 0.55956769]),\n", " 'person_698': array([-0.324076 , 0.52169621]),\n", " 'person_699': array([-0.3904348 , 0.50908351]),\n", " 'person_700': array([-0.35756633, 0.55189884]),\n", " 'person_701': array([-0.33255747, 0.54801792]),\n", " 'person_702': array([-0.36694521, 0.54373121]),\n", " 'person_703': array([-0.31305042, 0.50451583]),\n", " 'person_704': array([-0.33357054, 0.5101192 ]),\n", " 'person_705': array([-0.34908327, 0.47358245]),\n", " 'person_706': array([-0.40671927, 0.48400214]),\n", " 'person_707': array([-0.37574211, 0.45579386]),\n", " 'person_708': array([-0.41819423, 0.51135141]),\n", " 'person_709': array([-0.33166271, 0.49203119]),\n", " 'person_710': array([-0.36924329, 0.4577809 ]),\n", " 'person_711': array([-0.38334072, 0.48985517]),\n", " 'person_712': array([-0.33379477, 0.47466019]),\n", " 'person_713': array([-0.39355388, 0.52673769]),\n", " 'person_714': array([-0.33116809, 0.48392671]),\n", " 'person_715': array([-0.38865703, 0.47680372]),\n", " 'person_716': array([-0.35817987, 0.54381442]),\n", " 'person_717': array([-0.38167745, 0.47315773]),\n", " 'person_718': array([-0.38788182, 0.54964083]),\n", " 'person_719': array([-0.37285116, 0.53114301]),\n", " 'person_720': array([-0.35134482, 0.55410147]),\n", " 'person_721': array([-0.40745929, 0.51074785]),\n", " 'person_722': array([-0.33881909, 0.54961312]),\n", " 'person_723': array([-0.40848666, 0.53229785]),\n", " 'person_724': array([-0.36156163, 0.46845531]),\n", " 'person_725': array([-0.37964672, 0.53681076]),\n", " 'person_726': array([-0.3521046 , 0.51313174]),\n", " 'person_727': array([-0.32349655, 0.50014853]),\n", " 'person_728': array([-0.34182885, 0.50723195]),\n", " 'person_729': array([-0.33960086, 0.52470899]),\n", " 'person_730': array([-0.32616264, 0.50780821]),\n", " 'person_731': array([-0.40327337, 0.49051988]),\n", " 'person_732': array([-0.31946054, 0.5332405 ]),\n", " 'person_733': array([-0.42006826, 0.50417507]),\n", " 'person_734': array([-0.41393581, 0.48992458]),\n", " 'person_735': array([-0.34178501, 0.54228854]),\n", " 'person_736': array([-0.40217781, 0.49792102]),\n", " 'person_737': array([-0.3317931 , 0.53524482]),\n", " 'person_738': array([-0.37301499, 0.47273538]),\n", " 'person_739': array([-0.39265776, 0.49601743]),\n", " 'person_740': array([-0.34653988, 0.48592418]),\n", " 'person_741': array([-0.39556891, 0.53945678]),\n", " 'person_742': array([-0.35598746, 0.4841516 ]),\n", " 'person_743': array([0.87209696, 0.30639172]),\n", " 'company_66': array([0.89883834, 0.32141978]),\n", " 'person_744': array([0.89351285, 0.33237156]),\n", " 'person_745': array([0.31651887, 0.66914439]),\n", " 'company_67': array([0.3257446, 0.6836378]),\n", " 'person_746': array([0.34715885, 0.707982 ]),\n", " 'person_747': array([0.34118217, 0.7134003 ]),\n", " 'person_748': array([0.30574933, 0.6454162 ]),\n", " 'person_749': array([0.33325514, 0.71497267]),\n", " 'person_750': array([-0.00372807, 0.73170638]),\n", " 'company_68': array([4.54644556e-04, 7.80857265e-01]),\n", " 'person_751': array([-0.00388265, 0.81329817]),\n", " 'person_752': array([0.0097886, 0.8101123]),\n", " 'person_753': array([0.00425949, 0.81651282]),\n", " 'company_70': array([ 0.29980871, -0.69373077]),\n", " 'company_71': array([ 0.32750151, -0.69562155]),\n", " 'company_72': array([ 0.31857941, -0.69610423]),\n", " 'company_73': array([ 0.2885364 , -0.62755293]),\n", " 'company_163': array([-0.54674244, -0.83015478]),\n", " 'company_74': array([-0.52797377, -0.80334556]),\n", " 'company_75': array([-0.14733453, -0.73577708]),\n", " 'company_76': array([ 0.32541898, -0.67106247]),\n", " 'company_80': array([0.68770343, 0.31996116]),\n", " 'company_77': array([0.68218756, 0.33777472]),\n", " 'person_754': array([0.69035429, 0.3559424 ]),\n", " 'person_755': array([0.71286774, 0.36032134]),\n", " 'person_756': array([0.66552877, 0.34192574]),\n", " 'person_757': array([0.71337616, 0.35137954]),\n", " 'person_758': array([0.70655304, 0.33676568]),\n", " 'company_78': array([ 0.33488458, -0.67130208]),\n", " 'person_759': array([-0.79451728, -0.51925284]),\n", " 'company_79': array([-0.7749061 , -0.50559825]),\n", " 'person_760': array([0.7068612 , 0.31264541]),\n", " 'person_761': array([ 0.89590758, -0.27166176]),\n", " 'company_81': array([ 0.91913521, -0.27762154]),\n", " 'person_762': array([ 0.88191408, -0.11768923]),\n", " 'company_82': array([ 0.88409591, -0.12875454]),\n", " 'person_763': array([ 0.75653118, -0.61609399]),\n", " 'company_83': array([ 0.7445817 , -0.61464059]),\n", " 'company_84': array([0.04371433, 0.25680631]),\n", " 'person_764': array([0.20910533, 0.7143811 ]),\n", " 'company_85': array([0.20781709, 0.70205963]),\n", " 'person_765': array([-0.06244666, 0.92246252]),\n", " 'company_86': array([-0.06379367, 0.89021957]),\n", " 'person_766': array([-0.06553224, 0.84942454]),\n", " 'person_767': array([ 0.34501526, -0.3445237 ]),\n", " 'company_87': array([ 0.31671801, -0.31850669]),\n", " 'person_768': array([ 0.29499701, -0.31001022]),\n", " 'person_769': array([ 0.34851032, -0.30415866]),\n", " 'person_770': array([ 0.33692113, -0.33850551]),\n", " 'person_771': array([ 0.33260912, -0.29866493]),\n", " 'person_772': array([ 0.30774605, -0.33399028]),\n", " 'person_773': array([ 0.33422875, -0.3580094 ]),\n", " 'person_774': array([ 0.29939175, -0.35188952]),\n", " 'person_775': array([ 0.32615072, -0.35718265]),\n", " 'person_776': array([ 0.2875115 , -0.32489243]),\n", " 'person_777': array([ 0.34300739, -0.32244605]),\n", " 'person_778': array([ 0.29508689, -0.32147229]),\n", " 'person_779': array([ 0.32815602, -0.3398506 ]),\n", " 'person_780': array([ 0.35550004, -0.32821801]),\n", " 'person_781': array([ 0.31706885, -0.34175515]),\n", " 'person_782': array([ 0.29885826, -0.33737326]),\n", " 'person_783': array([ 0.28980651, -0.33244795]),\n", " 'person_784': array([ 0.35434473, -0.31455606]),\n", " 'person_785': array([ 0.34278166, -0.33177772]),\n", " 'person_786': array([ 0.29717287, -0.34573436]),\n", " 'person_787': array([ 0.3460685 , -0.35224009]),\n", " 'person_788': array([ 0.30896565, -0.34815815]),\n", " 'person_789': array([ 0.3307268 , -0.32509816]),\n", " 'person_790': array([ 0.30896938, -0.30670816]),\n", " 'person_791': array([ 0.31827939, -0.36013141]),\n", " 'person_792': array([ 0.35245338, -0.34234709]),\n", " 'person_793': array([ 0.35238495, -0.32193604]),\n", " 'person_794': array([ 0.30892119, -0.35659122]),\n", " 'person_795': array([ 0.33217731, -0.31081298]),\n", " 'person_796': array([ 0.28900343, -0.34060469]),\n", " 'person_797': array([ 0.31922722, -0.35191718]),\n", " 'person_798': array([ 0.34098998, -0.30196393]),\n", " 'person_799': array([ 0.32327694, -0.30393237]),\n", " 'person_800': array([ 0.3290447 , -0.34817627]),\n", " 'person_801': array([ 0.33839488, -0.3515242 ]),\n", " 'person_802': array([ 0.30358803, -0.3233135 ]),\n", " 'person_803': array([ 0.35180345, -0.33498466]),\n", " 'person_804': array([ 0.34364581, -0.31214663]),\n", " 'person_805': array([-0.33490261, 0.94091052]),\n", " 'company_88': array([-0.32449731, 0.93713093]),\n", " 'person_806': array([-0.74739218, 0.13444334]),\n", " 'company_89': array([-0.7171644 , 0.12649792]),\n", " 'person_807': array([-0.68995053, 0.12595682]),\n", " 'person_808': array([-0.74146587, 0.12114812]),\n", " 'person_809': array([-0.71740562, 0.14111891]),\n", " 'person_810': array([-0.75181192, 0.12522842]),\n", " 'company_90': array([0.0473983 , 0.25596601]),\n", " 'company_91': array([0.04348825, 0.26270431]),\n", " 'person_811': array([0.04317451, 0.29845279]),\n", " 'company_92': array([ 0.12810065, -0.48173082]),\n", " 'person_812': array([ 0.13292316, -0.50340521]),\n", " 'person_813': array([ 0.11464564, -0.49958941]),\n", " 'person_814': array([ 0.14261502, -0.50079423]),\n", " 'person_815': array([ 0.12381674, -0.50008047]),\n", " 'person_816': array([ 0.84440643, -0.33791053]),\n", " 'company_93': array([ 0.85843205, -0.33472812]),\n", " 'person_817': array([ 0.85963207, -0.32173654]),\n", " 'company_94': array([ 0.32354167, -0.6871652 ]),\n", " 'company_95': array([ 0.29821587, -0.70115811]),\n", " 'person_818': array([ 0.43434018, -0.80767518]),\n", " 'company_96': array([ 0.44198409, -0.82659864]),\n", " 'person_819': array([ 0.43058643, -0.8343811 ]),\n", " 'person_820': array([ 0.45377585, -0.84119254]),\n", " 'person_821': array([ 0.45814887, -0.8592211 ]),\n", " 'person_822': array([ 0.5838787 , -0.53342068]),\n", " 'company_97': array([ 0.55954748, -0.51247764]),\n", " 'person_823': array([ 0.52991509, -0.48623124]),\n", " 'person_824': array([-0.00128766, -0.66886115]),\n", " 'company_98': array([-0.00345409, -0.6999703 ]),\n", " 'person_825': array([ 0.00908746, -0.70366961]),\n", " 'person_826': array([-0.00296119, -0.72972929]),\n", " 'person_827': array([-0.01273154, -0.73023552]),\n", " 'company_99': array([0.0437482 , 0.25671539]),\n", " 'person_828': array([ 0.71812105, -0.01341575]),\n", " 'company_100': array([ 0.74628627, -0.012477 ]),\n", " 'company_101': array([ 0.2898103, -0.6892643]),\n", " 'company_102': array([ 0.3329407 , -0.68573648]),\n", " 'company_103': array([ 0.31697887, -0.6823684 ]),\n", " 'company_104': array([ 0.31765631, -0.70369923]),\n", " 'company_105': array([ 0.32372966, -0.65448493]),\n", " 'company_106': array([ 0.33002514, -0.67894095]),\n", " 'company_107': array([-0.15816711, -0.80716234]),\n", " 'company_108': array([-0.15469636, -0.78985238]),\n", " 'person_829': array([0.58518863, 0.53029549]),\n", " 'company_109': array([0.58851147, 0.51731086]),\n", " 'person_830': array([0.60231179, 0.51653248]),\n", " 'person_831': array([-0.83023608, 0.18837039]),\n", " 'company_110': array([-0.79970765, 0.18261692]),\n", " 'person_832': array([-0.75047344, 0.1740799 ]),\n", " 'person_833': array([-0.82597929, 0.19582444]),\n", " 'person_834': array([-0.83849508, 0.18460344]),\n", " 'person_835': array([-0.82964236, 0.18013996]),\n", " 'person_836': array([-0.77001554, 0.17414036]),\n", " 'person_837': array([-0.83129287, 0.17272225]),\n", " 'person_838': array([-0.82572705, 0.20370243]),\n", " 'person_839': array([-0.77658886, 0.18405917]),\n", " 'person_840': array([-0.83531344, 0.19609429]),\n", " 'person_841': array([-0.39780959, -0.68741232]),\n", " 'company_111': array([-0.37469277, -0.66103411]),\n", " 'person_842': array([-0.38902673, -0.68364 ]),\n", " 'person_843': array([-0.39741868, -0.67866868]),\n", " 'person_844': array([-0.38650751, -0.6912114 ]),\n", " 'person_845': array([-0.39665788, -0.66324258]),\n", " 'person_846': array([-0.40551353, -0.67366964]),\n", " 'person_847': array([-0.37776378, -0.69792807]),\n", " 'person_848': array([-0.37721109, -0.6861825 ]),\n", " 'person_849': array([-0.3662118 , -0.68927139]),\n", " 'person_850': array([-0.35108262, -0.62525022]),\n", " 'person_851': array([-0.38599989, -0.6982885 ]),\n", " 'person_852': array([-0.3692925 , -0.64405262]),\n", " 'person_853': array([-0.35677004, -0.63830072]),\n", " 'person_854': array([-0.3559714 , -0.61819321]),\n", " 'person_855': array([-0.39613199, -0.69571918]),\n", " 'person_856': array([-0.40514314, -0.68293875]),\n", " 'person_857': array([-0.37028682, -0.69501692]),\n", " 'person_858': array([0.00884062, 0.67091918]),\n", " 'company_112': array([0.01073184, 0.69469851]),\n", " 'person_859': array([ 0.78145403, -0.12372371]),\n", " 'company_113': array([ 0.75039798, -0.12216124]),\n", " 'person_860': array([ 0.71012086, -0.12046699]),\n", " 'person_861': array([-0.9509427 , 0.06077622]),\n", " 'company_114': array([-0.96681267, 0.06762943]),\n", " 'person_862': array([-0.95818782, 0.07840208]),\n", " 'person_863': array([-1. , 0.06918829])}" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import plotly.graph_objects as go\n", "\n", "import networkx as nx\n", "\n", "G = graph\n", "pos = nx.fruchterman_reingold_layout(G)\n", "pos" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
person_1company_1person_2person_3company_2person_4person_5person_6person_7person_8...person_857person_858company_112person_859company_113person_860person_861company_114person_862person_863
0-0.946456-0.948138-0.9752600.5413450.5160490.5037810.5285210.5296910.4996880.536370...-0.3702870.0088410.0107320.7814540.7503980.710121-0.950943-0.966813-0.958188-1.000000
1-0.095317-0.083899-0.0871020.6450350.6222970.6297310.6538510.6176580.6001310.651519...-0.6950170.6709190.694699-0.123724-0.122161-0.1204670.0607760.0676290.0784020.069188
\n", "

2 rows × 980 columns

\n", "
" ], "text/plain": [ " person_1 company_1 person_2 person_3 company_2 person_4 person_5 \\\n", "0 -0.946456 -0.948138 -0.975260 0.541345 0.516049 0.503781 0.528521 \n", "1 -0.095317 -0.083899 -0.087102 0.645035 0.622297 0.629731 0.653851 \n", "\n", " person_6 person_7 person_8 ... person_857 person_858 company_112 \\\n", "0 0.529691 0.499688 0.536370 ... -0.370287 0.008841 0.010732 \n", "1 0.617658 0.600131 0.651519 ... -0.695017 0.670919 0.694699 \n", "\n", " person_859 company_113 person_860 person_861 company_114 person_862 \\\n", "0 0.781454 0.750398 0.710121 -0.950943 -0.966813 -0.958188 \n", "1 -0.123724 -0.122161 -0.120467 0.060776 0.067629 0.078402 \n", "\n", " person_863 \n", "0 -1.000000 \n", "1 0.069188 \n", "\n", "[2 rows x 980 columns]" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nodes = pd.DataFrame(pos)\n", "nodes" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "Xv = [pos[k][0] for k in range(N)]\n", "Yv = [pos[k][1] for k in range(N)]\n", "Xed = []\n", "Yed = []\n", "for edge in E:\n", " Xed += [pos[edge[0]][0], pos[edge[1]][0], None]\n", " Yed += [pos[edge[0]][1], pos[edge[1]][1], None]\n", "\n", "trace3 = Scatter(\n", " x=Xed,\n", " y=Yed,\n", " mode=\"lines\",\n", " line=dict(color=\"rgb(210,210,210)\", width=1),\n", " hoverinfo=\"none\",\n", ")\n", "trace4 = Scatter(\n", " x=Xv,\n", " y=Yv,\n", " mode=\"markers\",\n", " name=\"net\",\n", " marker=dict(\n", " symbol=\"circle-dot\",\n", " size=5,\n", " color=\"#6959CD\",\n", " line=dict(color=\"rgb(50,50,50)\", width=0.5),\n", " ),\n", " text=labels,\n", " hoverinfo=\"text\",\n", ")\n", "\n", "annot = (\n", " \"This networkx.Graph has the Fruchterman-Reingold layout
Code:\"\n", " + \" [2]\"\n", ")\n", "\n", "data1 = [trace3, trace4]\n", "fig1 = Figure(data=data1, layout=layout)\n", "fig1[\"layout\"][\"annotations\"][0][\"text\"] = annot\n", "py.iplot(fig1, filename=\"Coautorship-network-nx\")" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "ename": "KeyError", "evalue": "'pos'", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", "\u001b[1;32mc:\\Users\\trimr\\Projekte\\aki_prj23_transparenzregister\\src\\aki_prj23_transparenzregister\\utils\\networkx\\Dev.ipynb Cell 10\u001b[0m line \u001b[0;36m9\n\u001b[0;32m 7\u001b[0m edge_y \u001b[39m=\u001b[39m []\n\u001b[0;32m 8\u001b[0m \u001b[39mfor\u001b[39;00m edge \u001b[39min\u001b[39;00m G\u001b[39m.\u001b[39medges():\n\u001b[1;32m----> 9\u001b[0m x0, y0 \u001b[39m=\u001b[39m G\u001b[39m.\u001b[39;49mnodes[edge[\u001b[39m0\u001b[39;49m]][\u001b[39m'\u001b[39;49m\u001b[39mpos\u001b[39;49m\u001b[39m'\u001b[39;49m]\n\u001b[0;32m 10\u001b[0m x1, y1 \u001b[39m=\u001b[39m G\u001b[39m.\u001b[39mnodes[edge[\u001b[39m1\u001b[39m]][\u001b[39m'\u001b[39m\u001b[39mpos\u001b[39m\u001b[39m'\u001b[39m]\n\u001b[0;32m 11\u001b[0m edge_x\u001b[39m.\u001b[39mappend(x0)\n", "\u001b[1;31mKeyError\u001b[0m: 'pos'" ] } ], "source": [ "import plotly.graph_objects as go\n", "\n", "import networkx as nx\n", "\n", "G = graph\n", "pos = nx.fruchterman_reingold_layout(G)\n", "edge_x = []\n", "edge_y = []\n", "for edge in G.edges():\n", " x0, y0 = G.nodes[edge[0]][\"pos\"]\n", " x1, y1 = G.nodes[edge[1]][\"pos\"]\n", " edge_x.append(x0)\n", " edge_x.append(x1)\n", " edge_x.append(None)\n", " edge_y.append(y0)\n", " edge_y.append(y1)\n", " edge_y.append(None)\n", "\n", "edge_trace = go.Scatter(\n", " x=edge_x,\n", " y=edge_y,\n", " line=dict(width=0.5, color=\"#888\"),\n", " hoverinfo=\"none\",\n", " mode=\"lines\",\n", ")\n", "\n", "node_x = []\n", "node_y = []\n", "for node in G.nodes():\n", " x, y = G.nodes[node][\"pos\"]\n", " node_x.append(x)\n", " node_y.append(y)\n", "\n", "node_trace = go.Scatter(\n", " x=node_x,\n", " y=node_y,\n", " mode=\"markers\",\n", " hoverinfo=\"text\",\n", " marker=dict(\n", " showscale=True,\n", " # colorscale options\n", " #'Greys' | 'YlGnBu' | 'Greens' | 'YlOrRd' | 'Bluered' | 'RdBu' |\n", " #'Reds' | 'Blues' | 'Picnic' | 'Rainbow' | 'Portland' | 'Jet' |\n", " #'Hot' | 'Blackbody' | 'Earth' | 'Electric' | 'Viridis' |\n", " colorscale=\"YlGnBu\",\n", " reversescale=True,\n", " color=[],\n", " size=10,\n", " colorbar=dict(\n", " thickness=15, title=\"Node Connections\", xanchor=\"left\", titleside=\"right\"\n", " ),\n", " line_width=2,\n", " ),\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "node_adjacencies = []\n", "node_text = []\n", "for node, adjacencies in enumerate(G.adjacency()):\n", " node_adjacencies.append(len(adjacencies[1]))\n", " node_text.append(\"# of connections: \" + str(len(adjacencies[1])))\n", "\n", "node_trace.marker.color = node_adjacencies\n", "node_trace.text = node_text" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fig = go.Figure(\n", " data=[edge_trace, node_trace],\n", " layout=go.Layout(\n", " title=\"
Network graph made with Python\",\n", " titlefont_size=16,\n", " showlegend=False,\n", " hovermode=\"closest\",\n", " margin=dict(b=20, l=5, r=5, t=40),\n", " annotations=[\n", " dict(\n", " text=\"Python code: https://plotly.com/ipython-notebooks/network-graphs/\",\n", " showarrow=False,\n", " xref=\"paper\",\n", " yref=\"paper\",\n", " x=0.005,\n", " y=-0.002,\n", " )\n", " ],\n", " xaxis=dict(showgrid=False, zeroline=False, showticklabels=False),\n", " yaxis=dict(showgrid=False, zeroline=False, showticklabels=False),\n", " ),\n", ")\n", "fig.show()" ] } ], "metadata": { "kernelspec": { "display_name": "aki-prj23-transparenzregister-jVJfu35g-py3.11", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.3" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }