Skip to content

3 Specialized Graph Analysis

swhitenstall edited this page Jan 30, 2025 · 3 revisions

Specialized Graph Analysis

image

1. Node-Specific Queries

// Meeting Analysis
MATCH (m:Meeting)
OPTIONAL MATCH (p:Person)-[:ATTENDED]->(m)
WITH m.workgroup as workgroup,
     m.date as meeting_date,
     count(DISTINCT p) as attendee_count
RETURN workgroup,
       count(*) as meeting_count,
       min(meeting_date) as first_meeting,
       max(meeting_date) as last_meeting,
       avg(attendee_count) as avg_attendance
ORDER BY meeting_count DESC;

// Alternative detailed view
MATCH (m:Meeting)
OPTIONAL MATCH (p:Person)-[:ATTENDED]->(m)
RETURN m.workgroup as workgroup,
       m.date as meeting_date,
       count(DISTINCT p) as attendee_count,
       collect(p.name) as attendees
ORDER BY m.date DESC;

2. Temporal Analysis

// Meeting Frequency Over Time
MATCH (m:Meeting)
WITH date(m.date) as meeting_date,
     m.workgroup as workgroup
RETURN workgroup,
       meeting_date.quarter as quarter,
       meeting_date.year as year,
       count(*) as meeting_count
ORDER BY year, quarter;

// Decision Timeline
MATCH (m:Meeting)-[:MADE_DECISION]->(d:Decision)
WITH date(m.date) as decision_date,
     d.effect as effect_type,
     count(*) as decision_count
RETURN decision_date,
       effect_type,
       decision_count
ORDER BY decision_date;

// Action Item Tracking
MATCH (m:Meeting)-[:HAS_ACTION]->(a:ActionItem)
WHERE a.dueDate IS NOT NULL
WITH a.dueDate as original_date,
     a.status as status
RETURN original_date as due_date,
       status,
       count(*) as action_count
ORDER BY original_date;

// Action Items with Status Distribution
MATCH (m:Meeting)-[:HAS_ACTION]->(a:ActionItem)
RETURN a.status as status,
       count(*) as action_count,
       collect(a.dueDate) as due_dates
ORDER BY action_count DESC;

// Action Items by Meeting
MATCH (m:Meeting)-[:HAS_ACTION]->(a:ActionItem)
RETURN m.date as meeting_date,
       count(*) as action_count,
       collect({
           text: a.text,
           status: a.status,
           dueDate: a.dueDate
       }) as actions
ORDER BY m.date DESC;

3. Data Quality Checks

// Missing Required Properties
MATCH (m:Meeting)
WHERE m.date IS NULL 
   OR m.workgroup IS NULL
   OR m.host IS NULL
RETURN 'Meeting' as Node_Type,
       m.id as ID,
       [k in keys(m) WHERE m[k] IS NULL] as Null_Properties;

// Comprehensive Property Check
MATCH (n)
WITH n, labels(n)[0] as Node_Type
WITH n, Node_Type,
     CASE Node_Type
         WHEN 'Meeting' THEN ['date', 'workgroup', 'host']
         WHEN 'Person' THEN ['name']
         WHEN 'ActionItem' THEN ['text', 'status', 'assignee']
         WHEN 'Decision' THEN ['decision', 'effect']
         ELSE []
     END as required_properties
WITH n, Node_Type, required_properties,
     [prop in required_properties WHERE n[prop] IS NULL] as missing_properties
WHERE size(missing_properties) > 0
RETURN Node_Type,
       n.id as ID,
       missing_properties,
       properties(n) as existing_properties;

// Empty String Properties
MATCH (n)
WITH n, labels(n)[0] as Node_Type,
     [k in keys(n) WHERE n[k] = ''] as empty_properties
WHERE size(empty_properties) > 0
RETURN Node_Type,
       n.id as ID,
       empty_properties;

These queries help you:

  1. Node-Specific Analysis:

    • Track meeting patterns by workgroup
    • Monitor participant engagement
    • Analyze document usage
  2. Temporal Analysis:

    • View meeting frequency trends
    • Track decision-making patterns
    • Monitor action item timelines
  3. Data Quality:

    • Find missing required properties
    • Identify orphaned nodes
    • Detect date format issues
    • Find potential duplicates
    • Check relationship integrity

Use these queries to:

  • Monitor participation patterns
  • Track workgroup activity
  • Identify data quality issues
  • Ensure data consistency
Clone this wiki locally