1. परिचय

धोखाधड़ी वाली गतिविधि में अक्सर, जुड़ी हुई इकाइयों के छिपे हुए नेटवर्क शामिल होते हैं. उदाहरण के लिए, एक ही ईमेल पते, फ़ोन नंबर या पते का इस्तेमाल करने वाले कई खाते. पारंपरिक रिलेशनल डेटाबेस को इन जटिल और मल्टी-हॉप रिलेशनशिप को कुशलता से क्वेरी करने में मुश्किल हो सकती है.
BigQuery Graph की मदद से, ग्राफ़ डेटाबेस का इस्तेमाल करके इन नेटवर्क का बड़े पैमाने पर विश्लेषण किया जा सकता है. अपनी मौजूदा BigQuery टेबल के ऊपर प्रॉपर्टी ग्राफ़ तय किया जा सकता है. साथ ही, अपने डेटा में पैटर्न ढूंढने के लिए, ग्राफ़ क्वेरी लैंग्वेज (GQL) का इस्तेमाल किया जा सकता है.
धोखाधड़ी का पता लगाने के लिए, ग्राफ़ नेटवर्क का इस्तेमाल आम तौर पर इन कामों के लिए किया जाता है: ऐसे ऑर्डर रोकना जिनका डिलीवरी पता, धोखाधड़ी करने वाले नेटवर्क से जुड़ा है या ऐसे पेमेंट रोकना जो .
इस कोडलैब में, BigQuery Graph का इस्तेमाल करके धोखाधड़ी का पता लगाने वाला समाधान बनाया जाएगा. आपको Cloud Storage से डेटा लोड करना होगा, प्रॉपर्टी ग्राफ़ बनाना होगा, और संदिग्ध कनेक्शन की पहचान करने के लिए ग्राफ़ क्वेरी का इस्तेमाल करना होगा.
आपको क्या सीखने को मिलेगा
- BigQuery डेटासेट बनाने और डेटा लोड करने का तरीका.
- डीडीएल का इस्तेमाल करके, प्रॉपर्टी ग्राफ़ को तय करने का तरीका.
- GQL का इस्तेमाल करके, ग्राफ़ से क्वेरी करने का तरीका.
- धोखाधड़ी का पता लगाने के लिए, ग्राफ़ ऐनालिटिक्स का इस्तेमाल कैसे करें.
आपको किन चीज़ों की ज़रूरत होगी
- बिलिंग की सुविधा वाला Google Cloud प्रोजेक्ट.
- BigQuery नोटबुक एनवायरमेंट (BigQuery Studio या Colab Enterprise).
लागत
इस लैब में, Google Cloud के ऐसे संसाधन इस्तेमाल किए जाते हैं जिनके लिए बिल भेजा जाता है. अनुमानित लागत 5 डॉलर से कम है. हालांकि, यह तब होगा, जब काम पूरा होने के बाद संसाधनों को मिटा दिया जाए.
2. शुरू करने से पहले
Google Cloud प्रोजेक्ट चुनना या बनाना
- Google Cloud Console में, प्रोजेक्ट चुनने वाले पेज पर जाकर, कोई Google Cloud प्रोजेक्ट चुनें या बनाएं.
- पक्का करें कि आपके Google Cloud प्रोजेक्ट के लिए बिलिंग चालू हो. बिलिंग चालू है या नहीं, यह देखने का तरीका जानें.
अपना एनवायरमेंट चुनें
इस लैब को चलाने के लिए, आपको नोटबुक एनवायरमेंट की ज़रूरत होगी. BigQuery Studio या Colab Enterprise का इस्तेमाल किया जा सकता है.
- Google Cloud Console में BigQuery पेज पर जाएं.
- ग्राफ़ क्वेरी चलाने के लिए, Python नोटबुक का इस्तेमाल किया जाएगा.
Cloud Shell शुरू करना
- Google Cloud कंसोल में सबसे ऊपर मौजूद, Cloud Shell चालू करें पर क्लिक करें.
- पुष्टि करें:
gcloud auth list
- अपने प्रोजेक्ट की पुष्टि करें:
gcloud config get project
- अगर ज़रूरी हो, तो इसे सेट करें:
export PROJECT_ID=<YOUR_PROJECT_ID>
gcloud config set project $PROJECT_ID
एपीआई चालू करें
ज़रूरी BigQuery API को चालू करने के लिए, यह निर्देश चलाएं:
gcloud services enable bigquery.googleapis.com
3. डेटा लोड करें
इस चरण में, आपको एक BigQuery डेटासेट बनाना होगा. साथ ही, Cloud Storage से सैंपल डेटा लोड करना होगा.
सैंपल डेटा में कई CSV फ़ाइलें शामिल हैं. ये फ़ाइलें, खुदरा कारोबार के सिम्युलेटेड एनवायरमेंट को दिखाती हैं:
customers.csv: ग्राहक खाते की जानकारी.emails.csv: ईमेल पते.phones.csv: फ़ोन नंबर.addresses.csv: घर या ऑफ़िस के पते.customer_emails.csv,customer_phones.csv,customer_addresses.csv: टेबल लिंक करना.orders.csv: ऑर्डर का इतिहास. इसमें धोखाधड़ी के फ़्लैग भी शामिल हैं.
डेटासेट बनाना
टेबल को सेव करने के लिए, fraud_demo नाम का डेटासेट बनाएं.
- इस कोडलैब के लिए, हम एसक्यूएल कमांड को लागू करेंगे. इन कमांड को BigQuery Studio > SQL एडिटर में चलाया जा सकता है. इसके अलावा, Cloud Shell में
bq queryकमांड का इस्तेमाल किया जा सकता है.
हम मान लेंगे कि आपने एक से ज़्यादा लाइनों वाले CREATE स्टेटमेंट का बेहतर तरीके से इस्तेमाल करने के लिए, BigQuery SQL एडिटर का इस्तेमाल किया है.
CREATE SCHEMA IF NOT EXISTS `fraud_demo` OPTIONS(location="US");
टेबल लोड करें
Cloud Storage से अपने डेटासेट में डेटा लोड करने के लिए, यहां दिए गए SQL स्टेटमेंट चलाएं.
LOAD DATA OVERWRITE `fraud_demo.customers`
FROM FILES (
format = 'CSV',
uris = ['gs://sample-data-and-media/fraud-demo-data/customers.csv'],
skip_leading_rows = 1
);
LOAD DATA OVERWRITE `fraud_demo.emails`
FROM FILES (
format = 'CSV',
uris = ['gs://sample-data-and-media/fraud-demo-data/emails.csv'],
skip_leading_rows = 1
);
LOAD DATA OVERWRITE `fraud_demo.phones`
FROM FILES (
format = 'CSV',
uris = ['gs://sample-data-and-media/fraud-demo-data/phones.csv'],
skip_leading_rows = 1
);
LOAD DATA OVERWRITE `fraud_demo.addresses`
FROM FILES (
format = 'CSV',
uris = ['gs://sample-data-and-media/fraud-demo-data/addresses.csv'],
skip_leading_rows = 1
);
LOAD DATA OVERWRITE `fraud_demo.customer_emails`
FROM FILES (
format = 'CSV',
uris = ['gs://sample-data-and-media/fraud-demo-data/customer_emails.csv'],
skip_leading_rows = 1
);
LOAD DATA OVERWRITE `fraud_demo.customer_phones`
FROM FILES (
format = 'CSV',
uris = ['gs://sample-data-and-media/fraud-demo-data/customer_phones.csv'],
skip_leading_rows = 1
);
LOAD DATA OVERWRITE `fraud_demo.customer_addresses`
FROM FILES (
format = 'CSV',
uris = ['gs://sample-data-and-media/fraud-demo-data/customer_addresses.csv'],
skip_leading_rows = 1
);
LOAD DATA OVERWRITE `fraud_demo.orders`
FROM FILES (
format = 'CSV',
uris = ['gs://sample-data-and-media/fraud-demo-data/orders.csv'],
skip_leading_rows = 1
);
4. प्रॉपर्टी ग्राफ़ बनाना
डेटा लोड होने के बाद, प्रॉपर्टी ग्राफ़ तय किया जा सकता है. प्रॉपर्टी ग्राफ़ में नोड (इकाइयां) और एज (संबंध) होते हैं.
इस लैब में नोड ये हैं:
- ग्राहक: इससे खाते के मालिक के बारे में पता चलता है.
- फ़ोन: यह किसी फ़ोन नंबर को दिखाता है.
- ईमेल: यह एक ईमेल पते को दिखाता है.
- पता: घर या ऑफ़िस के पते के बारे में बताता है.
किनारों के बारे में यहां बताया गया है:
- OwnsPhone: यह ग्राहक को फ़ोन से कनेक्ट करता है.
- OwnsEmail: यह कुकी, ग्राहक को ईमेल से कनेक्ट करती है.
- LinkedToAddress: यह कुकी, ग्राहक को पते से कनेक्ट करती है.

ग्राफ़ बनाना
अपने fraud_demo डेटासेट में FraudDemo नाम का ग्राफ़ बनाने के लिए, नीचे दिया गया डीडीएल स्टेटमेंट चलाएं.
CREATE OR REPLACE PROPERTY GRAPH fraud_demo.FraudDemo
NODE TABLES(
fraud_demo.customers
KEY(account_id)
LABEL Customer PROPERTIES(
account_id,
name),
fraud_demo.emails
KEY(email)
LABEL Email PROPERTIES(
email,
email_type),
fraud_demo.phones
KEY(phone_number)
LABEL Phone PROPERTIES(
phone_number,
phone_type),
fraud_demo.addresses
KEY(address)
LABEL Address PROPERTIES(
address,
address_type)
)
EDGE TABLES(
fraud_demo.customer_emails
KEY(account_id, email)
SOURCE KEY(account_id) REFERENCES customers(account_id)
DESTINATION KEY(email) REFERENCES emails(email)
LABEL OwnsEmail PROPERTIES(
account_id,
email,
last_updated_ts),
fraud_demo.customer_phones
KEY(account_id, phone_number)
SOURCE KEY(account_id) REFERENCES customers(account_id)
DESTINATION KEY(phone_number) REFERENCES phones(phone_number)
LABEL OwnsPhone PROPERTIES(
account_id,
phone_number,
last_updated_ts),
fraud_demo.customer_addresses
KEY(account_id, address)
SOURCE KEY(account_id) REFERENCES customers(account_id)
DESTINATION KEY(address) REFERENCES addresses(address)
LABEL LinkedToAddress PROPERTIES(
account_id,
address,
last_updated_ts)
);
5. नेटवर्क का विश्लेषण करें (दो हॉप)
BigQuery Studio में नई नोटबुक खोलें.

इस कोडलैब के विज़ुअलाइज़ेशन और सुझाव वाले हिस्सों के लिए, हम BigQuery Studio में Google Colab नोटबुक का इस्तेमाल करेंगे. इससे हमें ग्राफ़ के नतीजों को आसानी से देखने में मदद मिलती है.
BigQuery Graph Notebook को IPython Magics के तौर पर लागू किया जाता है. TO_JSON फ़ंक्शन के साथ %%bigquery मैजिक कमांड जोड़कर, नतीजों को विज़ुअलाइज़ किया जा सकता है. इसके बारे में यहां बताया गया है. इस चरण में, आपको खातों के बीच सामान्य कनेक्शन ढूंढने के लिए, ग्राफ़ क्वेरी चलानी होगी. यह "दो हॉप वाली" क्वेरी है, क्योंकि यह शुरुआती नोड से दो हॉप करके, मिलते-जुलते नोड ढूंढती है. जैसे, ग्राहक -> ईमेल -> ग्राहक.
हम निकोल वेड के खाते की जांच शुरू करेंगे. हमें दो हॉप के ज़रिए, उससे जुड़े सभी खातों का पता लगाना है.
दो चरणों वाली क्वेरी चलाना
अपनी नोटबुक में यह क्वेरी चलाएं.
%%bigquery --graph
GRAPH fraud_demo.FraudDemo
MATCH
p=(a:Customer)
( -[e:OwnsEmail|OwnsPhone|LinkedToAddress WHERE e.last_updated_ts < '2025-07-30']- (n) ){2}
WHERE a.account_id IN ("d2f1f992-d116-41b3-955b-6c76a3352657")
-- Verify the final node in the hop array is a Customer
AND 'Customer' IN UNNEST(LABELS(n[OFFSET(1)]))
RETURN TO_JSON(p) AS paths

नतीजों को समझना
इस क्वेरी में:
Customerनोड से शुरू होता है. इसमेंaccount_id"d2f1f992-d116-41b3-955b-6c76a3352657" (निकोल वेड) है.- यह
OwnsEmail,OwnsPhoneयाLinkedToAddressमें से किसी भी किनारे को कनेक्टिंग नोड (Phone,EmailयाAddress) तक फ़ॉलो करता है. - यह कनेक्टिंग नोड से अन्य
Customerनोड तक, किनारों को वापस ट्रैक करता है. - यह फ़ंक्शन, टाइमस्टैंप (
last_updated_ts) के आधार पर किनारों को फ़िल्टर करता है, ताकि किसी खास समय पर नेटवर्क की स्थिति देखी जा सके.
आपको दिखेगा कि ज़ैकरी कॉर्डोवा और ब्रेंडा ब्राउन, एक ही पते से निकोल से जुड़े हुए हैं.
6. नेटवर्क का विश्लेषण करें (चार हॉप)
इस चरण में, आपको क्वेरी को बड़ा करना होगा, ताकि ज़्यादा मुश्किल संबंधों का पता लगाया जा सके. हम 4-हॉप कनेक्शन ढूंढेंगे. इससे हमें ऐसे खातों का पता लगाने में मदद मिलती है जो कई इंटरमीडिएट इकाइयों के ज़रिए कनेक्ट किए गए हैं. उदाहरण के लिए, ग्राहक A -> ईमेल -> ग्राहक B -> फ़ोन -> ग्राहक C.
हम यह भी देखेंगे कि समय के साथ इस नेटवर्क में क्या बदलाव होते हैं.
"पहले" की स्थिति
सबसे पहले, 30 जुलाई, 2025 को मौजूद नेटवर्क को देखते हैं.
यह क्वेरी चलाएं:
%%bigquery --graph
%%bigquery --graph
MATCH p= ANY SHORTEST (a:Customer)
( -[e:OwnsEmail|OwnsPhone|LinkedToAddress WHERE e.last_updated_ts < '2025-07-30']- (n) ){3, 5}(reachable_a:Customer)
WHERE a.account_id IN ("d2f1f992-d116-41b3-955b-6c76a3352657")
-- Ensure the final node in the dynamic chain is actually a Customer
AND 'Customer' IN UNNEST(LABELS(n[OFFSET(ARRAY_LENGTH(n) - 1)]))
GRAPH fraud_demo.FraudDemo
RETURN
TO_JSON(p) AS paths, -- Array of all traversed edges
ARRAY_LENGTH(e) AS hop_count

"After" स्टेट
अब देखते हैं कि दो हफ़्ते बाद नेटवर्क कैसा दिखता है. हम उसी क्वेरी को चलाएंगे, लेकिन तारीख से जुड़ी पाबंदियों के बिना.
यह क्वेरी चलाएं:
%%bigquery --graph
GRAPH fraud_demo.FraudDemo
MATCH p= ANY SHORTEST (a:Customer)
( -[e:OwnsEmail|OwnsPhone|LinkedToAddress]- (n) ){3, 5}(reachable_a:Customer)
WHERE a.account_id IN ("d2f1f992-d116-41b3-955b-6c76a3352657")
-- Ensure the final node in the dynamic chain is actually a Customer
AND 'Customer' IN UNNEST(LABELS(n[OFFSET(ARRAY_LENGTH(n) - 1)]))
RETURN
TO_JSON(p) AS paths, -- Array of all traversed edges
ARRAY_LENGTH(e) AS hop_count

नतीजों को समझना
तारीख के फ़िल्टर हटाने पर, पूरी डेटासेट के लिए क्वेरी की जाती है. आपको दिखेगा कि नेटवर्क में काफ़ी बढ़ोतरी हुई है. निकोल वेड अब एक बड़े और आपस में जुड़े ग्रुप का हिस्सा हैं. कनेक्ट किए गए नेटवर्क में तेज़ी से बढ़ोतरी होना, धोखाधड़ी वाली संभावित गतिविधि का एक अहम संकेत है. जैसे, धोखाधड़ी करने वाले लोगों का एक ग्रुप, समय के साथ संसाधनों को शेयर करता है.
7. धोखाधड़ी की रिपोर्ट जनरेट करना
इस चरण में, धोखाधड़ी की पूरी जानकारी वाली रिपोर्ट जनरेट करने के लिए, ग्राफ़ के डेटा का विश्लेषण करने की सुविधा को कारोबार के पारंपरिक डेटा (ऑर्डर) के साथ जोड़ा जाएगा. इससे आपको जोखिम वाले खातों और धोखाधड़ी वाले संभावित ऑर्डर का पता चलेगा.
यह क्वेरी ज़्यादा जटिल है. यह स्टैंडर्ड एसक्यूएल में ग्राफ़ क्वेरी चलाने के लिए GRAPH_TABLE का इस्तेमाल करता है. साथ ही, पिछले चरण में हमने "पहले" और "बाद" की स्थितियों के बीच नेटवर्क के साइज़ (diff) में हुए बदलाव का हिसाब लगाया था.
धोखाधड़ी की रिपोर्ट से जुड़ी क्वेरी चलाना
अपनी नोटबुक में यह क्वेरी चलाएं.
%%bigquery --graph
WITH num_orders AS (
SELECT account_id, COUNT(1) AS num_order
FROM fraud_demo.orders
WHERE order_time > '2025-07-30'
GROUP BY account_id
),
orders AS (
SELECT account_id, order_id, fraud, order_total
FROM fraud_demo.orders
WHERE order_time > '2025-07-30'
),
-- Use Quantified Path Patterns to find connections up to 4 hops away
latest_connect AS (
SELECT
account_id,
ARRAY_LENGTH(ARRAY_AGG(DISTINCT connected_id)) AS size
FROM GRAPH_TABLE(
fraud_demo.FraudDemo
MATCH (a:Customer)-[:OwnsEmail|OwnsPhone|LinkedToAddress]-{4}(connected:Customer)
RETURN a.account_id AS account_id, connected.account_id AS connected_id
)
GROUP BY account_id
),
prev_connect AS (
SELECT
account_id,
ARRAY_LENGTH(ARRAY_AGG(DISTINCT connected_id)) AS size
FROM GRAPH_TABLE(
fraud_demo.FraudDemo
-- Apply the timestamp filter to EVERY edge in the 4-hop chain
MATCH (a:Customer)
(-[e:OwnsEmail|OwnsPhone|LinkedToAddress WHERE e.last_updated_ts < '2025-07-30']-(n)){4}
WHERE 'Customer' IN UNNEST(LABELS(n[OFFSET(3)]))
RETURN a.account_id AS account_id, n[OFFSET(3)].account_id AS connected_id
)
GROUP BY account_id
),
edge_changes AS (
SELECT account_id, MAX(last_updated_ts) AS max_last_updated_ts
FROM fraud_demo.customer_addresses
GROUP BY account_id
)
SELECT
la.account_id,
o.order_id,
la.size AS latest_size,
COALESCE(pa.size, 0) AS previous_size,
la.size - COALESCE(pa.size, 0) AS diff,
nos.num_order,
o.fraud AS reported_as_fraud,
o.order_total,
CASE
WHEN (la.size - COALESCE(pa.size, 0)) > 10 AND nos.num_order IS NULL THEN "CUSTOMER AT RISK"
WHEN (la.size - COALESCE(pa.size, 0)) > 10 AND nos.num_order IS NOT NULL AND o.fraud THEN "CONFIRMED FRAUD ORDER"
WHEN (la.size - COALESCE(pa.size, 0)) > 10 AND nos.num_order IS NOT NULL AND NOT o.fraud THEN "POTENTIAL FRAUD ORDER"
ELSE ""
END AS notes
FROM latest_connect la
LEFT JOIN prev_connect pa ON la.account_id = pa.account_id
LEFT JOIN num_orders nos ON la.account_id = nos.account_id
LEFT JOIN orders o ON la.account_id = o.account_id
INNER JOIN edge_changes ec ON la.account_id = ec.account_id
WHERE nos.num_order > 1 OR (la.size - COALESCE(pa.size, 0)) > 10
ORDER BY diff DESC
नतीजों को समझना
इस रिपोर्ट में यह जानकारी दिखती है:
account_id: जिस खाते का विश्लेषण किया जा रहा है उसका आईडी.order_id: हाल ही के ऑर्डर का आईडी.latest_size: आज कनेक्ट किए गए नेटवर्क का साइज़.previous_size: दो हफ़्ते पहले नेटवर्क का साइज़.diff: नेटवर्क के साइज़ में बढ़ोतरी.num_order: हाल ही के ऑर्डर की संख्या.reported_as_fraud: इससे पता चलता है कि ऑर्डर को धोखाधड़ी के तौर पर फ़्लैग किया गया है या नहीं.order_total: ऑर्डर की कुल रकम.notes: नेटवर्क की ग्रोथ और ऑर्डर के इतिहास के आधार पर, जोखिम की स्थिति का आकलन किया जाता है.
आपको ज़्यादा diff वैल्यू और ऑर्डर के ज़्यादा कुल योग वाले खाते दिखेंगे. इनकी आगे जांच की जा सकती है. "जोखिम में मौजूद ग्राहक" और "धोखाधड़ी की आशंका वाला ऑर्डर" नोट की मदद से, इन खातों को प्राथमिकता दी जा सकती है.

8. बड़े पैमाने पर धोखाधड़ी का पता लगाना
विश्लेषण के इस आखिरी चरण में, आपको नेटवर्क को बड़े पैमाने पर विज़ुअलाइज़ करना होगा. एक खाते से शुरुआत करने के बजाय, आपको संदिग्ध खातों के सेट के बीच कनेक्शन के लिए क्वेरी करनी होगी.
इससे यह पता चलता है कि क्या अलग-अलग जांचें, धोखाधड़ी करने वाले एक ही बड़े ग्रुप का हिस्सा हैं.
स्केल की गई क्वेरी को चलाना
अपनी नोटबुक में यह क्वेरी चलाएं.
%%bigquery --graph
GRAPH fraud_demo.FraudDemo
MATCH
p= ANY SHORTEST (a:Customer)
( -[e:OwnsEmail|OwnsPhone|LinkedToAddress]- (n) ){3, 5}
(reachable_a:Customer)
-- these IDs are from the previous results
WHERE a.account_id in ( "845f2b14-cd10-4750-9f28-fe542c4a731b"
, "3ff59684-fbf9-40d7-8c41-285ade5002e6"
, "8887c17b-e6fb-4b3b-8c62-cb721aafd028"
, "03e777e5-6fb4-445d-b48c-cf42b7620874"
, "81629832-eb1d-4a0e-86da-81a198604898"
, "845f2b14-cd10-4750-9f28-fe542c4a731b",
"89e9a8fe-ffc4-44eb-8693-a711a3534849"
)
LIMIT 400
RETURN TO_JSON(p) as paths
नतीजों को समझना
यह क्वेरी एक कॉम्प्लेक्स ग्राफ़ दिखाती है. इससे पता चलता है कि संदिग्ध खाते एक-दूसरे से कैसे जुड़े हैं और वे किन संसाधनों को शेयर करते हैं. अब आपको बड़े पैमाने पर धोखाधड़ी का पता लगाने की सुविधा मिल रही है. इससे, आपको ऐसी गतिविधियों के क्लस्टर की पहचान करने में मदद मिलती है जिनके लिए एक साथ कई कार्रवाइयां करने की ज़रूरत पड़ सकती है.

9. क्लीन अप करें
इस कोडलैब में इस्तेमाल की गई संसाधनों के लिए, अपने Google Cloud खाते से शुल्क लिए जाने से बचने के लिए, आपको डेटासेट और प्रॉपर्टी ग्राफ़ मिटा देना चाहिए.
अपने एनवायरमेंट को क्लीन अप करने के लिए, यहां दिए गए SQL स्टेटमेंट चलाएं.
DROP PROPERTY GRAPH IF EXISTS fraud_demo.FraudDemo;
DROP SCHEMA IF EXISTS fraud_demo CASCADE;
10. बधाई हो
बधाई हो! आपने BigQuery Graph का इस्तेमाल करके, धोखाधड़ी का पता लगाने वाला समाधान बना लिया है.
आपने यह सीखा है कि:
- Cloud Storage से BigQuery में डेटा लोड करें.
- डीडीएल का इस्तेमाल करके, प्रॉपर्टी ग्राफ़ तय करें.
- आसान और जटिल संबंधों का पता लगाने के लिए, GQL का इस्तेमाल करके ग्राफ़ पर क्वेरी करें.
- जोखिम का पता लगाने के लिए, कारोबार के डेटा के साथ-साथ ग्राफ़ के डेटा का विश्लेषण करें.
- बड़े पैमाने पर नेटवर्क का विज़ुअलाइज़ेशन करें.
कुछ और संसाधन