Sări la conținutul principal

Analiză portofoliu

Acest caz de utilizare arată cum să interoghez și analizez date portofoliu de proprietate în interiorul unei zone geografice folosind forme, filtre și acumulare.

Folosești Python?

SDK-ul Python avvolează toate punctele finale portofoliu într-un client tipizat — client.reports_v1.points_selection(...), client.reports_v1.accumulation_selection(...), etc.

Scenariu

Ai un portofoliu de imobiliare și trebuie să:

  1. Obții sursele și filtrele de date disponibile
  2. Definești o zonă de interes geografică
  3. Interoghem proprietățile și intrările în acea zonă
  4. Agreghez metrici (numărare, sumă, medie) după coloană

Pasul 1: Descoperă datele disponibile

Mai întâi, înțelege ce date și filtre sunt disponibile:

curl -X GET "https://graph.quarticle.ro/graph/api/v1/reports/portfolio/provision?source=portfolio_01" \
-H "Authorization: YOUR_API_KEY"

Răspuns (abreviat):

{
"provisioning": {
"portfolio_01": {
"columns": [
{ "field": "property_id", "type": "string" },
{ "field": "name", "type": "string" },
{ "field": "value", "type": "number" },
{ "field": "property_type", "type": "string" }
],
"filters": [
{
"field": "oe_id",
"values": ["chicago_portfolio", "nyc_portfolio"]
},
{
"field": "property_type",
"values": ["residential", "office", "retail"]
}
]
}
}
}

Pasul 2: Obții puncte în o zonă geografică

Definește zona ta de interes ca un poligon GeoJSON, apoi interoghem punctele:

{
"source": "portfolio_01",
"shape": {
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [[
[-87.6500, 41.8000],
[-87.5500, 41.8000],
[-87.5500, 41.9000],
[-87.6500, 41.9000],
[-87.6500, 41.8000]
]]
},
"properties": {}
},
"filters": [
{"field": "oe_id", "value": "chicago_portfolio"}
],
"properties": ["name", "address", "value", "property_type"]
}

Răspuns:

[
{
"type": "Feature",
"properties": {
"name": "Downtown Office Tower",
"address": "100 N LaSalle, Chicago, IL",
"value": 850000000,
"property_type": "office"
},
"geometry": {"type": "Point", "coordinates": [-87.6301, 41.8857]}
}
]

Pasul 3: Obții intrări detaliate în zonă

Pentru înregistrări detaliate (nu doar puncte), utilizează punctul final intrări:

{
"source": "portfolio_01",
"shape": {...},
"filters": [{"field": "oe_id", "value": "chicago_portfolio"}],
"columns": ["property_id", "name", "value", "year_built"],
"limit": 100,
"page": 0
}

Exportă ca CSV adăugând antetul Accept: text/csv.

Pasul 4: Agregează metrici

Agregează date în zona respectivă folosind acumulare:

{
"source": "portfolio_01",
"shape": {
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [[
[-87.6500, 41.8000],
[-87.5500, 41.8000],
[-87.5500, 41.9000],
[-87.6500, 41.9000],
[-87.6500, 41.8000]
]]
},
"properties": {}
},
"filters": [{"field": "oe_id", "value": "chicago_portfolio"}],
"aggregationColumns": ["value", "occupancy_rate"],
"locale": "en-US"
}

Răspuns:

[
{
"analysis": {
"count": 47,
"value": {
"sum": 12500000000,
"avg": 265957446,
"min": 2000000,
"max": 850000000
},
"occupancy_rate": {
"avg": 0.852,
"min": 0.65,
"max": 0.99
}
},
"radius": null
}
]

Pasul 5: Analiză buffer multi-rază

Analizează datele la mai multe distanțe de la un punct central:

{
"source": "portfolio_01",
"shape": {
"type": "circle",
"coordinates": [{ "lat": 41.8857, "long": -87.6298 }]
},
"radiuses": [1000, 5000, 10000],
"filters": [{"field": "oe_id", "value": "chicago_portfolio"}],
"aggregationColumns": ["value", "occupancy_rate"]
}

Răspunsul arată rezultate pentru fiecare rază.

Fluxul complet (JavaScript)

async function portfolioAnalysis() {
const apiKey = process.env.QARTA_API_KEY;
const source = 'portfolio_01';

// Pasul 1: Obține info aprovizionare
const provision = await fetch(
`https://graph.quarticle.ro/graph/api/v1/reports/portfolio/provision?source=${source}`,
{ headers: { 'Authorization': `${apiKey}` } }
).then(r => r.json());

console.log('Available columns:', provision.provisioning[source].columns.map(c => c.field));

// Definește zona (downtown Chicago)
const area = {
type: "Feature",
geometry: {
type: "Polygon",
coordinates: [[
[-87.6500, 41.8000],
[-87.5500, 41.8000],
[-87.5500, 41.9000],
[-87.6500, 41.9000],
[-87.6500, 41.8000]
]]
},
properties: {}
};

// Pasul 2: Obține puncte
const points = await fetch(
'https://graph.quarticle.ro/graph/api/v1/reports/portfolio/points/selection',
{
method: 'POST',
headers: {
'Authorization': `${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
source,
shape: area,
filters: [{ field: 'oe_id', value: source }],
properties: ['name', 'value', 'property_type']
})
}
).then(r => r.json());

console.log(`Found ${points.length} properties`);

// Pasul 3: Agregează metrici
const analysis = await fetch(
'https://graph.quarticle.ro/graph/api/v1/reports/portfolio/accumulation/selection',
{
method: 'POST',
headers: {
'Authorization': `${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
source,
shape: area,
filters: [{ field: 'oe_id', value: source }],
aggregationColumns: ['value', 'occupancy_rate']
})
}
).then(r => r.json());

console.log('Portfolio metrics:', analysis[0].analysis);

return {
pointCount: points.length,
metrics: analysis[0].analysis
};
}

const results = await portfolioAnalysis();
console.log(JSON.stringify(results, null, 2));

Cazuri de utilizare

  • Analiză piață geografică - Înțelege distribuție și valoare proprietate după locație
  • Evaluare riscuri - Identifică concentrări și expunere în zone specifice
  • Raportare performanță - Creează rezumate nivel piață pentru stakeholderi
  • Due diligence - Analizează ținte achiziție și piețe înconjurătoare
  • Optimizare portofoliu - Identifică lacune sau suprapuneri în acoperire

Pași următori