adding NEI symetrique checking
Browse files- queries/process_neighbors.py +28 -0
queries/process_neighbors.py
CHANGED
@@ -33,6 +33,31 @@ WCEL_TARGET = [
|
|
33 |
]
|
34 |
|
35 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
36 |
def process_neighbors_data(file_path: str):
|
37 |
"""
|
38 |
Process data from the specified file path.
|
@@ -84,6 +109,7 @@ def process_neighbors_data(file_path: str):
|
|
84 |
df_adce_final.rename(
|
85 |
columns={"ID_BTS": "SOURCE_ID", "lac_id": "TARGET_LAC_ID"}, inplace=True
|
86 |
)
|
|
|
87 |
|
88 |
# process ADJS data
|
89 |
df_adjs = dfs["ADJS"]
|
@@ -120,6 +146,7 @@ def process_neighbors_data(file_path: str):
|
|
120 |
df_adjs_final.rename(
|
121 |
columns={"ID_WCEL": "SOURCE_ID", "lac_id": "TARGET_LAC_ID"}, inplace=True
|
122 |
)
|
|
|
123 |
|
124 |
# process ADJI DATA
|
125 |
df_adji = dfs["ADJI"]
|
@@ -140,6 +167,7 @@ def process_neighbors_data(file_path: str):
|
|
140 |
df_adji_final.rename(
|
141 |
columns={"ID_WCEL": "SOURCE_ID", "lac_id": "TARGET_LAC_ID"}, inplace=True
|
142 |
)
|
|
|
143 |
|
144 |
# process ADJG DATA
|
145 |
df_adjg = dfs["ADJG"]
|
|
|
33 |
]
|
34 |
|
35 |
|
36 |
+
def check_symmetry(df: pd.DataFrame):
|
37 |
+
"""
|
38 |
+
Check for symmetric relationships in a dataframe of network neighbors.
|
39 |
+
For each source-target pair, checks if the reverse target-source pair exists.
|
40 |
+
|
41 |
+
Args:
|
42 |
+
df: pandas DataFrame with columns 'SOURCE_NAME' and 'TARGET_NAME'
|
43 |
+
|
44 |
+
Returns:
|
45 |
+
DataFrame with added 'SYMETRIQUE' column ('YES' if symmetric, 'NO' otherwise)
|
46 |
+
"""
|
47 |
+
# Create a set of all (source, target) pairs for fast lookup
|
48 |
+
pairs = set(zip(df["SOURCE_NAME"], df["TARGET_NAME"]))
|
49 |
+
|
50 |
+
# Check for each row if the reverse relationship exists
|
51 |
+
df["SYMETRIQUE"] = df.apply(
|
52 |
+
lambda row: (
|
53 |
+
"YES" if (row["TARGET_NAME"], row["SOURCE_NAME"]) in pairs else "NO"
|
54 |
+
),
|
55 |
+
axis=1,
|
56 |
+
)
|
57 |
+
|
58 |
+
return df
|
59 |
+
|
60 |
+
|
61 |
def process_neighbors_data(file_path: str):
|
62 |
"""
|
63 |
Process data from the specified file path.
|
|
|
109 |
df_adce_final.rename(
|
110 |
columns={"ID_BTS": "SOURCE_ID", "lac_id": "TARGET_LAC_ID"}, inplace=True
|
111 |
)
|
112 |
+
df_adce_final = check_symmetry(df_adce_final)
|
113 |
|
114 |
# process ADJS data
|
115 |
df_adjs = dfs["ADJS"]
|
|
|
146 |
df_adjs_final.rename(
|
147 |
columns={"ID_WCEL": "SOURCE_ID", "lac_id": "TARGET_LAC_ID"}, inplace=True
|
148 |
)
|
149 |
+
df_adjs_final = check_symmetry(df_adjs_final)
|
150 |
|
151 |
# process ADJI DATA
|
152 |
df_adji = dfs["ADJI"]
|
|
|
167 |
df_adji_final.rename(
|
168 |
columns={"ID_WCEL": "SOURCE_ID", "lac_id": "TARGET_LAC_ID"}, inplace=True
|
169 |
)
|
170 |
+
df_adji_final = check_symmetry(df_adji_final)
|
171 |
|
172 |
# process ADJG DATA
|
173 |
df_adjg = dfs["ADJG"]
|