"Gelecek, şimdinin geçmişidir, sadece biraz daha yıpranmış ve üzerine kahve lekesi düşmüş halidir." — Douglas Adams"

Eği̇ti̇m Terci̇h Anali̇z Araci

Bu içerik, 2025 yılı için henüz kontenjan sayısı belli olmayan bir eğitim programı analiz aracını tanıtıyor. React tabanlı bir görselleştirme uygulaması olan "EducationChoiceAnalyzer", öğrencilere üniversite tercihlerinde yardımcı olmak için trend analizleri, grafikler ve tahminler sunuyor. Van YYÜ'nün Acil Durum ve Afet Yönetimi programı gibi bölümler için geçmiş yıllara ait sıralama ve kontenjan verilerini görselleştiriyor.

yazı resim

2025 yılı için henüz kontenjan sayısı belli olmadığından kontenjan sayısı açıklanınca güncelleme yapmak gereklidir. Aksi takdirde çok daha iyi bir sıralama sonucu çıkar.

import React, { useState, useEffect } from 'react';
import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer, BarChart, Bar, ScatterChart, Scatter } from 'recharts';
import { TrendingUp, TrendingDown, AlertTriangle, CheckCircle, Calculator, BarChart3, Target } from 'lucide-react';

const EducationChoiceAnalyzer = () => {
const [selectedProgram, setSelectedProgram] = useState('van');
const [analysisMode, setAnalysisMode] = useState('trend');
const [predictions, setPredictions] = useState({});

// Örnek veriler
const programData = {
van: {
name: "Van YYÜ - Acil Durum ve Afet Yönetimi",
data: [
{ year: 2019, ranking: 682966, quota: 31, candidates: 2390188, totalQuota: 298220 },
{ year: 2020, ranking: 629200, quota: 31, candidates: 2295890, totalQuota: 299630 },
{ year: 2021, ranking: 664789, quota: 31, candidates: 2416748, totalQuota: 310732 },
{ year: 2022, ranking: 752667, quota: 31, candidates: 3008029, totalQuota: 313941 },
{ year: 2023, ranking: 707442, quota: 30, candidates: 2995399, totalQuota: 331202 },
{ year: 2024, ranking: 684970, quota: 30, candidates: 2819075, totalQuota: 278261 }
]
},
ankara: {
name: "Ankara Ü. Beypazarı - Acil Durum ve Afet Yönetimi",
data: [
{ year: 2019, ranking: 594040, quota: 72, candidates: 2390188, totalQuota: 298220 },
{ year: 2020, ranking: 637557, quota: 72, candidates: 2295890, totalQuota: 299630 },
{ year: 2021, ranking: 729104, quota: 71, candidates: 2416748, totalQuota: 310732 },
{ year: 2022, ranking: 819193, quota: 72, candidates: 3008029, totalQuota: 313941 },
{ year: 2023, ranking: 830430, quota: 71, candidates: 2995399, totalQuota: 331202 },
{ year: 2024, ranking: 765428, quota: 71, candidates: 2819075, totalQuota: 278261 }
]
},
mugla: {
name: "Muğla SKÜ Kavaklıdere - Acil Durum ve Afet Yönetimi",
data: [
{ year: 2019, ranking: 607188, quota: 47, candidates: 2390188, totalQuota: 298220 },
{ year: 2020, ranking: 630953, quota: 47, candidates: 2295890, totalQuota: 299630 },
{ year: 2021, ranking: 725747, quota: 47, candidates: 2416748, totalQuota: 310732 },
{ year: 2022, ranking: 848232, quota: 47, candidates: 3008029, totalQuota: 313941 },
{ year: 2023, ranking: 874308, quota: 47, candidates: 2995399, totalQuota: 331202 },
{ year: 2024, ranking: 819608, quota: 46, candidates: 2819075, totalQuota: 278261 }
]
},
pamukkale: {
name: "Pamukkale Ü. Serinhisar - Acil Durum ve Afet Yönetimi",
data: [
{ year: 2019, ranking: 640530, quota: 31, candidates: 2390188, totalQuota: 298220 },
{ year: 2020, ranking: 645353, quota: 31, candidates: 2295890, totalQuota: 299630 },
{ year: 2021, ranking: 763886, quota: 31, candidates: 2416748, totalQuota: 310732 },
{ year: 2022, ranking: 870057, quota: 31, candidates: 3008029, totalQuota: 313941 },
{ year: 2023, ranking: 891256, quota: 31, candidates: 2995399, totalQuota: 331202 },
{ year: 2024, ranking: 825773, quota: 31, candidates: 2819075, totalQuota: 278261 }
]
}
};

// Hesaplama fonksiyonları
const calculateRatio = (data) => {
return data.map(item => ({
...item,
ratio: (item.ranking / item.candidates * 100).toFixed(3),
competitionIndex: (item.candidates / item.totalQuota).toFixed(2)
}));
};

const calculateStatistics = (data) => {
const rankings = data.map(item => item.ranking);
const ratios = data.map(item => item.ranking / item.candidates);

const mean = rankings.reduce((a, b) => a + b, 0) / rankings.length;
const variance = rankings.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / rankings.length;
const stdDev = Math.sqrt(variance);
const meanRatio = ratios.reduce((a, b) => a + b, 0) / ratios.length;

return {
mean: Math.round(mean),
stdDev: Math.round(stdDev),
meanRatio: meanRatio.toFixed(4),
volatility: (stdDev / mean * 100).toFixed(2)
};
};

const predict2025 = (data) => {
const recentData = data.slice(-3);
const ratios = recentData.map(item => item.ranking / item.candidates);
const avgRatio = ratios.reduce((a, b) => a + b, 0) / ratios.length;

// 2025 için tahmini aday sayısı (trend analizi)
const candidatesTrend = data.slice(-2);
const candidateChange = candidatesTrend[1].candidates - candidatesTrend[0].candidates;
const estimated2025Candidates = candidatesTrend[1].candidates + candidateChange * 0.5;

const prediction = Math.round(avgRatio * estimated2025Candidates);
const confidenceInterval = Math.round(prediction * 0.05); // %5 hata payı

return {
prediction,
lowerBound: prediction - confidenceInterval,
upperBound: prediction + confidenceInterval,
estimated2025Candidates: Math.round(estimated2025Candidates),
avgRatio: avgRatio.toFixed(4)
};
};

const currentData = programData[selectedProgram];
const enrichedData = calculateRatio(currentData.data);
const stats = calculateStatistics(currentData.data);
const prediction2025 = predict2025(currentData.data);

const getTrendIcon = (data) => {
const recent = data.slice(-2);
const trend = recent[1].ranking - recent[0].ranking;
if (trend > 0) return ;
if (trend < 0) return ;
return

;
};

const getRiskLevel = (volatility) => {
if (volatility < 10) return { level: 'Düşük', color: 'text-green-600', icon: CheckCircle };
if (volatility < 20) return { level: 'Orta', color: 'text-yellow-600', icon: AlertTriangle };
return { level: 'Yüksek', color: 'text-red-600', icon: AlertTriangle };
};

const riskInfo = getRiskLevel(parseFloat(stats.volatility));

return (

Eğitim Tercih Analiz Sistemi

===========================================

Veri odaklı tercih analizi ve 2025 tahmin modeli

{/* Program Seçimi */}

Program Seçimi

{Object.entries(programData).map(([key, program]) => (
key={key}
onClick={() => setSelectedProgram(key)}
className={p-4 rounded-lg border-2 transition-all ${ selectedProgram === key ? 'border-blue-500 bg-blue-50 text-blue-700' : 'border-gray-200 hover:border-gray-300' }}
>
{program.name}

))}

{/* Ana İstatistikler */}

Ortalama Sıralama

{stats.mean.toLocaleString()}

{getTrendIcon(currentData.data)}

Volatilite

{stats.volatility}%

Risk: {riskInfo.level}

2025 Tahmini

{prediction2025.prediction.toLocaleString()}

±{(prediction2025.upperBound - prediction2025.prediction).toLocaleString()}

Standart Sapma

{stats.stdDev.toLocaleString()}

{/* Analiz Türü Seçimi */}

onClick={() => setAnalysisMode('trend')}
className={px-4 py-2 rounded-lg ${ analysisMode === 'trend' ? 'bg-blue-500 text-white' : 'bg-gray-200' }}
>
Trend Analizi

onClick={() => setAnalysisMode('ratio')}
className={px-4 py-2 rounded-lg ${ analysisMode === 'ratio' ? 'bg-blue-500 text-white' : 'bg-gray-200' }}
>
Oran Analizi

onClick={() => setAnalysisMode('competition')}
className={px-4 py-2 rounded-lg ${ analysisMode === 'competition' ? 'bg-blue-500 text-white' : 'bg-gray-200' }}
>
Rekabet Analizi

{analysisMode === 'trend' && (

[value.toLocaleString(), name]} />

)}

{analysisMode === 'ratio' && (

[value + '%', name]} />

)}

{analysisMode === 'competition' && (

)}

{/* 2025 Tahmin Detayları */}

2025 Tahmin Analizi


Optimistik Senaryo

{prediction2025.lowerBound.toLocaleString()}

En iyi durumda beklenen sıralama

Orta Senaryo

{prediction2025.prediction.toLocaleString()}

En olası sıralama tahmini

Pesimistik Senaryo

{prediction2025.upperBound.toLocaleString()}

En kötü durumda beklenen sıralama

Tahmin Metodolojisi

  • • Son 3 yılın sıralama/aday oranı ortalaması: {prediction2025.avgRatio}

  • • Tahmini 2025 aday sayısı: {prediction2025.estimated2025Candidates.toLocaleString()}

  • • Güven aralığı: ±%5 (volatilite bazlı)

  • • Model tipi: Üstel düzeltme + Trend analizi

{/* Detaylı Veri Tablosu */}

Detaylı Veri Analizi

Yıl
Sıralama
Kontenjan
Aday Sayısı
Oran (%)
Rekabet Endeksi

{enrichedData.map((row, index) => (

{row.year}
{row.ranking.toLocaleString()}
{row.quota}
{row.candidates.toLocaleString()}
{row.ratio}
{row.competitionIndex}

))}

);
};
export default EducationChoiceAnalyzer;

Sistem şu temel özellikleri içerir:

  1. Çok Boyutlu Veri Analizi
  • Trend analizi (zaman serisi)
  • Oran analizi (normalize edilmiş karşılaştırma)
  • Rekabet analizi (kontenjan-aday ilişkisi)
  1. İstatistiksel Göstergeler
  • Ortalama, standart sapma, volatilite
  • Risk seviyesi değerlendirmesi
  • Güven aralıkları ile tahmin
  1. 2025 Tahmin Modeli
  • Üstel düzeltme yöntemi
  • Trend extrapolasyonu
  • Senaryoya dayalı tahminler
    Metodolojik Yaklaşım:
    Bölüme yerleşen son kişinin sıralaması/Sınavı Geçerli Aday Sayısı oranını temel alarak normalize edilmiş karşılaştırmalar yapmaktadır. Bu, farklı yıllardaki aday sayısı değişimlerini hesaba katarak daha doğru trendler sunar.
    Pratik Kullanım Önerileri
  1. Risk Seviyesi Değerlendirmesi: Volatilite yüzdesine göre bölümlerin risk seviyelerini kategorilendirebilirsiniz.
  2. Tercih Stratejisi: Tahmin aralıkları kullanılarak güvenli, orta risk ve yüksek risk tercihler belirlenebilir.
  3. Karşılaştırmalı Analiz: Farklı üniversitelerdeki aynı bölümlerin performansını karşılaştırarak fırsat analizi yapabilirsiniz.

Yorumlar

Başa Dön