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.
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ă:
- Obții sursele și filtrele de date disponibile
- Definești o zonă de interes geografică
- Interoghem proprietățile și intrările în acea zonă
- 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
- Caz de utilizare raportare riscuri - Generează rapoarte evaluare riscuri
- Ghid date spațiale - Lucru cu forme GeoJSON
- Ghid export CSV - Exportă rezultate ca CSV