{"id":36161,"date":"2025-12-09T12:21:16","date_gmt":"2025-12-09T09:21:16","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/"},"modified":"2025-12-09T12:21:16","modified_gmt":"2025-12-09T09:21:16","slug":"buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/","title":{"rendered":"B\u00fcy\u00fck Veri Analizi Neden Zorlu Bir G\u00f6rev Haline Geldi?"},"content":{"rendered":"<p><title>DuckDB ve Pandas: B\u00fcy\u00fck Veri Analizinde G\u00fc\u00e7l\u00fc Bir \u0130kili<\/title><br \/>\n<body><\/p>\n<p>B\u00fcy\u00fck veri setleriyle \u00e7al\u0131\u015f\u0131rken Pandas&#8217;\u0131n performans s\u0131n\u0131rlar\u0131na m\u0131 tak\u0131l\u0131yorsunuz? DuckDB, bellek d\u0131\u015f\u0131 sorunlar\u0131 a\u015farak ve karma\u015f\u0131k SQL sorgular\u0131n\u0131 Python ortam\u0131n\u0131zda h\u0131zla \u00e7al\u0131\u015ft\u0131rarak Pandas ile veri analizi i\u015f ak\u0131\u015f\u0131n\u0131z\u0131 devrim niteli\u011finde tamamlar. Bu makale, her iki arac\u0131n g\u00fc\u00e7l\u00fc yanlar\u0131n\u0131 birle\u015ftirerek b\u00fcy\u00fck \u00f6l\u00e7ekli veri analizini nas\u0131l daha verimli hale getirebilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.<\/p>\n<h2>B\u00fcy\u00fck Veri Analizi Neden Zorlu Bir G\u00f6rev Haline Geldi?<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz d\u00fcnyas\u0131nda veri, adeta yeni petrol olarak kabul ediliyor ve \u015firketler, i\u015f s\u00fcre\u00e7lerini optimize etmek, m\u00fc\u015fteri davran\u0131\u015flar\u0131n\u0131 anlamak ve gelece\u011fe y\u00f6nelik stratejiler geli\u015ftirmek i\u00e7in bu verileri etkin bir \u015fekilde analiz etmeye \u00e7al\u0131\u015f\u0131yor. Ancak, veri hacmi ve karma\u015f\u0131kl\u0131\u011f\u0131 h\u0131zla artarken, geleneksel veri analizi ara\u00e7lar\u0131 genellikle yetersiz kalabiliyor. \u00d6zellikle Python ekosisteminde veri bilimcilerin ve analistlerin vazge\u00e7ilmezi olan Pandas, milyonlarca hatta milyarlarca sat\u0131rl\u0131k veri setleriyle kar\u015f\u0131la\u015f\u0131ld\u0131\u011f\u0131nda performans darbo\u011fazlar\u0131 ya\u015fayabiliyor.<\/p>\n<p>Pandas&#8217;\u0131n g\u00fcc\u00fc, bellek i\u00e7i (in-memory) \u00e7al\u0131\u015fmas\u0131ndan gelir. Bu, k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli veri setleri i\u00e7in inan\u0131lmaz bir h\u0131z ve esneklik sunarken, veri seti makinenizin RAM&#8217;ini a\u015ft\u0131\u011f\u0131nda ciddi sorunlara yol a\u00e7abilir. Bellek d\u0131\u015f\u0131 (out-of-memory) hatalar\u0131, yava\u015f \u00e7al\u0131\u015fan sorgular ve karma\u015f\u0131k veri d\u00f6n\u00fc\u015f\u00fcmlerinin uzun s\u00fcrmesi, veri analizi s\u00fcre\u00e7lerini kabusa \u00e7evirebilir. Dolay\u0131s\u0131yla, analistler, b\u00fcy\u00fck veri setleriyle ba\u015fa \u00e7\u0131kmak i\u00e7in daha g\u00fc\u00e7l\u00fc, daha \u00f6l\u00e7eklenebilir ve daha performansl\u0131 \u00e7\u00f6z\u00fcmler aramaya ba\u015fl\u0131yorlar. \u0130\u015fte tam bu noktada DuckDB gibi yeni nesil ara\u00e7lar devreye giriyor ve Pandas&#8217;\u0131n yeteneklerini tamamlayarak b\u00fcy\u00fck veri analizi d\u00fcnyas\u0131na yeni bir soluk getiriyor.<\/p>\n<p>Bu makalede, Pandas&#8217;\u0131n neden bu s\u0131n\u0131rlarla kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131 ve DuckDB&#8217;nin bu s\u0131n\u0131rlamalar\u0131 nas\u0131l ortadan kald\u0131rd\u0131\u011f\u0131n\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz. Ayr\u0131ca, her iki arac\u0131 birlikte kullanarak nas\u0131l daha verimli ve g\u00fc\u00e7l\u00fc veri analizi i\u015f ak\u0131\u015flar\u0131 olu\u015fturabilece\u011finizi, ger\u00e7ek d\u00fcnya senaryolar\u0131 ve kod \u00f6rnekleriyle ad\u0131m ad\u0131m g\u00f6sterece\u011fiz. Amac\u0131m\u0131z, veri analizi yolculu\u011funuzda size rehberlik etmek ve hem yeni ba\u015flayanlara hem de deneyimli veri profesyonellerine ilham vermektir. B\u00fcy\u00fck veri setleriyle \u00e7al\u0131\u015f\u0131rken kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131z zorluklar\u0131 a\u015fmak ve analizlerinizi bir sonraki seviyeye ta\u015f\u0131mak i\u00e7in haz\u0131r m\u0131s\u0131n\u0131z?<\/p>\n<h2>Pandas ve DuckDB Temelleri: Hangi Ara\u00e7 Neye Yarar?<\/h2>\n<p>B\u00fcy\u00fck \u00f6l\u00e7ekli veri analizi yolculu\u011fumuza ba\u015flamadan \u00f6nce, temel ta\u015flar\u0131m\u0131z olan Pandas ve DuckDB&#8217;yi daha yak\u0131ndan tan\u0131yal\u0131m. Her iki ara\u00e7 da veri manip\u00fclasyonu ve analizi i\u00e7in tasarlanm\u0131\u015f olsa da, felsefeleri ve en iyi kullan\u0131ld\u0131klar\u0131 senaryolar farkl\u0131l\u0131k g\u00f6sterir. Bu b\u00f6l\u00fcm, her birinin g\u00fc\u00e7l\u00fc y\u00f6nlerini, s\u0131n\u0131rlamalar\u0131n\u0131 ve birbirlerini nas\u0131l tamamlad\u0131klar\u0131n\u0131 anlamam\u0131za yard\u0131mc\u0131 olacak.<\/p>\n<h3>Pandas Nedir ve Neden Pop\u00fclerdir?<\/h3>\n<p>Pandas, Python programlama dili i\u00e7in geli\u015ftirilmi\u015f, veri manip\u00fclasyonu ve analizi i\u00e7in a\u00e7\u0131k kaynakl\u0131 bir k\u00fct\u00fcphanedir. \u00d6zellikle &#8220;DataFrame&#8221; ad\u0131 verilen, tablo benzeri veri yap\u0131lar\u0131 sayesinde pop\u00fclerlik kazanm\u0131\u015ft\u0131r. Bu DataFrameler, SQL&#8217;deki tablolara veya Excel&#8217;deki \u00e7al\u0131\u015fma sayfalar\u0131na benzer bir yap\u0131ya sahiptir ve etiketli s\u00fctunlar ve indekslenmi\u015f sat\u0131rlardan olu\u015fur. Pandas&#8217;\u0131n pop\u00fclerli\u011finin arkas\u0131ndaki temel nedenler \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Kullan\u0131m Kolayl\u0131\u011f\u0131:<\/strong> Sezgisel API&#8217;si sayesinde veri y\u00fckleme, temizleme, d\u00f6n\u00fc\u015ft\u00fcrme ve analiz etme i\u015flemleri olduk\u00e7a basittir.<\/li>\n<li><strong>Zengin Fonksiyon Seti:<\/strong> Veri filtreleme, s\u0131ralama, gruplama, birle\u015ftirme (merge\/join), zaman serisi analizi ve eksik veri i\u015fleme gibi \u00e7ok \u00e7e\u015fitli operasyonlar\u0131 destekler.<\/li>\n<li><strong>Python Ekosistemiyle Entegrasyon:<\/strong> NumPy, SciPy, Matplotlib ve Scikit-learn gibi di\u011fer pop\u00fcler Python k\u00fct\u00fcphaneleriyle sorunsuz bir \u015fekilde entegre olur. Bu, veri bilimcilerin u\u00e7tan uca analiz projelerini tek bir ortamda y\u00fcr\u00fctmelerini sa\u011flar.<\/li>\n<li><strong>H\u0131zl\u0131 Geli\u015ftirme:<\/strong> Prototipleme ve ke\u015fifsel veri analizi (EDA) i\u00e7in idealdir, \u00e7\u00fcnk\u00fc verilerle h\u0131zl\u0131ca etkile\u015fim kurmay\u0131 ve sonu\u00e7lar\u0131 g\u00f6rselle\u015ftirmeyi kolayla\u015ft\u0131r\u0131r.<\/li>\n<\/ul>\n<p>Ancak, Pandas&#8217;\u0131n bellek i\u00e7i \u00e7al\u0131\u015fma prensibi, onu b\u00fcy\u00fck veri setleri i\u00e7in bir darbo\u011faz haline getirebilir. Veri seti RAM&#8217;e s\u0131\u011fmad\u0131\u011f\u0131nda, performans d\u00fc\u015fer ve bellek hatalar\u0131 ortaya \u00e7\u0131kar. Bu durum, analistleri alternatif \u00e7\u00f6z\u00fcmler aramaya iter.<\/p>\n<h3>DuckDB Nedir ve Nas\u0131l Fark Yarat\u0131r?<\/h3>\n<p>DuckDB, analitik i\u015f y\u00fckleri (OLAP) i\u00e7in tasarlanm\u0131\u015f, g\u00f6m\u00fcl\u00fc (embedded), bellek i\u00e7i ve disk tabanl\u0131 bir s\u00fctun tabanl\u0131 (columnar) veritaban\u0131 y\u00f6netim sistemidir. &#8220;G\u00f6m\u00fcl\u00fc&#8221; olmas\u0131, ayr\u0131 bir sunucu s\u00fcreci gerektirmedi\u011fi anlam\u0131na gelir; t\u0131pk\u0131 SQLite gibi, uygulaman\u0131z\u0131n i\u00e7inde \u00e7al\u0131\u015f\u0131r. DuckDB&#8217;nin temel \u00f6zellikleri ve fark yaratan y\u00f6nleri \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>S\u00fctun Tabanl\u0131 Depolama:<\/strong> Verileri sat\u0131r yerine s\u00fctun baz\u0131nda depolar. Bu, analitik sorgularda (\u00f6rne\u011fin, ortalama alma, toplama) yaln\u0131zca ilgili s\u00fctunlar\u0131n okunmas\u0131n\u0131 sa\u011flayarak I\/O ve bellek kullan\u0131m\u0131n\u0131 optimize eder.<\/li>\n<li><strong>SQL Deste\u011fi:<\/strong> Standart SQL s\u00f6zdizimini destekler. Bu, SQL bilen herkesin DuckDB&#8217;yi kolayca kullanabilece\u011fi anlam\u0131na gelir ve karma\u015f\u0131k veri manip\u00fclasyonlar\u0131 i\u00e7in g\u00fc\u00e7l\u00fc bir dil sunar.<\/li>\n<li><strong>OLAP Odakl\u0131 Performans:<\/strong> Agregasyonlar, birle\u015ftirmeler ve filtreleme gibi analitik sorgular i\u00e7in \u00f6zel olarak optimize edilmi\u015ftir. B\u00fcy\u00fck veri setlerinde Pandas&#8217;tan kat kat daha h\u0131zl\u0131 performans g\u00f6sterebilir.<\/li>\n<li><strong>Bellek ve Disk Y\u00f6netimi:<\/strong> Veri seti RAM&#8217;i a\u015ft\u0131\u011f\u0131nda dahi sorunsuz \u00e7al\u0131\u015fabilir. Gerekirse verileri otomatik olarak diske ta\u015f\u0131r ve bellek d\u0131\u015f\u0131 hatalar\u0131n\u0131 \u00f6nler.<\/li>\n<li><strong>Python Entegrasyonu:<\/strong> Python API&#8217;si sayesinde Pandas DataFrameleri ile do\u011frudan etkile\u015fim kurabilir. Bu, Pandas kullan\u0131c\u0131lar\u0131 i\u00e7in ge\u00e7i\u015fi olduk\u00e7a kolayla\u015ft\u0131r\u0131r.<\/li>\n<li><strong>Dosya Format\u0131 Deste\u011fi:<\/strong> CSV, Parquet, JSON gibi \u00e7e\u015fitli dosya formatlar\u0131ndan do\u011frudan sorgulama yapabilir, bu da ETL s\u00fcre\u00e7lerini basitle\u015ftirir.<\/li>\n<\/ul>\n<p>\u00d6zetle, Pandas veri ke\u015ffi ve manip\u00fclasyonu i\u00e7in harika bir ara\u00e7ken, DuckDB b\u00fcy\u00fck \u00f6l\u00e7ekli, analitik SQL sorgular\u0131 i\u00e7in optimize edilmi\u015f bir g\u00fc\u00e7 merkezidir. \u0130kisi bir araya geldi\u011finde, k\u00fc\u00e7\u00fckten b\u00fcy\u00fc\u011fe her t\u00fcrl\u00fc veri analizi ihtiyac\u0131n\u0131 kar\u015f\u0131layabilecek g\u00fc\u00e7l\u00fc ve esnek bir i\u015f ak\u0131\u015f\u0131 olu\u015ftururlar.<\/p>\n<p>A\u015fa\u011f\u0131daki tablo, iki arac\u0131n temel \u00f6zelliklerini kar\u015f\u0131la\u015ft\u0131rmaktad\u0131r:<\/p>\n<table>\n<thead>\n<tr>\n<th>\u00d6zellik<\/th>\n<th>Pandas<\/th>\n<th>DuckDB<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Ana Kullan\u0131m Alan\u0131<\/td>\n<td>Veri Ke\u015ffi, Manip\u00fclasyonu, K\u00fc\u00e7\u00fck-Orta \u00d6l\u00e7ekli Analiz<\/td>\n<td>B\u00fcy\u00fck \u00d6l\u00e7ekli Analitik Sorgular (OLAP), ETL<\/td>\n<\/tr>\n<tr>\n<td>Veri Depolama<\/td>\n<td>Bellek \u0130\u00e7i (Row-oriented)<\/td>\n<td>Bellek \u0130\u00e7i ve Disk Tabanl\u0131 (Column-oriented)<\/td>\n<\/tr>\n<tr>\n<td>Sorgu Dili<\/td>\n<td>Python API<\/td>\n<td>SQL (Standart)<\/td>\n<\/tr>\n<tr>\n<td>Bellek Y\u00f6netimi<\/td>\n<td>RAM&#8217;e ba\u011f\u0131ml\u0131, bellek d\u0131\u015f\u0131 hatalar\u0131 olas\u0131<\/td>\n<td>Otomatik disk ta\u015fmas\u0131, bellek d\u0131\u015f\u0131 hatalar\u0131 nadir<\/td>\n<\/tr>\n<tr>\n<td>Entegrasyon<\/td>\n<td>Python ekosistemiyle g\u00fc\u00e7l\u00fc<\/td>\n<td>Python, R, Java vb. ile g\u00fc\u00e7l\u00fc API&#8217;ler<\/td>\n<\/tr>\n<tr>\n<td>Performans<\/td>\n<td>K\u00fc\u00e7\u00fck-orta veri setlerinde h\u0131zl\u0131<\/td>\n<td>B\u00fcy\u00fck veri setlerinde analitik sorgularda \u00e7ok h\u0131zl\u0131<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Pandas&#8217;\u0131n S\u0131n\u0131rlar\u0131n\u0131 A\u015fmak: DuckDB Ne Zaman Devreye Girer?<\/h2>\n<p>Pandas, veri bilimciler ve analistler i\u00e7in \u015f\u00fcphesiz bir devrim niteli\u011findedir. Ancak, veri hacimleri artt\u0131k\u00e7a, Pandas&#8217;\u0131n bellek i\u00e7i \u00e7al\u0131\u015fma prensibi ve Python tabanl\u0131 operasyonlar\u0131n\u0131n do\u011fas\u0131 gere\u011fi baz\u0131 k\u0131s\u0131tlamalar ortaya \u00e7\u0131kar. Bu k\u0131s\u0131tlamalar, \u00f6zellikle b\u00fcy\u00fck veri setleriyle \u00e7al\u0131\u015f\u0131rken verimlili\u011fi ve performans\u0131 olumsuz etkileyebilir. Peki, DuckDB bu senaryolarda nas\u0131l bir kurtar\u0131c\u0131 rol\u00fc \u00fcstlenir?<\/p>\n<p>Pandas&#8217;\u0131n kar\u015f\u0131la\u015ft\u0131\u011f\u0131 ba\u015fl\u0131ca zorluklar \u015funlard\u0131r:<\/p>\n<ol>\n<li><strong>Bellek D\u0131\u015f\u0131 (Out-of-Memory) Hatalar\u0131:<\/strong> Veri setinin boyutu, bilgisayar\u0131n RAM&#8217;ini a\u015ft\u0131\u011f\u0131nda Pandas DataFrame&#8217;leri belle\u011fe y\u00fckleyemez ve &#8220;MemoryError&#8221; hatas\u0131 verir. Bu, \u00f6zellikle gigabaytlarca hatta terabaytlarca veriyle \u00e7al\u0131\u015f\u0131rken s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131lan bir durumdur.<\/li>\n<li><strong>B\u00fcy\u00fck Veri Setlerinde Performans D\u00fc\u015f\u00fc\u015f\u00fc:<\/strong> Veri seti b\u00fcy\u00fcd\u00fck\u00e7e, filtreleme, gruplama, birle\u015ftirme (join) gibi operasyonlar \u00f6nemli \u00f6l\u00e7\u00fcde yava\u015flar. Pandas&#8217;\u0131n tek \u00e7ekirdekli yap\u0131s\u0131 ve Python&#8217;\u0131n Global Interpreter Lock (GIL) k\u0131s\u0131tlamas\u0131, paralel i\u015flem yeteneklerini s\u0131n\u0131rlar.<\/li>\n<li><strong>Karma\u015f\u0131k SQL Benzeri Sorgular\u0131n Python&#8217;da Zorlu\u011fu:<\/strong> SQL&#8217;deki gibi karma\u015f\u0131k birle\u015ftirme, alt sorgu veya pencere fonksiyonlar\u0131 (window functions) gibi operasyonlar\u0131 Pandas&#8217;\u0131n API&#8217;si ile ifade etmek bazen hantal ve okunaks\u0131z kodlara yol a\u00e7abilir. SQL bilenler i\u00e7in bu, verimsiz bir s\u00fcre\u00e7tir.<\/li>\n<\/ol>\n<p>\u0130\u015fte bu gibi durumlarda DuckDB, sahneye \u00e7\u0131karak Pandas&#8217;\u0131n zay\u0131f kald\u0131\u011f\u0131 noktalar\u0131 kapat\u0131r. DuckDB&#8217;nin s\u00fctun tabanl\u0131 mimarisi ve disk tabanl\u0131 \u00e7al\u0131\u015fma yetene\u011fi, bellek d\u0131\u015f\u0131 hatalar\u0131n\u0131 ortadan kald\u0131r\u0131r. Ayr\u0131ca, analitik sorgular i\u00e7in optimize edilmi\u015f sorgu motoru, b\u00fcy\u00fck veri setlerinde dahi inan\u0131lmaz h\u0131zlar sunar. SQL&#8217;in g\u00fcc\u00fcn\u00fc do\u011frudan Python ortam\u0131n\u0131za ta\u015f\u0131yarak, karma\u015f\u0131k veri manip\u00fclasyonlar\u0131n\u0131 \u00e7ok daha kolay ve verimli hale getirir.<\/p>\n<h3>Ger\u00e7ek D\u00fcnya Senaryosu: Milyonlarca Sat\u0131rl\u0131k CSV Dosyas\u0131n\u0131 \u0130\u015fleme<\/h3>\n<p>Bir e-ticaret \u015firketinde \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131z\u0131 ve son bir y\u0131l\u0131n t\u00fcm sipari\u015f verilerini i\u00e7eren 5 GB&#8217;l\u0131k bir CSV dosyan\u0131z oldu\u011funu varsayal\u0131m. Bu dosya, 50 milyondan fazla sat\u0131r i\u00e7eriyor ve her sat\u0131rda sipari\u015f ID&#8217;si, m\u00fc\u015fteri ID&#8217;si, \u00fcr\u00fcn ID&#8217;si, miktar, fiyat, tarih gibi bilgiler bulunuyor. G\u00f6reviniz, ayl\u0131k toplam sat\u0131\u015flar\u0131 ve en \u00e7ok satan ilk 10 \u00fcr\u00fcn\u00fc bulmak.<\/p>\n<p><strong>Pandas ile Yakla\u015f\u0131m (ve Zorluklar\u0131):<\/strong><\/p>\n<pre><code>\nimport pandas as pd\nimport time\n\n# Dosya yolu\nfile_path = 'buyuk_siparis_verileri.csv' # Varsay\u0131msal 5GB dosya\n\n# Ad\u0131m 1: CSV dosyas\u0131n\u0131 Pandas DataFrame'e y\u00fckleme\nstart_time = time.time()\ntry:\n    df_pandas = pd.read_csv(file_path)\n    print(f\"Pandas ile y\u00fckleme s\u00fcresi: {time.time() - start_time:.2f} saniye\")\n\n    # Ad\u0131m 2: Ayl\u0131k toplam sat\u0131\u015flar\u0131 hesaplama\n    df_pandas['siparis_tarihi'] = pd.to_datetime(df_pandas['siparis_tarihi'])\n    df_pandas['ay'] = df_pandas['siparis_tarihi'].dt.to_period('M')\n    aylik_satislar = df_pandas.groupby('ay')['fiyat'].sum()\n    print(f\"Pandas ile ayl\u0131k sat\u0131\u015f hesaplama s\u00fcresi: {time.time() - start_time:.2f} saniye\")\n\n    # Ad\u0131m 3: En \u00e7ok satan ilk 10 \u00fcr\u00fcn\u00fc bulma\n    df_pandas['toplam_gelir'] = df_pandas['miktar'] * df_pandas['fiyat']\n    en_cok_satanlar = df_pandas.groupby('urun_id')['toplam_gelir'].sum().nlargest(10)\n    print(f\"Pandas ile en \u00e7ok satanlar hesaplama s\u00fcresi: {time.time() - start_time:.2f} saniye\")\n\nexcept MemoryError:\n    print(\"Hata: Pandas, veri setini belle\u011fe y\u00fckleyemedi. Bellek d\u0131\u015f\u0131 hatas\u0131.\")\nexcept Exception as e:\n    print(f\"Bir hata olu\u015ftu: {e}\")\n    <\/code><\/pre>\n<p>Bu senaryoda, 5 GB&#8217;l\u0131k bir CSV dosyas\u0131n\u0131 Pandas&#8217;a y\u00fcklemek bile \u00e7o\u011fu makinede &#8220;MemoryError&#8221; ile sonu\u00e7lanacakt\u0131r. E\u011fer y\u00fckleyebilseydik bile, gruplama ve toplama i\u015flemleri \u00e7ok uzun s\u00fcrecekti. \u0130\u015fte burada DuckDB, do\u011frudan CSV dosyas\u0131ndan sorgulama yetene\u011fi ve optimize edilmi\u015f motoruyla devreye girer.<\/p>\n<pre><code>\nimport duckdb\nimport time\n\n# Dosya yolu\nfile_path = 'buyuk_siparis_verileri.csv' # Varsay\u0131msal 5GB dosya\n\n# Ad\u0131m 1: DuckDB ile do\u011frudan CSV dosyas\u0131ndan sorgulama\nstart_time = time.time()\nconn = duckdb.connect(database=':memory:', read_only=False) # Bellek i\u00e7i DuckDB ba\u011flant\u0131s\u0131\n\n# Ayl\u0131k toplam sat\u0131\u015flar\u0131 hesaplama\nquery_aylik_satislar = f\"\"\"\nSELECT\n    strftime(siparis_tarihi, '%Y-%m') AS ay,\n    SUM(fiyat) AS toplam_satis\nFROM '{file_path}'\nGROUP BY 1\nORDER BY 1;\n\"\"\"\naylik_satislar_duckdb = conn.execute(query_aylik_satislar).fetchdf()\nprint(f\"DuckDB ile ayl\u0131k sat\u0131\u015f hesaplama s\u00fcresi: {time.time() - start_time:.2f} saniye\")\nprint(\"Ayl\u0131k Sat\u0131\u015flar (DuckDB):\")\nprint(aylik_satislar_duckdb.head())\n\n# En \u00e7ok satan ilk 10 \u00fcr\u00fcn\u00fc bulma\nquery_en_cok_satanlar = f\"\"\"\nSELECT\n    urun_id,\n    SUM(miktar * fiyat) AS toplam_gelir\nFROM '{file_path}'\nGROUP BY urun_id\nORDER BY toplam_gelir DESC\nLIMIT 10;\n\"\"\"\nen_cok_satanlar_duckdb = conn.execute(query_en_cok_satanlar).fetchdf()\nprint(f\"DuckDB ile en \u00e7ok satanlar hesaplama s\u00fcresi: {time.time() - start_time:.2f} saniye\")\nprint(\"En \u00c7ok Satan \u0130lk 10 \u00dcr\u00fcn (DuckDB):\")\nprint(en_cok_satanlar_duckdb)\n\nconn.close()\n    <\/code><\/pre>\n<p>DuckDB, CSV dosyas\u0131n\u0131 belle\u011fe tamamen y\u00fcklemeden, do\u011frudan dosya \u00fczerinden sorgulama yapabilme yetene\u011fi sayesinde &#8220;MemoryError&#8221; sorununu ortadan kald\u0131r\u0131r. Ayr\u0131ca, optimize edilmi\u015f SQL motoru sayesinde, bu t\u00fcr agregasyonlar\u0131 Pandas&#8217;tan \u00e7ok daha h\u0131zl\u0131 bir \u015fekilde ger\u00e7ekle\u015ftirir. Bu \u00f6rnek, DuckDB&#8217;nin b\u00fcy\u00fck veri setleriyle \u00e7al\u0131\u015f\u0131rken ne kadar kritik bir rol oynayabilece\u011fini a\u00e7\u0131k\u00e7a g\u00f6stermektedir. Pandas&#8217;\u0131n yeteneklerini tamamlayarak, veri analistlerinin daha \u00f6nce m\u00fcmk\u00fcn olmayan \u00f6l\u00e7eklerde \u00e7al\u0131\u015fmas\u0131na olanak tan\u0131r.<\/p>\n<h2>DuckDB ile Pandas Veri \u00c7er\u00e7evelerini Nas\u0131l Sorgular\u0131z?<\/h2>\n<p>DuckDB&#8217;nin en etkileyici \u00f6zelliklerinden biri, mevcut Pandas DataFrameleri ile sorunsuz bir \u015fekilde entegre olabilmesidir. Bu entegrasyon, Pandas&#8217;\u0131n esnek veri manip\u00fclasyon yeteneklerini DuckDB&#8217;nin y\u00fcksek performansl\u0131 SQL motoruyla birle\u015ftirmenizi sa\u011flar. B\u00f6ylece, k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli veri ke\u015ffi i\u00e7in Pandas&#8217;\u0131 kullan\u0131rken, b\u00fcy\u00fck ve karma\u015f\u0131k sorgular i\u00e7in DuckDB&#8217;ye ge\u00e7i\u015f yapabilir ve sonu\u00e7lar\u0131 kolayca Pandas&#8217;a geri alabilirsiniz. Bu b\u00f6l\u00fcm, bu entegrasyonu ad\u0131m ad\u0131m nas\u0131l ger\u00e7ekle\u015ftirece\u011finizi ve kod \u00f6rnekleriyle nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 a\u00e7\u0131klayacakt\u0131r.<\/p>\n<h3>Ad\u0131m Ad\u0131m Entegrasyon: DuckDB ve Pandas \u0130\u015f Ak\u0131\u015f\u0131<\/h3>\n<p>DuckDB&#8217;nin Python API&#8217;si, Pandas DataFrameleri ile \u00e7al\u0131\u015fmay\u0131 son derece kolayla\u015ft\u0131r\u0131r. Temel olarak iki ana y\u00f6ntemle bu entegrasyonu sa\u011flayabiliriz:<\/p>\n<ol>\n<li><strong><code>duckdb.sql()<\/code> Fonksiyonu:<\/strong> Bu fonksiyon, do\u011frudan SQL sorgular\u0131 \u00e7al\u0131\u015ft\u0131rman\u0131za olanak tan\u0131r ve sorgu i\u00e7inde Pandas DataFramelerine referans verebilirsiniz. DuckDB, sorguyu \u00e7al\u0131\u015ft\u0131r\u0131rken DataFrame&#8217;i ge\u00e7ici bir tablo gibi g\u00f6r\u00fcr.<\/li>\n<li><strong><code>duckdb.from_df()<\/code> Metodu:<\/strong> Bu metot, bir Pandas DataFrame&#8217;i do\u011frudan DuckDB&#8217;nin anlayabilece\u011fi bir tablo nesnesine d\u00f6n\u00fc\u015ft\u00fcr\u00fcr. Bu tablo nesnesi \u00fczerinde daha sonra SQL sorgular\u0131 \u00e7al\u0131\u015ft\u0131r\u0131labilir.<\/li>\n<\/ol>\n<p>Her iki y\u00f6ntem de olduk\u00e7a g\u00fc\u00e7l\u00fcd\u00fcr ve kullan\u0131m senaryonuza g\u00f6re tercih edilebilir. Genellikle, h\u0131zl\u0131 ve tek seferlik sorgular i\u00e7in <code>duckdb.sql()<\/code> daha pratikken, daha karma\u015f\u0131k veya \u00e7ok ad\u0131ml\u0131 SQL operasyonlar\u0131 i\u00e7in <code>duckdb.connect()<\/code> ile bir ba\u011flant\u0131 olu\u015fturup DataFrame&#8217;i kaydetmek daha esnek olabilir.<\/p>\n<h3>Kod \u00d6rnekleri: DataFrame Olu\u015fturma, DuckDB ile Sorgulama, Sonu\u00e7lar\u0131 Pandas&#8217;a Geri Alma<\/h3>\n<p>\u015eimdi somut bir \u00f6rnek \u00fczerinden bu entegrasyonu inceleyelim. Diyelim ki elimizde sat\u0131\u015f verilerini i\u00e7eren bir Pandas DataFrame var ve bu DataFrame \u00fczerinde karma\u015f\u0131k bir gruplama ve s\u0131ralama i\u015flemi yapmak istiyoruz.<\/p>\n<pre><code>\nimport pandas as pd\nimport duckdb\nimport time\n\n# Ad\u0131m 1: \u00d6rnek bir Pandas DataFrame olu\u015fturma\ndata = {\n    'siparis_id': range(1, 1000001),\n    'musteri_id': [f'C{i % 1000 + 1}' for i in range(1000000)],\n    'urun_kategori': [f'Kategori_{i % 50 + 1}' for i in range(1000000)],\n    'fiyat': [round(i * 0.1 + 10, 2) for i in range(1000000)],\n    'adet': [i % 5 + 1 for i in range(1000000)],\n    'siparis_tarihi': pd.to_datetime(pd.date_range('2022-01-01', periods=1000000, freq='H'))\n}\ndf_pandas = pd.DataFrame(data)\nprint(f\"Olu\u015fturulan Pandas DataFrame boyutu: {len(df_pandas)} sat\u0131r\")\n\n# Ad\u0131m 2: Pandas ile i\u015flem yapal\u0131m (Kar\u015f\u0131la\u015ft\u0131rma i\u00e7in)\nstart_time_pandas = time.time()\npandas_result = df_pandas.groupby('urun_kategori').agg(\n    toplam_satis=('fiyat', 'sum'),\n    ortalama_adet=('adet', 'mean'),\n    toplam_adet=('adet', 'sum')\n).sort_values(by='toplam_satis', ascending=False).head(10)\nprint(f\"Pandas ile gruplama ve s\u0131ralama s\u00fcresi: {time.time() - start_time_pandas:.4f} saniye\")\nprint(\"Pandas Sonucu (\u0130lk 5):\")\nprint(pandas_result.head())\n\n# Ad\u0131m 3: DuckDB ile ayn\u0131 i\u015flemi yapal\u0131m\nstart_time_duckdb = time.time()\n\n# Y\u00f6ntem A: duckdb.sql() kullanarak do\u011frudan DataFrame'i sorgulama\n# DuckDB, 'df_pandas' de\u011fi\u015fkenini otomatik olarak bir tablo olarak alg\u0131lar\nduckdb_result_a = duckdb.sql(\"\"\"\nSELECT\n    urun_kategori,\n    SUM(fiyat) AS toplam_satis,\n    AVG(adet) AS ortalama_adet,\n    SUM(adet) AS toplam_adet\nFROM df_pandas\nGROUP BY urun_kategori\nORDER BY toplam_satis DESC\nLIMIT 10;\n\"\"\").fetchdf() # Sonucu tekrar Pandas DataFrame olarak al\n\nprint(f\"DuckDB (duckdb.sql) ile gruplama ve s\u0131ralama s\u00fcresi: {time.time() - start_time_duckdb:.4f} saniye\")\nprint(\"DuckDB Sonucu (duckdb.sql - \u0130lk 5):\")\nprint(duckdb_result_a.head())\n\n# Y\u00f6ntem B: Ba\u011flant\u0131 olu\u015fturup DataFrame'i kaydetme (daha b\u00fcy\u00fck ve karma\u015f\u0131k senaryolar i\u00e7in)\nstart_time_duckdb_conn = time.time()\nconn = duckdb.connect(database=':memory:', read_only=False) # Bellek i\u00e7i veritaban\u0131\nconn.register('my_sales_data', df_pandas) # DataFrame'i 'my_sales_data' ad\u0131yla kaydet\n\nduckdb_result_b = conn.execute(\"\"\"\nSELECT\n    urun_kategori,\n    SUM(fiyat) AS toplam_satis,\n    AVG(adet) AS ortalama_adet,\n    SUM(adet) AS toplam_adet\nFROM my_sales_data\nGROUP BY urun_kategori\nORDER BY toplam_satis DESC\nLIMIT 10;\n\"\"\").fetchdf()\n\nprint(f\"DuckDB (conn.register) ile gruplama ve s\u0131ralama s\u00fcresi: {time.time() - start_time_duckdb_conn:.4f} saniye\")\nprint(\"DuckDB Sonucu (conn.register - \u0130lk 5):\")\nprint(duckdb_result_b.head())\n\nconn.close()\n    <\/code><\/pre>\n<aside class=\"expert-tip\">\n        Uzman \u0130pucu: Karma\u015f\u0131k SQL sorgular\u0131n\u0131 DuckDB&#8217;de \u00e7al\u0131\u015ft\u0131rmak, Pandas&#8217;ta e\u015fde\u011fer operasyonlar\u0131 zincirlemekten hem daha okunabilir hem de genellikle daha performansl\u0131d\u0131r. \u00d6zellikle \u00e7oklu gruplamalar, birle\u015ftirmeler veya pencere fonksiyonlar\u0131 i\u00e7eren senaryolarda bu fark belirginle\u015fir.<br \/>\n    <\/aside>\n<p>Yukar\u0131daki \u00f6rnekte, 1 milyon sat\u0131rl\u0131k bir DataFrame \u00fczerinde basit bir gruplama ve s\u0131ralama i\u015flemi yapt\u0131k. DuckDB&#8217;nin, bu t\u00fcr analitik sorgularda Pandas&#8217;tan daha h\u0131zl\u0131 sonu\u00e7 verdi\u011fini g\u00f6receksiniz. \u00d6zellikle veri seti b\u00fcy\u00fcd\u00fck\u00e7e bu performans fark\u0131 katlanarak artar. DuckDB&#8217;nin SQL motoru, bu t\u00fcr sorgular\u0131 \u00e7ok daha verimli bir \u015fekilde optimize eder ve \u00e7al\u0131\u015ft\u0131r\u0131r.<\/p>\n<p>Sonu\u00e7 olarak, Pandas DataFrame&#8217;lerinizle DuckDB&#8217;yi entegre etmek, b\u00fcy\u00fck veri analizi projelerinizde size hem h\u0131z hem de esneklik kazand\u0131r\u0131r. Veri ke\u015ffi i\u00e7in Pandas&#8217;\u0131n rahatl\u0131\u011f\u0131n\u0131 korurken, performans kritik operasyonlar i\u00e7in SQL&#8217;in g\u00fcc\u00fcnden ve DuckDB&#8217;nin h\u0131z\u0131ndan faydalanabilirsiniz.<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Uygulamalar\u0131: B\u00fcy\u00fck \u00d6l\u00e7ekli ETL ve Analiz Senaryolar\u0131<\/h2>\n<p>DuckDB ve Pandas&#8217;\u0131n birle\u015fimi, \u00f6zellikle b\u00fcy\u00fck \u00f6l\u00e7ekli Veri \u00c7\u0131karma, D\u00f6n\u00fc\u015ft\u00fcrme ve Y\u00fckleme (ETL) s\u00fcre\u00e7lerinde ve karma\u015f\u0131k analitik senaryolarda ger\u00e7ek bir oyun de\u011fi\u015ftirici olabilir. Geleneksel olarak, bu t\u00fcr i\u015flemler i\u00e7in b\u00fcy\u00fck veritaban\u0131 sistemleri veya da\u011f\u0131t\u0131k i\u015flem \u00e7er\u00e7eveleri (Spark gibi) gerekebilirken, DuckDB, tek bir makinede dahi bu g\u00f6revleri \u015fa\u015f\u0131rt\u0131c\u0131 bir verimlilikle yerine getirebilir. Bu b\u00f6l\u00fcmde, DuckDB&#8217;nin bu alandaki g\u00fcc\u00fcn\u00fc g\u00f6steren iki vaka analizini inceleyece\u011fiz.<\/p>\n<h3>Vaka Analizi 1: Zaman Serisi Verilerinin DuckDB ile H\u0131zl\u0131 Agregasyonu<\/h3>\n<p>Bir finansal analiz \u015firketinde \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131z\u0131 ve son 5 y\u0131la ait, her saniye g\u00fcncellenen hisse senedi fiyat verilerini (yakla\u015f\u0131k 100 milyon sat\u0131r) i\u00e7eren b\u00fcy\u00fck bir Parquet dosyan\u0131z oldu\u011funu varsayal\u0131m. G\u00f6reviniz, bu verilerden g\u00fcnl\u00fck ortalama, en y\u00fcksek ve en d\u00fc\u015f\u00fck fiyatlar\u0131 hesaplamak ve ayr\u0131ca 7 g\u00fcnl\u00fck hareketli ortalamalar\u0131 (moving averages) bulmakt\u0131r.<\/p>\n<p><strong>Pandas ile Zorluk:<\/strong> Bu kadar b\u00fcy\u00fck bir Parquet dosyas\u0131n\u0131 do\u011frudan Pandas&#8217;a y\u00fcklemek bile bellek sorunlar\u0131na yol a\u00e7abilir. Y\u00fckleyebilseniz bile, tarih-saat d\u00f6n\u00fc\u015f\u00fcmleri, gruplamalar ve \u00f6zellikle pencere fonksiyonlar\u0131 (hareketli ortalama gibi) \u00e7ok uzun s\u00fcrebilir ve makinenizi a\u015f\u0131r\u0131 zorlayabilir.<\/p>\n<p><strong>DuckDB ile \u00c7\u00f6z\u00fcm:<\/strong> DuckDB, Parquet dosyalar\u0131n\u0131 do\u011frudan sorgulama yetene\u011fi ve optimize edilmi\u015f pencere fonksiyonu deste\u011fi sayesinde bu g\u00f6revi \u00e7ok daha verimli hale getirir.<\/p>\n<pre><code>\nimport duckdb\nimport pandas as pd\nimport time\nimport os\n\n# Varsay\u0131msal Parquet dosyas\u0131 olu\u015fturma (Ger\u00e7ek senaryoda bu dosya zaten mevcut olacakt\u0131r)\n# Bu k\u0131s\u0131m sadece \u00f6rnek veriyi olu\u015fturmak i\u00e7indir, ger\u00e7ek kullan\u0131mda do\u011frudan okuyacaks\u0131n\u0131z.\nif not os.path.exists('buyuk_hisse_verileri.parquet'):\n    print(\"Parquet dosyas\u0131 olu\u015fturuluyor (Bu biraz zaman alabilir)...\")\n    num_rows = 100_000_000 # 100 milyon sat\u0131r\n    dates = pd.to_datetime(pd.date_range('2019-01-01', periods=num_rows, freq='S'))\n    prices = pd.Series(range(num_rows)).apply(lambda x: 100 + (x % 100) * 0.1 + (x % 50) * 0.05).round(2)\n    df_large = pd.DataFrame({\n        'timestamp': dates,\n        'hisse_kodu': ['AAPL'] * num_rows, # Basitlik i\u00e7in tek hisse\n        'fiyat': prices\n    })\n    df_large.to_parquet('buyuk_hisse_verileri.parquet', index=False)\n    print(\"Parquet dosyas\u0131 olu\u015fturuldu.\")\nelse:\n    print(\"Parquet dosyas\u0131 zaten mevcut.\")\n\nfile_path_parquet = 'buyuk_hisse_verileri.parquet'\n\nconn = duckdb.connect(database=':memory:', read_only=False)\n\nstart_time_duckdb = time.time()\n\n# G\u00fcnl\u00fck ortalama, en y\u00fcksek ve en d\u00fc\u015f\u00fck fiyatlar\u0131 hesaplama\ndaily_summary_query = f\"\"\"\nSELECT\n    CAST(timestamp AS DATE) AS tarih,\n    AVG(fiyat) AS gunluk_ortalama,\n    MAX(fiyat) AS gunluk_yuksek,\n    MIN(fiyat) AS gunluk_dusuk\nFROM '{file_path_parquet}'\nGROUP BY 1\nORDER BY 1;\n\"\"\"\ndaily_summary_df = conn.execute(daily_summary_query).fetchdf()\nprint(f\"DuckDB ile g\u00fcnl\u00fck \u00f6zet hesaplama s\u00fcresi: {time.time() - start_time_duckdb:.2f} saniye\")\nprint(\"G\u00fcnl\u00fck \u00d6zet (\u0130lk 5):\")\nprint(daily_summary_df.head())\n\n# 7 g\u00fcnl\u00fck hareketli ortalamay\u0131 hesaplama (Pencere Fonksiyonu)\nstart_time_ma_duckdb = time.time()\nmoving_average_query = f\"\"\"\nSELECT\n    CAST(timestamp AS DATE) AS tarih,\n    AVG(fiyat) AS gunluk_ortalama,\n    AVG(fiyat) OVER (ORDER BY CAST(timestamp AS DATE) ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS yedi_gunluk_hareketli_ortalama\nFROM '{file_path_parquet}'\nGROUP BY 1\nORDER BY 1;\n\"\"\"\nmoving_average_df = conn.execute(moving_average_query).fetchdf()\nprint(f\"DuckDB ile 7 g\u00fcnl\u00fck hareketli ortalama hesaplama s\u00fcresi: {time.time() - start_time_ma_duckdb:.2f} saniye\")\nprint(\"7 G\u00fcnl\u00fck Hareketli Ortalama (\u0130lk 5):\")\nprint(moving_average_df.head())\n\nconn.close()\n    <\/code><\/pre>\n<p>DuckDB, Parquet dosyas\u0131n\u0131 optimize edilmi\u015f bir \u015fekilde okur ve SQL&#8217;in g\u00fc\u00e7l\u00fc pencere fonksiyonlar\u0131 sayesinde hareketli ortalama gibi karma\u015f\u0131k zaman serisi analizlerini \u00e7ok h\u0131zl\u0131 bir \u015fekilde ger\u00e7ekle\u015ftirir. Sonu\u00e7lar\u0131 do\u011frudan Pandas DataFrame olarak alarak daha ileri g\u00f6rselle\u015ftirmeler veya modelleme i\u00e7in kullanabilirsiniz.<\/p>\n<h3>Vaka Analizi 2: \u00c7oklu Veri Kaynaklar\u0131ndan Birle\u015ftirme (JOIN) ve Temizleme<\/h3>\n<p>Bir veri m\u00fchendisi olarak, \u00fc\u00e7 farkl\u0131 kaynaktan gelen verileri birle\u015ftirip temizlemeniz gerekiyor:<\/p>\n<ol>\n<li><code>musteri_bilgileri.csv<\/code> (10 milyon m\u00fc\u015fteri, isim, adres, kay\u0131t tarihi)<\/li>\n<li><code>urun_katalogu.parquet<\/code> (500 bin \u00fcr\u00fcn, \u00fcr\u00fcn ad\u0131, kategori, fiyat)<\/li>\n<li><code>siparis_detaylari.json<\/code> (20 milyon sipari\u015f, m\u00fc\u015fteri ID, \u00fcr\u00fcn ID, miktar, tarih)<\/li>\n<\/ol>\n<p>G\u00f6reviniz, bu \u00fc\u00e7 veri setini birle\u015ftirerek her bir sipari\u015f i\u00e7in m\u00fc\u015fteri ad\u0131, \u00fcr\u00fcn kategorisi ve toplam sipari\u015f tutar\u0131n\u0131 i\u00e7eren tek bir analiz tablosu olu\u015fturmak ve eksik verileri temizlemektir.<\/p>\n<p><strong>Pandas ile Zorluk:<\/strong> \u00dc\u00e7 farkl\u0131 formattaki ve b\u00fcy\u00fck hacimdeki dosyay\u0131 Pandas&#8217;a ayr\u0131 ayr\u0131 y\u00fcklemek ve sonra bunlar\u0131 birle\u015ftirmek (<code>merge<\/code> operasyonlar\u0131), hem bellek hem de CPU a\u00e7\u0131s\u0131ndan yo\u011fun olacakt\u0131r. \u00d6zellikle JSON dosyas\u0131n\u0131n ayr\u0131\u015ft\u0131r\u0131lmas\u0131 ve ard\u0131ndan iki b\u00fcy\u00fck DataFrame ile birle\u015ftirilmesi ciddi performans sorunlar\u0131 yaratabilir.<\/p>\n<p><strong>DuckDB ile \u00c7\u00f6z\u00fcm:<\/strong> DuckDB, farkl\u0131 dosya formatlar\u0131n\u0131 do\u011frudan sorgulama ve SQL&#8217;in g\u00fc\u00e7l\u00fc JOIN yetenekleri sayesinde bu s\u00fcreci basitle\u015ftirir ve h\u0131zland\u0131r\u0131r.<\/p>\n<pre><code>\nimport duckdb\nimport pandas as pd\nimport time\nimport os\nimport json\n\n# Varsay\u0131msal dosyalar\u0131 olu\u015fturma (Ger\u00e7ek senaryoda bunlar mevcut olacakt\u0131r)\n# Bu k\u0131s\u0131m sadece \u00f6rnek veriyi olu\u015fturmak i\u00e7indir.\nif not os.path.exists('musteri_bilgileri.csv'):\n    print(\"\u00d6rnek CSV olu\u015fturuluyor...\")\n    pd.DataFrame({\n        'musteri_id': range(1, 10_000_001),\n        'musteri_ad': [f'Musteri_{i}' for i in range(10_000_000)],\n        'adres': [f'Adres_{i}' for i in range(10_000_000)],\n        'kayit_tarihi': pd.to_datetime(pd.date_range('2020-01-01', periods=10_000_000, freq='D'))\n    }).to_csv('musteri_bilgileri.csv', index=False)\n    print(\"CSV olu\u015fturuldu.\")\n\nif not os.path.exists('urun_katalogu.parquet'):\n    print(\"\u00d6rnek Parquet olu\u015fturuluyor...\")\n    pd.DataFrame({\n        'urun_id': range(1, 500_001),\n        'urun_ad': [f'Urun_{i}' for i in range(500_000)],\n        'kategori': [f'Kategori_{i % 100}' for i in range(500_000)],\n        'birim_fiyat': [round(i * 0.5 + 5, 2) for i in range(500_000)]\n    }).to_parquet('urun_katalogu.parquet', index=False)\n    print(\"Parquet olu\u015fturuldu.\")\n\nif not os.path.exists('siparis_detaylari.json'):\n    print(\"\u00d6rnek JSON olu\u015fturuluyor...\")\n    orders = []\n    for i in range(20_000_000):\n        orders.append({\n            'siparis_id': i + 1,\n            'musteri_id': (i % 10_000_000) + 1,\n            'urun_id': (i % 500_000) + 1,\n            'miktar': (i % 10) + 1,\n            'siparis_tarihi': (pd.to_datetime('2023-01-01') + pd.Timedelta(days=i % 365)).strftime('%Y-%m-%d')\n        })\n    with open('siparis_detaylari.json', 'w') as f:\n        json.dump(orders, f)\n    print(\"JSON olu\u015fturuldu.\")\n\nfile_musteri = 'musteri_bilgileri.csv'\nfile_urun = 'urun_katalogu.parquet'\nfile_siparis = 'siparis_detaylari.json'\n\nconn = duckdb.connect(database=':memory:', read_only=False)\n\nstart_time_duckdb_etl = time.time()\n\n# \u00dc\u00e7 farkl\u0131 dosyadan verileri birle\u015ftirme ve d\u00f6n\u00fc\u015ft\u00fcrme\netl_query = f\"\"\"\nSELECT\n    s.siparis_id,\n    m.musteri_ad,\n    u.kategori AS urun_kategorisi,\n    s.miktar * u.birim_fiyat AS toplam_siparis_tutari,\n    s.siparis_tarihi\nFROM '{file_siparis}' AS s\nJOIN '{file_musteri}' AS m ON s.musteri_id = m.musteri_id\nJOIN '{file_urun}' AS u ON s.urun_id = u.urun_id\nWHERE s.miktar IS NOT NULL AND u.birim_fiyat IS NOT NULL\nORDER BY s.siparis_tarihi DESC\nLIMIT 1000; -- Sadece ilk 1000 sat\u0131r\u0131 g\u00f6sterelim\n\"\"\"\n\nfinal_analysis_df = conn.execute(etl_query).fetchdf()\nprint(f\"DuckDB ile ETL ve birle\u015ftirme s\u00fcresi: {time.time() - start_time_duckdb_etl:.2f} saniye\")\nprint(\"Birle\u015ftirilmi\u015f ve Temizlenmi\u015f Analiz Tablosu (\u0130lk 5):\")\nprint(final_analysis_df.head())\n\nconn.close()\n    <\/code><\/pre>\n<p>DuckDB, farkl\u0131 formatlardaki dosyalar\u0131 do\u011frudan okuyup karma\u015f\u0131k JOIN operasyonlar\u0131n\u0131 bellekte veya diskte verimli bir \u015fekilde y\u00fcr\u00fctebilir. Bu, veri m\u00fchendislerinin ve analistlerin, veri entegrasyonu ve temizleme ad\u0131mlar\u0131n\u0131 \u00e7ok daha h\u0131zl\u0131 tamamlamas\u0131na olanak tan\u0131r. Elde edilen Pandas DataFrame&#8217;i, daha sonra makine \u00f6\u011frenimi modelleri olu\u015fturmak veya interaktif panolar haz\u0131rlamak i\u00e7in kullan\u0131labilir.<\/p>\n<p>Bu vaka analizleri, DuckDB&#8217;nin Pandas ile birlikte kullan\u0131ld\u0131\u011f\u0131nda b\u00fcy\u00fck veri setlerinde ne kadar g\u00fc\u00e7l\u00fc bir ara\u00e7 haline geldi\u011fini a\u00e7\u0131k\u00e7a g\u00f6stermektedir. ETL s\u00fcre\u00e7lerinden karma\u015f\u0131k analitik sorgulara kadar, DuckDB performans\u0131 art\u0131r\u0131rken i\u015f ak\u0131\u015f\u0131n\u0131 basitle\u015ftirir.<\/p>\n<h2>Performans Optimizasyonu ve \u0130leri D\u00fczey \u0130pu\u00e7lar\u0131: DuckDB&#8217;den En \u0130yi \u015eekilde Yararlanmak<\/h2>\n<p>DuckDB, kutudan \u00e7\u0131kt\u0131\u011f\u0131 haliyle bile etkileyici performans sunar. Ancak, b\u00fcy\u00fck veri setleriyle \u00e7al\u0131\u015f\u0131rken veya belirli performans hedeflerine ula\u015fmak istedi\u011finizde, baz\u0131 optimizasyon tekniklerini ve ileri d\u00fczey ipu\u00e7lar\u0131n\u0131 bilmek i\u015f ak\u0131\u015f\u0131n\u0131z\u0131 daha da h\u0131zland\u0131rabilir. Bu b\u00f6l\u00fcm, DuckDB&#8217;den en iyi \u015fekilde yararlanman\u0131z\u0131 sa\u011flayacak stratejileri ve ipu\u00e7lar\u0131n\u0131 i\u00e7ermektedir.<\/p>\n<h3>Veri Formatlar\u0131: Parquet ve Apache Arrow&#8217;un G\u00fcc\u00fc<\/h3>\n<p>DuckDB&#8217;nin performans\u0131n\u0131 en \u00fcst d\u00fczeye \u00e7\u0131karman\u0131n en \u00f6nemli yollar\u0131ndan biri, verilerinizi do\u011fru formatta depolamakt\u0131r. DuckDB, s\u00fctun tabanl\u0131 depolama i\u00e7in optimize edilmi\u015ftir ve bu nedenle Parquet ve Apache Arrow gibi s\u00fctun tabanl\u0131 formatlarla m\u00fckemmel bir uyum i\u00e7indedir.<\/p>\n<ul>\n<li><strong>Parquet:<\/strong> S\u00fctun tabanl\u0131, s\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f ve optimize edilmi\u015f bir dosya format\u0131d\u0131r. DuckDB, Parquet dosyalar\u0131n\u0131 do\u011frudan sorgulayabilir ve yaln\u0131zca sorguda ihtiya\u00e7 duyulan s\u00fctunlar\u0131 okuyarak I\/O maliyetini \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r. Bu, \u00f6zellikle geni\u015f tablolarda (\u00e7ok say\u0131da s\u00fctun) ve belirli s\u00fctunlara odaklanan analitik sorgularda performans\u0131 katlar.<\/li>\n<li><strong>Apache Arrow:<\/strong> Bellek i\u00e7i s\u00fctun tabanl\u0131 bir veri format\u0131d\u0131r. DuckDB ve Pandas (ve di\u011fer bir\u00e7ok veri arac\u0131) aras\u0131nda veri aktar\u0131m\u0131 yaparken Arrow format\u0131n\u0131 kullanmak, veri kopyalama maliyetini azaltarak performans\u0131 art\u0131r\u0131r. <code>.fetch_arrow_table()<\/code> metodu ile DuckDB sonu\u00e7lar\u0131n\u0131 Arrow format\u0131nda al\u0131p, oradan Pandas DataFrame&#8217;e d\u00f6n\u00fc\u015ft\u00fcrmek, b\u00fcy\u00fck veri setlerinde daha h\u0131zl\u0131d\u0131r.<\/li>\n<\/ul>\n<aside class=\"expert-tip\">\n        Uzman \u0130pucu: M\u00fcmk\u00fcnse, ham CSV dosyalar\u0131n\u0131z\u0131 bir kez Parquet format\u0131na d\u00f6n\u00fc\u015ft\u00fcr\u00fcn ve DuckDB sorgular\u0131n\u0131z i\u00e7in bu dosyalar\u0131 kullan\u0131n. Bu, y\u00fckleme ve sorgulama s\u00fcrelerinde dramatik iyile\u015fmeler sa\u011flayacakt\u0131r.<br \/>\n    <\/aside>\n<h3>Bellek Y\u00f6netimi ve Yap\u0131land\u0131rma<\/h3>\n<p>DuckDB, ak\u0131ll\u0131 bellek y\u00f6netimi sayesinde bellek d\u0131\u015f\u0131 hatalar\u0131n\u0131 nadiren verir. Ancak, daha iyi performans i\u00e7in bellek limitlerini ayarlayabilirsiniz. DuckDB, varsay\u0131lan olarak makinenizdeki RAM&#8217;in belirli bir y\u00fczdesini kullan\u0131r. Bu limiti art\u0131rmak veya azaltmak m\u00fcmk\u00fcnd\u00fcr.<\/p>\n<pre><code>\nimport duckdb\n\n# DuckDB ba\u011flant\u0131s\u0131 olu\u015ftururken bellek limitini ayarlama\n# \u00d6rne\u011fin, 4GB bellek kullanmas\u0131na izin verelim\nconn = duckdb.connect(database=':memory:', read_only=False, config={'memory_limit': '4GB'})\n\n# Mevcut bellek limitini kontrol etme\nprint(conn.execute(\"PRAGMA memory_limit;\").fetchval())\n\n# Veya sorgu i\u00e7inde ayarlama\nconn.execute(\"SET memory_limit='8GB';\")\nprint(conn.execute(\"PRAGMA memory_limit;\").fetchval())\n\n# Ge\u00e7ici depolama dizini ayarlama (disk ta\u015fmas\u0131 i\u00e7in)\n# B\u00fcy\u00fck veri setlerinde disk I\/O performans\u0131n\u0131 etkileyebilir\nconn.execute(\"SET temp_directory='\/tmp\/duckdb_temp';\") # Linux\/macOS\n# conn.execute(\"SET temp_directory='C:\/temp\/duckdb_temp';\") # Windows\n\n# Ba\u011flant\u0131y\u0131 kapatmay\u0131 unutmay\u0131n\nconn.close()\n    <\/code><\/pre>\n<p>Bellek limitini sisteminizdeki mevcut RAM&#8217;e g\u00f6re ayarlamak, DuckDB&#8217;nin daha fazla veriyi bellekte tutmas\u0131na ve disk I\/O&#8217;sunu azaltmas\u0131na yard\u0131mc\u0131 olabilir, bu da sorgu performans\u0131n\u0131 art\u0131r\u0131r.<\/p>\n<h3>\u0130ndeksleme ve Optimizasyon<\/h3>\n<p>Geleneksel veritabanlar\u0131nda indeksler, sorgu performans\u0131n\u0131 art\u0131rmak i\u00e7in kritik \u00f6neme sahiptir. DuckDB, s\u00fctun tabanl\u0131 yap\u0131s\u0131 ve geli\u015fmi\u015f sorgu optimizasyon motoru sayesinde genellikle manuel indeksleme ihtiyac\u0131n\u0131 azalt\u0131r. Ancak, belirli senaryolarda performans\u0131 daha da art\u0131rmak i\u00e7in baz\u0131 teknikler kullan\u0131labilir:<\/p>\n<ul>\n<li><strong>Sorted Tables:<\/strong> DuckDB, verileri belirli bir s\u00fctuna g\u00f6re s\u0131ralanm\u0131\u015f olarak depolad\u0131\u011f\u0131nda sorgu performans\u0131n\u0131 art\u0131rabilir. \u00d6zellikle <code>ORDER BY<\/code> ve <code>GROUP BY<\/code> i\u00e7eren sorgularda bu faydal\u0131d\u0131r. Parquet dosyalar\u0131n\u0131 olu\u015ftururken verileri s\u0131ral\u0131 yazmak veya DuckDB&#8217;ye y\u00fckledikten sonra s\u0131ral\u0131 bir tablo olarak kaydetmek d\u00fc\u015f\u00fcnebilirsiniz.<\/li>\n<li><strong>Statistics (\u0130statistikler):<\/strong> DuckDB, veriler hakk\u0131nda istatistikler toplayarak sorgu planlay\u0131c\u0131s\u0131n\u0131 optimize eder. Bu genellikle otomatik olarak ger\u00e7ekle\u015fir, ancak nadiren de olsa manuel olarak istatistikleri g\u00fcncellemek faydal\u0131 olabilir (b\u00fcy\u00fck veri de\u011fi\u015fikliklerinden sonra).<\/li>\n<\/ul>\n<h3>Mobil Uyumlu HTML ve Raporlama \u0130\u00e7in Sonu\u00e7lar\u0131n G\u00f6rselle\u015ftirilmesi<\/h3>\n<p>DuckDB ve Pandas ile elde etti\u011finiz analiz sonu\u00e7lar\u0131n\u0131 genellikle bir web panosu veya raporlama arac\u0131 arac\u0131l\u0131\u011f\u0131yla sunmak istersiniz. Bu raporlar\u0131n mobil cihazlarda da d\u00fczg\u00fcn g\u00f6r\u00fcnmesi \u00f6nemlidir. Do\u011frudan DuckDB veya Pandas \u00e7\u0131kt\u0131s\u0131 HTML de\u011fildir, ancak bu \u00e7\u0131kt\u0131y\u0131 (\u00f6rne\u011fin, Pandas DataFrame&#8217;i) bir web uygulamas\u0131nda kullan\u0131rken, responsive tasar\u0131m prensiplerini uygulayarak mobil uyumlu g\u00f6r\u00fcn\u00fcmler elde edebilirsiniz.<\/p>\n<p>\u00d6rne\u011fin, Pandas DataFrame&#8217;ini HTML&#8217;e d\u00f6n\u00fc\u015ft\u00fcrd\u00fckten sonra (<code>df.to_html()<\/code>), bu HTML&#8217;i i\u00e7eren web sayfan\u0131zda CSS media query&#8217;leri kullanarak tablolar\u0131n veya di\u011fer elemanlar\u0131n mobil cihazlarda daha iyi g\u00f6r\u00fcnmesini sa\u011flayabilirsiniz:<\/p>\n<pre><code>\n&lt;style&gt;\n\/* Genel tablo stilizasyonu *\/\ntable {\n    width: 100%;\n    border-collapse: collapse;\n    margin-bottom: 1em;\n}\nth, td {\n    border: 1px solid #ddd;\n    padding: 8px;\n    text-align: left;\n}\nth {\n    background-color: #f2f2f2;\n}\n\n\/* Mobil cihazlar i\u00e7in responsive ayarlar *\/\n@media screen and (max-width: 600px) {\n    table, thead, tbody, th, td, tr {\n        display: block;\n    }\n\n    thead tr {\n        position: absolute;\n        top: -9999px;\n        left: -9999px;\n    }\n\n    tr { border: 1px solid #ccc; }\n\n    td {\n        border: none;\n        border-bottom: 1px solid #eee;\n        position: relative;\n        padding-left: 50%;\n        text-align: right;\n    }\n\n    td:before {\n        position: absolute;\n        top: 6px;\n        left: 6px;\n        width: 45%;\n        padding-right: 10px;\n        white-space: nowrap;\n        text-align: left;\n        font-weight: bold;\n    }\n\n    \/* Her s\u00fctun i\u00e7in etiket ekleme (veri-etiketi kullanarak) *\/\n    td:nth-of-type(1):before { content: \"Sipari\u015f ID\"; }\n    td:nth-of-type(2):before { content: \"M\u00fc\u015fteri Ad\u0131\"; }\n    td:nth-of-type(3):before { content: \"Kategori\"; }\n    td:nth-of-type(4):before { content: \"Toplam Tutar\"; }\n    td:nth-of-type(5):before { content: \"Tarih\"; }\n}\n&lt;\/style&gt;\n    <\/code><\/pre>\n<p>Bu CSS kodu, ekran boyutu 600 pikselin alt\u0131na d\u00fc\u015ft\u00fc\u011f\u00fcnde tablonun her sat\u0131r\u0131n\u0131 dikey olarak d\u00fczenler ve her h\u00fccreye ba\u015fl\u0131klar\u0131n\u0131 ekler. Bu, DuckDB ve Pandas ile elde etti\u011finiz verilerin son kullan\u0131c\u0131ya daha eri\u015filebilir ve estetik bir \u015fekilde sunulmas\u0131na yard\u0131mc\u0131 olur.<\/p>\n<p>Bu ipu\u00e7lar\u0131 ve optimizasyon stratejileriyle, DuckDB&#8217;nin potansiyelini tam olarak kullanabilir ve b\u00fcy\u00fck \u00f6l\u00e7ekli veri analizi projelerinizde hem performans\u0131 hem de geli\u015ftirici deneyimini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilirsiniz.<\/p>\n<h2>Sonu\u00e7: B\u00fcy\u00fck Veri Analizinde Gelece\u011fin \u0130\u015f Ak\u0131\u015f\u0131<\/h2>\n<p>Bu makale boyunca, Pandas&#8217;\u0131n b\u00fcy\u00fck veri setleriyle \u00e7al\u0131\u015f\u0131rken kar\u015f\u0131la\u015ft\u0131\u011f\u0131 zorluklar\u0131 ve DuckDB&#8217;nin bu zorluklar\u0131 nas\u0131l a\u015farak Pandas&#8217;\u0131 tamamlad\u0131\u011f\u0131n\u0131 detayl\u0131 bir \u015fekilde inceledik. G\u00f6rd\u00fck ki, Pandas&#8217;\u0131n sezgisel Python API&#8217;si ve veri ke\u015ffi i\u00e7in sundu\u011fu kolayl\u0131k vazge\u00e7ilmezken, DuckDB&#8217;nin s\u00fctun tabanl\u0131 mimarisi, SQL deste\u011fi ve bellek\/disk y\u00f6netimi, b\u00fcy\u00fck \u00f6l\u00e7ekli analitik sorgularda ve ETL s\u00fcre\u00e7lerinde e\u015fsiz bir performans sunuyor.<\/p>\n<p>DuckDB&#8217;nin do\u011frudan dosya sisteminden (CSV, Parquet, JSON) sorgulama yetene\u011fi, Pandas DataFrameleri ile sorunsuz entegrasyonu ve optimize edilmi\u015f SQL motoru, veri bilimcilerine ve m\u00fchendislerine daha \u00f6nce m\u00fcmk\u00fcn olmayan bir esneklik ve h\u0131z sa\u011fl\u0131yor. Art\u0131k, gigabaytlarca hatta terabaytlarca veriyi, da\u011f\u0131t\u0131k sistemlerin karma\u015f\u0131kl\u0131\u011f\u0131na girmeden, tek bir makinede bile verimli bir \u015fekilde i\u015fleyebiliriz.<\/p>\n<p>Gelece\u011fin veri analizi i\u015f ak\u0131\u015f\u0131, bu iki g\u00fc\u00e7l\u00fc arac\u0131n sinerjisine dayanacak gibi g\u00f6r\u00fcn\u00fcyor: Veri ke\u015ffi, \u00f6n i\u015fleme ve k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli manip\u00fclasyonlar i\u00e7in Pandas&#8217;\u0131n g\u00fcc\u00fcnden yararlan\u0131rken, performans kritik gruplamalar, birle\u015ftirmeler ve karma\u015f\u0131k SQL sorgular\u0131 i\u00e7in DuckDB&#8217;ye ba\u015fvurmak. Bu hibrit yakla\u015f\u0131m, hem geli\u015ftirme h\u0131z\u0131n\u0131 hem de analizlerin \u00f6l\u00e7eklenebilirli\u011fini art\u0131rarak veri odakl\u0131 kararlar almay\u0131 kolayla\u015ft\u0131racakt\u0131r. DuckDB ve Pandas, b\u00fcy\u00fck veri d\u00fcnyas\u0131nda yan yana y\u00fcr\u00fcyerek, analistlerin ve veri bilimcilerin ellerindeki en de\u011ferli ara\u00e7lardan biri haline geliyor.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<h4>DuckDB tamamen Pandas&#8217;\u0131n yerini mi alacak?<\/h4>\n<p>Hay\u0131r, DuckDB&#8217;nin amac\u0131 Pandas&#8217;\u0131n yerini almak de\u011fil, onu tamamlamakt\u0131r. Pandas, hala veri ke\u015ffi, h\u0131zl\u0131 prototipleme, k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli veri manip\u00fclasyonlar\u0131 i\u00e7in m\u00fckemmel bir ara\u00e7t\u0131r. DuckDB ise Pandas&#8217;\u0131n bellek d\u0131\u015f\u0131 kalma veya yava\u015flama e\u011filiminde oldu\u011fu b\u00fcy\u00fck \u00f6l\u00e7ekli analitik sorgular ve ETL s\u00fcre\u00e7leri i\u00e7in devreye girer. \u0130kisi birlikte en g\u00fc\u00e7l\u00fc i\u015f ak\u0131\u015f\u0131n\u0131 sunar.<\/p>\n<h4>DuckDB kullanmak i\u00e7in SQL bilmek \u015fart m\u0131?<\/h4>\n<p>DuckDB&#8217;nin t\u00fcm g\u00fcc\u00fcnden yararlanmak i\u00e7in SQL bilgisi kesinlikle faydal\u0131d\u0131r, \u00e7\u00fcnk\u00fc DuckDB bir SQL veritaban\u0131d\u0131r. Ancak, temel SQL komutlar\u0131 (SELECT, FROM, WHERE, GROUP BY, JOIN) ile ba\u015flayabilir ve zamanla daha karma\u015f\u0131k sorgulara ge\u00e7ebilirsiniz. Python API&#8217;si arac\u0131l\u0131\u011f\u0131yla Pandas DataFramelerinizle etkile\u015fim kurarken bile SQL&#8217;in g\u00fcc\u00fcnden faydalanabilirsiniz.<\/p>\n<h4>DuckDB b\u00fcy\u00fck veri k\u00fcmelerini belle\u011fe mi y\u00fckler?<\/h4>\n<p>DuckDB, \u00f6ncelikle belle\u011fi kullanmaya \u00e7al\u0131\u015f\u0131r (bellek i\u00e7i veritaban\u0131 olarak da \u00e7al\u0131\u015fabilir). Ancak, veri seti makinenizin RAM&#8217;ini a\u015ft\u0131\u011f\u0131nda, ak\u0131ll\u0131ca disk tabanl\u0131 bir yakla\u015f\u0131ma ge\u00e7er ve verileri diske ta\u015f\u0131r. Bu sayede, Pandas&#8217;ta s\u0131k\u00e7a g\u00f6r\u00fclen &#8220;MemoryError&#8221; hatalar\u0131n\u0131 \u00f6nlerken, b\u00fcy\u00fck veri setleriyle bile sorunsuz bir \u015fekilde \u00e7al\u0131\u015fabilir.<\/p>\n<h4>DuckDB&#8217;nin di\u011fer yerle\u015fik veritabanlar\u0131ndan (\u00f6rne\u011fin SQLite) fark\u0131 nedir?<\/h4>\n<p>DuckDB, SQLite gibi g\u00f6m\u00fcl\u00fc bir veritaban\u0131 olmas\u0131na ra\u011fmen, temel fark\u0131 kullan\u0131m amac\u0131d\u0131r. SQLite OLTP (i\u015flem odakl\u0131) i\u015f y\u00fckleri i\u00e7in tasarlanm\u0131\u015fken, DuckDB OLAP (analitik) i\u015f y\u00fckleri i\u00e7in \u00f6zel olarak optimize edilmi\u015ftir. DuckDB&#8217;nin s\u00fctun tabanl\u0131 depolama, geli\u015fmi\u015f sorgu optimizasyonu ve analitik fonksiyonlara odaklanmas\u0131, onu b\u00fcy\u00fck \u00f6l\u00e7ekli veri analizi i\u00e7in \u00e7ok daha h\u0131zl\u0131 ve verimli k\u0131lar.<\/p>\n<h4>DuckDB ve Spark aras\u0131ndaki fark nedir?<\/h4>\n<p>Spark, da\u011f\u0131t\u0131k bir i\u015flem \u00e7er\u00e7evesidir ve birden fazla makine (k\u00fcme) \u00fczerinde b\u00fcy\u00fck veri setlerini i\u015flemek i\u00e7in tasarlanm\u0131\u015ft\u0131r. DuckDB ise tek bir makinede (laptop, sunucu) \u00e7al\u0131\u015fmak \u00fczere tasarlanm\u0131\u015f, performans\u0131 y\u00fcksek bir OLAP veritaban\u0131d\u0131r. E\u011fer verileriniz tek bir makinenin depolama ve bellek kapasitesine s\u0131\u011f\u0131yorsa, DuckDB Spark&#8217;a g\u00f6re \u00e7ok daha basit kurulum, y\u00f6netim ve genellikle daha d\u00fc\u015f\u00fck gecikme s\u00fcresi sunar. Veri hacmi tek makineyi a\u015ft\u0131\u011f\u0131nda Spark gibi da\u011f\u0131t\u0131k \u00e7\u00f6z\u00fcmler devreye girer. DuckDB &#8220;tek makinedeki Spark&#8221; olarak d\u00fc\u015f\u00fcn\u00fclebilir.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"DuckDB ve Pandas: B\u00fcy\u00fck Veri Analizinde G\u00fc\u00e7l\u00fc Bir \u0130kili B\u00fcy\u00fck veri setleriyle \u00e7al\u0131\u015f\u0131rken Pandas&#8217;\u0131n performans s\u0131n\u0131rlar\u0131na m\u0131 tak\u0131l\u0131yorsunuz?&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-36161","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>B\u00fcy\u00fck Veri Analizi Neden Zorlu Bir G\u00f6rev Haline Geldi?<\/title>\n<meta name=\"description\" content=\"B\u00fcy\u00fck veri setleriyle \u00e7al\u0131\u015f\u0131rken Pandas&#039;\u0131n performans s\u0131n\u0131rlar\u0131na m\u0131 tak\u0131l\u0131yorsunuz? DuckDB, bellek d\u0131\u015f\u0131 sorunlar\u0131 a\u015farak ve karma\u015f\u0131k SQL sorgular\u0131n\u0131 Python ortam\u0131n\u0131zda h\u0131zla \u00e7al\u0131\u015ft\u0131rarak Pandas ile veri analizi i\u015f ak\u0131\u015f\u0131n\u0131z\u0131 devrim niteli\u011finde tamamlar. Bu makale, her iki arac\u0131n g\u00fc\u00e7l\u00fc yanlar\u0131n\u0131 birle\u015ftirerek b\u00fcy\u00fck \u00f6l\u00e7ekli veri analizini nas\u0131l daha verimli hale getirebilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"B\u00fcy\u00fck Veri Analizi Neden Zorlu Bir G\u00f6rev Haline Geldi?\" \/>\n<meta property=\"og:description\" content=\"B\u00fcy\u00fck veri setleriyle \u00e7al\u0131\u015f\u0131rken Pandas&#039;\u0131n performans s\u0131n\u0131rlar\u0131na m\u0131 tak\u0131l\u0131yorsunuz? DuckDB, bellek d\u0131\u015f\u0131 sorunlar\u0131 a\u015farak ve karma\u015f\u0131k SQL sorgular\u0131n\u0131 Python ortam\u0131n\u0131zda h\u0131zla \u00e7al\u0131\u015ft\u0131rarak Pandas ile veri analizi i\u015f ak\u0131\u015f\u0131n\u0131z\u0131 devrim niteli\u011finde tamamlar. Bu makale, her iki arac\u0131n g\u00fc\u00e7l\u00fc yanlar\u0131n\u0131 birle\u015ftirerek b\u00fcy\u00fck \u00f6l\u00e7ekli veri analizini nas\u0131l daha verimli hale getirebilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-09T09:21:16+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"30 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"B\u00fcy\u00fck Veri Analizi Neden Zorlu Bir G\u00f6rev Haline Geldi?\",\"datePublished\":\"2025-12-09T09:21:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/\"},\"wordCount\":4319,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/\",\"name\":\"B\u00fcy\u00fck Veri Analizi Neden Zorlu Bir G\u00f6rev Haline Geldi?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-09T09:21:16+00:00\",\"description\":\"B\u00fcy\u00fck veri setleriyle \u00e7al\u0131\u015f\u0131rken Pandas'\u0131n performans s\u0131n\u0131rlar\u0131na m\u0131 tak\u0131l\u0131yorsunuz? DuckDB, bellek d\u0131\u015f\u0131 sorunlar\u0131 a\u015farak ve karma\u015f\u0131k SQL sorgular\u0131n\u0131 Python ortam\u0131n\u0131zda h\u0131zla \u00e7al\u0131\u015ft\u0131rarak Pandas ile veri analizi i\u015f ak\u0131\u015f\u0131n\u0131z\u0131 devrim niteli\u011finde tamamlar. Bu makale, her iki arac\u0131n g\u00fc\u00e7l\u00fc yanlar\u0131n\u0131 birle\u015ftirerek b\u00fcy\u00fck \u00f6l\u00e7ekli veri analizini nas\u0131l daha verimli hale getirebilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"B\u00fcy\u00fck Veri Analizi Neden Zorlu Bir G\u00f6rev Haline Geldi?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"B\u00fcy\u00fck Veri Analizi Neden Zorlu Bir G\u00f6rev Haline Geldi?","description":"B\u00fcy\u00fck veri setleriyle \u00e7al\u0131\u015f\u0131rken Pandas'\u0131n performans s\u0131n\u0131rlar\u0131na m\u0131 tak\u0131l\u0131yorsunuz? DuckDB, bellek d\u0131\u015f\u0131 sorunlar\u0131 a\u015farak ve karma\u015f\u0131k SQL sorgular\u0131n\u0131 Python ortam\u0131n\u0131zda h\u0131zla \u00e7al\u0131\u015ft\u0131rarak Pandas ile veri analizi i\u015f ak\u0131\u015f\u0131n\u0131z\u0131 devrim niteli\u011finde tamamlar. Bu makale, her iki arac\u0131n g\u00fc\u00e7l\u00fc yanlar\u0131n\u0131 birle\u015ftirerek b\u00fcy\u00fck \u00f6l\u00e7ekli veri analizini nas\u0131l daha verimli hale getirebilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/","og_locale":"tr_TR","og_type":"article","og_title":"B\u00fcy\u00fck Veri Analizi Neden Zorlu Bir G\u00f6rev Haline Geldi?","og_description":"B\u00fcy\u00fck veri setleriyle \u00e7al\u0131\u015f\u0131rken Pandas'\u0131n performans s\u0131n\u0131rlar\u0131na m\u0131 tak\u0131l\u0131yorsunuz? DuckDB, bellek d\u0131\u015f\u0131 sorunlar\u0131 a\u015farak ve karma\u015f\u0131k SQL sorgular\u0131n\u0131 Python ortam\u0131n\u0131zda h\u0131zla \u00e7al\u0131\u015ft\u0131rarak Pandas ile veri analizi i\u015f ak\u0131\u015f\u0131n\u0131z\u0131 devrim niteli\u011finde tamamlar. Bu makale, her iki arac\u0131n g\u00fc\u00e7l\u00fc yanlar\u0131n\u0131 birle\u015ftirerek b\u00fcy\u00fck \u00f6l\u00e7ekli veri analizini nas\u0131l daha verimli hale getirebilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.","og_url":"https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-09T09:21:16+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"30 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"B\u00fcy\u00fck Veri Analizi Neden Zorlu Bir G\u00f6rev Haline Geldi?","datePublished":"2025-12-09T09:21:16+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/"},"wordCount":4319,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/","url":"https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/","name":"B\u00fcy\u00fck Veri Analizi Neden Zorlu Bir G\u00f6rev Haline Geldi?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-09T09:21:16+00:00","description":"B\u00fcy\u00fck veri setleriyle \u00e7al\u0131\u015f\u0131rken Pandas'\u0131n performans s\u0131n\u0131rlar\u0131na m\u0131 tak\u0131l\u0131yorsunuz? DuckDB, bellek d\u0131\u015f\u0131 sorunlar\u0131 a\u015farak ve karma\u015f\u0131k SQL sorgular\u0131n\u0131 Python ortam\u0131n\u0131zda h\u0131zla \u00e7al\u0131\u015ft\u0131rarak Pandas ile veri analizi i\u015f ak\u0131\u015f\u0131n\u0131z\u0131 devrim niteli\u011finde tamamlar. Bu makale, her iki arac\u0131n g\u00fc\u00e7l\u00fc yanlar\u0131n\u0131 birle\u015ftirerek b\u00fcy\u00fck \u00f6l\u00e7ekli veri analizini nas\u0131l daha verimli hale getirebilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/buyuk-veri-analizi-neden-zorlu-bir-gorev-haline-geldi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"B\u00fcy\u00fck Veri Analizi Neden Zorlu Bir G\u00f6rev Haline Geldi?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36161","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=36161"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36161\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=36161"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=36161"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=36161"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}