yashpulse commited on
Commit
7861c5d
1 Parent(s): f56a482
.DS_Store ADDED
Binary file (6.15 kB). View file
 
app.py ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ from app.files import files
3
+ from app.analyze import analyze
4
+ from app.utils import *
5
+ from socialnetworkanalysis import sna
6
+
7
+ st.set_page_config(layout='wide', page_title='SNA: G34', page_icon=':bar_chart"', initial_sidebar_state='collapsed')
8
+
9
+ st.markdown(f'''
10
+ <style>
11
+ .stApp .main .block-container{{
12
+ padding:30px 50px
13
+ }}
14
+ .stApp [data-testid='stSidebar']>div:nth-child(1)>div:nth-child(2){{
15
+ padding-top:50px
16
+ }}
17
+ iframe{{
18
+ display:block;
19
+ }}
20
+ .stRadio div[role='radiogroup']>label{{
21
+ margin-right:5px
22
+ }}
23
+ </style>
24
+ ''', unsafe_allow_html=True)
25
+
26
+ with st.sidebar.container():
27
+
28
+ if 'name' in st.session_state:
29
+
30
+ st.title(f'SNA: G34')
31
+ # menu
32
+ menu = sac.menu(
33
+ items=[
34
+ sac.MenuItem('files'),
35
+ sac.MenuItem('analyze'),
36
+
37
+ ],
38
+ key='menu',
39
+ open_all=True, indent=20,
40
+ format_func='title',
41
+ )
42
+
43
+ with st.container():
44
+ if 'name' in st.session_state:
45
+ if menu == 'files':
46
+ files()
47
+ elif menu == 'analyze':
48
+ analyze()
49
+ else:
50
+ st.title("SNA: G34")
51
+ st.subheader("Enter you name to start session")
52
+ name = st.text_input('Name')
53
+ if st.button('Start Session'):
54
+ if name is None or name == '':
55
+ st.error('Please enter your name to start session')
56
+ st.stop()
57
+ else:
58
+ st.session_state['name'] = name
59
+ st.session_state['menu'] = 'files'
60
+ st.session_state['sna'] = sna.SocialNetworkAnalysis(name)
61
+ st.rerun()
app/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+
app/__pycache__/__init__.cpython-312.pyc ADDED
Binary file (215 Bytes). View file
 
app/__pycache__/analyze.cpython-312.pyc ADDED
Binary file (17.5 kB). View file
 
app/__pycache__/files.cpython-312.pyc ADDED
Binary file (10.9 kB). View file
 
app/__pycache__/utils.cpython-312.pyc ADDED
Binary file (8.91 kB). View file
 
app/analyze.py ADDED
@@ -0,0 +1,294 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import streamlit as st
3
+ import streamlit_antd_components as sac
4
+ import pandas as pd
5
+ from streamlit_monaco import st_monaco
6
+ import os
7
+ from pygwalker.api.streamlit import StreamlitRenderer
8
+ import networkx as nx
9
+ from streamlit_agraph import agraph, Node, Edge, Config
10
+ import numpy as np
11
+
12
+ def get_pyg_renderer(df,spec) -> StreamlitRenderer:
13
+ if os.path.exists(f"./{spec}_config.json"):
14
+ os.remove(f"./{spec}_config.json")
15
+ return StreamlitRenderer(df, spec=f"./{spec}_config.json", spec_io_mode="rw")
16
+
17
+
18
+ def get_nodes(df:pd.DataFrame,source,target):
19
+ nodes = []
20
+ unique_node_id = []
21
+ df.replace(np.nan, None, regex=True,inplace=True)
22
+ # remove rows with null source or target
23
+ df = df.dropna(subset=[source,target])
24
+ for index, row in df.iterrows():
25
+ cols = df.columns
26
+
27
+ if row[source] is not None or row[source] != "" or row[source] != np.nan:
28
+ meta_data = {}
29
+ for col in cols:
30
+ if col != source and col != target and col != "relation":
31
+ if row[col] is not None:
32
+ meta_data[col] = row[col]
33
+
34
+ if str(row[source]).replace(".0","") not in unique_node_id:
35
+ unique_node_id.append(str(row[source]).replace(".0",""))
36
+ nodes.append(Node(
37
+ id=str(row[source]).replace(".0",""),
38
+ label=str(row[source]).replace(".0",""),
39
+ size=10,
40
+ color="red",
41
+ ))
42
+ if row[target] is not None or row[target] != "" or row[target] != np.nan:
43
+ meta_data = {}
44
+ for col in cols:
45
+ if col != source and col != target and col != "relation":
46
+ if row[col] is not None:
47
+ meta_data[col] = row[col]
48
+
49
+ if str(row[target]).replace(".0","") not in unique_node_id:
50
+ unique_node_id.append(str(row[target]).replace(".0",""))
51
+ nodes.append(Node(
52
+ id=str(row[target]).replace(".0",""),
53
+ label=str(row[target]).replace(".0",""),
54
+ size=10,
55
+ color="red",
56
+ ))
57
+
58
+ return nodes
59
+
60
+ def get_edges(df:pd.DataFrame,source,target):
61
+ edges = []
62
+ df.replace(np.nan, None, regex=True,inplace=True)
63
+ for index, row in df.iterrows():
64
+ if str(row[source]).replace(".0","") is not None and str(row[target]).replace(".0","") is not None:
65
+ edges.append(Edge(
66
+ source=str(row[source]).replace(".0",""),
67
+ target=str(row[target]).replace(".0",""),
68
+ label=row["relation"],
69
+ size=1,
70
+ ))
71
+ return edges
72
+
73
+ def analyze():
74
+ st.title('Analyze')
75
+
76
+ col = st.columns([4, 1])
77
+ with col[0]:
78
+ st.subheader("Analyze loaded data and visualize it.")
79
+
80
+ with col[1]:
81
+ query_mode = st.radio("Query Mode",["Visual","Raw"],horizontal=True,index=0,key="query_type")
82
+
83
+
84
+ query_controls = st.columns([1,1,1,1,1])
85
+ with query_controls[0]:
86
+ saved_queries = st.session_state.sna.get_queries()
87
+ if saved_queries is None:
88
+ saved_queries = {}
89
+ selected_query = st.selectbox("Select Query",saved_queries.keys(),index=None,key="selected_query")
90
+ with query_controls[1]:
91
+ if selected_query is None:
92
+
93
+ query_name = st.text_input(key="query_name",value="New Query",label="Query Name")
94
+ if query_name not in st.session_state:
95
+ st.session_state[query_name] = "MATCH (n) RETURN n LIMIT 25"
96
+ st.session_state.sna.save_query(query_name,st.session_state[query_name])
97
+ st.rerun()
98
+
99
+ else:
100
+ query_name = st.text_input(key="query_name",value=selected_query,label="Query Name")
101
+ st.session_state[query_name] = saved_queries[selected_query]
102
+
103
+ helpers = st.session_state.sna.get_helper()
104
+ if helpers is not None:
105
+ files = []
106
+ for helper in helpers:
107
+ if not helper.endswith(".json"):
108
+ files.append(helper.split("/")[-1])
109
+ select_files_cols = st.columns([1,1,1,1,1])
110
+ with select_files_cols[0]:
111
+ selected_files = st.selectbox("Select Loaded File",files)
112
+ if selected_files is not None:
113
+ for helper in helpers:
114
+ if helper.endswith(selected_files):
115
+ helper_json = helpers[helper]
116
+ tables = {}
117
+ relationships = {}
118
+ for object in helper_json:
119
+ if helper_json[object]["isTable"]:
120
+ tables[helper_json[object]["object_name"]] = helper_json[object]["columns"]
121
+ elif helper_json[object]["isRelationship"]:
122
+ relationships[helper_json[object]["object_name"]] = {
123
+ "source": helper_json[object]["source"],
124
+ "target": helper_json[object]["target"]
125
+ }
126
+
127
+ if query_mode == "Raw":
128
+ query_cols = st.columns([4,6])
129
+
130
+ with query_cols[0]:
131
+ with st.expander("Objects",expanded=True):
132
+ st.write("Tables")
133
+ st.write(tables)
134
+ st.write("Relationships")
135
+ st.write(relationships)
136
+
137
+
138
+
139
+ with query_cols[1]:
140
+ with st.expander("Query",expanded=True):
141
+ if selected_query is None:
142
+ query_text = st_monaco(value="", height="200px", language="cypher",theme="vs-dark",lineNumbers=True)
143
+ else:
144
+ query_text = st_monaco(value=saved_queries[selected_query], height="200px", language="cypher",theme="vs-dark",lineNumbers=True)
145
+
146
+ if query_mode == "Visual":
147
+ query_text = st.session_state[query_name]
148
+ node_edge_template = """MATCH
149
+ q = (s:##source_node##)-[r##relationship##]->(t:##target_node##)
150
+ """
151
+ with st.expander("Node and Edges Selection",expanded=True):
152
+ st.write("Select the source and target nodes for the network")
153
+ node_edge_selection_columns = st.columns([1,1,1,1,1])
154
+ with node_edge_selection_columns[0]:
155
+ source_node = st.selectbox("Source Node",list(tables.keys()),index=0,key="source_node")
156
+ with node_edge_selection_columns[1]:
157
+ target_node = st.selectbox("Target Node",list(tables.keys()),index=1,key="target_node")
158
+
159
+ if source_node is not None and target_node is not None:
160
+ st.write("Select the relationship between the source and target nodes")
161
+ node_edge_selection_columns = st.columns([1,1,1,1,1])
162
+ with node_edge_selection_columns[0]:
163
+ filtered_relationship = {}
164
+ for relationship in relationships:
165
+ if relationships[relationship]["source"] == source_node and relationships[relationship]["target"] == target_node:
166
+ filtered_relationship[relationship] = relationships[relationship]
167
+ relationship = st.multiselect("Relationships",list(filtered_relationship.keys()),key="relationship")
168
+
169
+ if source_node is not None and target_node is not None and len(relationship) > 0:
170
+ relationship_str = ""
171
+ for rel in relationship:
172
+ relationship_str += f":{rel.strip()}|"
173
+ relationship_str = relationship_str[:-1]
174
+ node_edge_template_stg = node_edge_template
175
+ node_edge = node_edge_template_stg.replace("##source_node##",source_node).replace("##target_node##",target_node).replace("##relationship##",relationship_str)
176
+
177
+ source_primary_key = ""
178
+ target_primary_key = ""
179
+ for column in tables[source_node]:
180
+ if tables[source_node][column] == "INT64":
181
+ source_primary_key = column
182
+ break
183
+ for column in tables[target_node]:
184
+ if tables[target_node][column] == "INT64":
185
+ target_primary_key = column
186
+ break
187
+
188
+ return_template = f"""RETURN (nodes(q)[1]).{source_primary_key} as source,
189
+ (rels(q)[1])._label as relation,
190
+ (nodes(q)[2]).{target_primary_key} as target
191
+ ##return##"""
192
+ with st.expander("Returned Columns"):
193
+ source_columns = []
194
+ target_columns = []
195
+ for column in tables[source_node]:
196
+ if column != source_primary_key:
197
+ source_columns.append(column)
198
+ for column in tables[target_node]:
199
+ if column != target_primary_key:
200
+ target_columns.append(column)
201
+ returned_columns = st.columns([3,3,1])
202
+ with returned_columns[0]:
203
+ source_node_columns = st.multiselect("Source Node Columns",source_columns,key="source_node_columns")
204
+ with returned_columns[1]:
205
+ target_node_columns = st.multiselect("Target Node Columns",target_columns,key="target_node_columns")
206
+ with returned_columns[-1]:
207
+ limit = st.number_input("Limit",min_value=1,max_value=10000,value=200,key="limit")
208
+
209
+ return_str = ""
210
+ return_template_stg = return_template
211
+ if len(source_node_columns) > 0:
212
+ for column in source_node_columns:
213
+ return_str += f"\n,(nodes(q)[1]).{column} as source_{column}"
214
+ if len(target_node_columns) > 0:
215
+ for column in target_node_columns:
216
+ return_str += f"\n,(nodes(q)[2]).{column} as target_{column}"
217
+ return_statement = return_template_stg.replace("##return##",return_str)
218
+
219
+ prepared_query = node_edge + return_statement + f"\n LIMIT {limit};"
220
+ query_text = prepared_query
221
+
222
+
223
+
224
+
225
+
226
+
227
+
228
+
229
+
230
+ query_actions = st.columns([1,1,1,1,1,1,1,1,1,1,1])
231
+ with query_actions[0]:
232
+ if st.button("Save",key="save_query"):
233
+ st.session_state["results"] = None
234
+ st.session_state[query_name] = query_text
235
+ st.session_state.sna.save_query(query_name,st.session_state[query_name])
236
+ with query_actions[1]:
237
+ if st.button("Execute",type="primary",key="execute_query"):
238
+ st.session_state["results"] = None
239
+ st.session_state["results"] = st.session_state.sna.execute_query(query_text)
240
+
241
+
242
+ if "results" in st.session_state:
243
+ with st.expander('Results',expanded=False):
244
+ result_renderer = get_pyg_renderer(st.session_state["results"],"result")
245
+ result_renderer.explorer()
246
+
247
+ with st.expander('Network',expanded=False):
248
+ if st.session_state["results"] is not None:
249
+ netwok_columns = st.columns([1,1,1,1])
250
+ networkx_result = st.session_state.sna.apply_networkx_analysis(st.session_state["results"],"source","target")
251
+ ergm_result = st.session_state.sna.apply_ergm(st.session_state["results"],"source","target")
252
+ with netwok_columns[-1]:
253
+ analysis_type = st.radio("Analysis Type",["Graph","Visualization"],index=0,key="network_type",horizontal=True)
254
+
255
+ if analysis_type == "Visualization":
256
+ networkx_renderer = get_pyg_renderer(networkx_result,"networkx")
257
+ networkx_renderer.explorer()
258
+ elif analysis_type == "Graph":
259
+ config = Config(width=1000,height=750,directed=True,physics=True,hierarchical=True)
260
+ nodes = get_nodes(networkx_result,"source","target")
261
+ edges = get_edges(networkx_result,"source","target")
262
+ graph_columns = st.columns([9,3])
263
+
264
+ with graph_columns[0]:
265
+ return_value = agraph(nodes=nodes, edges=edges, config=config)
266
+ with graph_columns[1]:
267
+ st.write("Ergm Analysis")
268
+ ergm_result_to_display = ergm_result["ergm"]
269
+ del ergm_result_to_display["degree_distribution"]
270
+ ergm_result_df = pd.DataFrame.from_dict(ergm_result_to_display,orient="index",columns=["Value"])
271
+ st.dataframe(ergm_result_df)
272
+
273
+ if return_value is not None:
274
+ st.write("Networkx Analysis")
275
+ with open(f"./output.csv","w") as f:
276
+ f.write(networkx_result.to_csv(index=False))
277
+ networkx_result_search = networkx_result
278
+ # convert source and target to string
279
+ networkx_result_search["source"] = networkx_result_search["source"].astype(str).replace(".0","")
280
+ networkx_result_search["target"] = networkx_result_search["target"].astype(str).replace(".0","")
281
+ # search for a node in the networkx_result_search with return value
282
+ search = networkx_result_search[networkx_result_search["source"].str.contains(return_value)]
283
+ if search.empty:
284
+ search = networkx_result_search[networkx_result_search["target"].str.contains(return_value)]
285
+ if not search.empty:
286
+ st.write(search)
287
+
288
+
289
+
290
+
291
+
292
+
293
+
294
+
app/files.py ADDED
@@ -0,0 +1,236 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import streamlit as st
3
+ import streamlit_antd_components as sac
4
+ import pandas as pd
5
+ from st_aggrid import AgGrid
6
+ import time
7
+ import json
8
+
9
+
10
+ def files():
11
+ st.title('Files')
12
+
13
+ col = st.columns([4, 1])
14
+ with col[0]:
15
+ st.subheader("Below are the files that are uploaded for current session.")
16
+
17
+ with st.expander('Upload', False):
18
+ uploaded_file = st.file_uploader("Choose a file", type=['xlsx'], accept_multiple_files=False)
19
+ if uploaded_file is not None:
20
+ st.session_state.sna.add_file(uploaded_file)
21
+ st.info("File uploaded successfully.")
22
+ uploaded_file = None
23
+
24
+
25
+ with st.expander('Files', True):
26
+
27
+ files = st.session_state.sna.get_files()
28
+
29
+ file_tree_items = []
30
+
31
+ for file in files:
32
+ parts = file.split('/')
33
+ file_tree_items.append(sac.TreeItem(parts[-1]))
34
+
35
+
36
+
37
+ selected_files = sac.tree(items=file_tree_items,checkbox=True)
38
+ raw_selected_files = None
39
+
40
+ if len(selected_files) == 1:
41
+
42
+ for file in selected_files:
43
+
44
+ for raw_file in files:
45
+ if raw_file.endswith(file):
46
+ raw_selected_files = raw_file
47
+ st.write("Selected file: ",raw_file)
48
+
49
+ if raw_selected_files is not None:
50
+
51
+ if str(raw_selected_files).endswith(".json"):
52
+ with st.expander('View', False):
53
+ with open(raw_selected_files) as f:
54
+ data = json.load(f)
55
+ st.json(data)
56
+ else:
57
+
58
+
59
+ with st.expander('View', False):
60
+ all_sheets = pd.read_excel(raw_selected_files,sheet_name=None, engine='openpyxl')
61
+
62
+ tab_items = []
63
+
64
+ for sheet_name, df in all_sheets.items():
65
+ tab_items.append(sac.TabsItem(label=sheet_name))
66
+
67
+ tab = sac.tabs(tab_items,key="view",index=None)
68
+
69
+ if tab is not None:
70
+ for sheet_name, df in all_sheets.items():
71
+ if sheet_name == tab:
72
+ st.dataframe(df)
73
+ break
74
+
75
+
76
+ with st.expander('Load', True):
77
+ data_loading_response = None
78
+ generate_helper = st.session_state.sna.generate_data_dictionary(raw_selected_files)
79
+ generate_helper_reset = generate_helper.copy()
80
+
81
+ load_action_controls = st.columns([1,1,1,1,1,1,1,1,1,1,1,1,1])
82
+
83
+ with load_action_controls[-3]:
84
+ if st.button("Save",type="primary"):
85
+ st.rerun()
86
+
87
+ with load_action_controls[-2]:
88
+ if st.button("Reset",type="primary"):
89
+ st.session_state[raw_selected_files] = generate_helper_reset.copy()
90
+ generate_helper = generate_helper_reset.copy()
91
+ st.rerun()
92
+
93
+ with load_action_controls[-1]:
94
+ if st.button("Load",type="primary"):
95
+ print("Loading")
96
+ load_response = st.session_state.sna.load_data(raw_selected_files,st.session_state[raw_selected_files])
97
+ data_loading_response = load_response
98
+
99
+
100
+ if data_loading_response is not None:
101
+ container_message = st.empty()
102
+ if data_loading_response["status"]:
103
+ container_message.success(data_loading_response["message"])
104
+ time.sleep(3)
105
+ container_message.empty()
106
+ else:
107
+ container_message.error(data_loading_response["message"])
108
+ time.sleep(3)
109
+ container_message.empty()
110
+
111
+
112
+ if raw_selected_files in st.session_state:
113
+ generate_helper = st.session_state[raw_selected_files]
114
+ else:
115
+ st.session_state[raw_selected_files] = generate_helper.copy()
116
+
117
+ tab_items_load = []
118
+
119
+ for sheet_name in generate_helper:
120
+ tab_items_load.append(sac.TabsItem(label=sheet_name))
121
+
122
+ tab_load = sac.tabs(tab_items_load,key='load')
123
+
124
+ if tab_load is not None:
125
+ for sheet_name in generate_helper:
126
+ if sheet_name == tab_load:
127
+ loading_columns = st.columns([1,1,1])
128
+
129
+ with loading_columns[0]:
130
+ if generate_helper[sheet_name]["isTable"]:
131
+ st.write("Columns")
132
+ if "columns" in generate_helper[sheet_name]:
133
+ for column in generate_helper[sheet_name]["columns"]:
134
+ data_type_stg = 0
135
+ if generate_helper[sheet_name]["columns"][column] == "STRING":
136
+ data_type_stg = 0
137
+ elif generate_helper[sheet_name]["columns"][column] == "INT64":
138
+ data_type_stg = 1
139
+ elif generate_helper[sheet_name]["columns"][column] == "FLOAT":
140
+ data_type_stg = 2
141
+ value = st.radio(column,["STRING","INT64","FLOAT"],index=data_type_stg,horizontal=True,key=f"{sheet_name}_{column}")
142
+ if value is not None:
143
+ generate_helper[sheet_name]["columns"][column] = value
144
+ st.session_state[raw_selected_files] = generate_helper.copy()
145
+
146
+ elif generate_helper[sheet_name]["isRelationship"]:
147
+ tables = []
148
+ for table in generate_helper:
149
+ if "isTable" in generate_helper[table]:
150
+ if generate_helper[table]["isTable"]:
151
+ tables.append(table)
152
+
153
+ st.write("Relationship")
154
+
155
+ source_stg = 0
156
+ target_stg = 0
157
+ if "source" in generate_helper[sheet_name]:
158
+ if generate_helper[sheet_name]["source"] in tables:
159
+ source_stg = tables.index(generate_helper[sheet_name]["source"])
160
+ if "target" in generate_helper[sheet_name]:
161
+ if generate_helper[sheet_name]["target"] in tables:
162
+ target_stg = tables.index(generate_helper[sheet_name]["target"])
163
+
164
+ source = st.selectbox("Source",tables,index=source_stg,key=f"source_{sheet_name}")
165
+ target = st.selectbox("Target",tables,index=target_stg,key=f"target_{sheet_name}")
166
+ if source is not None:
167
+ generate_helper[sheet_name]["source"] = source
168
+ st.session_state[raw_selected_files] = generate_helper.copy()
169
+ if target is not None:
170
+ generate_helper[sheet_name]["target"] = target
171
+ st.session_state[raw_selected_files] = generate_helper.copy()
172
+ else:
173
+ st.write("Ignored")
174
+
175
+
176
+ with loading_columns[1]:
177
+ st.write("Object Properties")
178
+ if generate_helper[sheet_name]["isTable"]:
179
+ object_type_stg = 0
180
+ elif generate_helper[sheet_name]["isRelationship"]:
181
+ object_type_stg = 1
182
+ else:
183
+ object_type_stg = 2
184
+
185
+ object_type = st.radio("Object Type",["Table","Relationship","Ignore"],index=object_type_stg,horizontal=True,key=f"object_type_{sheet_name}")
186
+
187
+ if object_type == "Table":
188
+ if not generate_helper[sheet_name]["isTable"]:
189
+ generate_helper[sheet_name]["isTable"] = True
190
+ generate_helper[sheet_name]["isRelationship"] = False
191
+ st.session_state[raw_selected_files] = generate_helper.copy()
192
+ st.rerun()
193
+
194
+
195
+ elif object_type == "Relationship":
196
+ if not generate_helper[sheet_name]["isRelationship"]:
197
+ generate_helper[sheet_name]["isTable"] = False
198
+ generate_helper[sheet_name]["isRelationship"] = True
199
+ st.session_state[raw_selected_files] = generate_helper.copy()
200
+ st.rerun()
201
+
202
+ else:
203
+ if generate_helper[sheet_name]["isTable"] or generate_helper[sheet_name]["isRelationship"]:
204
+ generate_helper[sheet_name]["isTable"] = False
205
+ generate_helper[sheet_name]["isRelationship"] = False
206
+ st.session_state[raw_selected_files] = generate_helper.copy()
207
+ st.rerun()
208
+
209
+ object_name = st.text_input("Object Name",generate_helper[sheet_name]["object_name"])
210
+ if object_name is not None:
211
+ generate_helper[sheet_name]["object_name"] = object_name
212
+ st.session_state[raw_selected_files] = generate_helper.copy()
213
+
214
+
215
+ if generate_helper[sheet_name]["isTable"]:
216
+ int_64_keys = []
217
+ if "columns" in generate_helper[sheet_name]:
218
+ for column in generate_helper[sheet_name]["columns"]:
219
+ if generate_helper[sheet_name]["columns"][column] == "INT64":
220
+ int_64_keys.append(column)
221
+
222
+ primary_key_staging = 0
223
+ if generate_helper[sheet_name]["primary_key"] in int_64_keys:
224
+ primary_key_staging = int_64_keys.index(generate_helper[sheet_name]["primary_key"])
225
+
226
+ primary_key = st.selectbox("Primary Key",int_64_keys,index=primary_key_staging,key=f"primary_key_{sheet_name}")
227
+ if primary_key is not None:
228
+ generate_helper[sheet_name]["primary_key"] = primary_key
229
+ st.session_state[raw_selected_files] = generate_helper.copy()
230
+
231
+
232
+ with loading_columns[2]:
233
+ st.write("Helper Object")
234
+ st.write(generate_helper[sheet_name])
235
+
236
+ break
app/utils.py ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Callable
2
+ import streamlit as st
3
+ import streamlit_antd_components as sac
4
+ import inspect
5
+
6
+ FORMAT = [None, 'title', 'upper', "lambda x:f'A_{x}'"]
7
+ LABEL = [
8
+ None,
9
+ 'label',
10
+ '**label**',
11
+ '**label** <span class="badge rounded-pill badge-info">Info</span>'
12
+ ]
13
+ MartineColor = ['dark', 'gray', 'red', 'pink', 'grape', 'violet', 'indigo', 'blue', 'cyan', 'teal', 'green', 'lime',
14
+ 'yellow', 'orange']
15
+ MartineSize = ['xs', 'sm', 'md', 'lg', 'xl']
16
+ AntColor = {
17
+ 'magenta': '#c41d7f',
18
+ 'red': '#cf1322',
19
+ 'volcano': '#d4380d',
20
+ 'orange': '#d46b08',
21
+ 'gold': '#d48806',
22
+ 'lime': '#7cb305',
23
+ 'green': '#389e0d',
24
+ 'cyan': '#08979c',
25
+ 'blue': '#0958d9',
26
+ 'geekblue': '#1d39c4',
27
+ 'purple': '#531dab'
28
+ }
29
+
30
+ size_help = 'support mantine size and int in px'
31
+ md_help = 'support str and markdown str'
32
+
33
+
34
+ def show_label(container=None, value='label', key=None):
35
+ if container is not None:
36
+ with container:
37
+ return st.text_input('label', value, key=f'{key}-label', help=md_help)
38
+ return st.text_input('label', value, key=f'{key}-label', help=md_help)
39
+
40
+
41
+ def show_description(container=None, value='', key=None):
42
+ if container is not None:
43
+ with container:
44
+ return st.text_input('description', value, key=f'{key}-desc', help=md_help)
45
+ return st.text_input('description', value, key=f'{key}-desc', help=md_help)
46
+
47
+
48
+ def show_index(container=None, option=None, index=0, key=None):
49
+ if container is not None:
50
+ with container:
51
+ return st.selectbox('index', option, index=index, key=f'{key}-index')
52
+ return st.selectbox('index', option, index=index, key=f'{key}-index')
53
+
54
+
55
+ def show_format_func(container=None, key=None):
56
+ if container is not None:
57
+ with container:
58
+ return st.selectbox('format_func', FORMAT, 0, key=f'{key}-format', help='item label format')
59
+ return st.selectbox('format_func', FORMAT, 0, key=f'{key}-format', help='item label format')
60
+
61
+
62
+ def show_color(index=0, label='color', options=(None, *MartineColor, '#4682b4', 'rgb(20,80,90)'),
63
+ none_color='--primary-color', key=None, martine=True):
64
+ colors = {'info': 'rgb(0, 66, 128)', 'success': 'rgb(23, 114, 51)', 'warning': 'rgb(146, 108, 5)',
65
+ 'error': 'rgb(125, 53, 59)', 'transparent': 'lightgray', None: none_color}
66
+ btn = sac.buttons(
67
+ items=[sac.ButtonsItem(
68
+ label='None' if i is None else i,
69
+ color=colors.get(i) if i in colors.keys() else (i if martine else AntColor.get(i, i))) for i in options
70
+ ],
71
+ label=label, index=index,
72
+ size='xs', gap='xs', variant='filled', radius='lg', key=f'{key}-color'
73
+ )
74
+ return None if btn == 'None' else btn
75
+
76
+
77
+ def show_size(index=2, include_int=True, key=None):
78
+ return st.radio('size', options=MartineSize + [25] if include_int else MartineSize, index=index, horizontal=True,
79
+ key=f'{key}-size', help=size_help)
80
+
81
+
82
+ def show_radius(index=2, key=None):
83
+ return st.radio('radius', MartineSize + [20, 2], index=index, horizontal=True, key=f'{key}-radius', help=size_help)
84
+
85
+
86
+ def show_variant(options, index=0, key=None):
87
+ return st.radio('variant', options, index=index, horizontal=True, key=f'{key}-variant')
88
+
89
+
90
+ def show_align(index=1, key=None):
91
+ return st.radio('align', ['start', 'center', 'end'], index=index, horizontal=True, key=f'{key}-align')
92
+
93
+
94
+ def show_direction(index=0, key=None):
95
+ return st.radio('direction', ["horizontal", "vertical"], index=index, horizontal=True, key=f'{key}-direction')
96
+
97
+
98
+ def show_checkbox(label, container=None, value=False, key=None):
99
+ if container is not None:
100
+ with container:
101
+ return st.checkbox(label, value=value, key=f'{key}-{label}')
102
+ return st.checkbox(label, value=value, key=f'{key}-{label}')
103
+
104
+
105
+ def show_radio(label=None, options=None, container=None, index=0, key=None):
106
+ if container is not None:
107
+ with container:
108
+ return st.radio(label, options=options, index=index, horizontal=True, key=f'{key}-{label}')
109
+ return st.radio(label, options=options, index=index, horizontal=True, key=f'{key}-{label}')
110
+
111
+
112
+ def show_space(number=3):
113
+ st.markdown('<br>' * number, unsafe_allow_html=True)
114
+
115
+
116
+ def update_kw(d: dict, remove_keys: list = None):
117
+ ff = d.get("format_func")
118
+ if isinstance(ff, str) and 'lambda' in ff:
119
+ d.update({"format_func": eval(ff)})
120
+ label = d.get('label')
121
+ if isinstance(label, str) and not label:
122
+ d.update({'label': None})
123
+ desc = d.get('description')
124
+ if isinstance(desc, str) and not desc:
125
+ d.update({'description': None})
126
+ if remove_keys is not None:
127
+ for i in remove_keys:
128
+ if i in d.keys():
129
+ del d[i]
130
+ return d
131
+
132
+
133
+ def code_kw(kw: dict, _func):
134
+ # func default kw
135
+ default_kw = {
136
+ k: v.default for k, v in inspect.signature(_func).parameters.items() if
137
+ v.default is not inspect.Parameter.empty
138
+ }
139
+ # filter kw
140
+ new_kw = {k: v for k, v in kw.items() if v != default_kw.get(k)}
141
+ # dict to kw string
142
+ return ", ".join(f'{k}={FORMAT[-1]}' if isinstance(v, Callable) else f'{k}={v!r}' for k, v in new_kw.items())
143
+
144
+
145
+ def show_code(x: str, open: bool = False):
146
+ with st.expander('code', open):
147
+ st.code(f'''
148
+ import streamlit_antd_components as sac\n{x}
149
+ ''', line_numbers=True)
gw_config.json ADDED
File without changes
networkx_config.json ADDED
File without changes
output.csv ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ source,relation,target,source_first_name,source_attendance,target_email,target_attendance,target_completeyears,degree,degree_centrality,closeness_centrality,betweenness_centrality,eigenvector_centrality,clustering,pagerank,edge_betweenness_centrality
2
+ 32437,feedback,32420,Rhett,100,Levi.Mitchell@school.edu,62,7,4,0.03305785123966942,0.23267792095883436,0.004019583874955778,0.23985823095166348,0.6666666666666666,0.00925987211321424,0.00477916760263326
3
+ 32437,feedback,32540,Rhett,100,Beckett.Powell@school.edu,97,4,4,0.03305785123966942,0.23267792095883436,0.004019583874955778,0.23985823095166348,0.6666666666666666,0.00925987211321424,0.011706698666460211
4
+ 32437,feedback,32523,Rhett,100,Elliot.Hayes@school.edu,100,8,4,0.03305785123966942,0.23267792095883436,0.004019583874955778,0.23985823095166348,0.6666666666666666,0.00925987211321424,0.005714968016824136
5
+ 32437,feedback,32397,Rhett,100,Carlos.Torres@school.edu,86,7,4,0.03305785123966942,0.23267792095883436,0.004019583874955778,0.23985823095166348,0.6666666666666666,0.00925987211321424,0.0004741904890936188
6
+ 32540,feedback,32420,Beckett,97,Levi.Mitchell@school.edu,62,7,14,0.11570247933884298,0.2913652303994899,0.3093327459959693,0.5027507875419127,0.0989010989010989,0.032781455401305594,
7
+ 32540,feedback,32468,Beckett,97,Easton.Bell@school.edu,100,3,14,0.11570247933884298,0.2913652303994899,0.3093327459959693,0.5027507875419127,0.0989010989010989,0.032781455401305594,0.021226373319585642
8
+ 32540,feedback,32432,Beckett,97,William.Thomas@school.edu,97,7,14,0.11570247933884298,0.2913652303994899,0.3093327459959693,0.5027507875419127,0.0989010989010989,0.032781455401305594,0.08010938052599073
9
+ 32540,feedback,32476,Beckett,97,Bennett.Sullivan@school.edu,100,8,14,0.11570247933884298,0.2913652303994899,0.3093327459959693,0.5027507875419127,0.0989010989010989,0.032781455401305594,0.02628370139547487
10
+ 32540,feedback,32469,Beckett,97,Benjamin.Miller@school.edu,100,1,14,0.11570247933884298,0.2913652303994899,0.3093327459959693,0.5027507875419127,0.0989010989010989,0.032781455401305594,0.014767646660344129
11
+ 32540,moretime,32528,Beckett,97,Dominic.Barnes@school.edu,100,2,14,0.11570247933884298,0.2913652303994899,0.3093327459959693,0.5027507875419127,0.0989010989010989,0.032781455401305594,0.014767646660344129
12
+ 32540,moretime,32469,Beckett,97,Benjamin.Miller@school.edu,100,1,14,0.11570247933884298,0.2913652303994899,0.3093327459959693,0.5027507875419127,0.0989010989010989,0.032781455401305594,0.014767646660344129
13
+ 32540,moretime,32420,Beckett,97,Levi.Mitchell@school.edu,62,7,14,0.11570247933884298,0.2913652303994899,0.3093327459959693,0.5027507875419127,0.0989010989010989,0.032781455401305594,
14
+ 32540,moretime,32476,Beckett,97,Bennett.Sullivan@school.edu,100,8,14,0.11570247933884298,0.2913652303994899,0.3093327459959693,0.5027507875419127,0.0989010989010989,0.032781455401305594,0.02628370139547487
15
+ 32540,moretime,32490,Beckett,97,Caden.Novak@school.edu,100,2,14,0.11570247933884298,0.2913652303994899,0.3093327459959693,0.5027507875419127,0.0989010989010989,0.032781455401305594,0.1445603576751118
16
+ 32540,moretime,32513,Beckett,97,Tucker.Castro@school.edu,99,2,14,0.11570247933884298,0.2913652303994899,0.3093327459959693,0.5027507875419127,0.0989010989010989,0.032781455401305594,0.01766440216514732
17
+ 32540,moretime,32409,Beckett,97,Winston.Bruce@school.edu,100,4,14,0.11570247933884298,0.2913652303994899,0.3093327459959693,0.5027507875419127,0.0989010989010989,0.032781455401305594,0.01395098526246067
18
+ 32443,feedback,32518,Rory,74,Maximus.Cole@school.edu,83,0,6,0.049586776859504134,0.21070833185542512,0.0739776255272123,0.03117499217642301,0.0,0.01851851385143733,0.014767646660344129
19
+ 32443,feedback,32491,Rory,74,Logan.Lewis@school.edu,98,4,6,0.049586776859504134,0.21070833185542512,0.0739776255272123,0.03117499217642301,0.0,0.01851851385143733,0.014767646660344129
20
+ 32443,moretime,32439,Rory,74,Chase.Wood@school.edu,100,0,6,0.049586776859504134,0.21070833185542512,0.0739776255272123,0.03117499217642301,0.0,0.01851851385143733,0.014767646660344129
21
+ 32443,moretime,32491,Rory,74,Logan.Lewis@school.edu,98,4,6,0.049586776859504134,0.21070833185542512,0.0739776255272123,0.03117499217642301,0.0,0.01851851385143733,0.014767646660344129
22
+ 32443,moretime,32535,Rory,74,James.Anderson@school.edu,92,0,6,0.049586776859504134,0.21070833185542512,0.0739776255272123,0.03117499217642301,0.0,0.01851851385143733,0.013637390022703663
23
+ 32443,moretime,32518,Rory,74,Maximus.Cole@school.edu,83,0,6,0.049586776859504134,0.21070833185542512,0.0739776255272123,0.03117499217642301,0.0,0.01851851385143733,0.014767646660344129
24
+ 32443,moretime,32396,Rory,74,Christian.Campbell@school.edu,59,0,6,0.049586776859504134,0.21070833185542512,0.0739776255272123,0.03117499217642301,0.0,0.01851851385143733,0.041016695297958004
25
+ 32553,feedback,32540,Wyatt,100,Beckett.Powell@school.edu,97,4,3,0.024793388429752067,0.2550391757003327,0.06774143441498814,0.13395613836148887,0.3333333333333333,0.007693673187560379,
26
+ 32553,feedback,32468,Wyatt,100,Easton.Bell@school.edu,100,3,3,0.024793388429752067,0.2550391757003327,0.06774143441498814,0.13395613836148887,0.3333333333333333,0.007693673187560379,
27
+ 32444,feedback,32448,Derek,100,Zayden.Coleman@school.edu,88,9,2,0.01652892561983471,0.17852742299023291,0.014876033057851238,0.004278441863533104,0.0,0.0077875583666649675,0.029264327326920473
28
+ 32444,moretime,32500,Derek,100,Michael.Jackson@school.edu,96,2,2,0.01652892561983471,0.17852742299023291,0.014876033057851238,0.004278441863533104,0.0,0.0077875583666649675,0.014767646660344129
29
+ 32428,feedback,32420,Xavier,68,Levi.Mitchell@school.edu,62,7,1,0.008264462809917356,0.20038792376454714,0.0,0.07063011983787157,0.0,0.0031936503505762674,
30
+ 32484,feedback,32442,Nathan,100,Lucas.Robinson@school.edu,100,2,2,0.01652892561983471,0.01652892561983471,0.0001377410468319559,2.3374491378885444e-17,0.0,0.011959829069359539,0.00027096599376778217
31
+ 32484,moretime,32442,Nathan,100,Lucas.Robinson@school.edu,100,2,2,0.01652892561983471,0.01652892561983471,0.0001377410468319559,2.3374491378885444e-17,0.0,0.011959829069359539,0.00027096599376778217
32
+ 32484,moretime,32419,Nathan,100,Ethan.Williams@school.edu,99,2,2,0.01652892561983471,0.01652892561983471,0.0001377410468319559,2.3374491378885444e-17,0.0,0.011959829069359539,0.00027096599376778217
33
+ 32445,feedback,32498,Elijah,58,Simon.Cline@school.edu,98,0,6,0.049586776859504134,0.21253264641694394,0.05780352223534041,0.026718116326419017,0.13333333333333333,0.017085259308399103,0.018471171153734495
34
+ 32445,feedback,32487,Elijah,58,Iker.Fisher@school.edu,100,2,6,0.049586776859504134,0.21253264641694394,0.05780352223534041,0.026718116326419017,0.13333333333333333,0.017085259308399103,0.02501951600312256
35
+ 32445,feedback,32404,Elijah,58,Greyson.Ross@school.edu,95,0,6,0.049586776859504134,0.21253264641694394,0.05780352223534041,0.026718116326419017,0.13333333333333333,0.017085259308399103,0.026789343294559398
36
+ 32445,moretime,32498,Elijah,58,Simon.Cline@school.edu,98,0,6,0.049586776859504134,0.21253264641694394,0.05780352223534041,0.026718116326419017,0.13333333333333333,0.017085259308399103,0.018471171153734495
37
+ 32445,moretime,32487,Elijah,58,Iker.Fisher@school.edu,100,2,6,0.049586776859504134,0.21253264641694394,0.05780352223534041,0.026718116326419017,0.13333333333333333,0.017085259308399103,0.02501951600312256
38
+ 32445,moretime,32404,Elijah,58,Greyson.Ross@school.edu,95,0,6,0.049586776859504134,0.21253264641694394,0.05780352223534041,0.026718116326419017,0.13333333333333333,0.017085259308399103,0.026789343294559398
39
+ 32445,moretime,32415,Elijah,58,Silas.Jenkins@school.edu,100,1,6,0.049586776859504134,0.21253264641694394,0.05780352223534041,0.026718116326419017,0.13333333333333333,0.017085259308399103,0.02070599544519068
40
+ 32445,moretime,32421,Elijah,58,Sterling.Hickman@school.edu,98,5,6,0.049586776859504134,0.21253264641694394,0.05780352223534041,0.026718116326419017,0.13333333333333333,0.017085259308399103,0.005837865562157664
41
+ 32470,feedback,32477,Finn,100,Walter.Kim@school.edu,100,0,1,0.008264462809917356,0.16176290386264927,0.0,0.0036015351171656434,0.0,0.0037891651182287776,0.014767646660344129
42
+ 32395,feedback,32494,Declan,92,Lincoln.Peterson@school.edu,54,0,3,0.024793388429752067,0.18387655925960317,0.021763413354322463,0.028303845041649504,0.0,0.009615699432360734,0.014767646660344129
43
+ 32395,feedback,32475,Declan,92,Chance.Wallace@school.edu,100,9,3,0.024793388429752067,0.18387655925960317,0.021763413354322463,0.028303845041649504,0.0,0.009615699432360734,0.027503370945993914
44
+ 32395,moretime,32415,Declan,92,Silas.Jenkins@school.edu,100,1,3,0.024793388429752067,0.18387655925960317,0.021763413354322463,0.028303845041649504,0.0,0.009615699432360734,
45
+ 32531,feedback,32562,Connor,98,Sebastian.Gonzalez@school.edu,98,0,6,0.049586776859504134,0.1737877568931471,0.07286501377410468,0.005025697065019524,0.06666666666666667,0.020933643346168,0.014767646660344129
46
+ 32531,feedback,32460,Connor,98,Ignatius.Gaines@school.edu,91,0,6,0.049586776859504134,0.1737877568931471,0.07286501377410468,0.005025697065019524,0.06666666666666667,0.020933643346168,0.014632163663460237
47
+ 32531,moretime,32458,Connor,98,Jeremiah.Myers@school.edu,97,0,6,0.049586776859504134,0.1737877568931471,0.07286501377410468,0.005025697065019524,0.06666666666666667,0.020933643346168,0.014632163663460237
48
+ 32531,moretime,32538,Connor,98,Julian.King@school.edu,90,0,6,0.049586776859504134,0.1737877568931471,0.07286501377410468,0.005025697065019524,0.06666666666666667,0.020933643346168,0.014767646660344129
49
+ 32531,moretime,32554,Connor,98,Kieran.Pruitt@school.edu,100,0,6,0.049586776859504134,0.1737877568931471,0.07286501377410468,0.005025697065019524,0.06666666666666667,0.020933643346168,0.08454139005554803
50
+ 32531,moretime,32521,Connor,98,Isaac.Nelson@school.edu,83,0,6,0.049586776859504134,0.1737877568931471,0.07286501377410468,0.005025697065019524,0.06666666666666667,0.020933643346168,0.014767646660344129
51
+ 32531,moretime,32460,Connor,98,Ignatius.Gaines@school.edu,91,0,6,0.049586776859504134,0.1737877568931471,0.07286501377410468,0.005025697065019524,0.06666666666666667,0.020933643346168,0.014632163663460237
52
+ 32440,feedback,32549,Joseph,85,Samuel.Harris@school.edu,100,0,9,0.0743801652892562,0.29050320309061567,0.26755008765339355,0.3264123816648991,0.1111111111111111,0.021460526694019225,0.1275982090438127
53
+ 32440,feedback,32409,Joseph,85,Winston.Bruce@school.edu,100,4,9,0.0743801652892562,0.29050320309061567,0.26755008765339355,0.3264123816648991,0.1111111111111111,0.021460526694019225,
54
+ 32440,feedback,32540,Joseph,85,Beckett.Powell@school.edu,97,4,9,0.0743801652892562,0.29050320309061567,0.26755008765339355,0.3264123816648991,0.1111111111111111,0.021460526694019225,
55
+ 32440,moretime,32430,Joseph,85,Cassian.Jarvis@school.edu,98,0,9,0.0743801652892562,0.29050320309061567,0.26755008765339355,0.3264123816648991,0.1111111111111111,0.021460526694019225,0.014767646660344129
56
+ 32440,moretime,32409,Joseph,85,Winston.Bruce@school.edu,100,4,9,0.0743801652892562,0.29050320309061567,0.26755008765339355,0.3264123816648991,0.1111111111111111,0.021460526694019225,
57
+ 32440,moretime,32420,Joseph,85,Levi.Mitchell@school.edu,62,7,9,0.0743801652892562,0.29050320309061567,0.26755008765339355,0.3264123816648991,0.1111111111111111,0.021460526694019225,
58
+ 32440,moretime,32540,Joseph,85,Beckett.Powell@school.edu,97,4,9,0.0743801652892562,0.29050320309061567,0.26755008765339355,0.3264123816648991,0.1111111111111111,0.021460526694019225,
59
+ 32440,moretime,32433,Joseph,85,Ryan.Hall@school.edu,100,0,9,0.0743801652892562,0.29050320309061567,0.26755008765339355,0.3264123816648991,0.1111111111111111,0.021460526694019225,0.055382868497622625
60
+ 32440,moretime,32549,Joseph,85,Samuel.Harris@school.edu,100,0,9,0.0743801652892562,0.29050320309061567,0.26755008765339355,0.3264123816648991,0.1111111111111111,0.021460526694019225,0.1275982090438127
61
+ 32440,moretime,32410,Joseph,85,River.Ellis@school.edu,100,0,9,0.0743801652892562,0.29050320309061567,0.26755008765339355,0.3264123816648991,0.1111111111111111,0.021460526694019225,0.037165361396495386
62
+ 32440,moretime,32489,Joseph,85,Ronald.Salazar@school.edu,95,4,9,0.0743801652892562,0.29050320309061567,0.26755008765339355,0.3264123816648991,0.1111111111111111,0.021460526694019225,0.03466816343120367
63
+ 32550,feedback,32440,Jackson,77,Joseph.Thompson@school.edu,85,1,5,0.04132231404958678,0.25241666489621617,0.1169834909504331,0.10899886215914505,0.1,0.012338706099424132,
64
+ 32550,moretime,32408,Jackson,77,Jonathan.Evans@school.edu,99,8,5,0.04132231404958678,0.25241666489621617,0.1169834909504331,0.10899886215914505,0.1,0.012338706099424132,0.033164311940900464
65
+ 32511,moretime,32524,Emmanuel,98,Flynn.Stuart@school.edu,89,0,6,0.049586776859504134,0.049586776859504134,0.0020661157024793385,3.697507568407189e-11,0.0,0.027012260100896045,0.0008128979813033464
66
+ 32511,moretime,32536,Emmanuel,98,Brody.Flores@school.edu,98,0,6,0.049586776859504134,0.049586776859504134,0.0020661157024793385,3.697507568407189e-11,0.0,0.027012260100896045,0.0008128979813033464
67
+ 32511,moretime,32450,Emmanuel,98,Kingston.Hamilton@school.edu,100,0,6,0.049586776859504134,0.049586776859504134,0.0020661157024793385,3.697507568407189e-11,0.0,0.027012260100896045,0.0008128979813033464
68
+ 32511,moretime,32482,Emmanuel,98,Andrew.Martinez@school.edu,97,0,6,0.049586776859504134,0.049586776859504134,0.0020661157024793385,3.697507568407189e-11,0.0,0.027012260100896045,0.0008128979813033464
69
+ 32511,moretime,32506,Emmanuel,98,Dominic.Rogers@school.edu,94,0,6,0.049586776859504134,0.049586776859504134,0.0020661157024793385,3.697507568407189e-11,0.0,0.027012260100896045,0.0008128979813033464
70
+ 32511,moretime,32481,Emmanuel,98,Elias.Cooper@school.edu,71,0,6,0.049586776859504134,0.049586776859504134,0.0020661157024793385,3.697507568407189e-11,0.0,0.027012260100896045,0.0008128979813033464
71
+ 32556,feedback,32565,Peter,100,Carter.Baker@school.edu,57,2,5,0.04132231404958678,0.13888271944077524,0.07265840220385675,0.0012498890492330444,0.0,0.017996549352629662,0.021812762498306465
72
+ 32556,feedback,32402,Peter,100,Jaxon.Morris@school.edu,89,2,5,0.04132231404958678,0.13888271944077524,0.07265840220385675,0.0012498890492330444,0.0,0.017996549352629662,0.021812762498306465
73
+ 32556,moretime,32565,Peter,100,Carter.Baker@school.edu,57,2,5,0.04132231404958678,0.13888271944077524,0.07265840220385675,0.0012498890492330444,0.0,0.017996549352629662,0.021812762498306465
74
+ 32556,moretime,32402,Peter,100,Jaxon.Morris@school.edu,89,2,5,0.04132231404958678,0.13888271944077524,0.07265840220385675,0.0012498890492330444,0.0,0.017996549352629662,0.021812762498306465
75
+ 32556,moretime,32520,Peter,100,Owen.Hernandez@school.edu,100,0,5,0.04132231404958678,0.13888271944077524,0.07265840220385675,0.0012498890492330444,0.0,0.017996549352629662,0.014767646660344129
76
+ 32556,moretime,32559,Peter,100,Anthony.Hill@school.edu,56,0,5,0.04132231404958678,0.13888271944077524,0.07265840220385675,0.0012498890492330444,0.0,0.017996549352629662,0.08454139005554803
77
+ 32556,moretime,32398,Peter,100,Titus.Serrano@school.edu,97,0,5,0.04132231404958678,0.13888271944077524,0.07265840220385675,0.0012498890492330444,0.0,0.017996549352629662,0.014767646660344129
78
+ 32549,feedback,32551,Samuel,100,Christopher.Clark@school.edu,98,0,9,0.0743801652892562,0.26466329553808116,0.19522530499803217,0.10329017797033557,0.0,0.025466393739123273,0.02264824097909046
79
+ 32549,feedback,32554,Samuel,100,Kieran.Pruitt@school.edu,100,0,9,0.0743801652892562,0.26466329553808116,0.19522530499803217,0.10329017797033557,0.0,0.025466393739123273,
80
+ 32549,feedback,32464,Samuel,100,Cole.Brooks@school.edu,100,0,9,0.0743801652892562,0.26466329553808116,0.19522530499803217,0.10329017797033557,0.0,0.025466393739123273,0.014767646660344129
81
+ 32549,feedback,32502,Samuel,100,Matthew.Martin@school.edu,98,0,9,0.0743801652892562,0.26466329553808116,0.19522530499803217,0.10329017797033557,0.0,0.025466393739123273,0.014767646660344129
82
+ 32549,moretime,32551,Samuel,100,Christopher.Clark@school.edu,98,0,9,0.0743801652892562,0.26466329553808116,0.19522530499803217,0.10329017797033557,0.0,0.025466393739123273,0.02264824097909046
83
+ 32549,moretime,32440,Samuel,100,Joseph.Thompson@school.edu,85,1,9,0.0743801652892562,0.26466329553808116,0.19522530499803217,0.10329017797033557,0.0,0.025466393739123273,
84
+ 32549,moretime,32431,Samuel,100,Tate.Peck@school.edu,100,0,9,0.0743801652892562,0.26466329553808116,0.19522530499803217,0.10329017797033557,0.0,0.025466393739123273,0.014767646660344129
85
+ 32549,moretime,32425,Samuel,100,Atticus.Osborne@school.edu,58,1,9,0.0743801652892562,0.26466329553808116,0.19522530499803217,0.10329017797033557,0.0,0.025466393739123273,0.04943322946303574
86
+ 32549,moretime,32554,Samuel,100,Kieran.Pruitt@school.edu,100,0,9,0.0743801652892562,0.26466329553808116,0.19522530499803217,0.10329017797033557,0.0,0.025466393739123273,
87
+ 32549,moretime,32529,Samuel,100,Bentley.Price@school.edu,93,4,9,0.0743801652892562,0.26466329553808116,0.19522530499803217,0.10329017797033557,0.0,0.025466393739123273,0.02264824097909046
88
+ 32549,moretime,32487,Samuel,100,Iker.Fisher@school.edu,100,2,9,0.0743801652892562,0.26466329553808116,0.19522530499803217,0.10329017797033557,0.0,0.025466393739123273,
89
+ 32549,moretime,32464,Samuel,100,Cole.Brooks@school.edu,100,0,9,0.0743801652892562,0.26466329553808116,0.19522530499803217,0.10329017797033557,0.0,0.025466393739123273,0.014767646660344129
90
+ 32400,feedback,32478,Roman,58,Adam.Rivera@school.edu,91,2,5,0.04132231404958678,0.21771636950028406,0.03335531624787822,0.04222921158171208,0.1,0.013436696175590174,0.015349265586360832
91
+ 32400,feedback,32514,Roman,58,Abel.Mendoza@school.edu,100,1,5,0.04132231404958678,0.21771636950028406,0.03335531624787822,0.04222921158171208,0.1,0.013436696175590174,0.014767646660344129
92
+ 32400,feedback,32477,Roman,58,Walter.Kim@school.edu,100,0,5,0.04132231404958678,0.21771636950028406,0.03335531624787822,0.04222921158171208,0.1,0.013436696175590174,
93
+ 32400,feedback,32550,Roman,58,Jackson.Rodriguez@school.edu,77,0,5,0.04132231404958678,0.21771636950028406,0.03335531624787822,0.04222921158171208,0.1,0.013436696175590174,
94
+ 32400,feedback,32401,Roman,58,Isaac.Walker@school.edu,98,0,5,0.04132231404958678,0.21771636950028406,0.03335531624787822,0.04222921158171208,0.1,0.013436696175590174,0.006264798291623926
95
+ 32505,moretime,32558,Aaron,99,Daniel.White@school.edu,57,2,1,0.008264462809917356,0.008264462809917356,0.0,1.2557829509382407e-20,0.0,0.00819672131147541,0.00013548299688389108
96
+ 32417,moretime,32396,Leon,65,Christian.Campbell@school.edu,59,0,3,0.024793388429752067,0.16871148220726478,0.017858618654073195,0.004781539238951999,0.0,0.009875319431517099,
97
+ 32417,moretime,32508,Leon,65,Tristan.James@school.edu,89,0,3,0.024793388429752067,0.16871148220726478,0.017858618654073195,0.004781539238951999,0.0,0.009875319431517099,0.015011032186889123
98
+ 32417,moretime,32507,Leon,65,Aiden.Brown@school.edu,74,0,3,0.024793388429752067,0.16871148220726478,0.017858618654073195,0.004781539238951999,0.0,0.009875319431517099,0.014767646660344129
99
+ 32478,feedback,32459,Adam,91,Zander.Buchanan@school.edu,98,9,7,0.05785123966942149,0.21116146805296365,0.059062844104166436,0.03677987733762497,0.047619047619047616,0.018194056342620696,0.03303920033360488
100
+ 32478,moretime,32426,Adam,91,Emmanuel.Chambers@school.edu,92,0,7,0.05785123966942149,0.21116146805296365,0.059062844104166436,0.03677987733762497,0.047619047619047616,0.018194056342620696,0.016260760194509016
101
+ 32478,moretime,32396,Adam,91,Christian.Campbell@school.edu,59,0,7,0.05785123966942149,0.21116146805296365,0.059062844104166436,0.03677987733762497,0.047619047619047616,0.018194056342620696,
102
+ 32478,moretime,32413,Adam,91,Nikolai.Weeks@school.edu,100,9,7,0.05785123966942149,0.21116146805296365,0.059062844104166436,0.03677987733762497,0.047619047619047616,0.018194056342620696,0.00965090547802917
103
+ 32478,moretime,32467,Adam,91,Malcolm.Knox@school.edu,80,8,7,0.05785123966942149,0.21116146805296365,0.059062844104166436,0.03677987733762497,0.047619047619047616,0.018194056342620696,0.014767646660344129
104
+ 32478,moretime,32408,Adam,91,Jonathan.Evans@school.edu,99,8,7,0.05785123966942149,0.21116146805296365,0.059062844104166436,0.03677987733762497,0.047619047619047616,0.018194056342620696,
105
+ 32474,feedback,32408,Cameron,89,Jonathan.Evans@school.edu,99,8,2,0.01652892561983471,0.17348071138626872,0.0,0.009208550111924908,1.0,0.005674498006390904,
106
+ 32474,moretime,32413,Cameron,89,Nikolai.Weeks@school.edu,100,9,2,0.01652892561983471,0.17348071138626872,0.0,0.009208550111924908,1.0,0.005674498006390904,
107
+ 32493,feedback,32448,Luke,94,Zayden.Coleman@school.edu,88,9,1,0.008264462809917356,0.17788058450113786,0.0,0.004120057758028791,0.0,0.003929178185080363,
108
+ 32413,feedback,32408,Nikolai,100,Jonathan.Evans@school.edu,99,8,3,0.024793388429752067,0.18456782451997764,0.002153351698806244,0.0151424776234368,0.6666666666666666,0.008022492082391496,
109
+ 32413,moretime,32474,Nikolai,100,Cameron.Cox@school.edu,89,1,3,0.024793388429752067,0.18456782451997764,0.002153351698806244,0.0151424776234368,0.6666666666666666,0.008022492082391496,0.0022535338481687217
110
+ 32413,moretime,32478,Nikolai,100,Adam.Rivera@school.edu,91,2,3,0.024793388429752067,0.18456782451997764,0.002153351698806244,0.0151424776234368,0.6666666666666666,0.008022492082391496,
111
+ 32459,feedback,32478,Zander,98,Adam.Rivera@school.edu,91,2,6,0.049586776859504134,0.2371741126681838,0.10748923711733616,0.05149149701806678,0.0,0.016231664531464005,
112
+ 32459,feedback,32553,Zander,98,Wyatt.Green@school.edu,100,6,6,0.049586776859504134,0.2371741126681838,0.10748923711733616,0.05149149701806678,0.0,0.016231664531464005,
113
+ 32459,feedback,32477,Zander,98,Walter.Kim@school.edu,100,0,6,0.049586776859504134,0.2371741126681838,0.10748923711733616,0.05149149701806678,0.0,0.016231664531464005,
114
+ 32459,feedback,32401,Zander,98,Isaac.Walker@school.edu,98,0,6,0.049586776859504134,0.2371741126681838,0.10748923711733616,0.05149149701806678,0.0,0.016231664531464005,
115
+ 32459,moretime,32401,Zander,98,Isaac.Walker@school.edu,98,0,6,0.049586776859504134,0.2371741126681838,0.10748923711733616,0.05149149701806678,0.0,0.016231664531464005,
116
+ 32459,moretime,32477,Zander,98,Walter.Kim@school.edu,100,0,6,0.049586776859504134,0.2371741126681838,0.10748923711733616,0.05149149701806678,0.0,0.016231664531464005,
117
+ 32459,moretime,32478,Zander,98,Adam.Rivera@school.edu,91,2,6,0.049586776859504134,0.2371741126681838,0.10748923711733616,0.05149149701806678,0.0,0.016231664531464005,
118
+ 32459,moretime,32411,Zander,98,Wesley.Long@school.edu,100,2,6,0.049586776859504134,0.2371741126681838,0.10748923711733616,0.05149149701806678,0.0,0.016231664531464005,0.014767646660344129
119
+ 32534,feedback,32540,Liam,98,Beckett.Powell@school.edu,97,4,4,0.03305785123966942,0.23660260878223638,0.04620289375454663,0.1115996635076883,0.0,0.011528557913159668,
120
+ 32534,moretime,32418,Liam,98,Cooper.Kelly@school.edu,96,0,4,0.03305785123966942,0.23660260878223638,0.04620289375454663,0.1115996635076883,0.0,0.011528557913159668,0.014767646660344129
121
+ 32534,moretime,32426,Liam,98,Emmanuel.Chambers@school.edu,92,0,4,0.03305785123966942,0.23660260878223638,0.04620289375454663,0.1115996635076883,0.0,0.011528557913159668,
122
+ 32534,moretime,32535,Liam,98,James.Anderson@school.edu,92,0,4,0.03305785123966942,0.23660260878223638,0.04620289375454663,0.1115996635076883,0.0,0.011528557913159668,
123
+ 32527,moretime,32420,Bruce,64,Levi.Mitchell@school.edu,62,7,2,0.01652892561983471,0.2041373859555678,0.0017188114915387643,0.09094566485496795,0.0,0.00541492684360774,
124
+ 32527,moretime,32410,Bruce,64,River.Ellis@school.edu,100,0,2,0.01652892561983471,0.2041373859555678,0.0017188114915387643,0.09094566485496795,0.0,0.00541492684360774,
125
+ 32532,moretime,32565,Caleb,98,Carter.Baker@school.edu,57,2,2,0.01652892561983471,0.10684448601156485,6.887052341597796e-05,9.986205894622728e-05,0.0,0.007631657636642795,
126
+ 32532,moretime,32402,Caleb,98,Jaxon.Morris@school.edu,89,2,2,0.01652892561983471,0.10684448601156485,6.887052341597796e-05,9.986205894622728e-05,0.0,0.007631657636642795,
127
+ 32399,feedback,32499,Damon,54,Raphael.Barron@school.edu,89,2,8,0.06611570247933884,0.23948800645031246,0.101345072130196,0.10263533346893437,0.0,0.021410879448672634,0.014767646660344129
128
+ 32399,feedback,32468,Damon,54,Easton.Bell@school.edu,100,3,8,0.06611570247933884,0.23948800645031246,0.101345072130196,0.10263533346893437,0.0,0.021410879448672634,
129
+ 32399,moretime,32551,Damon,54,Christopher.Clark@school.edu,98,0,8,0.06611570247933884,0.23948800645031246,0.101345072130196,0.10263533346893437,0.0,0.021410879448672634,
130
+ 32399,moretime,32432,Damon,54,William.Thomas@school.edu,97,7,8,0.06611570247933884,0.23948800645031246,0.101345072130196,0.10263533346893437,0.0,0.021410879448672634,
131
+ 32399,moretime,32529,Damon,54,Bentley.Price@school.edu,93,4,8,0.06611570247933884,0.23948800645031246,0.101345072130196,0.10263533346893437,0.0,0.021410879448672634,
132
+ 32399,moretime,32492,Damon,54,Marcellus.Tovar@school.edu,70,0,8,0.06611570247933884,0.23948800645031246,0.101345072130196,0.10263533346893437,0.0,0.021410879448672634,0.014767646660344129
133
+ 32399,moretime,32443,Damon,54,Rory.Briggs@school.edu,74,9,8,0.06611570247933884,0.23948800645031246,0.101345072130196,0.10263533346893437,0.0,0.021410879448672634,
134
+ 32399,moretime,32523,Damon,54,Elliot.Hayes@school.edu,100,8,8,0.06611570247933884,0.23948800645031246,0.101345072130196,0.10263533346893437,0.0,0.021410879448672634,
135
+ 32409,feedback,32420,Winston,100,Levi.Mitchell@school.edu,62,7,5,0.04132231404958678,0.25306722331089715,0.019880624426078967,0.28646280223950765,0.5,0.011597814476092691,
136
+ 32409,moretime,32440,Winston,100,Joseph.Thompson@school.edu,85,1,5,0.04132231404958678,0.25306722331089715,0.019880624426078967,0.28646280223950765,0.5,0.011597814476092691,0.013375182525704141
137
+ 32409,moretime,32540,Winston,100,Beckett.Powell@school.edu,97,4,5,0.04132231404958678,0.25306722331089715,0.019880624426078967,0.28646280223950765,0.5,0.011597814476092691,
138
+ 32409,moretime,32462,Winston,100,Noah.Johnson@school.edu,93,0,5,0.04132231404958678,0.25306722331089715,0.019880624426078967,0.28646280223950765,0.5,0.011597814476092691,0.018873534149242047
139
+ 32409,moretime,32513,Winston,100,Tucker.Castro@school.edu,99,2,5,0.04132231404958678,0.25306722331089715,0.019880624426078967,0.28646280223950765,0.5,0.011597814476092691,
140
+ 32475,moretime,32420,Chance,100,Levi.Mitchell@school.edu,62,7,4,0.03305785123966942,0.209807868898778,0.03980749048930867,0.13112766393849112,0.16666666666666666,0.01089986360544276,
141
+ 32475,moretime,32479,Chance,100,Mason.Wilson@school.edu,91,4,4,0.03305785123966942,0.209807868898778,0.03980749048930867,0.13112766393849112,0.16666666666666666,0.01089986360544276,0.014767646660344129
142
+ 32462,feedback,32513,Noah,93,Tucker.Castro@school.edu,99,2,5,0.04132231404958678,0.22015713597450248,0.03282937601119419,0.11840212950305924,0.1,0.013366527018555636,
143
+ 32462,feedback,32550,Noah,93,Jackson.Rodriguez@school.edu,77,0,5,0.04132231404958678,0.22015713597450248,0.03282937601119419,0.11840212950305924,0.1,0.013366527018555636,
144
+ 32462,feedback,32456,Noah,93,Jorge.Fox@school.edu,59,0,5,0.04132231404958678,0.22015713597450248,0.03282937601119419,0.11840212950305924,0.1,0.013366527018555636,0.014767646660344129
145
+ 32462,moretime,32513,Noah,93,Tucker.Castro@school.edu,99,2,5,0.04132231404958678,0.22015713597450248,0.03282937601119419,0.11840212950305924,0.1,0.013366527018555636,
146
+ 32462,moretime,32456,Noah,93,Jorge.Fox@school.edu,59,0,5,0.04132231404958678,0.22015713597450248,0.03282937601119419,0.11840212950305924,0.1,0.013366527018555636,0.014767646660344129
147
+ 32462,moretime,32517,Noah,93,Tobias.Tanner@school.edu,98,1,5,0.04132231404958678,0.22015713597450248,0.03282937601119419,0.11840212950305924,0.1,0.013366527018555636,0.014767646660344129
148
+ 32462,moretime,32409,Noah,93,Winston.Bruce@school.edu,100,4,5,0.04132231404958678,0.22015713597450248,0.03282937601119419,0.11840212950305924,0.1,0.013366527018555636,
149
+ 32498,feedback,32433,Simon,98,Ryan.Hall@school.edu,100,0,7,0.05785123966942149,0.21116146805296365,0.06964843237570512,0.03218060670460858,0.047619047619047616,0.0220689493006012,0.04556486732343665
150
+ 32498,moretime,32445,Simon,98,Elijah.Moore@school.edu,58,2,7,0.05785123966942149,0.21116146805296365,0.06964843237570512,0.03218060670460858,0.047619047619047616,0.0220689493006012,
151
+ 32498,moretime,32555,Simon,98,Gabriel.Gray@school.edu,98,0,7,0.05785123966942149,0.21116146805296365,0.06964843237570512,0.03218060670460858,0.047619047619047616,0.0220689493006012,0.014767646660344129
152
+ 32498,moretime,32488,Simon,98,Tyson.Bush@school.edu,98,0,7,0.05785123966942149,0.21116146805296365,0.06964843237570512,0.03218060670460858,0.047619047619047616,0.0220689493006012,0.014767646660344129
153
+ 32498,moretime,32543,Simon,98,Oscar.Reynolds@school.edu,97,0,7,0.05785123966942149,0.21116146805296365,0.06964843237570512,0.03218060670460858,0.047619047619047616,0.0220689493006012,0.014767646660344129
154
+ 32498,moretime,32433,Simon,98,Ryan.Hall@school.edu,100,0,7,0.05785123966942149,0.21116146805296365,0.06964843237570512,0.03218060670460858,0.047619047619047616,0.0220689493006012,0.04556486732343665
155
+ 32498,moretime,32533,Simon,98,David.Garcia@school.edu,98,0,7,0.05785123966942149,0.21116146805296365,0.06964843237570512,0.03218060670460858,0.047619047619047616,0.0220689493006012,0.014767646660344129
156
+ 32458,feedback,32460,Jeremiah,97,Ignatius.Gaines@school.edu,91,0,2,0.01652892561983471,0.14611619441164897,0.0,0.001196942687022156,1.0,0.007295877344110306,
157
+ 32458,moretime,32531,Jeremiah,97,Connor.Young@school.edu,98,0,2,0.01652892561983471,0.14611619441164897,0.0,0.001196942687022156,1.0,0.007295877344110306,
158
+ 32404,moretime,32425,Greyson,95,Atticus.Osborne@school.edu,58,1,2,0.01652892561983471,0.1991685246341341,0.02247458349731077,0.010128446186403708,0.0,0.006189954436353119,0.03219059877033052
159
+ 32401,feedback,32508,Isaac,98,Tristan.James@school.edu,89,0,7,0.05785123966942149,0.2196646144175125,0.06830594910140363,0.046907756532881456,0.047619047619047616,0.019384549380985848,0.025206127702401916
160
+ 32401,feedback,32550,Isaac,98,Jackson.Rodriguez@school.edu,77,0,7,0.05785123966942149,0.2196646144175125,0.06830594910140363,0.046907756532881456,0.047619047619047616,0.019384549380985848,
161
+ 32401,moretime,32405,Isaac,98,Patrick.Olsen@school.edu,97,4,7,0.05785123966942149,0.2196646144175125,0.06830594910140363,0.046907756532881456,0.047619047619047616,0.019384549380985848,0.013980071096315506
162
+ 32401,moretime,32485,Isaac,98,Josiah.Perez@school.edu,100,2,7,0.05785123966942149,0.2196646144175125,0.06830594910140363,0.046907756532881456,0.047619047619047616,0.019384549380985848,0.014767646660344129
163
+ 32401,moretime,32544,Isaac,98,Jason.Bailey@school.edu,90,2,7,0.05785123966942149,0.2196646144175125,0.06830594910140363,0.046907756532881456,0.047619047619047616,0.019384549380985848,0.014767646660344129
164
+ 32448,feedback,32516,Zayden,88,Axel.Griffin@school.edu,100,8,8,0.06611570247933884,0.22114883478519842,0.10787403253312343,0.021416356569627298,0.0,0.02540720550307239,0.014767646660344129
165
+ 32448,feedback,32446,Zayden,88,Zane.Pena@school.edu,59,3,8,0.06611570247933884,0.22114883478519842,0.10787403253312343,0.021416356569627298,0.0,0.02540720550307239,0.014767646660344129
166
+ 32448,feedback,32473,Zayden,88,Cole.Ward@school.edu,100,0,8,0.06611570247933884,0.22114883478519842,0.10787403253312343,0.021416356569627298,0.0,0.02540720550307239,0.014767646660344129
167
+ 32448,moretime,32405,Zayden,88,Patrick.Olsen@school.edu,97,4,8,0.06611570247933884,0.22114883478519842,0.10787403253312343,0.021416356569627298,0.0,0.02540720550307239,0.012887174921452124
168
+ 32448,moretime,32425,Zayden,88,Atticus.Osborne@school.edu,58,1,8,0.06611570247933884,0.22114883478519842,0.10787403253312343,0.021416356569627298,0.0,0.02540720550307239,0.06157686079444651
169
+ 32448,moretime,32459,Zayden,88,Zander.Buchanan@school.edu,98,9,8,0.06611570247933884,0.22114883478519842,0.10787403253312343,0.021416356569627298,0.0,0.02540720550307239,0.06417990851671931
170
+ 32522,feedback,32422,Dennis,98,Jack.Lopez@school.edu,100,5,9,0.0743801652892562,0.22315927873779115,0.10851616817525908,0.04684873260113099,0.05555555555555555,0.027577225922479243,0.014767646660344129
171
+ 32522,feedback,32421,Dennis,98,Sterling.Hickman@school.edu,98,5,9,0.0743801652892562,0.22315927873779115,0.10851616817525908,0.04684873260113099,0.05555555555555555,0.027577225922479243,
172
+ 32522,feedback,32432,Dennis,98,William.Thomas@school.edu,97,7,9,0.0743801652892562,0.22315927873779115,0.10851616817525908,0.04684873260113099,0.05555555555555555,0.027577225922479243,
173
+ 32522,moretime,32498,Dennis,98,Simon.Cline@school.edu,98,0,9,0.0743801652892562,0.22315927873779115,0.10851616817525908,0.04684873260113099,0.05555555555555555,0.027577225922479243,
174
+ 32522,moretime,32465,Dennis,98,Nolan.Morgan@school.edu,92,0,9,0.0743801652892562,0.22315927873779115,0.10851616817525908,0.04684873260113099,0.05555555555555555,0.027577225922479243,0.014767646660344129
175
+ 32522,moretime,32445,Dennis,98,Elijah.Moore@school.edu,58,2,9,0.0743801652892562,0.22315927873779115,0.10851616817525908,0.04684873260113099,0.05555555555555555,0.027577225922479243,
176
+ 32522,moretime,32436,Dennis,98,King.Ingram@school.edu,65,2,9,0.0743801652892562,0.22315927873779115,0.10851616817525908,0.04684873260113099,0.05555555555555555,0.027577225922479243,0.014767646660344129
177
+ 32522,moretime,32432,Dennis,98,William.Thomas@school.edu,97,7,9,0.0743801652892562,0.22315927873779115,0.10851616817525908,0.04684873260113099,0.05555555555555555,0.027577225922479243,
178
+ 32522,moretime,32504,Dennis,98,Tucker.Campos@school.edu,100,9,9,0.0743801652892562,0.22315927873779115,0.10851616817525908,0.04684873260113099,0.05555555555555555,0.027577225922479243,0.014767646660344129
179
+ 32522,moretime,32545,Dennis,98,Axel.Bennett@school.edu,97,4,9,0.0743801652892562,0.22315927873779115,0.10851616817525908,0.04684873260113099,0.05555555555555555,0.027577225922479243,0.014767646660344129
180
+ 32522,moretime,32421,Dennis,98,Sterling.Hickman@school.edu,98,5,9,0.0743801652892562,0.22315927873779115,0.10851616817525908,0.04684873260113099,0.05555555555555555,0.027577225922479243,
181
+ 32522,moretime,32422,Dennis,98,Jack.Lopez@school.edu,100,5,9,0.0743801652892562,0.22315927873779115,0.10851616817525908,0.04684873260113099,0.05555555555555555,0.027577225922479243,0.014767646660344129
182
+ 32509,feedback,32490,Ezekiel,100,Caden.Novak@school.edu,100,2,4,0.03305785123966942,0.19140366987256938,0.12603305785123967,0.027337198981349686,0.0,0.013856643431521242,
183
+ 32509,feedback,32510,Ezekiel,100,Damian.Harrison@school.edu,100,0,4,0.03305785123966942,0.19140366987256938,0.12603305785123967,0.027337198981349686,0.0,0.013856643431521242,0.014767646660344129
184
+ 32509,moretime,32542,Ezekiel,100,Lucian.Wu@school.edu,98,0,4,0.03305785123966942,0.19140366987256938,0.12603305785123967,0.027337198981349686,0.0,0.013856643431521242,0.014767646660344129
185
+ 32509,moretime,32559,Ezekiel,100,Anthony.Hill@school.edu,56,0,4,0.03305785123966942,0.19140366987256938,0.12603305785123967,0.027337198981349686,0.0,0.013856643431521242,
186
+ 32397,feedback,32420,Carlos,86,Levi.Mitchell@school.edu,62,7,5,0.04132231404958678,0.23546782408783715,0.020445203709666532,0.2610107560118551,0.5,0.011575911710903521,
187
+ 32397,feedback,32540,Carlos,86,Beckett.Powell@school.edu,97,4,5,0.04132231404958678,0.23546782408783715,0.020445203709666532,0.2610107560118551,0.5,0.011575911710903521,
188
+ 32397,feedback,32475,Carlos,86,Chance.Wallace@school.edu,100,9,5,0.04132231404958678,0.23546782408783715,0.020445203709666532,0.2610107560118551,0.5,0.011575911710903521,0.016935374610486387
189
+ 32397,moretime,32523,Carlos,86,Elliot.Hayes@school.edu,100,8,5,0.04132231404958678,0.23546782408783715,0.020445203709666532,0.2610107560118551,0.5,0.011575911710903521,
190
+ 32397,moretime,32420,Carlos,86,Levi.Mitchell@school.edu,62,7,5,0.04132231404958678,0.23546782408783715,0.020445203709666532,0.2610107560118551,0.5,0.011575911710903521,
191
+ 32397,moretime,32540,Carlos,86,Beckett.Powell@school.edu,97,4,5,0.04132231404958678,0.23546782408783715,0.020445203709666532,0.2610107560118551,0.5,0.011575911710903521,
192
+ 32397,moretime,32475,Carlos,86,Chance.Wallace@school.edu,100,9,5,0.04132231404958678,0.23546782408783715,0.020445203709666532,0.2610107560118551,0.5,0.011575911710903521,0.016935374610486387
193
+ 32455,feedback,32546,Lawrence,73,Gabriel.Lee@school.edu,100,1,4,0.03305785123966942,0.18183348637894092,0.02961432506887052,0.04083040958841559,0.16666666666666666,0.012260018924084489,0.014767646660344129
194
+ 32455,feedback,32410,Lawrence,73,River.Ellis@school.edu,100,0,4,0.03305785123966942,0.18183348637894092,0.02961432506887052,0.04083040958841559,0.16666666666666666,0.012260018924084489,
195
+ 32455,moretime,32480,Lawrence,73,Donovan.Steele@school.edu,98,1,4,0.03305785123966942,0.18183348637894092,0.02961432506887052,0.04083040958841559,0.16666666666666666,0.012260018924084489,0.014767646660344129
196
+ 32455,moretime,32546,Lawrence,73,Gabriel.Lee@school.edu,100,1,4,0.03305785123966942,0.18183348637894092,0.02961432506887052,0.04083040958841559,0.16666666666666666,0.012260018924084489,0.014767646660344129
197
+ 32455,moretime,32410,Lawrence,73,River.Ellis@school.edu,100,0,4,0.03305785123966942,0.18183348637894092,0.02961432506887052,0.04083040958841559,0.16666666666666666,0.012260018924084489,
198
+ 32455,moretime,32489,Lawrence,73,Ronald.Salazar@school.edu,95,4,4,0.03305785123966942,0.18183348637894092,0.02961432506887052,0.04083040958841559,0.16666666666666666,0.012260018924084489,
199
+ 32489,feedback,32410,Ronald,95,River.Ellis@school.edu,100,0,3,0.024793388429752067,0.22417827087814632,0.020920897284533647,0.09095159008701885,0.6666666666666666,0.008082852370534535,
200
+ 32476,feedback,32490,Bennett,100,Caden.Novak@school.edu,100,2,3,0.024793388429752067,0.22729185797367615,0.014876033057851238,0.12560275725159675,0.3333333333333333,0.008854767731186146,0.002980625931445604
201
+ 32476,feedback,32457,Bennett,100,Lorenzo.Woods@school.edu,98,4,3,0.024793388429752067,0.22729185797367615,0.014876033057851238,0.12560275725159675,0.3333333333333333,0.008854767731186146,0.014767646660344129
requirements.txt ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ altair==4.2.2
2
+ altgraph==0.17.4
3
+ annotated-types==0.6.0
4
+ anyio==4.3.0
5
+ appdirs==1.4.4
6
+ arrow==1.3.0
7
+ astor==0.8.1
8
+ asttokens==2.4.1
9
+ attrs==23.2.0
10
+ backoff==2.2.1
11
+ blinker==1.8.2
12
+ cachetools==5.3.3
13
+ click==8.1.7
14
+ comm==0.2.2
15
+ dateutils==0.6.12
16
+ decorator==5.1.1
17
+ dnspython==2.6.1
18
+ duckdb==0.10.1
19
+ email_validator==2.1.1
20
+ entrypoints==0.4
21
+ et-xmlfile==1.1.0
22
+ executing==2.0.1
23
+ fastapi==0.111.0
24
+ fastapi-cli==0.0.3
25
+ gitdb==4.0.11
26
+ GitPython==3.1.43
27
+ gw_dsl_parser==0.1.48a3
28
+ h11==0.14.0
29
+ httpcore==1.0.5
30
+ httptools==0.6.1
31
+ httpx==0.27.0
32
+ ipython==8.24.0
33
+ ipywidgets==8.1.2
34
+ isodate==0.6.1
35
+ jedi==0.19.1
36
+ Jinja2==3.1.4
37
+ jsonpointer==2.1
38
+ jsonschema==4.22.0
39
+ jsonschema-specifications==2023.12.1
40
+ jupyterlab_widgets==3.0.10
41
+ kanaries_track==0.0.4
42
+ kuzu==0.4.1
43
+ macholib==1.16.3
44
+ markdown-it-py==3.0.0
45
+ MarkupSafe==2.1.5
46
+ matplotlib-inline==0.1.7
47
+ mdurl==0.1.2
48
+ modulegraph==0.19.6
49
+ monotonic==1.6
50
+ networkx==3.3
51
+ numpy==1.26.4
52
+ openpyxl==3.1.2
53
+ orjson==3.10.3
54
+ pandas==2.2.2
55
+ parso==0.8.4
56
+ pexpect==4.9.0
57
+ pillow==10.3.0
58
+ prompt-toolkit==3.0.43
59
+ protobuf==4.25.3
60
+ psutil==5.9.8
61
+ ptyprocess==0.7.0
62
+ pure-eval==0.2.2
63
+ py2app==0.28.7
64
+ pyarrow==16.0.0
65
+ pydantic==2.7.1
66
+ pydantic_core==2.18.2
67
+ pydeck==0.9.1
68
+ Pygments==2.18.0
69
+ pygwalker==0.4.8.3
70
+ pyparsing==3.1.2
71
+ python-dateutil==2.9.0.post0
72
+ python-decouple==3.8
73
+ python-dotenv==1.0.1
74
+ python-multipart==0.0.9
75
+ pytz==2024.1
76
+ PyYAML==6.0.1
77
+ rdflib==7.0.0
78
+ referencing==0.35.1
79
+ rich==13.7.1
80
+ rpds-py==0.18.1
81
+ scipy==1.13.0
82
+ segment-analytics-python==2.2.3
83
+ shellingham==1.5.4
84
+ six==1.16.0
85
+ smmap==5.0.1
86
+ sniffio==1.3.1
87
+ SQLAlchemy==2.0.30
88
+ sqlglot==23.15.8
89
+ stack-data==0.6.3
90
+ starlette==0.37.2
91
+ streamlit==1.34.0
92
+ streamlit-aggrid==1.0.5
93
+ streamlit-agraph==0.0.45
94
+ streamlit-antd-components==0.3.2
95
+ streamlit-monaco==0.1.3
96
+ tenacity==8.3.0
97
+ toml==0.10.2
98
+ toolz==0.12.1
99
+ tornado==6.4
100
+ traitlets==5.14.3
101
+ typer==0.12.3
102
+ types-python-dateutil==2.9.0.20240316
103
+ typing_extensions==4.11.0
104
+ tzdata==2024.1
105
+ ujson==5.9.0
106
+ uvicorn==0.29.0
107
+ uvloop==0.19.0
108
+ wasmtime==12.0.0
109
+ watchfiles==0.21.0
110
+ wcwidth==0.2.13
111
+ websockets==12.0
112
+ wheel==0.41.2
113
+ widgetsnbextension==4.0.10
result_config.json ADDED
File without changes
setup.py ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from setuptools import setup
2
+
3
+ APP = ['app.py']
4
+ DATA_FILES = []
5
+ OPTIONS = {
6
+ 'argv_emulation': True,
7
+ 'packages': [
8
+ 'streamlit',
9
+ 'numpy',
10
+ 'pandas',
11
+ 'networkx',
12
+ 'openpyxl',
13
+ 'uuid',
14
+ 'streamlit_antd_components',
15
+ 'st_aggrid',
16
+ 'pygwalker',
17
+ 'streamlit_monaco',
18
+ 'streamlit_agraph',
19
+ ],
20
+ }
21
+
22
+ setup(
23
+ app=APP,
24
+ data_files=DATA_FILES,
25
+ options={'py2app': OPTIONS},
26
+ setup_requires=['py2app'],
27
+ )
socialnetworkanalysis/__init__.py ADDED
File without changes
socialnetworkanalysis/__pycache__/__init__.cpython-312.pyc ADDED
Binary file (233 Bytes). View file
 
socialnetworkanalysis/__pycache__/sna.cpython-312.pyc ADDED
Binary file (20 kB). View file
 
socialnetworkanalysis/sna.py ADDED
@@ -0,0 +1,417 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import kuzu
2
+ import hashlib
3
+ import os
4
+ import logging
5
+ import openpyxl
6
+ import pandas as pd
7
+ import uuid
8
+ import json
9
+ import networkx as nx
10
+ import time
11
+ import numpy as np
12
+
13
+
14
+ class SocialNetworkAnalysis:
15
+ data_dir: str
16
+ k_client: kuzu.Connection
17
+
18
+ def __init__(self,name:str):
19
+ session_id = hashlib.sha256(name.encode("utf-8")).hexdigest()
20
+ db = kuzu.Database(f"./db/{session_id}_db")
21
+ self.k_client = kuzu.Connection(db)
22
+ if not os.path.exists(f"./data/{session_id}"):
23
+ os.makedirs(f"./data/{session_id}")
24
+ self.data_dir = f"./data/{session_id}"
25
+
26
+ def get_files(self):
27
+ all_files = []
28
+ logging.info("Getting files")
29
+ logging.info(f"Data dir: {self.data_dir}")
30
+ for root, dirs, files in os.walk(self.data_dir):
31
+ for file in files:
32
+ all_files.append(os.path.join(root, file))
33
+
34
+ return all_files
35
+
36
+ def add_file(self, file):
37
+ logging.info(f"Adding file: {file}")
38
+ with open(f"{self.data_dir}/{file.name}","wb") as f:
39
+ f.write(file.getvalue())
40
+
41
+ def generate_data_dictionary(self, file_path):
42
+ try:
43
+ workbook = openpyxl.load_workbook(file_path,data_only=True)
44
+ except Exception as e:
45
+ return {
46
+ 'status': False,
47
+ 'message': str(e)
48
+ }
49
+
50
+ helper = {}
51
+
52
+ try:
53
+ for sheet_name in workbook.sheetnames:
54
+ helper[sheet_name] = {}
55
+ sheet = workbook[sheet_name]
56
+ if "net_" in sheet_name:
57
+ helper[sheet_name]["object_name"] = sheet_name.replace("net_","").split("_")[1].lower().replace(" ","_").replace("-","_").replace(".","_").replace("(","_").replace(")","_")
58
+ helper[sheet_name]["isTable"] = False
59
+ helper[sheet_name]["isRelationship"] = True
60
+ helper[sheet_name]["source"] = "?"
61
+ helper[sheet_name]["target"] = "?"
62
+ else:
63
+
64
+ is_header_row = True
65
+ for row in sheet.iter_rows(values_only=True):
66
+ if is_header_row:
67
+ helper[sheet_name]["object_name"] = sheet_name.lower().replace(" ","_").replace("-","_").replace(".","_").replace("(","_").replace(")","_")
68
+ helper[sheet_name]["primary_key"] = "?"
69
+ helper[sheet_name]["columns"] = {}
70
+ helper[sheet_name]["isTable"] = True
71
+ helper[sheet_name]["isRelationship"] = False
72
+ header_row = row
73
+ is_header_row = False
74
+ for column in header_row:
75
+ if column is not None:
76
+ helper[sheet_name]["columns"][column.lower().replace(" ","_").replace("-","_").replace(".","_").replace("(","_").replace(")","_")] = "STRING"
77
+ break
78
+
79
+ except Exception as e:
80
+ return {
81
+ 'status': False,
82
+ 'message': str(e)
83
+ }
84
+
85
+ return helper
86
+
87
+ def clean_data(self, df):
88
+ # reads the data provided in pandas dataframe and cleans missing values.
89
+ df.replace('N/A', None, inplace=True)
90
+ df.replace('NA', None, inplace=True)
91
+ non_none_columns = [col for col in df.columns if col is not None]
92
+ # Create a new DataFrame containing only columns with non-None names
93
+ df = df[non_none_columns]
94
+ return df
95
+
96
+ def load_data(self, file_path,helper):
97
+
98
+ if not os.path.exists(self.data_dir+"/helpers.json"):
99
+ with open(self.data_dir+"/helpers.json","w") as f:
100
+ f.write(json.dumps({}))
101
+
102
+ helpers = {}
103
+
104
+ with open(self.data_dir+"/helpers.json","r") as f:
105
+ helpers = json.load(f)
106
+
107
+ helpers[file_path] = helper
108
+ with open(self.data_dir+"/helpers.json","w") as f:
109
+ f.write(json.dumps(helpers))
110
+
111
+
112
+ try:
113
+ workbook = openpyxl.load_workbook(file_path,data_only=True)
114
+ except Exception as e:
115
+ return {
116
+ 'status': False,
117
+ 'message': str(e)
118
+ }
119
+
120
+ all_data = {}
121
+
122
+ try:
123
+ for sheet_name in workbook.sheetnames:
124
+ sheet = workbook[sheet_name]
125
+ sheet_data = []
126
+
127
+ is_header_row = True
128
+ for row in sheet.iter_rows(values_only=True):
129
+ if is_header_row:
130
+ header_row = row
131
+ is_header_row = False
132
+ continue
133
+
134
+ sheet_data.append(dict(zip(header_row, row)))
135
+ all_data[sheet_name] = sheet_data
136
+ except Exception as e:
137
+ return {
138
+ 'status': False,
139
+ 'message': str(e)
140
+ }
141
+
142
+
143
+ try:
144
+ for key, value in all_data.items():
145
+
146
+ if key not in helper.keys():
147
+ continue
148
+
149
+ if helper[key]["isTable"]:
150
+ cleaned_data = self.clean_data(pd.DataFrame(value))
151
+ create_table_response = self.create_tables(helper[key])
152
+ if create_table_response['status'] == False:
153
+ return create_table_response
154
+
155
+ if not os.path.exists("./tmp"):
156
+ os.makedirs("./tmp")
157
+
158
+ tmp_file_path = f"""./tmp/{str(uuid.uuid4()).replace("-","")}.csv"""
159
+ cleaned_data.to_csv(tmp_file_path, index=False,header=False)
160
+ self.ingest_data(helper[key],tmp_file_path)
161
+ os.remove(tmp_file_path)
162
+
163
+ continue
164
+ except Exception as e:
165
+ return {
166
+ 'status': False,
167
+ 'message': str(e)
168
+ }
169
+
170
+ try:
171
+ for key, value in all_data.items():
172
+
173
+ if key not in helper.keys():
174
+ continue
175
+
176
+ if helper[key]["isRelationship"] and key in helper.keys():
177
+ cleaned_data = self.clean_data(pd.DataFrame(value))
178
+ create_rel_response = self.create_relationships(helper[key])
179
+ if create_rel_response['status'] == False:
180
+ return create_rel_response
181
+
182
+ if not os.path.exists("./tmp"):
183
+ os.makedirs("./tmp")
184
+
185
+ tmp_file_path = f"""./tmp/{str(uuid.uuid4()).replace("-","")}.csv"""
186
+ cleaned_data.to_csv(tmp_file_path, index=False,header=False)
187
+ self.ingest_relationships(helper[key],tmp_file_path)
188
+ os.remove(tmp_file_path)
189
+
190
+ continue
191
+ except Exception as e:
192
+ return {
193
+ 'status': False,
194
+ 'message': str(e)
195
+ }
196
+
197
+ return {
198
+ 'status': True,
199
+ 'message': "Data loaded successfully"
200
+ }
201
+
202
+ def create_tables(self, helper):
203
+ columns = ""
204
+ logging.info(helper)
205
+ for key, value in helper["columns"].items():
206
+ columns += f"{key} {value},"
207
+
208
+ columns += f"""PRIMARY KEY ({helper["primary_key"]})"""
209
+ try:
210
+ self.k_client.execute(f"""CREATE NODE TABLE {helper["object_name"]}(
211
+ {columns}
212
+ )""")
213
+ except Exception as e:
214
+ if "already exists" in str(e):
215
+ return {
216
+ 'status': True,
217
+ 'message': "Table already exists"
218
+ }
219
+
220
+ return {
221
+ 'status': True,
222
+ 'message': "Table created successfully"
223
+ }
224
+
225
+ def create_relationships(self, helper):
226
+ # CREATE REL TABLE LivesIn(FROM User TO City)
227
+ try:
228
+ self.k_client.execute(f"""CREATE REL TABLE {helper["object_name"]}(
229
+ FROM {helper["source"]} TO {helper["target"]}
230
+ )""")
231
+ except Exception as e:
232
+ if "already exists" in str(e):
233
+ return {
234
+ 'status': True,
235
+ 'message': "Relationship already exists"
236
+ }
237
+
238
+ return {
239
+ 'status': True,
240
+ 'message': "Relationship created successfully"
241
+ }
242
+
243
+ def ingest_relationships(self,helper,tmp_csv_path):
244
+ try:
245
+ self.k_client.execute(f"""COPY {helper["object_name"]} FROM "{tmp_csv_path}" """)
246
+ return {
247
+ 'status': True,
248
+ 'message': "Relationsip ingested successfully"
249
+ }
250
+ except Exception as e:
251
+ print(str(e))
252
+ if "COPY commands can only" in str(e):
253
+ return {
254
+ 'status': True,
255
+ 'message': "Relationship already exists"
256
+ }
257
+
258
+
259
+ def ingest_data(self,helper,tmp_csv_path):
260
+ try:
261
+ self.k_client.execute(f"""COPY {helper["object_name"]} FROM "{tmp_csv_path}" """)
262
+ return {
263
+ 'status': True,
264
+ 'message': "Data ingested successfully"
265
+ }
266
+ except Exception as e:
267
+ print(str(e))
268
+ if "COPY commands can only" in str(e):
269
+ return {
270
+ 'status': True,
271
+ 'message': "Data already exists"
272
+ }
273
+
274
+
275
+ def get_helper(self):
276
+ with open(self.data_dir+"/helpers.json","r") as f:
277
+ return json.load(f)
278
+
279
+ def save_query(self,query_name,query):
280
+
281
+ if not os.path.exists(self.data_dir+"/queries.json"):
282
+ with open(self.data_dir+"/queries.json","w") as f:
283
+ f.write(json.dumps({
284
+ "sample_query": "MATCH (n) RETURN n LIMIT 10"
285
+ }))
286
+ time.sleep(0.5)
287
+
288
+ queries = {}
289
+ with open(self.data_dir+"/queries.json","r") as f:
290
+ queries = json.load(f)
291
+ queries[query_name] = query
292
+
293
+ with open(self.data_dir+"/queries.json","w") as f:
294
+ f.write(json.dumps(queries))
295
+
296
+ def get_queries(self):
297
+
298
+ if not os.path.exists(self.data_dir+"/queries.json"):
299
+ with open(self.data_dir+"/queries.json","w") as f:
300
+ f.write(json.dumps({
301
+ "sample_query": "MATCH (n) RETURN n LIMIT 10"
302
+ }))
303
+
304
+ time.sleep(1)
305
+
306
+ with open(self.data_dir+"/queries.json","r") as f:
307
+ return json.load(f)
308
+
309
+
310
+ def execute_query(self,query):
311
+ try:
312
+ results = self.k_client.execute(query)
313
+ return results.get_as_df()
314
+
315
+ except Exception as e:
316
+ return {
317
+ 'status': False,
318
+ 'message': str(e)
319
+ }
320
+
321
+ def apply_networkx_analysis(self,df:pd.DataFrame,source,target):
322
+ G = nx.from_pandas_edgelist(df, source=source, target=target)
323
+ # Calculate the degree of each node
324
+ degree = dict(nx.degree(G))
325
+ degree_centrality = nx.degree_centrality(G)
326
+ closeness_centrality = nx.closeness_centrality(G)
327
+ betweenness_centrality = nx.betweenness_centrality(G)
328
+ eigenvector_centrality = nx.eigenvector_centrality(G)
329
+ clustering = nx.clustering(G)
330
+ pagerank = nx.pagerank(G)
331
+ edge_betweenness_centrality = nx.edge_betweenness_centrality(G)
332
+
333
+ df['degree'] = df[source].map(degree)
334
+ df['degree_centrality'] = df[source].map(degree_centrality)
335
+ df['closeness_centrality'] = df[source].map(closeness_centrality)
336
+ df['betweenness_centrality'] = df[source].map(betweenness_centrality)
337
+ df['eigenvector_centrality'] = df[source].map(eigenvector_centrality)
338
+ df['clustering'] = df[source].map(clustering)
339
+ df['pagerank'] = df[source].map(pagerank)
340
+ df['edge_betweenness_centrality'] = df.apply(lambda row: edge_betweenness_centrality.get((row[source], row[target]), np.nan), axis=1)
341
+
342
+ return df
343
+
344
+
345
+ def fit_ergm(self,G: nx.DiGraph):
346
+ num_edges = len(G.edges())
347
+
348
+ # Calculate the number of reciprocated edges
349
+ num_recip_edges = sum((v, u) in G.edges() for u, v in G.edges())
350
+
351
+ # Calculate the density
352
+ density = num_edges / (len(G.nodes()) * (len(G.nodes()) - 1))
353
+
354
+ # Calculate the reciprocity
355
+ reciprocity = num_recip_edges / num_edges if num_edges > 0 else np.nan
356
+
357
+ # Calculate the degree distribution
358
+ degree_dist = dict(G.degree())
359
+
360
+ # Calculate the clustering coefficient
361
+ clustering_coefficient = nx.average_clustering(G)
362
+
363
+ # Calculate the transitivity
364
+ transitivity = nx.transitivity(G)
365
+
366
+ summary = {
367
+ 'Density': density,
368
+ 'Reciprocity': reciprocity,
369
+ 'Degree Distribution': degree_dist,
370
+ 'Clustering Coefficient': clustering_coefficient,
371
+ 'Transitivity': transitivity
372
+ }
373
+
374
+ num_params = len(summary)
375
+
376
+ num_edges = len(G.edges())
377
+ n = len(G.nodes())
378
+
379
+ # Calculate the log-likelihood
380
+ log_likelihood = -0.5 * (num_edges * np.log(n * (n - 1)) - num_params)
381
+
382
+ # Calculate AIC and BIC
383
+ aic = -2 * log_likelihood + 2 * num_params
384
+ bic = -2 * log_likelihood + num_params * np.log(n * (n - 1))
385
+
386
+ return {
387
+ 'density': density,
388
+ 'reciprocity': reciprocity,
389
+ 'degree_distribution': degree_dist,
390
+ 'clustering_coefficient': clustering_coefficient,
391
+ 'transitivity': transitivity,
392
+ 'num_edges': num_edges,
393
+ 'num_nodes': n,
394
+ 'log_likelihood': log_likelihood,
395
+ 'aic': aic,
396
+ 'bic': bic
397
+ }
398
+
399
+
400
+ def apply_ergm(self,df,source,target):
401
+ G = nx.from_pandas_edgelist(df, source=source, target=target,create_using=nx.DiGraph())
402
+ observed_ergm_summary = self.fit_ergm(G)
403
+
404
+
405
+ return {
406
+ 'ergm': observed_ergm_summary
407
+ }
408
+
409
+
410
+
411
+
412
+
413
+
414
+
415
+
416
+
417
+
test.ipynb ADDED
@@ -0,0 +1,2580 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 3,
6
+ "metadata": {},
7
+ "outputs": [],
8
+ "source": [
9
+ "import kuzu\n",
10
+ "import networkx as nx\n",
11
+ "import matplotlib.pyplot as plt"
12
+ ]
13
+ },
14
+ {
15
+ "cell_type": "code",
16
+ "execution_count": 4,
17
+ "metadata": {},
18
+ "outputs": [],
19
+ "source": [
20
+ "db = kuzu.Database(\"/Users/yashpulse/Library/CloudStorage/OneDrive-SwinburneUniversity/Semester 3/COS70008/project/StreamlitAntdComponentsDemo/db/a4bf60cb3ad87a629b9c104f155837ef8470155c07d95e2814357a3816d30a3d_db\")\n",
21
+ "k_client = kuzu.Connection(db)\n"
22
+ ]
23
+ },
24
+ {
25
+ "cell_type": "code",
26
+ "execution_count": 33,
27
+ "metadata": {},
28
+ "outputs": [
29
+ {
30
+ "name": "stdout",
31
+ "output_type": "stream",
32
+ "text": [
33
+ "[32437, 'friends', 32523]\n",
34
+ "[32437, 'friends', 32420]\n",
35
+ "[32437, 'friends', 32540]\n",
36
+ "[32437, 'friends', 32397]\n",
37
+ "[32437, 'friends', 32432]\n",
38
+ "[32437, 'friends', 32428]\n",
39
+ "[32437, 'influential', 32540]\n",
40
+ "[32437, 'influential', 32420]\n",
41
+ "[32437, 'influential', 32523]\n",
42
+ "[32437, 'feedback', 32420]\n",
43
+ "[32437, 'feedback', 32540]\n",
44
+ "[32437, 'feedback', 32523]\n",
45
+ "[32437, 'feedback', 32397]\n",
46
+ "[32540, 'friends', 32420]\n",
47
+ "[32540, 'friends', 32409]\n",
48
+ "[32540, 'friends', 32469]\n",
49
+ "[32540, 'friends', 32513]\n",
50
+ "[32540, 'friends', 32517]\n",
51
+ "[32540, 'friends', 32462]\n",
52
+ "[32540, 'friends', 32534]\n",
53
+ "[32540, 'friends', 32546]\n",
54
+ "[32540, 'friends', 32476]\n",
55
+ "[32540, 'friends', 32490]\n",
56
+ "[32540, 'friends', 32528]\n",
57
+ "[32540, 'friends', 32558]\n",
58
+ "[32540, 'friends', 32493]\n",
59
+ "[32540, 'friends', 32565]\n",
60
+ "[32540, 'friends', 32432]\n",
61
+ "[32540, 'influential', 32396]\n",
62
+ "[32540, 'influential', 32485]\n",
63
+ "[32540, 'influential', 32408]\n",
64
+ "[32540, 'influential', 32529]\n",
65
+ "[32540, 'feedback', 32420]\n",
66
+ "[32540, 'feedback', 32468]\n",
67
+ "[32540, 'feedback', 32432]\n",
68
+ "[32540, 'feedback', 32476]\n",
69
+ "[32540, 'feedback', 32469]\n",
70
+ "[32540, 'moretime', 32528]\n",
71
+ "[32540, 'moretime', 32469]\n",
72
+ "[32540, 'moretime', 32420]\n",
73
+ "[32540, 'moretime', 32476]\n",
74
+ "[32540, 'moretime', 32490]\n",
75
+ "[32540, 'moretime', 32513]\n",
76
+ "[32540, 'moretime', 32409]\n",
77
+ "[32540, 'advice', 32420]\n",
78
+ "[32540, 'advice', 32468]\n",
79
+ "[32540, 'advice', 32469]\n",
80
+ "[32540, 'advice', 32409]\n",
81
+ "[32540, 'advice', 32528]\n",
82
+ "[32540, 'disrespect', 32485]\n",
83
+ "[32443, 'friends', 32518]\n",
84
+ "[32443, 'friends', 32491]\n",
85
+ "[32443, 'friends', 32544]\n",
86
+ "[32443, 'friends', 32405]\n",
87
+ "[32443, 'friends', 32485]\n",
88
+ "[32443, 'friends', 32393]\n",
89
+ "[32443, 'friends', 32507]\n",
90
+ "[32443, 'friends', 32413]\n",
91
+ "[32443, 'friends', 32411]\n",
92
+ "[32443, 'friends', 32396]\n",
93
+ "[32443, 'friends', 32463]\n",
94
+ "[32443, 'influential', 32443]\n",
95
+ "[32443, 'influential', 32518]\n",
96
+ "[32443, 'influential', 32491]\n",
97
+ "[32443, 'influential', 32405]\n",
98
+ "[32443, 'feedback', 32518]\n",
99
+ "[32443, 'feedback', 32491]\n",
100
+ "[32443, 'moretime', 32439]\n",
101
+ "[32443, 'moretime', 32491]\n",
102
+ "[32443, 'moretime', 32535]\n",
103
+ "[32443, 'moretime', 32518]\n",
104
+ "[32443, 'moretime', 32396]\n",
105
+ "[32443, 'advice', 32491]\n",
106
+ "[32443, 'advice', 32405]\n",
107
+ "[32443, 'advice', 32544]\n",
108
+ "[32443, 'disrespect', 32466]\n",
109
+ "[32514, 'friends', 32477]\n",
110
+ "[32514, 'friends', 32400]\n",
111
+ "[32514, 'friends', 32401]\n",
112
+ "[32514, 'friends', 32478]\n",
113
+ "[32514, 'friends', 32550]\n",
114
+ "[32514, 'friends', 32405]\n",
115
+ "[32514, 'friends', 32418]\n",
116
+ "[32514, 'friends', 32470]\n",
117
+ "[32514, 'friends', 32555]\n",
118
+ "[32514, 'friends', 32544]\n",
119
+ "[32514, 'friends', 32535]\n",
120
+ "[32514, 'friends', 32396]\n",
121
+ "[32514, 'friends', 32508]\n",
122
+ "[32514, 'friends', 32426]\n",
123
+ "[32514, 'advice', 32477]\n",
124
+ "[32514, 'advice', 32401]\n",
125
+ "[32514, 'advice', 32550]\n",
126
+ "[32514, 'advice', 32478]\n",
127
+ "[32514, 'advice', 32400]\n",
128
+ "[32514, 'advice', 32508]\n",
129
+ "[32485, 'friends', 32393]\n",
130
+ "[32485, 'friends', 32544]\n",
131
+ "[32485, 'friends', 32405]\n",
132
+ "[32485, 'friends', 32443]\n",
133
+ "[32485, 'friends', 32525]\n",
134
+ "[32485, 'friends', 32463]\n",
135
+ "[32485, 'advice', 32540]\n",
136
+ "[32485, 'advice', 32517]\n",
137
+ "[32485, 'advice', 32412]\n",
138
+ "[32485, 'advice', 32485]\n",
139
+ "[32436, 'friends', 32422]\n",
140
+ "[32436, 'friends', 32421]\n",
141
+ "[32436, 'friends', 32521]\n",
142
+ "[32436, 'friends', 32504]\n",
143
+ "[32436, 'friends', 32432]\n",
144
+ "[32436, 'friends', 32545]\n",
145
+ "[32436, 'friends', 32522]\n",
146
+ "[32436, 'influential', 32406]\n",
147
+ "[32436, 'influential', 32491]\n",
148
+ "[32436, 'influential', 32408]\n",
149
+ "[32436, 'influential', 32485]\n",
150
+ "[32436, 'influential', 32405]\n",
151
+ "[32436, 'advice', 32521]\n",
152
+ "[32436, 'advice', 32432]\n",
153
+ "[32436, 'disrespect', 32455]\n",
154
+ "[32553, 'friends', 32467]\n",
155
+ "[32553, 'friends', 32402]\n",
156
+ "[32553, 'friends', 32534]\n",
157
+ "[32553, 'friends', 32392]\n",
158
+ "[32553, 'friends', 32419]\n",
159
+ "[32553, 'friends', 32544]\n",
160
+ "[32553, 'friends', 32411]\n",
161
+ "[32553, 'friends', 32448]\n",
162
+ "[32553, 'friends', 32473]\n",
163
+ "[32553, 'friends', 32493]\n",
164
+ "[32553, 'friends', 32516]\n",
165
+ "[32553, 'friends', 32541]\n",
166
+ "[32553, 'feedback', 32540]\n",
167
+ "[32553, 'feedback', 32468]\n",
168
+ "[32553, 'advice', 32468]\n",
169
+ "[32553, 'advice', 32534]\n",
170
+ "[32553, 'advice', 32402]\n",
171
+ "[32444, 'friends', 32557]\n",
172
+ "[32444, 'friends', 32475]\n",
173
+ "[32444, 'friends', 32500]\n",
174
+ "[32444, 'friends', 32526]\n",
175
+ "[32444, 'friends', 32447]\n",
176
+ "[32444, 'friends', 32448]\n",
177
+ "[32444, 'feedback', 32448]\n",
178
+ "[32444, 'moretime', 32500]\n",
179
+ "[32444, 'advice', 32476]\n",
180
+ "[32444, 'advice', 32448]\n",
181
+ "[32444, 'disrespect', 32466]\n",
182
+ "[32444, 'disrespect', 32405]\n",
183
+ "[32428, 'friends', 32479]\n",
184
+ "[32428, 'friends', 32475]\n",
185
+ "[32428, 'friends', 32448]\n",
186
+ "[32428, 'influential', 32406]\n",
187
+ "[32428, 'influential', 32491]\n",
188
+ "[32428, 'influential', 32408]\n",
189
+ "[32428, 'influential', 32516]\n",
190
+ "[32428, 'feedback', 32420]\n",
191
+ "[32428, 'disrespect', 32466]\n",
192
+ "[32428, 'disrespect', 32459]\n",
193
+ "[32494, 'friends', 32495]\n",
194
+ "[32494, 'friends', 32395]\n",
195
+ "[32494, 'friends', 32454]\n",
196
+ "[32494, 'friends', 32512]\n",
197
+ "[32494, 'friends', 32419]\n",
198
+ "[32484, 'friends', 32452]\n",
199
+ "[32484, 'friends', 32442]\n",
200
+ "[32484, 'friends', 32419]\n",
201
+ "[32484, 'influential', 32540]\n",
202
+ "[32484, 'influential', 32397]\n",
203
+ "[32484, 'feedback', 32442]\n",
204
+ "[32484, 'moretime', 32442]\n",
205
+ "[32484, 'moretime', 32419]\n",
206
+ "[32484, 'advice', 32442]\n",
207
+ "[32484, 'disrespect', 32406]\n",
208
+ "[32541, 'friends', 32447]\n",
209
+ "[32541, 'friends', 32408]\n",
210
+ "[32541, 'friends', 32413]\n",
211
+ "[32541, 'friends', 32448]\n",
212
+ "[32541, 'friends', 32405]\n",
213
+ "[32541, 'friends', 32529]\n",
214
+ "[32541, 'friends', 32487]\n",
215
+ "[32541, 'friends', 32491]\n",
216
+ "[32541, 'friends', 32516]\n",
217
+ "[32541, 'friends', 32473]\n",
218
+ "[32541, 'friends', 32499]\n",
219
+ "[32541, 'friends', 32440]\n",
220
+ "[32541, 'friends', 32495]\n",
221
+ "[32541, 'friends', 32550]\n",
222
+ "[32541, 'friends', 32444]\n",
223
+ "[32541, 'friends', 32514]\n",
224
+ "[32541, 'friends', 32477]\n",
225
+ "[32541, 'advice', 32448]\n",
226
+ "[32445, 'friends', 32498]\n",
227
+ "[32445, 'friends', 32404]\n",
228
+ "[32445, 'friends', 32487]\n",
229
+ "[32445, 'friends', 32415]\n",
230
+ "[32445, 'friends', 32421]\n",
231
+ "[32445, 'influential', 32540]\n",
232
+ "[32445, 'feedback', 32498]\n",
233
+ "[32445, 'feedback', 32487]\n",
234
+ "[32445, 'feedback', 32404]\n",
235
+ "[32445, 'moretime', 32498]\n",
236
+ "[32445, 'moretime', 32487]\n",
237
+ "[32445, 'moretime', 32404]\n",
238
+ "[32445, 'moretime', 32415]\n",
239
+ "[32445, 'moretime', 32421]\n",
240
+ "[32445, 'advice', 32498]\n",
241
+ "[32445, 'advice', 32487]\n",
242
+ "[32445, 'advice', 32404]\n",
243
+ "[32445, 'disrespect', 32466]\n",
244
+ "[32445, 'disrespect', 32500]\n",
245
+ "[32445, 'disrespect', 32561]\n",
246
+ "[32470, 'friends', 32477]\n",
247
+ "[32470, 'friends', 32431]\n",
248
+ "[32470, 'friends', 32514]\n",
249
+ "[32470, 'friends', 32535]\n",
250
+ "[32470, 'friends', 32555]\n",
251
+ "[32470, 'friends', 32418]\n",
252
+ "[32470, 'friends', 32478]\n",
253
+ "[32470, 'friends', 32426]\n",
254
+ "[32470, 'friends', 32508]\n",
255
+ "[32470, 'friends', 32400]\n",
256
+ "[32470, 'friends', 32466]\n",
257
+ "[32470, 'friends', 32401]\n",
258
+ "[32470, 'friends', 32396]\n",
259
+ "[32470, 'friends', 32507]\n",
260
+ "[32470, 'friends', 32459]\n",
261
+ "[32470, 'influential', 32477]\n",
262
+ "[32470, 'feedback', 32477]\n",
263
+ "[32470, 'advice', 32477]\n",
264
+ "[32395, 'friends', 32454]\n",
265
+ "[32395, 'friends', 32494]\n",
266
+ "[32395, 'friends', 32475]\n",
267
+ "[32395, 'friends', 32528]\n",
268
+ "[32395, 'friends', 32415]\n",
269
+ "[32395, 'feedback', 32494]\n",
270
+ "[32395, 'feedback', 32475]\n",
271
+ "[32395, 'moretime', 32415]\n",
272
+ "[32395, 'advice', 32494]\n",
273
+ "[32531, 'friends', 32521]\n",
274
+ "[32531, 'friends', 32538]\n",
275
+ "[32531, 'friends', 32458]\n",
276
+ "[32531, 'friends', 32460]\n",
277
+ "[32531, 'friends', 32562]\n",
278
+ "[32531, 'friends', 32554]\n",
279
+ "[32531, 'friends', 32563]\n",
280
+ "[32531, 'friends', 32395]\n",
281
+ "[32531, 'influential', 32460]\n",
282
+ "[32531, 'feedback', 32562]\n",
283
+ "[32531, 'feedback', 32460]\n",
284
+ "[32531, 'moretime', 32458]\n",
285
+ "[32531, 'moretime', 32538]\n",
286
+ "[32531, 'moretime', 32554]\n",
287
+ "[32531, 'moretime', 32521]\n",
288
+ "[32531, 'moretime', 32460]\n",
289
+ "[32531, 'advice', 32562]\n",
290
+ "[32531, 'advice', 32554]\n",
291
+ "[32440, 'friends', 32430]\n",
292
+ "[32440, 'friends', 32409]\n",
293
+ "[32440, 'friends', 32414]\n",
294
+ "[32440, 'friends', 32499]\n",
295
+ "[32440, 'friends', 32408]\n",
296
+ "[32440, 'friends', 32517]\n",
297
+ "[32440, 'friends', 32469]\n",
298
+ "[32440, 'friends', 32513]\n",
299
+ "[32440, 'friends', 32462]\n",
300
+ "[32440, 'friends', 32540]\n",
301
+ "[32440, 'friends', 32391]\n",
302
+ "[32440, 'friends', 32420]\n",
303
+ "[32440, 'friends', 32546]\n",
304
+ "[32440, 'friends', 32519]\n",
305
+ "[32440, 'friends', 32433]\n",
306
+ "[32440, 'influential', 32535]\n",
307
+ "[32440, 'influential', 32396]\n",
308
+ "[32440, 'influential', 32393]\n",
309
+ "[32440, 'feedback', 32549]\n",
310
+ "[32440, 'feedback', 32409]\n",
311
+ "[32440, 'feedback', 32540]\n",
312
+ "[32440, 'moretime', 32430]\n",
313
+ "[32440, 'moretime', 32409]\n",
314
+ "[32440, 'moretime', 32420]\n",
315
+ "[32440, 'moretime', 32540]\n",
316
+ "[32440, 'moretime', 32433]\n",
317
+ "[32440, 'moretime', 32549]\n",
318
+ "[32440, 'moretime', 32410]\n",
319
+ "[32440, 'moretime', 32489]\n",
320
+ "[32440, 'advice', 32540]\n",
321
+ "[32440, 'advice', 32420]\n",
322
+ "[32440, 'advice', 32517]\n",
323
+ "[32440, 'advice', 32409]\n",
324
+ "[32440, 'advice', 32432]\n",
325
+ "[32440, 'advice', 32469]\n",
326
+ "[32440, 'advice', 32446]\n",
327
+ "[32440, 'advice', 32437]\n",
328
+ "[32440, 'disrespect', 32535]\n",
329
+ "[32440, 'disrespect', 32466]\n",
330
+ "[32440, 'disrespect', 32500]\n",
331
+ "[32440, 'disrespect', 32401]\n",
332
+ "[32550, 'friends', 32408]\n",
333
+ "[32550, 'friends', 32477]\n",
334
+ "[32550, 'feedback', 32440]\n",
335
+ "[32550, 'moretime', 32408]\n",
336
+ "[32550, 'advice', 32478]\n",
337
+ "[32511, 'friends', 32536]\n",
338
+ "[32511, 'friends', 32524]\n",
339
+ "[32511, 'friends', 32450]\n",
340
+ "[32511, 'friends', 32482]\n",
341
+ "[32511, 'friends', 32506]\n",
342
+ "[32511, 'friends', 32481]\n",
343
+ "[32511, 'influential', 32396]\n",
344
+ "[32511, 'moretime', 32524]\n",
345
+ "[32511, 'moretime', 32536]\n",
346
+ "[32511, 'moretime', 32450]\n",
347
+ "[32511, 'moretime', 32482]\n",
348
+ "[32511, 'moretime', 32506]\n",
349
+ "[32511, 'moretime', 32481]\n",
350
+ "[32511, 'advice', 32524]\n",
351
+ "[32556, 'friends', 32402]\n",
352
+ "[32556, 'friends', 32565]\n",
353
+ "[32556, 'friends', 32520]\n",
354
+ "[32556, 'friends', 32398]\n",
355
+ "[32556, 'friends', 32448]\n",
356
+ "[32556, 'influential', 32425]\n",
357
+ "[32556, 'influential', 32443]\n",
358
+ "[32556, 'influential', 32406]\n",
359
+ "[32556, 'feedback', 32565]\n",
360
+ "[32556, 'feedback', 32402]\n",
361
+ "[32556, 'moretime', 32565]\n",
362
+ "[32556, 'moretime', 32402]\n",
363
+ "[32556, 'moretime', 32520]\n",
364
+ "[32556, 'moretime', 32559]\n",
365
+ "[32556, 'moretime', 32398]\n",
366
+ "[32556, 'advice', 32448]\n",
367
+ "[32556, 'disrespect', 32415]\n",
368
+ "[32556, 'disrespect', 32421]\n",
369
+ "[32556, 'disrespect', 32441]\n",
370
+ "[32556, 'disrespect', 32564]\n",
371
+ "[32556, 'disrespect', 32547]\n",
372
+ "[32556, 'disrespect', 32425]\n",
373
+ "[32556, 'disrespect', 32449]\n",
374
+ "[32549, 'friends', 32551]\n",
375
+ "[32549, 'friends', 32431]\n",
376
+ "[32549, 'friends', 32464]\n",
377
+ "[32549, 'friends', 32440]\n",
378
+ "[32549, 'friends', 32554]\n",
379
+ "[32549, 'friends', 32425]\n",
380
+ "[32549, 'friends', 32486]\n",
381
+ "[32549, 'influential', 32431]\n",
382
+ "[32549, 'influential', 32554]\n",
383
+ "[32549, 'influential', 32440]\n",
384
+ "[32549, 'feedback', 32551]\n",
385
+ "[32549, 'feedback', 32554]\n",
386
+ "[32549, 'feedback', 32464]\n",
387
+ "[32549, 'feedback', 32502]\n",
388
+ "[32549, 'moretime', 32551]\n",
389
+ "[32549, 'moretime', 32440]\n",
390
+ "[32549, 'moretime', 32431]\n",
391
+ "[32549, 'moretime', 32425]\n",
392
+ "[32549, 'moretime', 32554]\n",
393
+ "[32549, 'moretime', 32529]\n",
394
+ "[32549, 'moretime', 32487]\n",
395
+ "[32549, 'moretime', 32464]\n",
396
+ "[32549, 'advice', 32551]\n",
397
+ "[32549, 'advice', 32431]\n",
398
+ "[32549, 'advice', 32464]\n",
399
+ "[32549, 'advice', 32554]\n",
400
+ "[32400, 'friends', 32478]\n",
401
+ "[32400, 'friends', 32514]\n",
402
+ "[32400, 'friends', 32477]\n",
403
+ "[32400, 'friends', 32405]\n",
404
+ "[32400, 'friends', 32396]\n",
405
+ "[32400, 'friends', 32401]\n",
406
+ "[32400, 'friends', 32550]\n",
407
+ "[32400, 'friends', 32443]\n",
408
+ "[32400, 'friends', 32485]\n",
409
+ "[32400, 'friends', 32418]\n",
410
+ "[32400, 'friends', 32463]\n",
411
+ "[32400, 'friends', 32544]\n",
412
+ "[32400, 'friends', 32426]\n",
413
+ "[32400, 'friends', 32491]\n",
414
+ "[32400, 'friends', 32515]\n",
415
+ "[32400, 'friends', 32462]\n",
416
+ "[32400, 'friends', 32529]\n",
417
+ "[32400, 'friends', 32393]\n",
418
+ "[32400, 'friends', 32470]\n",
419
+ "[32400, 'friends', 32508]\n",
420
+ "[32400, 'friends', 32555]\n",
421
+ "[32400, 'friends', 32459]\n",
422
+ "[32400, 'feedback', 32478]\n",
423
+ "[32400, 'feedback', 32514]\n",
424
+ "[32400, 'feedback', 32477]\n",
425
+ "[32400, 'feedback', 32550]\n",
426
+ "[32400, 'feedback', 32401]\n",
427
+ "[32400, 'advice', 32478]\n",
428
+ "[32400, 'advice', 32514]\n",
429
+ "[32505, 'friends', 32462]\n",
430
+ "[32505, 'friends', 32558]\n",
431
+ "[32505, 'friends', 32515]\n",
432
+ "[32505, 'moretime', 32558]\n",
433
+ "[32417, 'friends', 32396]\n",
434
+ "[32417, 'friends', 32508]\n",
435
+ "[32417, 'friends', 32507]\n",
436
+ "[32417, 'influential', 32396]\n",
437
+ "[32417, 'influential', 32507]\n",
438
+ "[32417, 'influential', 32393]\n",
439
+ "[32417, 'moretime', 32396]\n",
440
+ "[32417, 'moretime', 32508]\n",
441
+ "[32417, 'moretime', 32507]\n",
442
+ "[32478, 'friends', 32405]\n",
443
+ "[32478, 'friends', 32463]\n",
444
+ "[32478, 'friends', 32400]\n",
445
+ "[32478, 'friends', 32535]\n",
446
+ "[32478, 'friends', 32443]\n",
447
+ "[32478, 'friends', 32393]\n",
448
+ "[32478, 'friends', 32514]\n",
449
+ "[32478, 'friends', 32401]\n",
450
+ "[32478, 'friends', 32550]\n",
451
+ "[32478, 'friends', 32485]\n",
452
+ "[32478, 'friends', 32418]\n",
453
+ "[32478, 'friends', 32491]\n",
454
+ "[32478, 'friends', 32544]\n",
455
+ "[32478, 'friends', 32529]\n",
456
+ "[32478, 'friends', 32408]\n",
457
+ "[32478, 'friends', 32470]\n",
458
+ "[32478, 'friends', 32508]\n",
459
+ "[32478, 'friends', 32555]\n",
460
+ "[32478, 'friends', 32459]\n",
461
+ "[32478, 'friends', 32411]\n",
462
+ "[32478, 'influential', 32405]\n",
463
+ "[32478, 'feedback', 32459]\n",
464
+ "[32478, 'moretime', 32426]\n",
465
+ "[32478, 'moretime', 32396]\n",
466
+ "[32478, 'moretime', 32413]\n",
467
+ "[32478, 'moretime', 32467]\n",
468
+ "[32478, 'moretime', 32408]\n",
469
+ "[32478, 'advice', 32508]\n",
470
+ "[32478, 'advice', 32514]\n",
471
+ "[32478, 'advice', 32459]\n",
472
+ "[32477, 'friends', 32514]\n",
473
+ "[32477, 'friends', 32401]\n",
474
+ "[32477, 'friends', 32396]\n",
475
+ "[32477, 'friends', 32400]\n",
476
+ "[32477, 'friends', 32544]\n",
477
+ "[32477, 'friends', 32408]\n",
478
+ "[32477, 'friends', 32405]\n",
479
+ "[32477, 'friends', 32508]\n",
480
+ "[32477, 'friends', 32418]\n",
481
+ "[32477, 'friends', 32470]\n",
482
+ "[32477, 'friends', 32535]\n",
483
+ "[32477, 'friends', 32431]\n",
484
+ "[32477, 'friends', 32426]\n",
485
+ "[32477, 'friends', 32550]\n",
486
+ "[32477, 'advice', 32401]\n",
487
+ "[32477, 'advice', 32470]\n",
488
+ "[32474, 'friends', 32413]\n",
489
+ "[32474, 'friends', 32408]\n",
490
+ "[32474, 'friends', 32499]\n",
491
+ "[32474, 'friends', 32529]\n",
492
+ "[32474, 'friends', 32406]\n",
493
+ "[32474, 'influential', 32405]\n",
494
+ "[32474, 'influential', 32544]\n",
495
+ "[32474, 'influential', 32507]\n",
496
+ "[32474, 'influential', 32396]\n",
497
+ "[32474, 'influential', 32393]\n",
498
+ "[32474, 'feedback', 32408]\n",
499
+ "[32474, 'moretime', 32413]\n",
500
+ "[32474, 'advice', 32408]\n",
501
+ "[32474, 'advice', 32499]\n",
502
+ "[32474, 'advice', 32478]\n",
503
+ "[32474, 'advice', 32448]\n",
504
+ "[32493, 'friends', 32448]\n",
505
+ "[32493, 'friends', 32473]\n",
506
+ "[32493, 'feedback', 32448]\n",
507
+ "[32493, 'advice', 32501]\n",
508
+ "[32493, 'advice', 32448]\n",
509
+ "[32413, 'friends', 32474]\n",
510
+ "[32413, 'friends', 32405]\n",
511
+ "[32413, 'friends', 32408]\n",
512
+ "[32413, 'friends', 32393]\n",
513
+ "[32413, 'friends', 32485]\n",
514
+ "[32413, 'friends', 32467]\n",
515
+ "[32413, 'influential', 32405]\n",
516
+ "[32413, 'influential', 32544]\n",
517
+ "[32413, 'influential', 32396]\n",
518
+ "[32413, 'influential', 32507]\n",
519
+ "[32413, 'influential', 32393]\n",
520
+ "[32413, 'feedback', 32408]\n",
521
+ "[32413, 'moretime', 32474]\n",
522
+ "[32413, 'moretime', 32478]\n",
523
+ "[32413, 'advice', 32408]\n",
524
+ "[32413, 'advice', 32467]\n",
525
+ "[32413, 'advice', 32471]\n",
526
+ "[32413, 'advice', 32448]\n",
527
+ "[32459, 'friends', 32401]\n",
528
+ "[32459, 'friends', 32477]\n",
529
+ "[32459, 'friends', 32478]\n",
530
+ "[32459, 'friends', 32555]\n",
531
+ "[32459, 'friends', 32411]\n",
532
+ "[32459, 'friends', 32460]\n",
533
+ "[32459, 'friends', 32458]\n",
534
+ "[32459, 'friends', 32553]\n",
535
+ "[32459, 'influential', 32544]\n",
536
+ "[32459, 'influential', 32485]\n",
537
+ "[32459, 'influential', 32443]\n",
538
+ "[32459, 'feedback', 32478]\n",
539
+ "[32459, 'feedback', 32553]\n",
540
+ "[32459, 'feedback', 32477]\n",
541
+ "[32459, 'feedback', 32401]\n",
542
+ "[32459, 'moretime', 32401]\n",
543
+ "[32459, 'moretime', 32477]\n",
544
+ "[32459, 'moretime', 32478]\n",
545
+ "[32459, 'moretime', 32411]\n",
546
+ "[32459, 'advice', 32478]\n",
547
+ "[32459, 'advice', 32555]\n",
548
+ "[32459, 'advice', 32411]\n",
549
+ "[32459, 'advice', 32460]\n",
550
+ "[32459, 'advice', 32553]\n",
551
+ "[32459, 'disrespect', 32443]\n",
552
+ "[32459, 'disrespect', 32544]\n",
553
+ "[32534, 'friends', 32408]\n",
554
+ "[32534, 'friends', 32463]\n",
555
+ "[32534, 'friends', 32468]\n",
556
+ "[32534, 'friends', 32550]\n",
557
+ "[32534, 'friends', 32541]\n",
558
+ "[32534, 'friends', 32467]\n",
559
+ "[32534, 'friends', 32499]\n",
560
+ "[32534, 'friends', 32406]\n",
561
+ "[32534, 'friends', 32553]\n",
562
+ "[32534, 'friends', 32413]\n",
563
+ "[32534, 'friends', 32478]\n",
564
+ "[32534, 'friends', 32540]\n",
565
+ "[32534, 'friends', 32405]\n",
566
+ "[32534, 'friends', 32409]\n",
567
+ "[32534, 'friends', 32529]\n",
568
+ "[32534, 'friends', 32551]\n",
569
+ "[32534, 'friends', 32431]\n",
570
+ "[32534, 'friends', 32392]\n",
571
+ "[32534, 'friends', 32474]\n",
572
+ "[32534, 'friends', 32440]\n",
573
+ "[32534, 'friends', 32418]\n",
574
+ "[32534, 'friends', 32426]\n",
575
+ "[32534, 'friends', 32393]\n",
576
+ "[32534, 'feedback', 32540]\n",
577
+ "[32534, 'moretime', 32418]\n",
578
+ "[32534, 'moretime', 32426]\n",
579
+ "[32534, 'moretime', 32535]\n",
580
+ "[32534, 'advice', 32540]\n",
581
+ "[32534, 'advice', 32468]\n",
582
+ "[32534, 'advice', 32440]\n",
583
+ "[32527, 'friends', 32420]\n",
584
+ "[32527, 'friends', 32435]\n",
585
+ "[32527, 'influential', 32420]\n",
586
+ "[32527, 'moretime', 32420]\n",
587
+ "[32527, 'moretime', 32410]\n",
588
+ "[32527, 'advice', 32435]\n",
589
+ "[32532, 'friends', 32392]\n",
590
+ "[32532, 'friends', 32554]\n",
591
+ "[32532, 'friends', 32522]\n",
592
+ "[32532, 'friends', 32565]\n",
593
+ "[32532, 'friends', 32532]\n",
594
+ "[32532, 'influential', 32420]\n",
595
+ "[32532, 'influential', 32540]\n",
596
+ "[32532, 'moretime', 32565]\n",
597
+ "[32532, 'moretime', 32402]\n",
598
+ "[32532, 'advice', 32392]\n",
599
+ "[32532, 'advice', 32554]\n",
600
+ "[32532, 'advice', 32522]\n",
601
+ "[32399, 'friends', 32529]\n",
602
+ "[32399, 'friends', 32420]\n",
603
+ "[32399, 'friends', 32432]\n",
604
+ "[32399, 'friends', 32425]\n",
605
+ "[32399, 'friends', 32551]\n",
606
+ "[32399, 'friends', 32443]\n",
607
+ "[32399, 'friends', 32468]\n",
608
+ "[32399, 'friends', 32499]\n",
609
+ "[32399, 'friends', 32525]\n",
610
+ "[32399, 'friends', 32523]\n",
611
+ "[32399, 'friends', 32435]\n",
612
+ "[32399, 'friends', 32409]\n",
613
+ "[32399, 'friends', 32413]\n",
614
+ "[32399, 'friends', 32459]\n",
615
+ "[32399, 'friends', 32406]\n",
616
+ "[32399, 'influential', 32443]\n",
617
+ "[32399, 'influential', 32525]\n",
618
+ "[32399, 'influential', 32540]\n",
619
+ "[32399, 'influential', 32507]\n",
620
+ "[32399, 'influential', 32544]\n",
621
+ "[32399, 'influential', 32405]\n",
622
+ "[32399, 'influential', 32406]\n",
623
+ "[32399, 'feedback', 32499]\n",
624
+ "[32399, 'feedback', 32468]\n",
625
+ "[32399, 'moretime', 32551]\n",
626
+ "[32399, 'moretime', 32432]\n",
627
+ "[32399, 'moretime', 32529]\n",
628
+ "[32399, 'moretime', 32492]\n",
629
+ "[32399, 'moretime', 32443]\n",
630
+ "[32399, 'moretime', 32523]\n",
631
+ "[32399, 'advice', 32499]\n",
632
+ "[32399, 'advice', 32468]\n",
633
+ "[32399, 'advice', 32420]\n",
634
+ "[32399, 'advice', 32432]\n",
635
+ "[32409, 'friends', 32512]\n",
636
+ "[32409, 'friends', 32495]\n",
637
+ "[32409, 'friends', 32420]\n",
638
+ "[32409, 'friends', 32462]\n",
639
+ "[32409, 'friends', 32513]\n",
640
+ "[32409, 'friends', 32517]\n",
641
+ "[32409, 'friends', 32540]\n",
642
+ "[32409, 'friends', 32546]\n",
643
+ "[32409, 'friends', 32469]\n",
644
+ "[32409, 'friends', 32446]\n",
645
+ "[32409, 'friends', 32501]\n",
646
+ "[32409, 'friends', 32432]\n",
647
+ "[32409, 'friends', 32436]\n",
648
+ "[32409, 'friends', 32409]\n",
649
+ "[32409, 'friends', 32435]\n",
650
+ "[32409, 'friends', 32414]\n",
651
+ "[32409, 'friends', 32395]\n",
652
+ "[32409, 'friends', 32399]\n",
653
+ "[32409, 'friends', 32528]\n",
654
+ "[32409, 'friends', 32428]\n",
655
+ "[32409, 'friends', 32526]\n",
656
+ "[32409, 'friends', 32493]\n",
657
+ "[32409, 'friends', 32397]\n",
658
+ "[32409, 'friends', 32534]\n",
659
+ "[32409, 'friends', 32499]\n",
660
+ "[32409, 'friends', 32408]\n",
661
+ "[32409, 'friends', 32421]\n",
662
+ "[32409, 'friends', 32422]\n",
663
+ "[32409, 'friends', 32523]\n",
664
+ "[32409, 'friends', 32529]\n",
665
+ "[32409, 'friends', 32440]\n",
666
+ "[32409, 'friends', 32516]\n",
667
+ "[32409, 'friends', 32556]\n",
668
+ "[32409, 'friends', 32479]\n",
669
+ "[32409, 'friends', 32437]\n",
670
+ "[32409, 'influential', 32420]\n",
671
+ "[32409, 'influential', 32540]\n",
672
+ "[32409, 'influential', 32409]\n",
673
+ "[32409, 'feedback', 32420]\n",
674
+ "[32409, 'moretime', 32440]\n",
675
+ "[32409, 'moretime', 32540]\n",
676
+ "[32409, 'moretime', 32462]\n",
677
+ "[32409, 'moretime', 32513]\n",
678
+ "[32409, 'advice', 32420]\n",
679
+ "[32409, 'advice', 32540]\n",
680
+ "[32475, 'friends', 32397]\n",
681
+ "[32475, 'friends', 32428]\n",
682
+ "[32475, 'friends', 32432]\n",
683
+ "[32475, 'influential', 32448]\n",
684
+ "[32475, 'influential', 32420]\n",
685
+ "[32475, 'moretime', 32420]\n",
686
+ "[32475, 'moretime', 32479]\n",
687
+ "[32475, 'advice', 32420]\n",
688
+ "[32475, 'advice', 32432]\n",
689
+ "[32462, 'friends', 32456]\n",
690
+ "[32462, 'friends', 32517]\n",
691
+ "[32462, 'friends', 32513]\n",
692
+ "[32462, 'friends', 32460]\n",
693
+ "[32462, 'friends', 32409]\n",
694
+ "[32462, 'influential', 32513]\n",
695
+ "[32462, 'influential', 32540]\n",
696
+ "[32462, 'influential', 32517]\n",
697
+ "[32462, 'influential', 32456]\n",
698
+ "[32462, 'influential', 32535]\n",
699
+ "[32462, 'feedback', 32513]\n",
700
+ "[32462, 'feedback', 32550]\n",
701
+ "[32462, 'feedback', 32456]\n",
702
+ "[32462, 'moretime', 32513]\n",
703
+ "[32462, 'moretime', 32456]\n",
704
+ "[32462, 'moretime', 32517]\n",
705
+ "[32462, 'moretime', 32409]\n",
706
+ "[32462, 'advice', 32517]\n",
707
+ "[32462, 'advice', 32456]\n",
708
+ "[32498, 'friends', 32543]\n",
709
+ "[32498, 'friends', 32445]\n",
710
+ "[32498, 'friends', 32555]\n",
711
+ "[32498, 'friends', 32415]\n",
712
+ "[32498, 'friends', 32451]\n",
713
+ "[32498, 'friends', 32427]\n",
714
+ "[32498, 'friends', 32487]\n",
715
+ "[32498, 'friends', 32488]\n",
716
+ "[32498, 'friends', 32502]\n",
717
+ "[32498, 'friends', 32433]\n",
718
+ "[32498, 'friends', 32533]\n",
719
+ "[32498, 'influential', 32488]\n",
720
+ "[32498, 'influential', 32433]\n",
721
+ "[32498, 'influential', 32533]\n",
722
+ "[32498, 'feedback', 32433]\n",
723
+ "[32498, 'moretime', 32445]\n",
724
+ "[32498, 'moretime', 32555]\n",
725
+ "[32498, 'moretime', 32488]\n",
726
+ "[32498, 'moretime', 32543]\n",
727
+ "[32498, 'moretime', 32433]\n",
728
+ "[32498, 'moretime', 32533]\n",
729
+ "[32498, 'advice', 32543]\n",
730
+ "[32498, 'advice', 32433]\n",
731
+ "[32498, 'advice', 32488]\n",
732
+ "[32498, 'advice', 32502]\n",
733
+ "[32498, 'disrespect', 32466]\n",
734
+ "[32458, 'friends', 32460]\n",
735
+ "[32458, 'friends', 32533]\n",
736
+ "[32458, 'friends', 32531]\n",
737
+ "[32458, 'friends', 32404]\n",
738
+ "[32458, 'friends', 32459]\n",
739
+ "[32458, 'friends', 32397]\n",
740
+ "[32458, 'friends', 32554]\n",
741
+ "[32458, 'influential', 32460]\n",
742
+ "[32458, 'feedback', 32460]\n",
743
+ "[32458, 'moretime', 32531]\n",
744
+ "[32458, 'advice', 32533]\n",
745
+ "[32458, 'advice', 32460]\n",
746
+ "[32458, 'advice', 32448]\n",
747
+ "[32404, 'friends', 32551]\n",
748
+ "[32404, 'friends', 32425]\n",
749
+ "[32404, 'friends', 32445]\n",
750
+ "[32404, 'friends', 32554]\n",
751
+ "[32404, 'friends', 32460]\n",
752
+ "[32404, 'moretime', 32425]\n",
753
+ "[32404, 'advice', 32460]\n",
754
+ "[32517, 'friends', 32513]\n",
755
+ "[32517, 'friends', 32469]\n",
756
+ "[32517, 'friends', 32546]\n",
757
+ "[32517, 'friends', 32440]\n",
758
+ "[32517, 'friends', 32462]\n",
759
+ "[32517, 'friends', 32420]\n",
760
+ "[32517, 'friends', 32446]\n",
761
+ "[32517, 'friends', 32523]\n",
762
+ "[32517, 'friends', 32474]\n",
763
+ "[32517, 'friends', 32392]\n",
764
+ "[32517, 'friends', 32490]\n",
765
+ "[32517, 'influential', 32406]\n",
766
+ "[32517, 'influential', 32425]\n",
767
+ "[32517, 'influential', 32491]\n",
768
+ "[32517, 'influential', 32518]\n",
769
+ "[32517, 'influential', 32525]\n",
770
+ "[32517, 'influential', 32405]\n",
771
+ "[32517, 'influential', 32485]\n",
772
+ "[32517, 'influential', 32474]\n",
773
+ "[32517, 'influential', 32391]\n",
774
+ "[32517, 'advice', 32513]\n",
775
+ "[32517, 'advice', 32448]\n",
776
+ "[32401, 'friends', 32508]\n",
777
+ "[32401, 'friends', 32396]\n",
778
+ "[32401, 'friends', 32535]\n",
779
+ "[32401, 'friends', 32478]\n",
780
+ "[32401, 'friends', 32418]\n",
781
+ "[32401, 'friends', 32477]\n",
782
+ "[32401, 'friends', 32426]\n",
783
+ "[32401, 'friends', 32470]\n",
784
+ "[32401, 'friends', 32514]\n",
785
+ "[32401, 'friends', 32550]\n",
786
+ "[32401, 'influential', 32535]\n",
787
+ "[32401, 'influential', 32396]\n",
788
+ "[32401, 'influential', 32508]\n",
789
+ "[32401, 'influential', 32418]\n",
790
+ "[32401, 'influential', 32477]\n",
791
+ "[32401, 'influential', 32478]\n",
792
+ "[32401, 'feedback', 32508]\n",
793
+ "[32401, 'feedback', 32550]\n",
794
+ "[32401, 'moretime', 32405]\n",
795
+ "[32401, 'moretime', 32485]\n",
796
+ "[32401, 'moretime', 32544]\n",
797
+ "[32401, 'advice', 32470]\n",
798
+ "[32401, 'advice', 32514]\n",
799
+ "[32401, 'advice', 32478]\n",
800
+ "[32401, 'advice', 32508]\n",
801
+ "[32504, 'friends', 32422]\n",
802
+ "[32504, 'friends', 32421]\n",
803
+ "[32504, 'friends', 32545]\n",
804
+ "[32504, 'friends', 32465]\n",
805
+ "[32504, 'friends', 32419]\n",
806
+ "[32448, 'friends', 32473]\n",
807
+ "[32448, 'friends', 32516]\n",
808
+ "[32448, 'friends', 32541]\n",
809
+ "[32448, 'friends', 32479]\n",
810
+ "[32448, 'friends', 32413]\n",
811
+ "[32448, 'friends', 32459]\n",
812
+ "[32448, 'friends', 32405]\n",
813
+ "[32448, 'influential', 32405]\n",
814
+ "[32448, 'influential', 32425]\n",
815
+ "[32448, 'influential', 32448]\n",
816
+ "[32448, 'feedback', 32516]\n",
817
+ "[32448, 'feedback', 32446]\n",
818
+ "[32448, 'feedback', 32473]\n",
819
+ "[32448, 'moretime', 32405]\n",
820
+ "[32448, 'moretime', 32425]\n",
821
+ "[32448, 'moretime', 32459]\n",
822
+ "[32448, 'advice', 32420]\n",
823
+ "[32448, 'advice', 32516]\n",
824
+ "[32448, 'advice', 32446]\n",
825
+ "[32448, 'disrespect', 32466]\n",
826
+ "[32522, 'friends', 32422]\n",
827
+ "[32522, 'friends', 32432]\n",
828
+ "[32522, 'friends', 32421]\n",
829
+ "[32522, 'friends', 32436]\n",
830
+ "[32522, 'friends', 32545]\n",
831
+ "[32522, 'friends', 32504]\n",
832
+ "[32522, 'friends', 32532]\n",
833
+ "[32522, 'influential', 32408]\n",
834
+ "[32522, 'influential', 32529]\n",
835
+ "[32522, 'influential', 32468]\n",
836
+ "[32522, 'influential', 32393]\n",
837
+ "[32522, 'feedback', 32422]\n",
838
+ "[32522, 'feedback', 32421]\n",
839
+ "[32522, 'feedback', 32432]\n",
840
+ "[32522, 'moretime', 32498]\n",
841
+ "[32522, 'moretime', 32465]\n",
842
+ "[32522, 'moretime', 32445]\n",
843
+ "[32522, 'moretime', 32436]\n",
844
+ "[32522, 'moretime', 32432]\n",
845
+ "[32522, 'moretime', 32504]\n",
846
+ "[32522, 'moretime', 32545]\n",
847
+ "[32522, 'moretime', 32421]\n",
848
+ "[32522, 'moretime', 32422]\n",
849
+ "[32522, 'advice', 32532]\n",
850
+ "[32522, 'advice', 32501]\n",
851
+ "[32522, 'advice', 32409]\n",
852
+ "[32522, 'advice', 32439]\n",
853
+ "[32509, 'friends', 32510]\n",
854
+ "[32509, 'friends', 32559]\n",
855
+ "[32509, 'friends', 32542]\n",
856
+ "[32509, 'friends', 32416]\n",
857
+ "[32509, 'friends', 32407]\n",
858
+ "[32509, 'friends', 32457]\n",
859
+ "[32509, 'friends', 32539]\n",
860
+ "[32509, 'influential', 32488]\n",
861
+ "[32509, 'influential', 32427]\n",
862
+ "[32509, 'influential', 32559]\n",
863
+ "[32509, 'influential', 32407]\n",
864
+ "[32509, 'feedback', 32490]\n",
865
+ "[32509, 'feedback', 32510]\n",
866
+ "[32509, 'moretime', 32542]\n",
867
+ "[32509, 'moretime', 32559]\n",
868
+ "[32509, 'advice', 32510]\n",
869
+ "[32509, 'advice', 32490]\n",
870
+ "[32397, 'friends', 32475]\n",
871
+ "[32397, 'friends', 32523]\n",
872
+ "[32397, 'friends', 32528]\n",
873
+ "[32397, 'friends', 32420]\n",
874
+ "[32397, 'influential', 32420]\n",
875
+ "[32397, 'influential', 32540]\n",
876
+ "[32397, 'influential', 32409]\n",
877
+ "[32397, 'feedback', 32420]\n",
878
+ "[32397, 'feedback', 32540]\n",
879
+ "[32397, 'feedback', 32475]\n",
880
+ "[32397, 'moretime', 32523]\n",
881
+ "[32397, 'moretime', 32420]\n",
882
+ "[32397, 'moretime', 32540]\n",
883
+ "[32397, 'moretime', 32475]\n",
884
+ "[32397, 'advice', 32420]\n",
885
+ "[32397, 'advice', 32475]\n",
886
+ "[32397, 'advice', 32540]\n",
887
+ "[32512, 'friends', 32541]\n",
888
+ "[32512, 'friends', 32447]\n",
889
+ "[32512, 'friends', 32495]\n",
890
+ "[32512, 'friends', 32409]\n",
891
+ "[32512, 'friends', 32489]\n",
892
+ "[32512, 'friends', 32468]\n",
893
+ "[32512, 'advice', 32468]\n",
894
+ "[32512, 'advice', 32489]\n",
895
+ "[32512, 'advice', 32541]\n",
896
+ "[32455, 'friends', 32489]\n",
897
+ "[32455, 'friends', 32480]\n",
898
+ "[32455, 'friends', 32546]\n",
899
+ "[32455, 'friends', 32419]\n",
900
+ "[32455, 'friends', 32413]\n",
901
+ "[32455, 'friends', 32501]\n",
902
+ "[32455, 'friends', 32435]\n",
903
+ "[32455, 'friends', 32540]\n",
904
+ "[32455, 'friends', 32392]\n",
905
+ "[32455, 'friends', 32402]\n",
906
+ "[32455, 'friends', 32410]\n",
907
+ "[32455, 'influential', 32544]\n",
908
+ "[32455, 'influential', 32405]\n",
909
+ "[32455, 'influential', 32408]\n",
910
+ "[32455, 'influential', 32413]\n",
911
+ "[32455, 'feedback', 32546]\n",
912
+ "[32455, 'feedback', 32410]\n",
913
+ "[32455, 'moretime', 32480]\n",
914
+ "[32455, 'moretime', 32546]\n",
915
+ "[32455, 'moretime', 32410]\n",
916
+ "[32455, 'moretime', 32489]\n",
917
+ "[32455, 'advice', 32392]\n",
918
+ "[32455, 'advice', 32480]\n",
919
+ "[32455, 'advice', 32489]\n",
920
+ "[32455, 'advice', 32501]\n",
921
+ "[32455, 'advice', 32546]\n",
922
+ "[32489, 'friends', 32410]\n",
923
+ "[32489, 'friends', 32413]\n",
924
+ "[32489, 'friends', 32499]\n",
925
+ "[32489, 'friends', 32441]\n",
926
+ "[32489, 'friends', 32480]\n",
927
+ "[32489, 'feedback', 32410]\n",
928
+ "[32489, 'advice', 32410]\n",
929
+ "[32432, 'friends', 32475]\n",
930
+ "[32432, 'friends', 32422]\n",
931
+ "[32432, 'friends', 32421]\n",
932
+ "[32432, 'friends', 32397]\n",
933
+ "[32432, 'friends', 32399]\n",
934
+ "[32432, 'friends', 32420]\n",
935
+ "[32432, 'advice', 32422]\n",
936
+ "[32432, 'advice', 32421]\n",
937
+ "[32432, 'advice', 32420]\n",
938
+ "[32432, 'advice', 32399]\n",
939
+ "[32432, 'advice', 32475]\n",
940
+ "[32432, 'advice', 32397]\n",
941
+ "[32476, 'friends', 32457]\n",
942
+ "[32476, 'friends', 32490]\n",
943
+ "[32476, 'friends', 32483]\n",
944
+ "[32476, 'friends', 32471]\n",
945
+ "[32476, 'friends', 32472]\n",
946
+ "[32476, 'influential', 32490]\n",
947
+ "[32476, 'influential', 32457]\n",
948
+ "[32476, 'feedback', 32490]\n",
949
+ "[32476, 'feedback', 32457]\n",
950
+ "[32476, 'moretime', 32457]\n",
951
+ "[32476, 'moretime', 32490]\n",
952
+ "[32476, 'moretime', 32483]\n",
953
+ "[32476, 'moretime', 32471]\n",
954
+ "[32476, 'moretime', 32472]\n",
955
+ "[32476, 'advice', 32490]\n",
956
+ "[32476, 'advice', 32457]\n",
957
+ "[32476, 'disrespect', 32545]\n",
958
+ "[32476, 'disrespect', 32421]\n",
959
+ "[32476, 'disrespect', 32422]\n",
960
+ "[32476, 'disrespect', 32522]\n",
961
+ "[32516, 'friends', 32448]\n",
962
+ "[32516, 'friends', 32541]\n",
963
+ "[32516, 'friends', 32479]\n",
964
+ "[32516, 'influential', 32448]\n",
965
+ "[32516, 'influential', 32525]\n",
966
+ "[32516, 'influential', 32443]\n",
967
+ "[32516, 'influential', 32463]\n",
968
+ "[32516, 'moretime', 32541]\n",
969
+ "[32516, 'moretime', 32448]\n",
970
+ "[32516, 'advice', 32448]\n",
971
+ "[32467, 'friends', 32553]\n",
972
+ "[32467, 'friends', 32408]\n",
973
+ "[32467, 'friends', 32413]\n",
974
+ "[32467, 'friends', 32448]\n",
975
+ "[32467, 'friends', 32405]\n",
976
+ "[32467, 'friends', 32485]\n",
977
+ "[32467, 'friends', 32393]\n",
978
+ "[32467, 'friends', 32517]\n",
979
+ "[32467, 'friends', 32534]\n",
980
+ "[32467, 'influential', 32408]\n",
981
+ "[32467, 'influential', 32413]\n",
982
+ "[32467, 'influential', 32443]\n",
983
+ "[32467, 'influential', 32405]\n",
984
+ "[32467, 'influential', 32544]\n",
985
+ "[32467, 'feedback', 32553]\n",
986
+ "[32467, 'feedback', 32534]\n",
987
+ "[32467, 'feedback', 32408]\n",
988
+ "[32467, 'moretime', 32553]\n",
989
+ "[32467, 'moretime', 32534]\n",
990
+ "[32467, 'moretime', 32408]\n",
991
+ "[32467, 'advice', 32553]\n",
992
+ "[32467, 'advice', 32534]\n",
993
+ "[32408, 'friends', 32550]\n",
994
+ "[32408, 'friends', 32541]\n",
995
+ "[32408, 'friends', 32413]\n",
996
+ "[32408, 'friends', 32474]\n",
997
+ "[32408, 'friends', 32499]\n",
998
+ "[32408, 'friends', 32440]\n",
999
+ "[32408, 'friends', 32467]\n",
1000
+ "[32408, 'friends', 32515]\n",
1001
+ "[32408, 'friends', 32534]\n",
1002
+ "[32408, 'friends', 32405]\n",
1003
+ "[32408, 'influential', 32413]\n",
1004
+ "[32408, 'influential', 32443]\n",
1005
+ "[32408, 'influential', 32405]\n",
1006
+ "[32408, 'influential', 32544]\n",
1007
+ "[32408, 'feedback', 32499]\n",
1008
+ "[32408, 'moretime', 32467]\n",
1009
+ "[32408, 'moretime', 32401]\n",
1010
+ "[32408, 'advice', 32499]\n",
1011
+ "[32420, 'friends', 32446]\n",
1012
+ "[32420, 'friends', 32399]\n",
1013
+ "[32420, 'friends', 32409]\n",
1014
+ "[32420, 'friends', 32540]\n",
1015
+ "[32420, 'friends', 32528]\n",
1016
+ "[32420, 'friends', 32527]\n",
1017
+ "[32420, 'friends', 32432]\n",
1018
+ "[32420, 'friends', 32448]\n",
1019
+ "[32420, 'influential', 32540]\n",
1020
+ "[32420, 'feedback', 32540]\n",
1021
+ "[32420, 'feedback', 32397]\n",
1022
+ "[32420, 'moretime', 32399]\n",
1023
+ "[32420, 'moretime', 32528]\n",
1024
+ "[32420, 'advice', 32540]\n",
1025
+ "[32420, 'advice', 32446]\n",
1026
+ "[32497, 'friends', 32412]\n",
1027
+ "[32497, 'feedback', 32412]\n",
1028
+ "[32497, 'moretime', 32412]\n",
1029
+ "[32497, 'advice', 32412]\n",
1030
+ "[32515, 'friends', 32505]\n",
1031
+ "[32515, 'friends', 32408]\n",
1032
+ "[32515, 'friends', 32462]\n",
1033
+ "[32515, 'feedback', 32505]\n",
1034
+ "[32515, 'moretime', 32505]\n",
1035
+ "[32515, 'moretime', 32408]\n",
1036
+ "[32515, 'advice', 32505]\n",
1037
+ "[32429, 'friends', 32415]\n",
1038
+ "[32429, 'friends', 32475]\n",
1039
+ "[32429, 'influential', 32475]\n",
1040
+ "[32429, 'feedback', 32435]\n",
1041
+ "[32429, 'moretime', 32415]\n",
1042
+ "[32415, 'friends', 32416]\n",
1043
+ "[32415, 'friends', 32496]\n",
1044
+ "[32415, 'friends', 32435]\n",
1045
+ "[32415, 'friends', 32498]\n",
1046
+ "[32415, 'friends', 32429]\n",
1047
+ "[32415, 'friends', 32397]\n",
1048
+ "[32415, 'friends', 32395]\n",
1049
+ "[32415, 'friends', 32543]\n",
1050
+ "[32415, 'friends', 32433]\n",
1051
+ "[32415, 'friends', 32546]\n",
1052
+ "[32415, 'friends', 32415]\n",
1053
+ "[32415, 'influential', 32416]\n",
1054
+ "[32415, 'influential', 32496]\n",
1055
+ "[32415, 'influential', 32415]\n",
1056
+ "[32415, 'feedback', 32435]\n",
1057
+ "[32415, 'feedback', 32451]\n",
1058
+ "[32415, 'moretime', 32543]\n",
1059
+ "[32415, 'moretime', 32528]\n",
1060
+ "[32415, 'advice', 32416]\n",
1061
+ "[32415, 'advice', 32496]\n",
1062
+ "[32415, 'advice', 32435]\n",
1063
+ "[32435, 'friends', 32527]\n",
1064
+ "[32435, 'friends', 32415]\n",
1065
+ "[32435, 'influential', 32408]\n",
1066
+ "[32435, 'influential', 32443]\n",
1067
+ "[32435, 'influential', 32525]\n",
1068
+ "[32435, 'influential', 32399]\n",
1069
+ "[32435, 'influential', 32485]\n",
1070
+ "[32435, 'moretime', 32415]\n",
1071
+ "[32435, 'moretime', 32399]\n",
1072
+ "[32435, 'moretime', 32409]\n",
1073
+ "[32435, 'moretime', 32546]\n",
1074
+ "[32405, 'friends', 32485]\n",
1075
+ "[32405, 'friends', 32443]\n",
1076
+ "[32405, 'friends', 32478]\n",
1077
+ "[32405, 'friends', 32463]\n",
1078
+ "[32405, 'friends', 32393]\n",
1079
+ "[32405, 'friends', 32413]\n",
1080
+ "[32405, 'friends', 32544]\n",
1081
+ "[32405, 'friends', 32491]\n",
1082
+ "[32405, 'friends', 32507]\n",
1083
+ "[32405, 'friends', 32518]\n",
1084
+ "[32405, 'friends', 32396]\n",
1085
+ "[32405, 'advice', 32478]\n",
1086
+ "[32405, 'advice', 32463]\n",
1087
+ "[32392, 'friends', 32532]\n",
1088
+ "[32392, 'friends', 32554]\n",
1089
+ "[32392, 'friends', 32455]\n",
1090
+ "[32392, 'friends', 32551]\n",
1091
+ "[32392, 'friends', 32542]\n",
1092
+ "[32392, 'friends', 32486]\n",
1093
+ "[32392, 'feedback', 32532]\n",
1094
+ "[32392, 'feedback', 32554]\n",
1095
+ "[32392, 'feedback', 32542]\n",
1096
+ "[32392, 'moretime', 32542]\n",
1097
+ "[32392, 'moretime', 32402]\n",
1098
+ "[32392, 'advice', 32551]\n",
1099
+ "[32392, 'advice', 32532]\n",
1100
+ "[32392, 'advice', 32554]\n",
1101
+ "[32495, 'friends', 32512]\n",
1102
+ "[32495, 'friends', 32454]\n",
1103
+ "[32495, 'friends', 32494]\n",
1104
+ "[32495, 'friends', 32541]\n",
1105
+ "[32495, 'moretime', 32512]\n",
1106
+ "[32495, 'moretime', 32541]\n",
1107
+ "[32495, 'moretime', 32494]\n",
1108
+ "[32427, 'friends', 32434]\n",
1109
+ "[32427, 'friends', 32488]\n",
1110
+ "[32427, 'friends', 32394]\n",
1111
+ "[32427, 'friends', 32407]\n",
1112
+ "[32427, 'friends', 32433]\n",
1113
+ "[32427, 'friends', 32423]\n",
1114
+ "[32427, 'friends', 32543]\n",
1115
+ "[32427, 'friends', 32542]\n",
1116
+ "[32427, 'influential', 32507]\n",
1117
+ "[32427, 'moretime', 32434]\n",
1118
+ "[32427, 'moretime', 32488]\n",
1119
+ "[32427, 'moretime', 32407]\n",
1120
+ "[32427, 'moretime', 32423]\n",
1121
+ "[32427, 'moretime', 32394]\n",
1122
+ "[32427, 'moretime', 32433]\n",
1123
+ "[32427, 'moretime', 32458]\n",
1124
+ "[32427, 'moretime', 32543]\n",
1125
+ "[32427, 'advice', 32434]\n",
1126
+ "[32427, 'advice', 32488]\n",
1127
+ "[32427, 'advice', 32394]\n",
1128
+ "[32427, 'advice', 32407]\n",
1129
+ "[32427, 'advice', 32542]\n",
1130
+ "[32427, 'advice', 32423]\n",
1131
+ "[32421, 'friends', 32504]\n",
1132
+ "[32421, 'friends', 32465]\n",
1133
+ "[32421, 'friends', 32432]\n",
1134
+ "[32421, 'friends', 32522]\n",
1135
+ "[32421, 'friends', 32422]\n",
1136
+ "[32421, 'friends', 32545]\n",
1137
+ "[32421, 'friends', 32460]\n",
1138
+ "[32421, 'friends', 32546]\n",
1139
+ "[32421, 'friends', 32554]\n",
1140
+ "[32421, 'feedback', 32422]\n",
1141
+ "[32421, 'moretime', 32504]\n",
1142
+ "[32421, 'moretime', 32545]\n",
1143
+ "[32421, 'moretime', 32422]\n",
1144
+ "[32421, 'moretime', 32554]\n",
1145
+ "[32421, 'moretime', 32546]\n",
1146
+ "[32421, 'moretime', 32432]\n",
1147
+ "[32421, 'moretime', 32522]\n",
1148
+ "[32421, 'advice', 32422]\n",
1149
+ "[32421, 'advice', 32432]\n",
1150
+ "[32421, 'advice', 32546]\n",
1151
+ "[32421, 'advice', 32522]\n",
1152
+ "[32422, 'friends', 32504]\n",
1153
+ "[32422, 'friends', 32522]\n",
1154
+ "[32422, 'friends', 32545]\n",
1155
+ "[32422, 'friends', 32421]\n",
1156
+ "[32422, 'friends', 32436]\n",
1157
+ "[32422, 'friends', 32432]\n",
1158
+ "[32422, 'friends', 32465]\n",
1159
+ "[32422, 'feedback', 32546]\n",
1160
+ "[32422, 'feedback', 32432]\n",
1161
+ "[32422, 'feedback', 32522]\n",
1162
+ "[32422, 'feedback', 32554]\n",
1163
+ "[32422, 'moretime', 32460]\n",
1164
+ "[32422, 'moretime', 32545]\n",
1165
+ "[32422, 'moretime', 32522]\n",
1166
+ "[32422, 'moretime', 32504]\n",
1167
+ "[32422, 'moretime', 32465]\n",
1168
+ "[32422, 'moretime', 32432]\n",
1169
+ "[32422, 'moretime', 32436]\n",
1170
+ "[32422, 'advice', 32432]\n",
1171
+ "[32422, 'advice', 32522]\n",
1172
+ "[32422, 'advice', 32421]\n",
1173
+ "[32422, 'advice', 32460]\n",
1174
+ "[32422, 'advice', 32546]\n",
1175
+ "[32403, 'friends', 32479]\n",
1176
+ "[32403, 'friends', 32457]\n",
1177
+ "[32403, 'friends', 32439]\n",
1178
+ "[32403, 'friends', 32412]\n",
1179
+ "[32403, 'friends', 32407]\n",
1180
+ "[32403, 'moretime', 32479]\n",
1181
+ "[32557, 'friends', 32444]\n",
1182
+ "[32557, 'friends', 32537]\n",
1183
+ "[32557, 'friends', 32526]\n",
1184
+ "[32557, 'feedback', 32444]\n",
1185
+ "[32557, 'feedback', 32483]\n",
1186
+ "[32557, 'feedback', 32526]\n",
1187
+ "[32557, 'moretime', 32444]\n",
1188
+ "[32557, 'advice', 32524]\n",
1189
+ "[32557, 'disrespect', 32500]\n",
1190
+ "[32499, 'friends', 32408]\n",
1191
+ "[32499, 'friends', 32468]\n",
1192
+ "[32499, 'friends', 32440]\n",
1193
+ "[32499, 'friends', 32474]\n",
1194
+ "[32499, 'friends', 32489]\n",
1195
+ "[32499, 'friends', 32410]\n",
1196
+ "[32499, 'friends', 32534]\n",
1197
+ "[32499, 'friends', 32529]\n",
1198
+ "[32499, 'influential', 32408]\n",
1199
+ "[32499, 'influential', 32529]\n",
1200
+ "[32499, 'influential', 32535]\n",
1201
+ "[32499, 'influential', 32426]\n",
1202
+ "[32499, 'influential', 32443]\n",
1203
+ "[32499, 'moretime', 32489]\n",
1204
+ "[32499, 'moretime', 32410]\n",
1205
+ "[32499, 'moretime', 32440]\n",
1206
+ "[32499, 'advice', 32468]\n",
1207
+ "[32499, 'advice', 32489]\n",
1208
+ "[32499, 'advice', 32410]\n",
1209
+ "[32499, 'advice', 32440]\n",
1210
+ "[32433, 'friends', 32533]\n",
1211
+ "[32433, 'friends', 32498]\n",
1212
+ "[32433, 'friends', 32502]\n",
1213
+ "[32433, 'friends', 32496]\n",
1214
+ "[32433, 'friends', 32404]\n",
1215
+ "[32433, 'friends', 32416]\n",
1216
+ "[32433, 'friends', 32465]\n",
1217
+ "[32433, 'friends', 32510]\n",
1218
+ "[32433, 'friends', 32543]\n",
1219
+ "[32433, 'friends', 32427]\n",
1220
+ "[32433, 'friends', 32542]\n",
1221
+ "[32433, 'friends', 32451]\n",
1222
+ "[32433, 'friends', 32546]\n",
1223
+ "[32433, 'friends', 32487]\n",
1224
+ "[32433, 'friends', 32424]\n",
1225
+ "[32433, 'friends', 32488]\n",
1226
+ "[32433, 'friends', 32504]\n",
1227
+ "[32433, 'friends', 32407]\n",
1228
+ "[32433, 'feedback', 32533]\n",
1229
+ "[32433, 'feedback', 32487]\n",
1230
+ "[32433, 'feedback', 32424]\n",
1231
+ "[32433, 'moretime', 32533]\n",
1232
+ "[32433, 'advice', 32533]\n",
1233
+ "[32433, 'advice', 32543]\n",
1234
+ "[32433, 'advice', 32498]\n",
1235
+ "[32433, 'advice', 32496]\n",
1236
+ "[32433, 'advice', 32546]\n",
1237
+ "[32402, 'friends', 32402]\n",
1238
+ "[32402, 'friends', 32528]\n",
1239
+ "[32402, 'friends', 32558]\n",
1240
+ "[32402, 'friends', 32565]\n",
1241
+ "[32402, 'friends', 32553]\n",
1242
+ "[32402, 'friends', 32411]\n",
1243
+ "[32402, 'friends', 32420]\n",
1244
+ "[32402, 'friends', 32397]\n",
1245
+ "[32402, 'influential', 32443]\n",
1246
+ "[32402, 'influential', 32413]\n",
1247
+ "[32402, 'feedback', 32420]\n",
1248
+ "[32402, 'feedback', 32540]\n",
1249
+ "[32402, 'feedback', 32565]\n",
1250
+ "[32402, 'feedback', 32468]\n",
1251
+ "[32402, 'feedback', 32528]\n",
1252
+ "[32402, 'feedback', 32558]\n",
1253
+ "[32402, 'moretime', 32528]\n",
1254
+ "[32402, 'moretime', 32558]\n",
1255
+ "[32402, 'moretime', 32565]\n",
1256
+ "[32402, 'moretime', 32553]\n",
1257
+ "[32402, 'moretime', 32420]\n",
1258
+ "[32402, 'moretime', 32411]\n",
1259
+ "[32402, 'moretime', 32397]\n",
1260
+ "[32402, 'advice', 32420]\n",
1261
+ "[32402, 'advice', 32565]\n",
1262
+ "[32402, 'advice', 32540]\n",
1263
+ "[32402, 'advice', 32468]\n",
1264
+ "[32402, 'advice', 32558]\n",
1265
+ "[32402, 'disrespect', 32522]\n",
1266
+ "[32491, 'friends', 32443]\n",
1267
+ "[32491, 'friends', 32518]\n",
1268
+ "[32491, 'friends', 32406]\n",
1269
+ "[32491, 'friends', 32544]\n",
1270
+ "[32491, 'friends', 32507]\n",
1271
+ "[32491, 'friends', 32405]\n",
1272
+ "[32491, 'friends', 32485]\n",
1273
+ "[32491, 'friends', 32463]\n",
1274
+ "[32491, 'friends', 32413]\n",
1275
+ "[32491, 'friends', 32396]\n",
1276
+ "[32491, 'friends', 32478]\n",
1277
+ "[32491, 'friends', 32418]\n",
1278
+ "[32491, 'friends', 32508]\n",
1279
+ "[32491, 'friends', 32425]\n",
1280
+ "[32491, 'friends', 32408]\n",
1281
+ "[32491, 'friends', 32541]\n",
1282
+ "[32491, 'influential', 32491]\n",
1283
+ "[32491, 'influential', 32443]\n",
1284
+ "[32491, 'influential', 32405]\n",
1285
+ "[32491, 'influential', 32518]\n",
1286
+ "[32491, 'feedback', 32443]\n",
1287
+ "[32491, 'moretime', 32443]\n",
1288
+ "[32491, 'moretime', 32518]\n",
1289
+ "[32491, 'moretime', 32535]\n",
1290
+ "[32491, 'moretime', 32508]\n",
1291
+ "[32491, 'moretime', 32396]\n",
1292
+ "[32491, 'moretime', 32507]\n",
1293
+ "[32491, 'advice', 32443]\n",
1294
+ "[32491, 'advice', 32518]\n",
1295
+ "[32491, 'disrespect', 32466]\n",
1296
+ "[32453, 'friends', 32563]\n",
1297
+ "[32453, 'influential', 32452]\n",
1298
+ "[32453, 'feedback', 32563]\n",
1299
+ "[32453, 'moretime', 32563]\n",
1300
+ "[32453, 'moretime', 32562]\n",
1301
+ "[32453, 'advice', 32563]\n",
1302
+ "[32453, 'disrespect', 32413]\n",
1303
+ "[32453, 'disrespect', 32452]\n",
1304
+ "[32530, 'friends', 32429]\n",
1305
+ "[32530, 'friends', 32398]\n",
1306
+ "[32530, 'friends', 32520]\n",
1307
+ "[32530, 'moretime', 32429]\n",
1308
+ "[32530, 'moretime', 32398]\n",
1309
+ "[32530, 'advice', 32429]\n",
1310
+ "[32544, 'friends', 32443]\n",
1311
+ "[32544, 'friends', 32405]\n",
1312
+ "[32544, 'friends', 32485]\n",
1313
+ "[32544, 'friends', 32393]\n",
1314
+ "[32544, 'friends', 32491]\n",
1315
+ "[32544, 'friends', 32396]\n",
1316
+ "[32544, 'friends', 32477]\n",
1317
+ "[32544, 'friends', 32401]\n",
1318
+ "[32544, 'friends', 32508]\n",
1319
+ "[32544, 'friends', 32426]\n",
1320
+ "[32544, 'friends', 32463]\n",
1321
+ "[32544, 'friends', 32413]\n",
1322
+ "[32544, 'friends', 32518]\n",
1323
+ "[32544, 'friends', 32525]\n",
1324
+ "[32544, 'feedback', 32405]\n",
1325
+ "[32544, 'feedback', 32468]\n",
1326
+ "[32544, 'feedback', 32485]\n",
1327
+ "[32544, 'moretime', 32477]\n",
1328
+ "[32544, 'moretime', 32468]\n",
1329
+ "[32544, 'moretime', 32411]\n",
1330
+ "[32544, 'moretime', 32443]\n",
1331
+ "[32544, 'advice', 32468]\n",
1332
+ "[32544, 'advice', 32405]\n",
1333
+ "[32508, 'friends', 32401]\n",
1334
+ "[32508, 'friends', 32396]\n",
1335
+ "[32508, 'friends', 32535]\n",
1336
+ "[32508, 'friends', 32418]\n",
1337
+ "[32508, 'friends', 32478]\n",
1338
+ "[32508, 'friends', 32555]\n",
1339
+ "[32508, 'friends', 32477]\n",
1340
+ "[32508, 'friends', 32426]\n",
1341
+ "[32508, 'influential', 32396]\n",
1342
+ "[32508, 'influential', 32535]\n",
1343
+ "[32508, 'influential', 32478]\n",
1344
+ "[32508, 'influential', 32401]\n",
1345
+ "[32508, 'feedback', 32478]\n",
1346
+ "[32508, 'moretime', 32417]\n",
1347
+ "[32508, 'moretime', 32405]\n",
1348
+ "[32508, 'moretime', 32485]\n",
1349
+ "[32508, 'advice', 32478]\n",
1350
+ "[32508, 'advice', 32401]\n",
1351
+ "[32407, 'friends', 32548]\n",
1352
+ "[32407, 'friends', 32563]\n",
1353
+ "[32407, 'influential', 32544]\n",
1354
+ "[32407, 'feedback', 32392]\n",
1355
+ "[32407, 'feedback', 32542]\n",
1356
+ "[32407, 'feedback', 32559]\n",
1357
+ "[32407, 'moretime', 32548]\n",
1358
+ "[32407, 'moretime', 32563]\n",
1359
+ "[32407, 'moretime', 32559]\n",
1360
+ "[32407, 'advice', 32563]\n",
1361
+ "[32407, 'advice', 32416]\n",
1362
+ "[32407, 'advice', 32543]\n",
1363
+ "[32407, 'disrespect', 32411]\n",
1364
+ "[32407, 'disrespect', 32556]\n",
1365
+ "[32565, 'friends', 32565]\n",
1366
+ "[32565, 'friends', 32556]\n",
1367
+ "[32565, 'friends', 32558]\n",
1368
+ "[32565, 'friends', 32528]\n",
1369
+ "[32565, 'friends', 32402]\n",
1370
+ "[32565, 'friends', 32559]\n",
1371
+ "[32565, 'friends', 32523]\n",
1372
+ "[32565, 'influential', 32443]\n",
1373
+ "[32565, 'influential', 32413]\n",
1374
+ "[32565, 'influential', 32406]\n",
1375
+ "[32565, 'influential', 32393]\n",
1376
+ "[32565, 'feedback', 32420]\n",
1377
+ "[32565, 'feedback', 32523]\n",
1378
+ "[32565, 'moretime', 32556]\n",
1379
+ "[32565, 'moretime', 32402]\n",
1380
+ "[32565, 'moretime', 32559]\n",
1381
+ "[32565, 'moretime', 32528]\n",
1382
+ "[32565, 'moretime', 32558]\n",
1383
+ "[32565, 'moretime', 32523]\n",
1384
+ "[32565, 'advice', 32420]\n",
1385
+ "[32565, 'advice', 32540]\n",
1386
+ "[32565, 'disrespect', 32441]\n",
1387
+ "[32565, 'disrespect', 32393]\n",
1388
+ "[32565, 'disrespect', 32564]\n",
1389
+ "[32565, 'disrespect', 32547]\n",
1390
+ "[32565, 'disrespect', 32522]\n",
1391
+ "[32529, 'friends', 32399]\n",
1392
+ "[32529, 'friends', 32425]\n",
1393
+ "[32529, 'friends', 32541]\n",
1394
+ "[32529, 'friends', 32408]\n",
1395
+ "[32529, 'friends', 32468]\n",
1396
+ "[32529, 'friends', 32551]\n",
1397
+ "[32529, 'friends', 32492]\n",
1398
+ "[32529, 'friends', 32499]\n",
1399
+ "[32529, 'friends', 32439]\n",
1400
+ "[32529, 'friends', 32525]\n",
1401
+ "[32529, 'friends', 32549]\n",
1402
+ "[32529, 'friends', 32485]\n",
1403
+ "[32529, 'friends', 32405]\n",
1404
+ "[32529, 'friends', 32489]\n",
1405
+ "[32529, 'friends', 32413]\n",
1406
+ "[32529, 'influential', 32443]\n",
1407
+ "[32529, 'influential', 32525]\n",
1408
+ "[32529, 'influential', 32466]\n",
1409
+ "[32529, 'influential', 32540]\n",
1410
+ "[32529, 'influential', 32507]\n",
1411
+ "[32529, 'influential', 32405]\n",
1412
+ "[32529, 'influential', 32399]\n",
1413
+ "[32529, 'influential', 32406]\n",
1414
+ "[32529, 'feedback', 32499]\n",
1415
+ "[32529, 'feedback', 32399]\n",
1416
+ "[32529, 'feedback', 32468]\n",
1417
+ "[32529, 'moretime', 32439]\n",
1418
+ "[32529, 'moretime', 32551]\n",
1419
+ "[32529, 'moretime', 32399]\n",
1420
+ "[32529, 'moretime', 32492]\n",
1421
+ "[32529, 'moretime', 32408]\n",
1422
+ "[32529, 'moretime', 32499]\n",
1423
+ "[32529, 'moretime', 32425]\n",
1424
+ "[32529, 'advice', 32499]\n",
1425
+ "[32529, 'advice', 32399]\n",
1426
+ "[32529, 'advice', 32468]\n",
1427
+ "[32529, 'disrespect', 32422]\n",
1428
+ "[32457, 'friends', 32476]\n",
1429
+ "[32457, 'friends', 32483]\n",
1430
+ "[32457, 'friends', 32439]\n",
1431
+ "[32457, 'friends', 32490]\n",
1432
+ "[32457, 'influential', 32408]\n",
1433
+ "[32457, 'influential', 32485]\n",
1434
+ "[32457, 'feedback', 32476]\n",
1435
+ "[32457, 'feedback', 32490]\n",
1436
+ "[32457, 'moretime', 32476]\n",
1437
+ "[32457, 'moretime', 32490]\n",
1438
+ "[32457, 'moretime', 32439]\n",
1439
+ "[32457, 'advice', 32476]\n",
1440
+ "[32457, 'advice', 32490]\n",
1441
+ "[32457, 'disrespect', 32441]\n",
1442
+ "[32545, 'friends', 32465]\n",
1443
+ "[32545, 'friends', 32504]\n",
1444
+ "[32545, 'moretime', 32465]\n",
1445
+ "[32545, 'advice', 32545]\n",
1446
+ "[32492, 'friends', 32529]\n",
1447
+ "[32492, 'friends', 32551]\n",
1448
+ "[32492, 'friends', 32425]\n",
1449
+ "[32492, 'friends', 32399]\n",
1450
+ "[32492, 'friends', 32507]\n",
1451
+ "[32492, 'friends', 32544]\n",
1452
+ "[32492, 'friends', 32393]\n",
1453
+ "[32492, 'friends', 32404]\n",
1454
+ "[32492, 'friends', 32500]\n",
1455
+ "[32492, 'moretime', 32529]\n",
1456
+ "[32492, 'moretime', 32551]\n",
1457
+ "[32492, 'moretime', 32425]\n",
1458
+ "[32406, 'friends', 32518]\n",
1459
+ "[32406, 'friends', 32491]\n",
1460
+ "[32406, 'friends', 32443]\n",
1461
+ "[32406, 'friends', 32425]\n",
1462
+ "[32406, 'friends', 32408]\n",
1463
+ "[32406, 'friends', 32439]\n",
1464
+ "[32406, 'friends', 32551]\n",
1465
+ "[32406, 'friends', 32431]\n",
1466
+ "[32406, 'influential', 32518]\n",
1467
+ "[32406, 'influential', 32406]\n",
1468
+ "[32406, 'influential', 32491]\n",
1469
+ "[32406, 'influential', 32443]\n",
1470
+ "[32406, 'influential', 32439]\n",
1471
+ "[32406, 'moretime', 32439]\n",
1472
+ "[32406, 'moretime', 32477]\n",
1473
+ "[32406, 'moretime', 32518]\n",
1474
+ "[32406, 'moretime', 32491]\n",
1475
+ "[32406, 'advice', 32425]\n",
1476
+ "[32406, 'advice', 32408]\n",
1477
+ "[32406, 'disrespect', 32466]\n",
1478
+ "[32479, 'friends', 32516]\n",
1479
+ "[32479, 'friends', 32448]\n",
1480
+ "[32479, 'friends', 32403]\n",
1481
+ "[32479, 'friends', 32487]\n",
1482
+ "[32479, 'friends', 32428]\n",
1483
+ "[32479, 'friends', 32457]\n",
1484
+ "[32479, 'friends', 32541]\n",
1485
+ "[32479, 'friends', 32439]\n",
1486
+ "[32479, 'advice', 32448]\n",
1487
+ "[32490, 'friends', 32476]\n",
1488
+ "[32490, 'friends', 32457]\n",
1489
+ "[32490, 'friends', 32455]\n",
1490
+ "[32490, 'friends', 32510]\n",
1491
+ "[32490, 'friends', 32448]\n",
1492
+ "[32490, 'influential', 32455]\n",
1493
+ "[32490, 'feedback', 32448]\n",
1494
+ "[32490, 'moretime', 32543]\n",
1495
+ "[32490, 'moretime', 32448]\n",
1496
+ "[32490, 'advice', 32448]\n",
1497
+ "[32490, 'advice', 32476]\n",
1498
+ "[32490, 'disrespect', 32482]\n",
1499
+ "[32490, 'disrespect', 32564]\n",
1500
+ "[32513, 'friends', 32517]\n",
1501
+ "[32513, 'friends', 32469]\n",
1502
+ "[32513, 'friends', 32546]\n",
1503
+ "[32513, 'friends', 32440]\n",
1504
+ "[32513, 'friends', 32462]\n",
1505
+ "[32513, 'friends', 32540]\n",
1506
+ "[32513, 'friends', 32409]\n",
1507
+ "[32513, 'influential', 32406]\n",
1508
+ "[32513, 'influential', 32425]\n",
1509
+ "[32513, 'influential', 32491]\n",
1510
+ "[32513, 'influential', 32525]\n",
1511
+ "[32513, 'influential', 32408]\n",
1512
+ "[32513, 'influential', 32405]\n",
1513
+ "[32513, 'influential', 32544]\n",
1514
+ "[32513, 'advice', 32517]\n",
1515
+ "[32513, 'advice', 32469]\n",
1516
+ "[32480, 'friends', 32455]\n",
1517
+ "[32480, 'friends', 32489]\n",
1518
+ "[32480, 'friends', 32546]\n",
1519
+ "[32480, 'friends', 32501]\n",
1520
+ "[32480, 'friends', 32419]\n",
1521
+ "[32480, 'influential', 32405]\n",
1522
+ "[32480, 'influential', 32544]\n",
1523
+ "[32480, 'influential', 32413]\n",
1524
+ "[32480, 'moretime', 32455]\n",
1525
+ "[32480, 'moretime', 32489]\n",
1526
+ "[32480, 'advice', 32501]\n",
1527
+ "[32480, 'advice', 32455]\n",
1528
+ "[32480, 'advice', 32489]\n",
1529
+ "[32546, 'friends', 32499]\n",
1530
+ "[32546, 'friends', 32480]\n",
1531
+ "[32546, 'friends', 32501]\n",
1532
+ "[32546, 'friends', 32455]\n",
1533
+ "[32546, 'friends', 32490]\n",
1534
+ "[32546, 'friends', 32435]\n",
1535
+ "[32546, 'friends', 32415]\n",
1536
+ "[32546, 'friends', 32460]\n",
1537
+ "[32546, 'friends', 32496]\n",
1538
+ "[32546, 'friends', 32414]\n",
1539
+ "[32546, 'friends', 32547]\n",
1540
+ "[32546, 'friends', 32421]\n",
1541
+ "[32546, 'friends', 32422]\n",
1542
+ "[32546, 'friends', 32513]\n",
1543
+ "[32546, 'friends', 32517]\n",
1544
+ "[32546, 'friends', 32469]\n",
1545
+ "[32546, 'friends', 32484]\n",
1546
+ "[32546, 'moretime', 32513]\n",
1547
+ "[32546, 'moretime', 32517]\n",
1548
+ "[32546, 'moretime', 32469]\n",
1549
+ "[32546, 'advice', 32421]\n",
1550
+ "[32546, 'advice', 32422]\n",
1551
+ "[32546, 'advice', 32455]\n",
1552
+ "[32546, 'advice', 32499]\n",
1553
+ "[32546, 'advice', 32517]\n",
1554
+ "[32546, 'advice', 32469]\n",
1555
+ "[32535, 'friends', 32418]\n",
1556
+ "[32535, 'friends', 32426]\n",
1557
+ "[32535, 'friends', 32396]\n",
1558
+ "[32535, 'friends', 32508]\n",
1559
+ "[32535, 'friends', 32401]\n",
1560
+ "[32535, 'influential', 32426]\n",
1561
+ "[32535, 'influential', 32418]\n",
1562
+ "[32535, 'influential', 32396]\n",
1563
+ "[32535, 'feedback', 32508]\n",
1564
+ "[32535, 'moretime', 32418]\n",
1565
+ "[32535, 'advice', 32418]\n",
1566
+ "[32535, 'advice', 32426]\n",
1567
+ "[32535, 'advice', 32396]\n",
1568
+ "[32535, 'disrespect', 32519]\n",
1569
+ "[32456, 'friends', 32462]\n",
1570
+ "[32456, 'friends', 32513]\n",
1571
+ "[32456, 'friends', 32463]\n",
1572
+ "[32456, 'friends', 32551]\n",
1573
+ "[32456, 'friends', 32517]\n",
1574
+ "[32456, 'friends', 32478]\n",
1575
+ "[32456, 'influential', 32462]\n",
1576
+ "[32456, 'influential', 32513]\n",
1577
+ "[32456, 'feedback', 32462]\n",
1578
+ "[32456, 'feedback', 32551]\n",
1579
+ "[32456, 'feedback', 32513]\n",
1580
+ "[32456, 'moretime', 32462]\n",
1581
+ "[32456, 'moretime', 32513]\n",
1582
+ "[32456, 'moretime', 32551]\n",
1583
+ "[32456, 'advice', 32462]\n",
1584
+ "[32456, 'advice', 32551]\n",
1585
+ "[32551, 'friends', 32549]\n",
1586
+ "[32551, 'friends', 32431]\n",
1587
+ "[32551, 'friends', 32425]\n",
1588
+ "[32551, 'friends', 32529]\n",
1589
+ "[32551, 'friends', 32525]\n",
1590
+ "[32551, 'friends', 32391]\n",
1591
+ "[32551, 'friends', 32554]\n",
1592
+ "[32551, 'friends', 32464]\n",
1593
+ "[32551, 'friends', 32404]\n",
1594
+ "[32551, 'friends', 32399]\n",
1595
+ "[32551, 'influential', 32544]\n",
1596
+ "[32551, 'influential', 32507]\n",
1597
+ "[32551, 'influential', 32405]\n",
1598
+ "[32551, 'feedback', 32546]\n",
1599
+ "[32551, 'feedback', 32549]\n",
1600
+ "[32551, 'feedback', 32399]\n",
1601
+ "[32551, 'moretime', 32546]\n",
1602
+ "[32551, 'advice', 32549]\n",
1603
+ "[32551, 'advice', 32391]\n",
1604
+ "[32551, 'advice', 32425]\n",
1605
+ "[32551, 'advice', 32554]\n",
1606
+ "[32551, 'advice', 32546]\n",
1607
+ "[32446, 'friends', 32523]\n",
1608
+ "[32446, 'friends', 32420]\n",
1609
+ "[32446, 'friends', 32501]\n",
1610
+ "[32446, 'friends', 32437]\n",
1611
+ "[32446, 'friends', 32448]\n",
1612
+ "[32446, 'friends', 32490]\n",
1613
+ "[32446, 'friends', 32558]\n",
1614
+ "[32446, 'friends', 32409]\n",
1615
+ "[32446, 'friends', 32421]\n",
1616
+ "[32446, 'friends', 32476]\n",
1617
+ "[32446, 'friends', 32540]\n",
1618
+ "[32446, 'influential', 32420]\n",
1619
+ "[32446, 'influential', 32443]\n",
1620
+ "[32446, 'feedback', 32420]\n",
1621
+ "[32446, 'feedback', 32540]\n",
1622
+ "[32446, 'moretime', 32420]\n",
1623
+ "[32446, 'moretime', 32501]\n",
1624
+ "[32446, 'advice', 32420]\n",
1625
+ "[32451, 'friends', 32394]\n",
1626
+ "[32451, 'friends', 32519]\n",
1627
+ "[32451, 'friends', 32431]\n",
1628
+ "[32451, 'friends', 32507]\n",
1629
+ "[32451, 'friends', 32413]\n",
1630
+ "[32451, 'friends', 32478]\n",
1631
+ "[32451, 'friends', 32486]\n",
1632
+ "[32451, 'friends', 32424]\n",
1633
+ "[32451, 'friends', 32485]\n",
1634
+ "[32451, 'friends', 32396]\n",
1635
+ "[32451, 'moretime', 32394]\n",
1636
+ "[32451, 'moretime', 32396]\n",
1637
+ "[32451, 'moretime', 32507]\n",
1638
+ "[32451, 'moretime', 32431]\n",
1639
+ "[32451, 'moretime', 32478]\n",
1640
+ "[32451, 'moretime', 32424]\n",
1641
+ "[32451, 'disrespect', 32556]\n",
1642
+ "[32425, 'friends', 32431]\n",
1643
+ "[32425, 'friends', 32551]\n",
1644
+ "[32425, 'friends', 32464]\n",
1645
+ "[32425, 'friends', 32529]\n",
1646
+ "[32425, 'friends', 32549]\n",
1647
+ "[32425, 'friends', 32525]\n",
1648
+ "[32425, 'friends', 32391]\n",
1649
+ "[32425, 'friends', 32406]\n",
1650
+ "[32425, 'friends', 32518]\n",
1651
+ "[32425, 'influential', 32544]\n",
1652
+ "[32425, 'influential', 32405]\n",
1653
+ "[32425, 'influential', 32393]\n",
1654
+ "[32425, 'influential', 32518]\n",
1655
+ "[32425, 'moretime', 32518]\n",
1656
+ "[32425, 'advice', 32391]\n",
1657
+ "[32425, 'advice', 32464]\n",
1658
+ "[32425, 'advice', 32551]\n",
1659
+ "[32471, 'friends', 32483]\n",
1660
+ "[32471, 'friends', 32452]\n",
1661
+ "[32471, 'friends', 32484]\n",
1662
+ "[32471, 'friends', 32537]\n",
1663
+ "[32471, 'friends', 32457]\n",
1664
+ "[32471, 'influential', 32452]\n",
1665
+ "[32471, 'moretime', 32483]\n",
1666
+ "[32471, 'moretime', 32452]\n",
1667
+ "[32471, 'advice', 32457]\n",
1668
+ "[32471, 'advice', 32483]\n",
1669
+ "[32528, 'friends', 32539]\n",
1670
+ "[32528, 'friends', 32540]\n",
1671
+ "[32528, 'friends', 32420]\n",
1672
+ "[32528, 'friends', 32558]\n",
1673
+ "[32528, 'friends', 32476]\n",
1674
+ "[32528, 'friends', 32402]\n",
1675
+ "[32528, 'friends', 32565]\n",
1676
+ "[32528, 'advice', 32420]\n",
1677
+ "[32528, 'advice', 32540]\n",
1678
+ "[32528, 'advice', 32476]\n",
1679
+ "[32528, 'advice', 32539]\n",
1680
+ "[32528, 'advice', 32402]\n",
1681
+ "[32528, 'advice', 32565]\n",
1682
+ "[32468, 'friends', 32418]\n",
1683
+ "[32468, 'friends', 32426]\n",
1684
+ "[32468, 'friends', 32408]\n",
1685
+ "[32468, 'friends', 32529]\n",
1686
+ "[32468, 'friends', 32499]\n",
1687
+ "[32468, 'friends', 32534]\n",
1688
+ "[32468, 'friends', 32535]\n",
1689
+ "[32468, 'influential', 32443]\n",
1690
+ "[32468, 'influential', 32525]\n",
1691
+ "[32468, 'influential', 32507]\n",
1692
+ "[32468, 'feedback', 32420]\n",
1693
+ "[32468, 'feedback', 32499]\n",
1694
+ "[32468, 'feedback', 32448]\n",
1695
+ "[32468, 'moretime', 32418]\n",
1696
+ "[32468, 'moretime', 32426]\n",
1697
+ "[32468, 'moretime', 32401]\n",
1698
+ "[32468, 'moretime', 32544]\n",
1699
+ "[32468, 'moretime', 32535]\n",
1700
+ "[32468, 'advice', 32540]\n",
1701
+ "[32468, 'advice', 32420]\n",
1702
+ "[32414, 'friends', 32463]\n",
1703
+ "[32414, 'friends', 32440]\n",
1704
+ "[32414, 'friends', 32546]\n",
1705
+ "[32414, 'friends', 32469]\n",
1706
+ "[32414, 'friends', 32513]\n",
1707
+ "[32414, 'friends', 32517]\n",
1708
+ "[32414, 'influential', 32408]\n",
1709
+ "[32414, 'influential', 32405]\n",
1710
+ "[32414, 'feedback', 32540]\n",
1711
+ "[32414, 'feedback', 32532]\n",
1712
+ "[32414, 'moretime', 32469]\n",
1713
+ "[32414, 'moretime', 32546]\n",
1714
+ "[32414, 'moretime', 32440]\n",
1715
+ "[32414, 'moretime', 32463]\n",
1716
+ "[32414, 'moretime', 32513]\n",
1717
+ "[32414, 'moretime', 32413]\n",
1718
+ "[32414, 'moretime', 32405]\n",
1719
+ "[32414, 'advice', 32540]\n",
1720
+ "[32414, 'advice', 32532]\n",
1721
+ "[32414, 'disrespect', 32466]\n",
1722
+ "[32483, 'friends', 32457]\n",
1723
+ "[32483, 'friends', 32442]\n",
1724
+ "[32483, 'friends', 32560]\n",
1725
+ "[32483, 'influential', 32540]\n",
1726
+ "[32483, 'feedback', 32457]\n",
1727
+ "[32483, 'moretime', 32457]\n",
1728
+ "[32483, 'moretime', 32442]\n",
1729
+ "[32483, 'moretime', 32471]\n",
1730
+ "[32483, 'moretime', 32472]\n",
1731
+ "[32483, 'moretime', 32537]\n",
1732
+ "[32483, 'moretime', 32560]\n",
1733
+ "[32483, 'advice', 32457]\n",
1734
+ "[32418, 'friends', 32535]\n",
1735
+ "[32418, 'friends', 32426]\n",
1736
+ "[32418, 'friends', 32468]\n",
1737
+ "[32418, 'friends', 32555]\n",
1738
+ "[32418, 'friends', 32477]\n",
1739
+ "[32418, 'friends', 32431]\n",
1740
+ "[32418, 'friends', 32470]\n",
1741
+ "[32418, 'friends', 32550]\n",
1742
+ "[32418, 'friends', 32401]\n",
1743
+ "[32418, 'friends', 32396]\n",
1744
+ "[32418, 'influential', 32396]\n",
1745
+ "[32418, 'influential', 32468]\n",
1746
+ "[32418, 'moretime', 32468]\n",
1747
+ "[32418, 'moretime', 32555]\n",
1748
+ "[32418, 'moretime', 32535]\n",
1749
+ "[32418, 'moretime', 32426]\n",
1750
+ "[32418, 'moretime', 32396]\n",
1751
+ "[32418, 'advice', 32470]\n",
1752
+ "[32418, 'advice', 32401]\n",
1753
+ "[32418, 'advice', 32468]\n",
1754
+ "[32418, 'advice', 32426]\n",
1755
+ "[32394, 'friends', 32434]\n",
1756
+ "[32394, 'friends', 32451]\n",
1757
+ "[32394, 'friends', 32424]\n",
1758
+ "[32394, 'friends', 32488]\n",
1759
+ "[32394, 'friends', 32519]\n",
1760
+ "[32394, 'influential', 32507]\n",
1761
+ "[32394, 'influential', 32431]\n",
1762
+ "[32394, 'feedback', 32451]\n",
1763
+ "[32394, 'feedback', 32434]\n",
1764
+ "[32394, 'feedback', 32424]\n",
1765
+ "[32394, 'advice', 32451]\n",
1766
+ "[32394, 'advice', 32434]\n",
1767
+ "[32394, 'advice', 32424]\n",
1768
+ "[32431, 'friends', 32551]\n",
1769
+ "[32431, 'friends', 32464]\n",
1770
+ "[32431, 'friends', 32425]\n",
1771
+ "[32431, 'friends', 32391]\n",
1772
+ "[32431, 'friends', 32525]\n",
1773
+ "[32431, 'friends', 32477]\n",
1774
+ "[32431, 'friends', 32507]\n",
1775
+ "[32431, 'friends', 32440]\n",
1776
+ "[32431, 'friends', 32470]\n",
1777
+ "[32431, 'friends', 32418]\n",
1778
+ "[32431, 'friends', 32393]\n",
1779
+ "[32431, 'friends', 32535]\n",
1780
+ "[32431, 'friends', 32443]\n",
1781
+ "[32431, 'friends', 32549]\n",
1782
+ "[32431, 'friends', 32485]\n",
1783
+ "[32431, 'friends', 32405]\n",
1784
+ "[32431, 'friends', 32514]\n",
1785
+ "[32431, 'friends', 32552]\n",
1786
+ "[32431, 'friends', 32466]\n",
1787
+ "[32431, 'friends', 32439]\n",
1788
+ "[32431, 'friends', 32478]\n",
1789
+ "[32431, 'influential', 32477]\n",
1790
+ "[32431, 'influential', 32507]\n",
1791
+ "[32431, 'advice', 32391]\n",
1792
+ "[32431, 'advice', 32551]\n",
1793
+ "[32431, 'advice', 32549]\n",
1794
+ "[32431, 'advice', 32464]\n",
1795
+ "[32411, 'friends', 32411]\n",
1796
+ "[32411, 'influential', 32411]\n",
1797
+ "[32411, 'advice', 32468]\n",
1798
+ "[32411, 'advice', 32411]\n",
1799
+ "[32411, 'disrespect', 32466]\n",
1800
+ "[32558, 'friends', 32528]\n",
1801
+ "[32558, 'friends', 32565]\n",
1802
+ "[32558, 'moretime', 32528]\n",
1803
+ "[32558, 'moretime', 32565]\n",
1804
+ "[32558, 'advice', 32528]\n",
1805
+ "[32558, 'advice', 32565]\n",
1806
+ "[32424, 'friends', 32394]\n",
1807
+ "[32424, 'friends', 32451]\n",
1808
+ "[32424, 'friends', 32434]\n",
1809
+ "[32424, 'friends', 32519]\n",
1810
+ "[32424, 'friends', 32486]\n",
1811
+ "[32424, 'influential', 32507]\n",
1812
+ "[32424, 'influential', 32485]\n",
1813
+ "[32424, 'influential', 32396]\n",
1814
+ "[32424, 'feedback', 32394]\n",
1815
+ "[32424, 'feedback', 32451]\n",
1816
+ "[32424, 'feedback', 32434]\n",
1817
+ "[32424, 'feedback', 32486]\n",
1818
+ "[32424, 'moretime', 32394]\n",
1819
+ "[32424, 'moretime', 32434]\n",
1820
+ "[32424, 'moretime', 32451]\n",
1821
+ "[32424, 'moretime', 32519]\n",
1822
+ "[32424, 'moretime', 32486]\n",
1823
+ "[32424, 'advice', 32394]\n",
1824
+ "[32424, 'advice', 32434]\n",
1825
+ "[32424, 'advice', 32451]\n",
1826
+ "[32424, 'advice', 32519]\n",
1827
+ "[32424, 'advice', 32486]\n",
1828
+ "[32533, 'friends', 32433]\n",
1829
+ "[32533, 'friends', 32465]\n",
1830
+ "[32533, 'friends', 32498]\n",
1831
+ "[32533, 'friends', 32458]\n",
1832
+ "[32533, 'friends', 32502]\n",
1833
+ "[32533, 'friends', 32555]\n",
1834
+ "[32533, 'friends', 32416]\n",
1835
+ "[32533, 'friends', 32543]\n",
1836
+ "[32533, 'influential', 32433]\n",
1837
+ "[32533, 'influential', 32498]\n",
1838
+ "[32533, 'influential', 32525]\n",
1839
+ "[32533, 'feedback', 32465]\n",
1840
+ "[32533, 'feedback', 32433]\n",
1841
+ "[32533, 'moretime', 32448]\n",
1842
+ "[32533, 'advice', 32465]\n",
1843
+ "[32533, 'advice', 32433]\n",
1844
+ "[32547, 'friends', 32442]\n",
1845
+ "[32547, 'friends', 32438]\n",
1846
+ "[32547, 'friends', 32484]\n",
1847
+ "[32547, 'friends', 32564]\n",
1848
+ "[32547, 'feedback', 32459]\n",
1849
+ "[32547, 'moretime', 32442]\n",
1850
+ "[32547, 'moretime', 32438]\n",
1851
+ "[32547, 'moretime', 32484]\n",
1852
+ "[32547, 'advice', 32459]\n",
1853
+ "[32547, 'advice', 32442]\n",
1854
+ "[32547, 'advice', 32484]\n",
1855
+ "[32547, 'disrespect', 32441]\n",
1856
+ "[32430, 'friends', 32418]\n",
1857
+ "[32430, 'friends', 32426]\n",
1858
+ "[32430, 'friends', 32535]\n",
1859
+ "[32430, 'friends', 32440]\n",
1860
+ "[32430, 'friends', 32519]\n",
1861
+ "[32430, 'moretime', 32418]\n",
1862
+ "[32430, 'moretime', 32426]\n",
1863
+ "[32430, 'moretime', 32535]\n",
1864
+ "[32430, 'moretime', 32519]\n",
1865
+ "[32430, 'moretime', 32439]\n",
1866
+ "[32564, 'friends', 32452]\n",
1867
+ "[32564, 'friends', 32547]\n",
1868
+ "[32564, 'friends', 32438]\n",
1869
+ "[32564, 'friends', 32442]\n",
1870
+ "[32564, 'advice', 32547]\n",
1871
+ "[32564, 'disrespect', 32559]\n",
1872
+ "[32564, 'disrespect', 32455]\n",
1873
+ "[32537, 'friends', 32484]\n",
1874
+ "[32537, 'influential', 32443]\n",
1875
+ "[32537, 'influential', 32459]\n",
1876
+ "[32537, 'moretime', 32484]\n",
1877
+ "[32537, 'moretime', 32483]\n",
1878
+ "[32537, 'advice', 32484]\n",
1879
+ "[32537, 'advice', 32399]\n",
1880
+ "[32441, 'friends', 32489]\n",
1881
+ "[32441, 'friends', 32410]\n",
1882
+ "[32441, 'influential', 32489]\n",
1883
+ "[32441, 'feedback', 32489]\n",
1884
+ "[32441, 'moretime', 32410]\n",
1885
+ "[32441, 'advice', 32489]\n",
1886
+ "[32555, 'friends', 32470]\n",
1887
+ "[32555, 'friends', 32514]\n",
1888
+ "[32555, 'friends', 32423]\n",
1889
+ "[32555, 'friends', 32465]\n",
1890
+ "[32555, 'friends', 32498]\n",
1891
+ "[32555, 'friends', 32418]\n",
1892
+ "[32555, 'friends', 32533]\n",
1893
+ "[32555, 'friends', 32435]\n",
1894
+ "[32555, 'influential', 32540]\n",
1895
+ "[32555, 'feedback', 32423]\n",
1896
+ "[32555, 'moretime', 32498]\n",
1897
+ "[32555, 'moretime', 32435]\n",
1898
+ "[32555, 'moretime', 32423]\n",
1899
+ "[32555, 'moretime', 32470]\n",
1900
+ "[32442, 'friends', 32484]\n",
1901
+ "[32442, 'friends', 32560]\n",
1902
+ "[32442, 'friends', 32438]\n",
1903
+ "[32442, 'friends', 32548]\n",
1904
+ "[32442, 'influential', 32547]\n",
1905
+ "[32442, 'influential', 32540]\n",
1906
+ "[32442, 'feedback', 32483]\n",
1907
+ "[32442, 'feedback', 32484]\n",
1908
+ "[32442, 'moretime', 32484]\n",
1909
+ "[32442, 'moretime', 32438]\n",
1910
+ "[32442, 'advice', 32483]\n",
1911
+ "[32442, 'advice', 32484]\n",
1912
+ "[32442, 'disrespect', 32441]\n",
1913
+ "[32442, 'disrespect', 32500]\n",
1914
+ "[32472, 'friends', 32471]\n",
1915
+ "[32472, 'friends', 32452]\n",
1916
+ "[32472, 'influential', 32540]\n",
1917
+ "[32472, 'influential', 32441]\n",
1918
+ "[32472, 'feedback', 32484]\n",
1919
+ "[32472, 'moretime', 32471]\n",
1920
+ "[32472, 'moretime', 32421]\n",
1921
+ "[32472, 'advice', 32448]\n",
1922
+ "[32472, 'disrespect', 32564]\n",
1923
+ "[32472, 'disrespect', 32441]\n",
1924
+ "[32560, 'friends', 32484]\n",
1925
+ "[32560, 'friends', 32442]\n",
1926
+ "[32560, 'friends', 32483]\n",
1927
+ "[32560, 'influential', 32547]\n",
1928
+ "[32560, 'feedback', 32483]\n",
1929
+ "[32560, 'feedback', 32484]\n",
1930
+ "[32560, 'moretime', 32457]\n",
1931
+ "[32560, 'moretime', 32438]\n",
1932
+ "[32560, 'advice', 32457]\n",
1933
+ "[32560, 'advice', 32483]\n",
1934
+ "[32560, 'disrespect', 32441]\n",
1935
+ "[32419, 'friends', 32504]\n",
1936
+ "[32419, 'friends', 32501]\n",
1937
+ "[32419, 'friends', 32495]\n",
1938
+ "[32419, 'friends', 32494]\n",
1939
+ "[32419, 'friends', 32489]\n",
1940
+ "[32419, 'friends', 32545]\n",
1941
+ "[32419, 'friends', 32455]\n",
1942
+ "[32419, 'friends', 32480]\n",
1943
+ "[32419, 'advice', 32501]\n",
1944
+ "[32419, 'advice', 32455]\n",
1945
+ "[32419, 'advice', 32504]\n",
1946
+ "[32452, 'friends', 32484]\n",
1947
+ "[32452, 'friends', 32452]\n",
1948
+ "[32452, 'friends', 32471]\n",
1949
+ "[32452, 'friends', 32472]\n",
1950
+ "[32452, 'influential', 32551]\n",
1951
+ "[32452, 'feedback', 32484]\n",
1952
+ "[32452, 'feedback', 32472]\n",
1953
+ "[32452, 'moretime', 32484]\n",
1954
+ "[32452, 'advice', 32484]\n",
1955
+ "[32452, 'advice', 32457]\n",
1956
+ "[32416, 'friends', 32433]\n",
1957
+ "[32416, 'friends', 32548]\n",
1958
+ "[32416, 'friends', 32496]\n",
1959
+ "[32416, 'friends', 32415]\n",
1960
+ "[32416, 'friends', 32543]\n",
1961
+ "[32416, 'friends', 32533]\n",
1962
+ "[32416, 'friends', 32458]\n",
1963
+ "[32416, 'friends', 32563]\n",
1964
+ "[32416, 'friends', 32509]\n",
1965
+ "[32416, 'friends', 32498]\n",
1966
+ "[32416, 'friends', 32546]\n",
1967
+ "[32416, 'friends', 32407]\n",
1968
+ "[32416, 'friends', 32461]\n",
1969
+ "[32416, 'friends', 32510]\n",
1970
+ "[32416, 'influential', 32433]\n",
1971
+ "[32416, 'influential', 32415]\n",
1972
+ "[32416, 'influential', 32496]\n",
1973
+ "[32416, 'influential', 32461]\n",
1974
+ "[32416, 'influential', 32563]\n",
1975
+ "[32416, 'influential', 32543]\n",
1976
+ "[32416, 'feedback', 32461]\n",
1977
+ "[32416, 'feedback', 32563]\n",
1978
+ "[32416, 'moretime', 32543]\n",
1979
+ "[32416, 'moretime', 32433]\n",
1980
+ "[32416, 'moretime', 32496]\n",
1981
+ "[32416, 'moretime', 32563]\n",
1982
+ "[32416, 'moretime', 32407]\n",
1983
+ "[32416, 'advice', 32461]\n",
1984
+ "[32416, 'advice', 32563]\n",
1985
+ "[32416, 'advice', 32496]\n",
1986
+ "[32416, 'advice', 32433]\n",
1987
+ "[32434, 'friends', 32488]\n",
1988
+ "[32434, 'friends', 32394]\n",
1989
+ "[32434, 'friends', 32519]\n",
1990
+ "[32434, 'friends', 32427]\n",
1991
+ "[32434, 'friends', 32423]\n",
1992
+ "[32434, 'friends', 32543]\n",
1993
+ "[32434, 'friends', 32407]\n",
1994
+ "[32434, 'friends', 32542]\n",
1995
+ "[32434, 'influential', 32507]\n",
1996
+ "[32434, 'feedback', 32394]\n",
1997
+ "[32434, 'feedback', 32427]\n",
1998
+ "[32434, 'moretime', 32423]\n",
1999
+ "[32434, 'moretime', 32427]\n",
2000
+ "[32434, 'moretime', 32488]\n",
2001
+ "[32434, 'moretime', 32543]\n",
2002
+ "[32434, 'advice', 32394]\n",
2003
+ "[32434, 'advice', 32427]\n",
2004
+ "[32434, 'advice', 32488]\n",
2005
+ "[32434, 'advice', 32423]\n",
2006
+ "[32434, 'advice', 32519]\n",
2007
+ "[32434, 'advice', 32543]\n",
2008
+ "[32438, 'friends', 32484]\n",
2009
+ "[32438, 'friends', 32537]\n",
2010
+ "[32438, 'friends', 32442]\n",
2011
+ "[32438, 'influential', 32547]\n",
2012
+ "[32438, 'moretime', 32484]\n",
2013
+ "[32438, 'advice', 32442]\n",
2014
+ "[32426, 'friends', 32418]\n",
2015
+ "[32426, 'friends', 32396]\n",
2016
+ "[32426, 'friends', 32535]\n",
2017
+ "[32426, 'influential', 32535]\n",
2018
+ "[32426, 'influential', 32418]\n",
2019
+ "[32426, 'influential', 32396]\n",
2020
+ "[32426, 'feedback', 32418]\n",
2021
+ "[32426, 'moretime', 32418]\n",
2022
+ "[32426, 'advice', 32418]\n",
2023
+ "[32426, 'advice', 32396]\n",
2024
+ "[32426, 'advice', 32535]\n",
2025
+ "[32426, 'disrespect', 32414]\n",
2026
+ "[32563, 'friends', 32407]\n",
2027
+ "[32563, 'friends', 32509]\n",
2028
+ "[32563, 'friends', 32539]\n",
2029
+ "[32563, 'friends', 32461]\n",
2030
+ "[32563, 'friends', 32548]\n",
2031
+ "[32563, 'friends', 32416]\n",
2032
+ "[32563, 'advice', 32562]\n",
2033
+ "[32519, 'friends', 32394]\n",
2034
+ "[32519, 'friends', 32451]\n",
2035
+ "[32519, 'friends', 32434]\n",
2036
+ "[32519, 'friends', 32424]\n",
2037
+ "[32519, 'friends', 32486]\n",
2038
+ "[32519, 'friends', 32430]\n",
2039
+ "[32519, 'influential', 32535]\n",
2040
+ "[32519, 'influential', 32396]\n",
2041
+ "[32519, 'influential', 32426]\n",
2042
+ "[32519, 'influential', 32401]\n",
2043
+ "[32519, 'influential', 32478]\n",
2044
+ "[32519, 'feedback', 32440]\n",
2045
+ "[32519, 'moretime', 32394]\n",
2046
+ "[32519, 'moretime', 32434]\n",
2047
+ "[32519, 'moretime', 32430]\n",
2048
+ "[32519, 'advice', 32486]\n",
2049
+ "[32519, 'advice', 32440]\n",
2050
+ "[32543, 'friends', 32498]\n",
2051
+ "[32543, 'friends', 32433]\n",
2052
+ "[32543, 'friends', 32496]\n",
2053
+ "[32543, 'friends', 32510]\n",
2054
+ "[32543, 'friends', 32427]\n",
2055
+ "[32543, 'friends', 32423]\n",
2056
+ "[32543, 'friends', 32488]\n",
2057
+ "[32543, 'friends', 32407]\n",
2058
+ "[32543, 'friends', 32455]\n",
2059
+ "[32543, 'friends', 32434]\n",
2060
+ "[32543, 'friends', 32559]\n",
2061
+ "[32543, 'friends', 32490]\n",
2062
+ "[32543, 'feedback', 32510]\n",
2063
+ "[32543, 'feedback', 32490]\n",
2064
+ "[32543, 'moretime', 32423]\n",
2065
+ "[32543, 'moretime', 32488]\n",
2066
+ "[32543, 'moretime', 32427]\n",
2067
+ "[32543, 'moretime', 32510]\n",
2068
+ "[32543, 'moretime', 32434]\n",
2069
+ "[32543, 'moretime', 32490]\n",
2070
+ "[32521, 'friends', 32436]\n",
2071
+ "[32521, 'friends', 32531]\n",
2072
+ "[32521, 'friends', 32460]\n",
2073
+ "[32521, 'influential', 32507]\n",
2074
+ "[32521, 'feedback', 32420]\n",
2075
+ "[32521, 'feedback', 32521]\n",
2076
+ "[32521, 'moretime', 32462]\n",
2077
+ "[32521, 'moretime', 32540]\n",
2078
+ "[32521, 'moretime', 32460]\n",
2079
+ "[32521, 'advice', 32521]\n",
2080
+ "[32521, 'disrespect', 32414]\n",
2081
+ "[32521, 'disrespect', 32503]\n",
2082
+ "[32526, 'friends', 32557]\n",
2083
+ "[32526, 'friends', 32444]\n",
2084
+ "[32526, 'friends', 32500]\n",
2085
+ "[32526, 'friends', 32537]\n",
2086
+ "[32526, 'influential', 32540]\n",
2087
+ "[32526, 'feedback', 32557]\n",
2088
+ "[32526, 'feedback', 32444]\n",
2089
+ "[32526, 'moretime', 32557]\n",
2090
+ "[32526, 'moretime', 32444]\n",
2091
+ "[32526, 'moretime', 32500]\n",
2092
+ "[32526, 'advice', 32557]\n",
2093
+ "[32526, 'advice', 32444]\n",
2094
+ "[32526, 'disrespect', 32466]\n",
2095
+ "[32561, 'friends', 32548]\n",
2096
+ "[32561, 'moretime', 32548]\n",
2097
+ "[32542, 'friends', 32407]\n",
2098
+ "[32542, 'friends', 32392]\n",
2099
+ "[32542, 'friends', 32433]\n",
2100
+ "[32542, 'friends', 32455]\n",
2101
+ "[32542, 'friends', 32402]\n",
2102
+ "[32542, 'friends', 32427]\n",
2103
+ "[32542, 'friends', 32488]\n",
2104
+ "[32542, 'friends', 32543]\n",
2105
+ "[32542, 'friends', 32416]\n",
2106
+ "[32542, 'friends', 32502]\n",
2107
+ "[32542, 'friends', 32559]\n",
2108
+ "[32542, 'friends', 32490]\n",
2109
+ "[32542, 'friends', 32510]\n",
2110
+ "[32542, 'friends', 32409]\n",
2111
+ "[32542, 'friends', 32540]\n",
2112
+ "[32542, 'moretime', 32392]\n",
2113
+ "[32542, 'moretime', 32407]\n",
2114
+ "[32542, 'advice', 32455]\n",
2115
+ "[32542, 'advice', 32433]\n",
2116
+ "[32542, 'advice', 32407]\n",
2117
+ "[32393, 'friends', 32396]\n",
2118
+ "[32393, 'friends', 32544]\n",
2119
+ "[32393, 'friends', 32405]\n",
2120
+ "[32393, 'friends', 32485]\n",
2121
+ "[32393, 'friends', 32443]\n",
2122
+ "[32393, 'influential', 32396]\n",
2123
+ "[32393, 'feedback', 32544]\n",
2124
+ "[32393, 'advice', 32396]\n",
2125
+ "[32393, 'disrespect', 32466]\n",
2126
+ "[32496, 'friends', 32416]\n",
2127
+ "[32496, 'friends', 32415]\n",
2128
+ "[32496, 'friends', 32498]\n",
2129
+ "[32496, 'friends', 32433]\n",
2130
+ "[32496, 'friends', 32543]\n",
2131
+ "[32496, 'friends', 32546]\n",
2132
+ "[32496, 'friends', 32480]\n",
2133
+ "[32496, 'feedback', 32416]\n",
2134
+ "[32496, 'moretime', 32405]\n",
2135
+ "[32464, 'friends', 32431]\n",
2136
+ "[32464, 'friends', 32425]\n",
2137
+ "[32464, 'friends', 32551]\n",
2138
+ "[32464, 'friends', 32525]\n",
2139
+ "[32464, 'friends', 32549]\n",
2140
+ "[32464, 'friends', 32391]\n",
2141
+ "[32464, 'friends', 32414]\n",
2142
+ "[32464, 'friends', 32406]\n",
2143
+ "[32464, 'influential', 32540]\n",
2144
+ "[32464, 'feedback', 32525]\n",
2145
+ "[32464, 'moretime', 32508]\n",
2146
+ "[32464, 'moretime', 32414]\n",
2147
+ "[32464, 'moretime', 32455]\n",
2148
+ "[32464, 'advice', 32391]\n",
2149
+ "[32464, 'disrespect', 32466]\n",
2150
+ "[32488, 'friends', 32394]\n",
2151
+ "[32488, 'friends', 32423]\n",
2152
+ "[32488, 'friends', 32543]\n",
2153
+ "[32488, 'friends', 32427]\n",
2154
+ "[32488, 'friends', 32407]\n",
2155
+ "[32488, 'friends', 32542]\n",
2156
+ "[32488, 'friends', 32433]\n",
2157
+ "[32488, 'friends', 32434]\n",
2158
+ "[32488, 'friends', 32498]\n",
2159
+ "[32488, 'friends', 32488]\n",
2160
+ "[32488, 'friends', 32559]\n",
2161
+ "[32488, 'friends', 32502]\n",
2162
+ "[32488, 'friends', 32460]\n",
2163
+ "[32488, 'influential', 32543]\n",
2164
+ "[32488, 'influential', 32559]\n",
2165
+ "[32488, 'feedback', 32423]\n",
2166
+ "[32488, 'feedback', 32543]\n",
2167
+ "[32488, 'feedback', 32502]\n",
2168
+ "[32488, 'feedback', 32460]\n",
2169
+ "[32488, 'feedback', 32407]\n",
2170
+ "[32488, 'moretime', 32423]\n",
2171
+ "[32488, 'moretime', 32543]\n",
2172
+ "[32488, 'moretime', 32407]\n",
2173
+ "[32488, 'moretime', 32427]\n",
2174
+ "[32488, 'moretime', 32502]\n",
2175
+ "[32488, 'moretime', 32460]\n",
2176
+ "[32488, 'advice', 32542]\n",
2177
+ "[32488, 'advice', 32423]\n",
2178
+ "[32488, 'advice', 32434]\n",
2179
+ "[32488, 'advice', 32543]\n",
2180
+ "[32488, 'advice', 32427]\n",
2181
+ "[32488, 'disrespect', 32411]\n",
2182
+ "[32488, 'disrespect', 32552]\n",
2183
+ "[32488, 'disrespect', 32455]\n",
2184
+ "[32562, 'friends', 32552]\n",
2185
+ "[32562, 'friends', 32531]\n",
2186
+ "[32562, 'friends', 32407]\n",
2187
+ "[32562, 'friends', 32482]\n",
2188
+ "[32562, 'friends', 32490]\n",
2189
+ "[32562, 'friends', 32563]\n",
2190
+ "[32518, 'friends', 32443]\n",
2191
+ "[32518, 'friends', 32491]\n",
2192
+ "[32518, 'friends', 32406]\n",
2193
+ "[32518, 'friends', 32405]\n",
2194
+ "[32518, 'friends', 32507]\n",
2195
+ "[32518, 'friends', 32396]\n",
2196
+ "[32518, 'friends', 32393]\n",
2197
+ "[32518, 'friends', 32459]\n",
2198
+ "[32518, 'friends', 32411]\n",
2199
+ "[32518, 'influential', 32518]\n",
2200
+ "[32518, 'feedback', 32491]\n",
2201
+ "[32518, 'moretime', 32443]\n",
2202
+ "[32518, 'advice', 32443]\n",
2203
+ "[32518, 'advice', 32491]\n",
2204
+ "[32518, 'advice', 32406]\n",
2205
+ "[32502, 'friends', 32488]\n",
2206
+ "[32502, 'friends', 32434]\n",
2207
+ "[32502, 'friends', 32549]\n",
2208
+ "[32502, 'friends', 32423]\n",
2209
+ "[32502, 'friends', 32518]\n",
2210
+ "[32502, 'friends', 32427]\n",
2211
+ "[32502, 'friends', 32460]\n",
2212
+ "[32502, 'feedback', 32434]\n",
2213
+ "[32502, 'feedback', 32460]\n",
2214
+ "[32502, 'feedback', 32488]\n",
2215
+ "[32502, 'moretime', 32488]\n",
2216
+ "[32502, 'moretime', 32423]\n",
2217
+ "[32502, 'advice', 32488]\n",
2218
+ "[32502, 'advice', 32460]\n",
2219
+ "[32502, 'advice', 32434]\n",
2220
+ "[32410, 'friends', 32489]\n",
2221
+ "[32410, 'friends', 32499]\n",
2222
+ "[32410, 'friends', 32441]\n",
2223
+ "[32410, 'friends', 32480]\n",
2224
+ "[32410, 'friends', 32413]\n",
2225
+ "[32410, 'feedback', 32489]\n",
2226
+ "[32410, 'feedback', 32512]\n",
2227
+ "[32410, 'moretime', 32489]\n",
2228
+ "[32410, 'advice', 32489]\n",
2229
+ "[32506, 'friends', 32481]\n",
2230
+ "[32506, 'friends', 32511]\n",
2231
+ "[32506, 'friends', 32482]\n",
2232
+ "[32506, 'friends', 32536]\n",
2233
+ "[32506, 'friends', 32450]\n",
2234
+ "[32506, 'friends', 32524]\n",
2235
+ "[32506, 'feedback', 32524]\n",
2236
+ "[32506, 'moretime', 32450]\n",
2237
+ "[32412, 'friends', 32497]\n",
2238
+ "[32412, 'friends', 32403]\n",
2239
+ "[32412, 'moretime', 32497]\n",
2240
+ "[32412, 'moretime', 32403]\n",
2241
+ "[32539, 'friends', 32509]\n",
2242
+ "[32539, 'friends', 32476]\n",
2243
+ "[32539, 'friends', 32407]\n",
2244
+ "[32539, 'friends', 32548]\n",
2245
+ "[32539, 'friends', 32563]\n",
2246
+ "[32539, 'friends', 32528]\n",
2247
+ "[32539, 'friends', 32461]\n",
2248
+ "[32539, 'influential', 32476]\n",
2249
+ "[32539, 'influential', 32507]\n",
2250
+ "[32539, 'influential', 32457]\n",
2251
+ "[32539, 'influential', 32514]\n",
2252
+ "[32539, 'influential', 32477]\n",
2253
+ "[32539, 'moretime', 32476]\n",
2254
+ "[32539, 'moretime', 32528]\n",
2255
+ "[32539, 'advice', 32563]\n",
2256
+ "[32510, 'friends', 32490]\n",
2257
+ "[32510, 'friends', 32509]\n",
2258
+ "[32510, 'friends', 32543]\n",
2259
+ "[32510, 'friends', 32416]\n",
2260
+ "[32510, 'friends', 32407]\n",
2261
+ "[32510, 'friends', 32433]\n",
2262
+ "[32510, 'friends', 32542]\n",
2263
+ "[32510, 'friends', 32427]\n",
2264
+ "[32510, 'friends', 32455]\n",
2265
+ "[32510, 'influential', 32490]\n",
2266
+ "[32510, 'feedback', 32490]\n",
2267
+ "[32510, 'feedback', 32543]\n",
2268
+ "[32510, 'feedback', 32536]\n",
2269
+ "[32510, 'moretime', 32490]\n",
2270
+ "[32510, 'moretime', 32543]\n",
2271
+ "[32510, 'moretime', 32394]\n",
2272
+ "[32510, 'moretime', 32509]\n",
2273
+ "[32510, 'moretime', 32488]\n",
2274
+ "[32510, 'moretime', 32542]\n",
2275
+ "[32510, 'moretime', 32416]\n",
2276
+ "[32510, 'moretime', 32433]\n",
2277
+ "[32510, 'advice', 32490]\n",
2278
+ "[32510, 'advice', 32543]\n",
2279
+ "[32469, 'friends', 32513]\n",
2280
+ "[32469, 'friends', 32517]\n",
2281
+ "[32469, 'friends', 32546]\n",
2282
+ "[32469, 'friends', 32540]\n",
2283
+ "[32469, 'friends', 32440]\n",
2284
+ "[32469, 'friends', 32409]\n",
2285
+ "[32469, 'friends', 32462]\n",
2286
+ "[32469, 'feedback', 32420]\n",
2287
+ "[32469, 'feedback', 32468]\n",
2288
+ "[32469, 'moretime', 32513]\n",
2289
+ "[32469, 'moretime', 32517]\n",
2290
+ "[32469, 'moretime', 32462]\n",
2291
+ "[32469, 'advice', 32540]\n",
2292
+ "[32469, 'advice', 32468]\n",
2293
+ "[32469, 'advice', 32420]\n",
2294
+ "[32469, 'advice', 32501]\n",
2295
+ "[32548, 'friends', 32407]\n",
2296
+ "[32548, 'friends', 32416]\n",
2297
+ "[32548, 'friends', 32461]\n",
2298
+ "[32548, 'friends', 32539]\n",
2299
+ "[32548, 'friends', 32509]\n",
2300
+ "[32548, 'friends', 32563]\n",
2301
+ "[32548, 'friends', 32561]\n",
2302
+ "[32548, 'feedback', 32416]\n",
2303
+ "[32548, 'advice', 32416]\n",
2304
+ "[32507, 'friends', 32396]\n",
2305
+ "[32507, 'friends', 32405]\n",
2306
+ "[32507, 'friends', 32544]\n",
2307
+ "[32507, 'friends', 32535]\n",
2308
+ "[32507, 'friends', 32417]\n",
2309
+ "[32507, 'friends', 32491]\n",
2310
+ "[32507, 'friends', 32443]\n",
2311
+ "[32507, 'friends', 32518]\n",
2312
+ "[32507, 'influential', 32396]\n",
2313
+ "[32507, 'moretime', 32417]\n",
2314
+ "[32507, 'moretime', 32491]\n",
2315
+ "[32507, 'moretime', 32443]\n",
2316
+ "[32507, 'moretime', 32405]\n",
2317
+ "[32507, 'moretime', 32518]\n",
2318
+ "[32507, 'moretime', 32396]\n",
2319
+ "[32507, 'moretime', 32544]\n",
2320
+ "[32536, 'friends', 32536]\n",
2321
+ "[32536, 'friends', 32524]\n",
2322
+ "[32536, 'friends', 32511]\n",
2323
+ "[32536, 'friends', 32482]\n",
2324
+ "[32536, 'friends', 32506]\n",
2325
+ "[32536, 'friends', 32450]\n",
2326
+ "[32536, 'friends', 32481]\n",
2327
+ "[32536, 'friends', 32521]\n",
2328
+ "[32536, 'feedback', 32536]\n",
2329
+ "[32536, 'moretime', 32521]\n",
2330
+ "[32536, 'advice', 32536]\n",
2331
+ "[32524, 'friends', 32511]\n",
2332
+ "[32524, 'friends', 32450]\n",
2333
+ "[32524, 'friends', 32482]\n",
2334
+ "[32524, 'friends', 32506]\n",
2335
+ "[32524, 'friends', 32481]\n",
2336
+ "[32524, 'friends', 32410]\n",
2337
+ "[32524, 'friends', 32536]\n",
2338
+ "[32524, 'influential', 32396]\n",
2339
+ "[32524, 'feedback', 32450]\n",
2340
+ "[32524, 'moretime', 32511]\n",
2341
+ "[32524, 'moretime', 32410]\n",
2342
+ "[32524, 'moretime', 32481]\n",
2343
+ "[32524, 'moretime', 32450]\n",
2344
+ "[32524, 'moretime', 32506]\n",
2345
+ "[32524, 'advice', 32450]\n",
2346
+ "[32524, 'advice', 32482]\n",
2347
+ "[32524, 'disrespect', 32536]\n",
2348
+ "[32482, 'friends', 32481]\n",
2349
+ "[32482, 'friends', 32536]\n",
2350
+ "[32482, 'friends', 32450]\n",
2351
+ "[32482, 'friends', 32524]\n",
2352
+ "[32482, 'friends', 32412]\n",
2353
+ "[32482, 'feedback', 32481]\n",
2354
+ "[32482, 'advice', 32536]\n",
2355
+ "[32482, 'advice', 32450]\n",
2356
+ "[32481, 'friends', 32482]\n",
2357
+ "[32481, 'friends', 32416]\n",
2358
+ "[32481, 'friends', 32506]\n",
2359
+ "[32481, 'friends', 32450]\n",
2360
+ "[32481, 'friends', 32536]\n",
2361
+ "[32481, 'friends', 32511]\n",
2362
+ "[32481, 'friends', 32524]\n",
2363
+ "[32481, 'feedback', 32482]\n",
2364
+ "[32481, 'moretime', 32482]\n",
2365
+ "[32481, 'moretime', 32416]\n",
2366
+ "[32481, 'advice', 32482]\n",
2367
+ "[32481, 'advice', 32506]\n",
2368
+ "[32481, 'disrespect', 32413]\n",
2369
+ "[32481, 'disrespect', 32405]\n",
2370
+ "[32439, 'friends', 32457]\n",
2371
+ "[32439, 'friends', 32503]\n",
2372
+ "[32439, 'friends', 32479]\n",
2373
+ "[32439, 'friends', 32418]\n",
2374
+ "[32439, 'friends', 32403]\n",
2375
+ "[32439, 'influential', 32406]\n",
2376
+ "[32439, 'influential', 32518]\n",
2377
+ "[32439, 'influential', 32443]\n",
2378
+ "[32439, 'influential', 32491]\n",
2379
+ "[32439, 'feedback', 32503]\n",
2380
+ "[32439, 'feedback', 32457]\n",
2381
+ "[32439, 'moretime', 32499]\n",
2382
+ "[32439, 'moretime', 32410]\n",
2383
+ "[32439, 'moretime', 32485]\n",
2384
+ "[32439, 'advice', 32503]\n",
2385
+ "[32439, 'advice', 32457]\n",
2386
+ "[32439, 'disrespect', 32552]\n",
2387
+ "[32559, 'friends', 32558]\n",
2388
+ "[32559, 'friends', 32565]\n",
2389
+ "[32559, 'friends', 32509]\n",
2390
+ "[32559, 'friends', 32427]\n",
2391
+ "[32559, 'friends', 32407]\n",
2392
+ "[32559, 'friends', 32562]\n",
2393
+ "[32559, 'friends', 32488]\n",
2394
+ "[32559, 'influential', 32488]\n",
2395
+ "[32559, 'feedback', 32565]\n",
2396
+ "[32559, 'feedback', 32556]\n",
2397
+ "[32559, 'advice', 32565]\n",
2398
+ "[32559, 'advice', 32556]\n",
2399
+ "[32559, 'advice', 32558]\n",
2400
+ "[32460, 'friends', 32458]\n",
2401
+ "[32460, 'friends', 32459]\n",
2402
+ "[32460, 'friends', 32421]\n",
2403
+ "[32460, 'friends', 32422]\n",
2404
+ "[32460, 'friends', 32404]\n",
2405
+ "[32460, 'influential', 32460]\n",
2406
+ "[32460, 'influential', 32458]\n",
2407
+ "[32460, 'feedback', 32458]\n",
2408
+ "[32460, 'feedback', 32459]\n",
2409
+ "[32460, 'feedback', 32417]\n",
2410
+ "[32460, 'moretime', 32458]\n",
2411
+ "[32460, 'moretime', 32459]\n",
2412
+ "[32460, 'moretime', 32421]\n",
2413
+ "[32460, 'moretime', 32422]\n",
2414
+ "[32460, 'advice', 32490]\n",
2415
+ "[32460, 'advice', 32459]\n",
2416
+ "[32460, 'advice', 32458]\n",
2417
+ "[32520, 'friends', 32556]\n",
2418
+ "[32520, 'friends', 32449]\n",
2419
+ "[32520, 'influential', 32547]\n",
2420
+ "[32520, 'influential', 32561]\n",
2421
+ "[32520, 'moretime', 32530]\n",
2422
+ "[32520, 'moretime', 32398]\n",
2423
+ "[32520, 'disrespect', 32455]\n",
2424
+ "[32450, 'friends', 32536]\n",
2425
+ "[32450, 'friends', 32524]\n",
2426
+ "[32450, 'friends', 32511]\n",
2427
+ "[32450, 'friends', 32482]\n",
2428
+ "[32450, 'friends', 32506]\n",
2429
+ "[32450, 'friends', 32481]\n",
2430
+ "[32450, 'friends', 32450]\n",
2431
+ "[32450, 'friends', 32521]\n",
2432
+ "[32450, 'feedback', 32450]\n",
2433
+ "[32450, 'advice', 32450]\n",
2434
+ "[32538, 'friends', 32554]\n",
2435
+ "[32538, 'friends', 32529]\n",
2436
+ "[32538, 'friends', 32549]\n",
2437
+ "[32538, 'friends', 32531]\n",
2438
+ "[32538, 'friends', 32422]\n",
2439
+ "[32538, 'friends', 32460]\n",
2440
+ "[32538, 'friends', 32458]\n",
2441
+ "[32538, 'influential', 32422]\n",
2442
+ "[32538, 'influential', 32549]\n",
2443
+ "[32538, 'influential', 32529]\n",
2444
+ "[32538, 'feedback', 32549]\n",
2445
+ "[32538, 'feedback', 32529]\n",
2446
+ "[32538, 'moretime', 32531]\n",
2447
+ "[32538, 'moretime', 32554]\n",
2448
+ "[32538, 'advice', 32529]\n",
2449
+ "[32538, 'advice', 32531]\n",
2450
+ "[32538, 'advice', 32554]\n",
2451
+ "[32538, 'disrespect', 32500]\n",
2452
+ "[32454, 'friends', 32495]\n",
2453
+ "[32454, 'friends', 32494]\n",
2454
+ "[32454, 'friends', 32479]\n",
2455
+ "[32454, 'friends', 32448]\n",
2456
+ "[32454, 'feedback', 32495]\n",
2457
+ "[32454, 'advice', 32495]\n",
2458
+ "[32554, 'friends', 32392]\n",
2459
+ "[32554, 'friends', 32532]\n",
2460
+ "[32554, 'friends', 32538]\n",
2461
+ "[32554, 'friends', 32531]\n",
2462
+ "[32554, 'friends', 32458]\n",
2463
+ "[32554, 'influential', 32422]\n",
2464
+ "[32554, 'influential', 32421]\n",
2465
+ "[32554, 'feedback', 32392]\n",
2466
+ "[32554, 'feedback', 32532]\n",
2467
+ "[32554, 'moretime', 32422]\n",
2468
+ "[32554, 'moretime', 32421]\n",
2469
+ "[32554, 'moretime', 32546]\n",
2470
+ "[32554, 'moretime', 32462]\n",
2471
+ "[32554, 'advice', 32392]\n",
2472
+ "[32554, 'advice', 32532]\n",
2473
+ "[32447, 'influential', 32541]\n",
2474
+ "[32447, 'advice', 32541]\n",
2475
+ "[32447, 'advice', 32512]\n",
2476
+ "[32447, 'advice', 32487]\n",
2477
+ "[32447, 'advice', 32448]\n",
2478
+ "[32447, 'advice', 32444]\n",
2479
+ "[32447, 'advice', 32413]\n",
2480
+ "[32447, 'advice', 32502]\n",
2481
+ "[32447, 'advice', 32529]\n",
2482
+ "[32447, 'advice', 32513]\n",
2483
+ "[32447, 'advice', 32440]\n",
2484
+ "[32423, 'friends', 32488]\n",
2485
+ "[32423, 'friends', 32555]\n",
2486
+ "[32423, 'friends', 32434]\n",
2487
+ "[32423, 'friends', 32427]\n",
2488
+ "[32423, 'friends', 32543]\n",
2489
+ "[32423, 'friends', 32407]\n",
2490
+ "[32423, 'influential', 32396]\n",
2491
+ "[32423, 'influential', 32555]\n",
2492
+ "[32423, 'influential', 32488]\n",
2493
+ "[32423, 'feedback', 32488]\n",
2494
+ "[32423, 'feedback', 32407]\n",
2495
+ "[32423, 'feedback', 32434]\n",
2496
+ "[32423, 'advice', 32488]\n",
2497
+ "[32423, 'advice', 32555]\n",
2498
+ "[32486, 'friends', 32519]\n",
2499
+ "[32486, 'friends', 32424]\n",
2500
+ "[32486, 'friends', 32451]\n",
2501
+ "[32486, 'moretime', 32424]\n",
2502
+ "[32486, 'advice', 32464]\n",
2503
+ "[32486, 'advice', 32392]\n",
2504
+ "[32449, 'friends', 32520]\n",
2505
+ "[32449, 'friends', 32531]\n",
2506
+ "[32449, 'moretime', 32531]\n",
2507
+ "[32449, 'moretime', 32538]\n",
2508
+ "[32465, 'friends', 32545]\n",
2509
+ "[32465, 'friends', 32504]\n",
2510
+ "[32465, 'friends', 32422]\n",
2511
+ "[32465, 'friends', 32421]\n",
2512
+ "[32465, 'friends', 32533]\n",
2513
+ "[32465, 'moretime', 32545]\n",
2514
+ "[32465, 'moretime', 32504]\n",
2515
+ "[32465, 'moretime', 32422]\n",
2516
+ "[32465, 'moretime', 32421]\n",
2517
+ "[32465, 'moretime', 32533]\n",
2518
+ "[32465, 'advice', 32465]\n",
2519
+ "[32465, 'advice', 32533]\n",
2520
+ "[32503, 'friends', 32439]\n",
2521
+ "[32503, 'friends', 32468]\n",
2522
+ "[32503, 'friends', 32401]\n",
2523
+ "[32503, 'influential', 32552]\n",
2524
+ "[32503, 'feedback', 32439]\n",
2525
+ "[32503, 'feedback', 32457]\n",
2526
+ "[32503, 'moretime', 32426]\n",
2527
+ "[32503, 'moretime', 32418]\n",
2528
+ "[32503, 'advice', 32439]\n",
2529
+ "[32503, 'advice', 32418]\n",
2530
+ "[32552, 'friends', 32562]\n",
2531
+ "[32552, 'advice', 32562]\n",
2532
+ "[32473, 'friends', 32448]\n",
2533
+ "[32473, 'friends', 32479]\n",
2534
+ "[32473, 'friends', 32484]\n",
2535
+ "[32473, 'friends', 32502]\n",
2536
+ "[32473, 'feedback', 32448]\n",
2537
+ "[32473, 'feedback', 32502]\n",
2538
+ "[32473, 'moretime', 32502]\n",
2539
+ "[32473, 'advice', 32448]\n",
2540
+ "[32473, 'advice', 32484]\n",
2541
+ "[32473, 'advice', 32502]\n",
2542
+ "[32473, 'disrespect', 32460]\n",
2543
+ "[32473, 'disrespect', 32466]\n"
2544
+ ]
2545
+ }
2546
+ ],
2547
+ "source": [
2548
+ "results = k_client.execute(\"\"\"MATCH q = (p:participants)-[f]->(p2:participants)\n",
2549
+ " RETURN p.participant_id,(rels(q)[1])._label,p2.participant_id;\"\"\")\n",
2550
+ "# results = k_client.execute(\"\"\"CALL SHOW_TABLES() RETURN *;\"\"\")\n",
2551
+ "\n",
2552
+ "\n",
2553
+ "while results.has_next():\n",
2554
+ " print(results.get_next())\n",
2555
+ "# print(results.get_next()[1][\"_label\"])"
2556
+ ]
2557
+ }
2558
+ ],
2559
+ "metadata": {
2560
+ "kernelspec": {
2561
+ "display_name": ".venv",
2562
+ "language": "python",
2563
+ "name": "python3"
2564
+ },
2565
+ "language_info": {
2566
+ "codemirror_mode": {
2567
+ "name": "ipython",
2568
+ "version": 3
2569
+ },
2570
+ "file_extension": ".py",
2571
+ "mimetype": "text/x-python",
2572
+ "name": "python",
2573
+ "nbconvert_exporter": "python",
2574
+ "pygments_lexer": "ipython3",
2575
+ "version": "3.9.6"
2576
+ }
2577
+ },
2578
+ "nbformat": 4,
2579
+ "nbformat_minor": 2
2580
+ }