Adatelemzési Folyamat
Részletes dokumentáció arról, hogyan dolgozzák fel, szűrik és összesítik a publikációkat statisztikák és vizualizációk generálásához.
Elemzési Folyamat Áttekintése
Az elemzési folyamat több lépésen keresztül alakítja át a nyers publikációs adatokat átfogó statisztikákká.
Feldolgozási Lépések
- Adatbetöltés: A nyers publikációk az MTMT API-ból töltődnek be
- Publikáció Példányosítás: Minden publikációt Publication osztálypéldánnyá csomagolnak
- Tudományos Szűrő: Csak azok a publikációk kerülnek feldolgozásra, ahol category.mtid === 1
- Szerzőség Szűrő: Csak azok a publikációk kerülnek bele, ahol a szerző típusos szerző (nem csak közreműködő)
- Adatbővítés:
- Norvég szint minősítések betöltése
- Impakt Faktor keresése az IF listából
- Szerző részesedés számítása
- Metrika Számítás:
- Q Pontszám számítás
- I Pontszám számítás
- Impakt Faktor hozzárendelés
- Publikáció minősítés kinyerése
- Összesítés: A statisztikák összesítése az összes publikációra
- Éves Csoportosítás: Az adatok publikációs év szerint csoportosítva trendelemzéshez
- Számított Metrikák: H-Index és teljes Q Pontszám számítása
- Diagram Adatok Előkészítése: Az adatok vizualizációhoz formázva
// Main analysis function flow
export const analyze = async (
author: { mtid: string; name: string; degrees: string[] },
rawPublications: Publication[],
translations?: Record<string, string>
): Promise<ProcessedPublicationData> => {
// 1. Filter scientific publications
const publications = rawPublications
.map((data) => new Publication(data))
.filter((pub) => pub.isScientific());
// 2. Filter by authorship
for (const pub of publications) {
if (!pub.authorships?.some(
(a) => a.author?.mtid === Number(author.mtid) &&
a.authorTyped === true
)) {
pub.contributorOnly = true;
continue; // Skip contributor-only publications
}
// 3. Load additional data
loadNorwayLevel(pub);
const impactFactor = await getImpactFactor(pub);
const authorShare = pub.getAuthorShare(author.mtid);
// 4. Calculate metrics
const qScore = await pub.getQScore(authorShare, impactFactor);
const iScoreData = pub.getIScore();
// 5. Aggregate statistics
stats.totalScientificPublications++;
stats.qScore.fromArticles += qScore.qscore;
// ... more aggregations
}
// 6. Calculate derived metrics
stats.hIndex = calculateHIndex(citations);
stats.qScore.total = stats.qScore.fromArticles + stats.qScore.fromBooks;
return { statistics, chartData, authors, types, journals, publications, meta };
};Publikáció Szűrése
A publikációknak több szűrőn is át kell menniük, hogy a statisztikákba bekerüljenek.
Tudományos Publikáció Szűrő
Csak a tudományosnak jelölt publikációk kerülnek feldolgozásra. Egy publikáció akkor tekinthető tudományosnak, ha:
pub.category?.mtid === 1Szerzőség Szűrő
A szerzőnek típusos szerzőnek kell lennie (authorTyped === true), nem csak közreműködőnek. Azok a publikációk, ahol a szerző csak közreműködő, contributorOnly = true jelölést kapnak és kizárásra kerülnek a statisztikákból.
Megjegyzés: A csak közreműködő publikációk továbbra is szerepelnek a publikációs listában referenciaként, de nem járulnak hozzá semmilyen metrikához vagy statisztikához.
// Publication filtering logic
for (const pub of publications) {
// Step 1: Must be scientific
if (!pub.isScientific()) continue;
// Step 2: Author must be typed author (not just contributor)
if (!pub.authorships?.some(
(a) => a.author?.mtid === Number(author.mtid) &&
a.authorTyped === true
)) {
pub.contributorOnly = true;
continue; // Exclude from statistics
}
// Publication passes all filters, process it
stats.totalScientificPublications++;
}Éves Összesítés és Trendek
Minden metrika publikációs év szerint összesítve, hogy lehetővé tegye a trendelemzést és idősor-vizualizációkat.
Követett Éves Metrikák
- publications: Publikációk száma évente
- iscore: I Pontszámok összege az adott év publikációira
- qscore: Q Pontszámok összege az adott év publikációira
- publicationsWithIF: Impakt Faktorral rendelkező publikációk száma
- rankings: Publikációk száma minősítési kategóriánként (D1, Q1-Q4, N/A)
Ismeretlen Év Kezelése
A publikációs év nélküli publikációk "Ismeretlen" év alá kerülnek csoportosításra. Ez lehetővé teszi a rendszer számára, hogy továbbra is feldolgozza és megjelenítse ezeket a publikációkat.
// Yearly data aggregation
const yearlyData: Record<string, {
publications: number;
iscore: number;
qscore: number;
publicationsWithIF: number;
rankings: Record<string, number>;
}> = {};
for (const pub of publications) {
const year = pub.publishedYear?.toString() || "Unknown";
// Initialize year if not exists
yearlyData[year] = yearlyData[year] || {
publications: 0,
iscore: 0,
qscore: 0,
publicationsWithIF: 0,
rankings: { D1: 0, Q1: 0, Q2: 0, Q3: 0, Q4: 0, "N/A": 0 },
};
// Aggregate metrics
yearlyData[year].publications++;
yearlyData[year].iscore += pub.iscore || 0;
yearlyData[year].qscore += pub.qscore || 0;
if (impactFactor > 0 && qScore.qscore > 0) {
yearlyData[year].publicationsWithIF++;
}
// Count by rating
const rating = pub.getRating();
yearlyData[year].rankings[rating]++;
}Kumulatív Számítások
A rendszer mind éves, mind kumulatív értékeket számít a következőkhöz:
- Publikációk minősítés szerint (D1, Q1-Q4, N/A)
- I Pontszám (független hivatkozások)
- Q Pontszám (minőségi pontszám)
- Impakt Faktorral rendelkező publikációk
A kumulatív értékek az egyes évekig tartó futó összeget mutatják, lehetővé téve a növekedési trend vizualizációját.
Publikáció Típus Kategorizálás
A publikációk típus és nyelv/kiadás szerint is kategorizálva vannak részletes statisztikák biztosításához.
Publikáció Típusok
- scientificArticle: Folyóiratcikkek (journalarticle)
- conferenceArticle: Konferenciaközlemények könyvfejezetekben
- bookChapter: Könyvfejezetek (nem konferencia)
- book: Teljes könyvek
- patent: Szabadalmak
- thesis: Értekezések/disszertációk
- other: Egyéb publikáció típusok
Nyelv/Kiadás Kategóriák
Minden publikáció típus tovább kategorizálva van nyelv és kiadás szerint:
- foreign: Idegen kiadású publikációk
- hungarianForeign: Magyar publikációk idegen nyelven
- hungarianNative: Magyar publikációk magyar nyelven
Kategória Meghatározási Logika:
- Ha foreignEdition === true → foreign
- Különben ha foreignLanguage === true → hungarianForeign
- Különben → hungarianNative
// Publication type categorization
const update_PublicationsByType_Stats = (
pub: Publication,
stats: Statistics
) => {
const type = pub.type?.otypeName?.toLowerCase() || "";
// Determine category (foreign, hungarianForeign, hungarianNative)
const category = pub.foreignEdition
? "foreign"
: pub.foreignLanguage
? "hungarianForeign"
: "hungarianNative";
// Map publication types
const typeMap: Record<string, keyof Statistics["publicationsByType"]> = {
journalarticle: "scientificArticle",
bookchapter: pub.subType?.name?.toLowerCase().includes("konferencia")
? "conferenceArticle"
: "bookChapter",
book: "book",
patent: "patent",
thesis: "thesis",
};
const publicationType = typeMap[type] || "other";
stats.publicationsByType[publicationType][category]++;
};Diagram Adatok Előkészítése
Az éves összesített adatok diagramra kész formátumokká alakítva vizualizációhoz.
Diagram Adatstruktúra
A rendszer több diagram adathalmazt generál:
- publicationsWithRankings: Éves számok minősítési kategóriánként
- cumulativePublications: Kumulatív számok minősítési kategóriánként
- iScore: Éves I Pontszám értékek
- cumulativeIScore: Kumulatív I Pontszám értékek
- qScore: Éves Q Pontszám értékek
- cumulativeQScore: Kumulatív Q Pontszám értékek
- impactFactor: Impakt Faktorral rendelkező publikációk éves száma
- cumulativeImpactFactor: Impakt Faktorral rendelkező publikációk kumulatív száma
Év Rendezés
Az évek növekvő sorrendben vannak rendezve a kronológiai vizualizáció biztosításához. Az "Ismeretlen" év, ha jelen van, általában a végére kerül.
// Chart data preparation from yearly data
const prepareChartDataFromYearlyData = (yearlyData) => {
const years = Object.keys(yearlyData).sort();
const cumulative = {
D1: 0, Q1: 0, Q2: 0, Q3: 0, Q4: 0, NA: 0,
iScore: 0, qScore: 0, publicationsWithIF: 0,
};
return {
// Yearly rankings
publicationsWithRankings: {
years,
rankings: {
D1: years.map((year) => yearlyData[year].rankings.D1),
Q1: years.map((year) => yearlyData[year].rankings.Q1),
// ... Q2, Q3, Q4, N/A
},
},
// Cumulative rankings
cumulativePublications: {
years,
rankings: {
D1: years.map((year) => (cumulative.D1 += yearlyData[year].rankings.D1)),
// ... similar for other rankings
},
},
// I Score and Q Score (yearly and cumulative)
iScore: {
label: "Éves független hivatkozások",
years,
data: years.map((year) => yearlyData[year].iscore),
},
cumulativeIScore: {
label: "Kumulatív független hivatkozások",
years,
data: years.map((year) => (cumulative.iScore += yearlyData[year].iscore)),
},
// ... similar for Q Score and Impact Factor
};
};Elemzés Metaadatok
Minden elemzés tartalmaz metaadatokat az adatforrásokról és a feldolgozási időről.
Metaadat Mezők
- lastUpdated: Az elemzés végrehajtásának időbélyege
- ifListVersionYear: A használt Impakt Faktor lista éve
- norwayListVersionYear: A használt Norvég lista éve
Megjegyzés: Az IF lista és Norvég lista verzió évek jelzik, hogy melyik verzióját használták a külső adatforrásoknak az elemzéshez. Ez fontos a reprodukálhatósághoz.
A Norvég lista minőségi értékelésekkel rendelkező folyóiratokat tartalmaz (0-2 skála). Alapértelmezés szerint a Szint 0 minősítéssel rendelkező folyóiratokból származó publikációk minden számításban szerepelnek. A statisztikák oldalon található kapcsolóval engedélyezhető a kizárás. Ha a kizárás engedélyezve van, a Szint 0 publikációk nem járulnak hozzá a Q-pontszám és az I-pontszám és az Impakt Faktor számításához.
További Adatgyűjtemények
A statisztikákon túl az elemzés további információkat gyűjt megjelenítéshez és szűréshez.
Gyűjtött Halmazok
- authors: Az összes társszerző halmaza az összes publikációból (abc sorrendben)
- types: Az összes talált publikáció típus halmaza
- journals: Az összes folyóiratnév halmaza (abc sorrendben)
- publications: Az összes feldolgozott Publication példány tömbje
Ezek a gyűjtemények lehetővé teszik a szűrést, keresést és a szerző publikációs történetének részletes feltárását.