Skip to main content

Building a Personal Life Ecology Application

In this tutorial, we will build a Python application that models a "Personal Life Ecology". Instead of a single entity, we will create a rich graph of connected entities representing a person, their relationships, and their financial activities.

This tutorial uses the code and data provided in the tutorials/ directory of the OpenGIN repository.

Scenario​

We are modeling the life of Alex, a software engineer.

  • Central Entity: Alex (Person/Individual)
  • Relationships:
    • Works at TechCorp
    • Lives at Home
    • Exercises at FitGym
    • Frequents Espresso Corner (Cafe)
    • Shops at FreshMart (Supermarket)
    • Subscribed to FiberNet (ISP)

Personal Life Ecology Graph

  • Tabular Data:
    • Expenses: Monthly spending record linked to entities.
    • Income: Monthly income record linked to employers/sources.

Project Structure​

Navigate to the tutorials/ folder to see the implementation:

  • my_first_opengin_app.py: The Python script that performs the ingestion.
  • data/: Contains the source data.
    • entities.csv: Definitions of Alex and related organizations/places.
    • relationships.csv: Graph edges connecting the entities.
    • expenses.csv & income.csv: Tabular financial data.
    • metadata.json: Additional key-value pairs for entities.

Implementation Details​

The application script (my_first_opengin_app.py) demonstrates best practices for ingesting complex data into OpenGIN.

1. Two-Phase Ingestion Strategy​

To satisfy referential integrity (you can't link to an entity that doesn't exist yet), the script uses a 2-pass strategy:

  1. Phase 1 (Creation): Iterate through entities.csv and create all entities using POST /entities. At this stage, we ingest Metadata and Attributes (like Expenses tables), but exclude relationships.
  2. Phase 2 (Linking): Iterate again and use PUT /entities/{id} to update the entities, adding their Relationships. We strictly exclude immutable fields like Kind during this update.

2. Handling Tabular Attributes​

The script reads expenses.csv using pandas and converts it into OpenGIN's tabular attribute format:

"attributes": {
"expenses": {
"values": [
{
"startTime": "...",
"value": {
"columns": ["Month", "Category", "Amount"],
"rows": [["Jan", "Internet", "50"], ...]
}
}
]
}
}

Running the Tutorial​

Prerequisites​

  • OpenGIN running locally (Ingestion API at port 8080, Read API at port 8081).
  • Python 3.8+ with pandas and requests installed (pip install pandas requests).

Commands​

The script provides a CLI for easy interaction.

1. Create Data (Ingest)

python tutorials/my_first_opengin_app.py create

Output: You will see "Creating Entity..." logs for Phase 1 and "Linking Entity..." logs for Phase 2.

2. Verify Data

python tutorials/my_first_opengin_app.py verify

Output: This queries the Read API to confirm "Person" entities were created successfully.

Next Steps​

  • Explore the tutorials/data/ CSV files to see how the data is structured.
  • Modify my_first_opengin_app.py to add a new entity (e.g., a "Friend") and link them to Alex.