{"id":43607,"date":"2026-07-25T21:08:04","date_gmt":"2026-07-25T18:08:04","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/"},"modified":"2026-07-25T21:08:41","modified_gmt":"2026-07-25T18:08:41","slug":"veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/","title":{"rendered":"Veri Temizli\u011fi: \u0130lk Makine \u00d6\u011frenimi Projemden \u00d6\u011frendiklerim"},"content":{"rendered":"<h2>Veri Temizli\u011fi: \u0130lk Makine \u00d6\u011frenimi Projemden \u00d6\u011frendiklerim<\/h2>\n<p>\u0130lk makine \u00f6\u011frenimi projenize ba\u015flarken veri temizli\u011finin ne kadar kritik oldu\u011funu merak m\u0131 ediyorsunuz? Model e\u011fitimi \u00f6ncesi veri kalitesinin, projenizin ba\u015far\u0131s\u0131n\u0131 nas\u0131l do\u011frudan etkiledi\u011fini ve bu s\u00fcre\u00e7te kar\u015f\u0131la\u015fabilece\u011finiz temel zorluklar\u0131 bu makalede ke\u015ffedeceksiniz.<\/p>\n<h3>\u0130lk Makine \u00d6\u011frenimi Projenizde Neden Veri Temizli\u011fi Bu Kadar \u00d6nemli?<\/h3>\n<p>Makine \u00f6\u011frenimi d\u00fcnyas\u0131na ad\u0131m att\u0131\u011f\u0131n\u0131zda, genellikle algoritmalar\u0131n b\u00fcy\u00fcl\u00fc d\u00fcnyas\u0131na dalmak ve karma\u015f\u0131k modeller in\u015fa etmek istersiniz. Ancak benim ilk projemde \u00f6\u011frendi\u011fim en de\u011ferli ders, bu b\u00fcy\u00fcn\u00fcn temelinde yatan, \u00e7o\u011fu zaman g\u00f6z ard\u0131 edilen ama hayati \u00f6nem ta\u015f\u0131yan bir ad\u0131md\u0131: Veri temizli\u011fi. Bir\u00e7o\u011fumuz, makine \u00f6\u011frenimi denince akl\u0131m\u0131za hemen geli\u015fmi\u015f algoritmalar, derin sinir a\u011flar\u0131 veya karma\u015f\u0131k matematiksel denklemler gelir. Oysa bu algoritmalar\u0131n performans\u0131, beslendikleri verinin kalitesiyle do\u011fru orant\u0131l\u0131d\u0131r. T\u0131pk\u0131 bir \u015fefin k\u00f6t\u00fc malzemelerle lezzetli bir yemek yapamayaca\u011f\u0131 gibi, kirli ve tutars\u0131z verilerle de ba\u015far\u0131l\u0131 bir makine \u00f6\u011frenimi modeli olu\u015fturmak neredeyse imkans\u0131zd\u0131r.<\/p>\n<p>Bu durumu daha iyi anlamak i\u00e7in &#8220;Garbage In, Garbage Out&#8221; (\u00c7\u00f6p Girer, \u00c7\u00f6p \u00c7\u0131kar) prensibini hat\u0131rlamakta fayda var. E\u011fer modelinize hatal\u0131, eksik veya tutars\u0131z veriler sa\u011flarsan\u0131z, modeliniz ne kadar geli\u015fmi\u015f olursa olsun, \u00fcretece\u011fi sonu\u00e7lar da ayn\u0131 derecede hatal\u0131 ve g\u00fcvenilmez olacakt\u0131r. \u0130lk projemde, bir m\u00fc\u015fteri churn (m\u00fc\u015fteri kayb\u0131) tahmini modeli geli\u015ftirmeye \u00e7al\u0131\u015f\u0131yordum. Elimizdeki veri seti, farkl\u0131 kaynaklardan toplanm\u0131\u015f, dolay\u0131s\u0131yla \u00e7e\u015fitli formatlarda, eksik de\u011ferlerle dolu ve tutars\u0131zl\u0131klar i\u00e7eren ham bir yap\u0131dayd\u0131. Ba\u015flang\u0131\u00e7ta, bu verileri do\u011frudan modele beslemeye \u00e7al\u0131\u015ft\u0131\u011f\u0131mda, modelin performans\u0131 beklentilerimin \u00e7ok alt\u0131ndayd\u0131. Tahminler rastgeleydi, do\u011fruluk oran\u0131 d\u00fc\u015f\u00fckt\u00fc ve modelin neden bu kadar k\u00f6t\u00fc performans g\u00f6sterdi\u011fini anlamakta zorlan\u0131yordum. \u0130\u015fte tam bu noktada, veri temizli\u011finin ne anlama geldi\u011fini ve neden bu kadar kritik oldu\u011funu bizzat deneyimledim.<\/p>\n<p>Veri temizli\u011fi, ham veriyi analiz ve modelleme i\u00e7in uygun hale getirme s\u00fcrecidir. Bu s\u00fcre\u00e7, eksik de\u011ferleri ele almaktan, ayk\u0131r\u0131 de\u011ferleri tespit etmeye, tekrarlayan kay\u0131tlar\u0131 kald\u0131rmaktan, veri tiplerini d\u00fczeltmeye ve tutars\u0131zl\u0131klar\u0131 gidermeye kadar pek \u00e7ok ad\u0131m\u0131 i\u00e7erir. Bu ad\u0131mlar, modelin daha do\u011fru tahminler yapmas\u0131n\u0131 sa\u011flamakla kalmaz, ayn\u0131 zamanda modelin genellenebilirli\u011fini (generalizability) art\u0131r\u0131r ve a\u015f\u0131r\u0131 \u00f6\u011frenmeyi (overfitting) \u00f6nlemeye yard\u0131mc\u0131 olur. Temizlenmi\u015f bir veri seti, modelin ger\u00e7ek d\u00fcnya desenlerini \u00f6\u011frenmesine olanak tan\u0131r ve b\u00f6ylece daha g\u00fcvenilir ve uygulanabilir sonu\u00e7lar elde edilmesini sa\u011flar. \u00d6rne\u011fin, m\u00fc\u015fteri churn projemde, eksik gelir verilerini do\u011fru bir \u015fekilde doldurmak veya farkl\u0131 yaz\u0131lm\u0131\u015f \u015fehir isimlerini standartla\u015ft\u0131rmak, modelin m\u00fc\u015fteri davran\u0131\u015flar\u0131n\u0131 daha do\u011fru bir \u015fekilde anlamas\u0131na yard\u0131mc\u0131 oldu. Bu sayede, modelin tahmin g\u00fcc\u00fc \u00f6nemli \u00f6l\u00e7\u00fcde artt\u0131 ve projemizdeki ba\u015far\u0131 \u015fans\u0131m\u0131z y\u00fckseldi. Unutmay\u0131n, makine \u00f6\u011frenimi yolculu\u011funuzda harcayaca\u011f\u0131n\u0131z zaman\u0131n b\u00fcy\u00fck bir k\u0131sm\u0131, hatta %70-80&#8217;i, veri haz\u0131rl\u0131\u011f\u0131 ve temizli\u011fi a\u015famas\u0131na ayr\u0131lmal\u0131d\u0131r. Bu yat\u0131r\u0131m, projenizin genel ba\u015far\u0131s\u0131 i\u00e7in vazge\u00e7ilmezdir.<\/p>\n<h3>Veri Temizli\u011fi Temelleri: Hangi Kavramlar\u0131 Bilmeliyiz?<\/h3>\n<p>Veri temizli\u011fi yolculu\u011funa \u00e7\u0131kmadan \u00f6nce, bu s\u00fcrecin temelini olu\u015fturan birka\u00e7 kilit kavram\u0131 anlamak \u015fartt\u0131r. Bu kavramlar, verinizdeki potansiyel sorunlar\u0131 tan\u0131man\u0131za ve onlarla nas\u0131l ba\u015fa \u00e7\u0131kaca\u011f\u0131n\u0131za dair size bir yol haritas\u0131 sunacakt\u0131r. \u0130lk projemde kar\u015f\u0131la\u015ft\u0131\u011f\u0131m en yayg\u0131n sorunlar bu temel kavramlar\u0131n etraf\u0131nda \u015fekilleniyordu ve bunlar\u0131 anlamak, do\u011fru \u00e7\u00f6z\u00fcmleri uygulamam i\u00e7in bana rehberlik etti. Bu nedenle, bir veri bilimci veya makine \u00f6\u011frenimi m\u00fchendisi aday\u0131 olarak bu terimleri ve bunlar\u0131n veri setiniz \u00fczerindeki etkilerini bilmek, projenizin sa\u011flam temeller \u00fczerine in\u015fa edilmesini sa\u011flayacakt\u0131r.<\/p>\n<p>\u00d6ncelikle, <strong>Eksik Veriler (Missing Values)<\/strong>. Bir veri setindeki en yayg\u0131n sorunlardan biridir. Ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, belirli g\u00f6zlemler i\u00e7in baz\u0131 \u00f6zellik (feature) de\u011ferlerinin mevcut olmamas\u0131 durumudur. Bu eksiklikler, veri toplama hatalar\u0131ndan, anket kat\u0131l\u0131mc\u0131lar\u0131n\u0131n belirli sorular\u0131 atlamas\u0131ndan veya sistem ar\u0131zalar\u0131ndan kaynaklanabilir. Eksik veriler, do\u011frudan modele beslendi\u011finde hatalara yol a\u00e7abilir, istatistiksel analizleri yan\u0131ltabilir ve modelin genelleme yetene\u011fini d\u00fc\u015f\u00fcrebilir. \u00d6rne\u011fin, m\u00fc\u015fteri verilerinde ya\u015f veya gelir bilgisinin eksik olmas\u0131, modelin demografik e\u011filimleri do\u011fru anlamas\u0131n\u0131 engelleyebilir. Eksik verilerle ba\u015fa \u00e7\u0131kmak i\u00e7in \u00e7e\u015fitli stratejiler mevcuttur: bu de\u011ferleri silmek (e\u011fer \u00e7ok azsa), ortalama, medyan veya mod gibi istatistiksel de\u011ferlerle doldurmak (imputation) veya daha geli\u015fmi\u015f y\u00f6ntemler (\u00f6rne\u011fin, makine \u00f6\u011frenimi modelleri kullanarak tahmin etmek) kullanmak.<\/p>\n<p>\u0130kinci olarak, <strong>Ayk\u0131r\u0131 De\u011ferler (Outliers)<\/strong>. Bir veri setindeki di\u011fer g\u00f6zlemlerden \u00f6nemli \u00f6l\u00e7\u00fcde farkl\u0131 olan veri noktalar\u0131d\u0131r. Ayk\u0131r\u0131 de\u011ferler, veri giri\u015f hatalar\u0131ndan, \u00f6l\u00e7\u00fcm hatalar\u0131ndan veya ger\u00e7ek ama nadir olaylardan kaynaklanabilir. \u00d6rne\u011fin, bir e-ticaret sitesindeki \u00fcr\u00fcn fiyatlar\u0131 aras\u0131nda, normalde 100-500 TL aral\u0131\u011f\u0131nda seyrederken, bir \u00fcr\u00fcn\u00fcn fiyat\u0131n\u0131n yanl\u0131\u015fl\u0131kla 10.000 TL olarak girilmesi bir ayk\u0131r\u0131 de\u011ferdir. Ayk\u0131r\u0131 de\u011ferler, \u00f6zellikle regresyon gibi modellere b\u00fcy\u00fck etki edebilir ve modelin tahminlerini \u00e7arp\u0131tabilir. Bu de\u011ferler, ortalama gibi istatistikleri de yan\u0131ltarak veri setinin genel da\u011f\u0131l\u0131m\u0131 hakk\u0131nda yanl\u0131\u015f \u00e7\u0131kar\u0131mlara yol a\u00e7abilir. Ayk\u0131r\u0131 de\u011ferleri tespit etmek i\u00e7in kutu grafikleri (boxplot), Z-skoru veya IQR (Interquartile Range &#8211; \u00c7eyrekler Aras\u0131 Aral\u0131k) gibi istatistiksel y\u00f6ntemler kullan\u0131l\u0131r. Ele almak i\u00e7in ise bu de\u011ferleri silmek, d\u00f6n\u00fc\u015ft\u00fcrmek veya s\u0131n\u0131rland\u0131rmak gibi yakla\u015f\u0131mlar mevcuttur.<\/p>\n<p>\u00dc\u00e7\u00fcnc\u00fc temel kavram <strong>Tekrarlayan Veriler (Duplicate Data)<\/strong>&#8216;dir. Veri setinde birden fazla kez ayn\u0131 veya neredeyse ayn\u0131 kayd\u0131n bulunmas\u0131 durumudur. Bu durum genellikle farkl\u0131 sistemlerden veri birle\u015ftirilirken veya veri toplama s\u00fcre\u00e7lerinde hatalar olu\u015ftu\u011funda ortaya \u00e7\u0131kar. Tekrarlayan veriler, modelin gereksiz yere ayn\u0131 bilgiyi tekrar tekrar \u00f6\u011frenmesine neden olabilir, bu da modelin a\u015f\u0131r\u0131 \u00f6\u011frenmesine (overfitting) ve hatal\u0131 genellemelere yol a\u00e7abilir. Ayr\u0131ca, veri setinin boyutunu gereksiz yere art\u0131rarak i\u015flem s\u00fcresini uzat\u0131r. \u00d6rne\u011fin, bir m\u00fc\u015fteri veritaban\u0131nda ayn\u0131 m\u00fc\u015fterinin iki farkl\u0131 kay\u0131tla yer almas\u0131, m\u00fc\u015fteri say\u0131s\u0131n\u0131n yanl\u0131\u015f hesaplanmas\u0131na veya modelin o m\u00fc\u015fteriyi &#8220;iki farkl\u0131 m\u00fc\u015fteri&#8221; gibi alg\u0131lamas\u0131na neden olabilir. Tekrarlayan kay\u0131tlar\u0131 tespit etmek ve kald\u0131rmak, veri setinin do\u011frulu\u011funu ve tutarl\u0131l\u0131\u011f\u0131n\u0131 art\u0131rmak i\u00e7in kritik bir ad\u0131md\u0131r.<\/p>\n<p>D\u00f6rd\u00fcnc\u00fc olarak, <strong>Veri Tutars\u0131zl\u0131klar\u0131 (Data Inconsistencies)<\/strong>. Ayn\u0131 bilginin farkl\u0131 formatlarda veya farkl\u0131 \u015fekillerde temsil edilmesi durumudur. \u00d6rne\u011fin, \u015fehir isimlerinin &#8220;\u0130stanbul&#8221;, &#8220;ist&#8221;, &#8220;Istanbul&#8221; veya &#8220;\u0130st.&#8221; gibi farkl\u0131 \u015fekillerde yaz\u0131lmas\u0131 bir tutars\u0131zl\u0131kt\u0131r. Tarih formatlar\u0131n\u0131n &#8220;GG.AA.YYYY&#8221;, &#8220;AA\/GG\/YYYY&#8221; veya &#8220;YYYY-AA-GG&#8221; \u015feklinde farkl\u0131 olmas\u0131 da ba\u015fka bir \u00f6rnektir. Bu t\u00fcr tutars\u0131zl\u0131klar, veri analizi ve modelleme s\u0131ras\u0131nda hatalara yol a\u00e7ar, \u00e7\u00fcnk\u00fc model ayn\u0131 kavram\u0131 farkl\u0131 girdiler olarak alg\u0131lar. Metin verilerinde b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf farkl\u0131l\u0131klar\u0131, yaz\u0131m hatalar\u0131 veya gereksiz bo\u015fluklar da bu kategoriye girer. Tutars\u0131zl\u0131klar\u0131 gidermek i\u00e7in verileri standartla\u015ft\u0131rmak, metin temizleme teknikleri kullanmak ve ortak bir format belirlemek \u00f6nemlidir.<\/p>\n<p>Son olarak, <strong>Veri Tipinin Yanl\u0131\u015f Olmas\u0131 (Incorrect Data Types)<\/strong>. Bir \u00f6zelli\u011fin (s\u00fctunun) beklenen veri tipinden farkl\u0131 bir tipte depolanmas\u0131d\u0131r. \u00d6rne\u011fin, say\u0131sal olmas\u0131 gereken bir &#8220;ya\u015f&#8221; s\u00fctununun metin (string) olarak depolanmas\u0131 veya tarih olmas\u0131 gereken bir s\u00fctunun say\u0131 olarak depolanmas\u0131 bu duruma \u00f6rnektir. Yanl\u0131\u015f veri tipleri, matematiksel i\u015flemlerin veya tarih tabanl\u0131 analizlerin do\u011fru bir \u015fekilde yap\u0131lmas\u0131n\u0131 engeller ve modelin veri setini do\u011fru yorumlamas\u0131n\u0131 zorla\u015ft\u0131r\u0131r. Bu sorun, genellikle veri y\u00fckleme veya d\u00f6n\u00fc\u015ft\u00fcrme a\u015famalar\u0131nda ortaya \u00e7\u0131kar. Do\u011fru veri tiplerini atamak, verinin do\u011fru i\u015flenmesi ve modelin hatas\u0131z \u00e7al\u0131\u015fmas\u0131 i\u00e7in temel bir gerekliliktir. Bu temel kavramlar\u0131 iyi anlamak, veri temizli\u011fi s\u00fcrecinizi daha bilin\u00e7li ve etkili bir \u015fekilde y\u00f6netmenizi sa\u011flayacakt\u0131r.<\/p>\n<h3>Ad\u0131m Ad\u0131m Veri Temizli\u011fi S\u00fcreci: Nereden Ba\u015flamal\u0131y\u0131z?<\/h3>\n<p>Veri temizli\u011fi, karma\u015f\u0131k gibi g\u00f6r\u00fcnse de, sistematik ad\u0131mlarla yakla\u015f\u0131ld\u0131\u011f\u0131nda olduk\u00e7a y\u00f6netilebilir bir s\u00fcre\u00e7tir. \u0130lk makine \u00f6\u011frenimi projemde, bu ad\u0131mlar\u0131 takip ederek ham veri setimi modelleme i\u00e7in haz\u0131r hale getirmeyi ba\u015fard\u0131m. \u0130\u015fte size ad\u0131m ad\u0131m veri temizli\u011fi s\u00fcreci ve her ad\u0131mda uygulayabilece\u011finiz baz\u0131 pratik y\u00f6ntemler ve kod \u00f6rnekleri.<\/p>\n<h4>Veriyi Anlamak ve Ke\u015ffetmek (Exploratory Data Analysis &#8211; EDA)<\/h4>\n<p>Her \u015feyden \u00f6nce, verinizi tan\u0131mal\u0131s\u0131n\u0131z. Bu, veri temizli\u011finin en kritik ad\u0131m\u0131d\u0131r. EDA, veri setinizdeki desenleri, anomalileri, ili\u015fkileri ve potansiyel sorunlar\u0131 g\u00f6rselle\u015ftirme ve \u00f6zetleme yoluyla ke\u015ffetmenizi sa\u011flar. Pandas k\u00fct\u00fcphanesi, bu a\u015famada en b\u00fcy\u00fck yard\u0131mc\u0131n\u0131z olacakt\u0131r. <code>df.info()<\/code>, <code>df.describe()<\/code> ve <code>df.isnull().sum()<\/code> gibi komutlar, veri tiplerini, istatistiksel \u00f6zetleri ve eksik de\u011fer say\u0131lar\u0131n\u0131 h\u0131zl\u0131ca g\u00f6rmenizi sa\u011flar. G\u00f6rselle\u015ftirmeler (histogramlar, kutu grafikleri, sa\u00e7\u0131l\u0131m grafikleri) ise veri da\u011f\u0131l\u0131m\u0131n\u0131, ayk\u0131r\u0131 de\u011ferleri ve de\u011fi\u015fkenler aras\u0131 ili\u015fkileri anlamak i\u00e7in vazge\u00e7ilmezdir. \u00d6rne\u011fin, bir histogram, bir \u00f6zelli\u011fin de\u011ferlerinin nas\u0131l da\u011f\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6sterirken, bir kutu grafi\u011fi ayk\u0131r\u0131 de\u011ferleri a\u00e7\u0131k\u00e7a ortaya koyabilir. Bu a\u015famada harcad\u0131\u011f\u0131n\u0131z zaman, ileride kar\u015f\u0131la\u015faca\u011f\u0131n\u0131z bir\u00e7ok sorunu \u00f6nceden tespit etmenize yard\u0131mc\u0131 olur. EDA, veri setinizin &#8220;sa\u011fl\u0131k kontrol\u00fc&#8221; gibidir; sorunlar\u0131 erkenden te\u015fhis etmek, tedavi s\u00fcrecini \u00e7ok daha kolayla\u015ft\u0131r\u0131r.<\/p>\n<h4>Eksik Verileri Ele Alma: Doldurma (Imputation) veya Silme<\/h4>\n<p>Eksik de\u011ferler, veri setinizin do\u011frulu\u011funu ve modelinizin performans\u0131n\u0131 do\u011frudan etkileyen yayg\u0131n bir sorundur. \u0130lk ad\u0131m, eksik de\u011ferlerin miktar\u0131n\u0131 ve da\u011f\u0131l\u0131m\u0131n\u0131 anlamakt\u0131r. E\u011fer bir s\u00fctunda \u00e7ok az eksik de\u011fer varsa (\u00f6rne\u011fin, %5&#8217;ten az), bu sat\u0131rlar\u0131 do\u011frudan silebilirsiniz. Ancak, bu oran daha y\u00fcksekse, veri kayb\u0131n\u0131 \u00f6nlemek i\u00e7in doldurma y\u00f6ntemlerini kullanmak daha mant\u0131kl\u0131d\u0131r. Say\u0131sal s\u00fctunlar i\u00e7in en yayg\u0131n doldurma y\u00f6ntemleri ortalama (mean), medyan (median) veya mod (mode) kullanmakt\u0131r. Medyan, ayk\u0131r\u0131 de\u011ferlerden daha az etkilendi\u011fi i\u00e7in genellikle daha sa\u011flam bir se\u00e7enektir. Kategorik s\u00fctunlar i\u00e7in ise en s\u0131k ge\u00e7en de\u011feri (mod) kullanmak veya yeni bir kategori (&#8220;Bilinmiyor&#8221; gibi) eklemek tercih edilebilir.<\/p>\n<div class=\"code-container\">\n<pre><code>\nimport pandas as pd\nimport numpy as np\n\n# \u00d6rnek bir DataFrame olu\u015ftural\u0131m\ndata = {'S\u00fctun1': [1, 2, np.nan, 4, 5],\n        'S\u00fctun2': ['A', 'B', 'A', np.nan, 'C'],\n        'S\u00fctun3': [10, 20, 30, 1000, 40]}\ndf = pd.DataFrame(data)\n\nprint(\"Eksik de\u011ferler \u00f6ncesi DataFrame:\")\nprint(df)\nprint(\"\\nEksik de\u011fer say\u0131lar\u0131:\")\nprint(df.isnull().sum())\n\n# Say\u0131sal s\u00fctun i\u00e7in ortalama ile doldurma\ndf['S\u00fctun1'].fillna(df['S\u00fctun1'].mean(), inplace=True)\n\n# Kategorik s\u00fctun i\u00e7in mod ile doldurma\ndf['S\u00fctun2'].fillna(df['S\u00fctun2'].mode()[0], inplace=True)\n\nprint(\"\\nEksik de\u011ferler sonras\u0131 DataFrame:\")\nprint(df)\n      <\/code><\/pre>\n<\/p><\/div>\n<p>Yukar\u0131daki \u00f6rnekte, <code>S\u00fctun1<\/code>&#8216;deki eksik de\u011feri ortalama ile, <code>S\u00fctun2<\/code>&#8216;deki eksik de\u011feri ise en s\u0131k ge\u00e7en de\u011fer (mod) ile doldurduk. Bu, veri setimizin b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc korurken eksiklikleri giderir.<\/p>\n<h4>Ayk\u0131r\u0131 De\u011ferleri Tespit Etme ve Y\u00f6netme<\/h4>\n<p>Ayk\u0131r\u0131 de\u011ferler, modelinizin \u00f6\u011frenme s\u00fcrecini olumsuz etkileyebilir. Bu de\u011ferleri tespit etmek i\u00e7in genellikle g\u00f6rselle\u015ftirmeler (kutu grafikleri) ve istatistiksel y\u00f6ntemler kullan\u0131l\u0131r. Kutu grafikleri, bir s\u00fctundaki ayk\u0131r\u0131 de\u011ferleri g\u00f6rsel olarak belirlemenin en kolay yollar\u0131ndan biridir. \u0130statistiksel olarak, Z-skoru (verinin ortalamadan ka\u00e7 standart sapma uzakta oldu\u011funu g\u00f6sterir) veya IQR (Interquartile Range &#8211; \u00c7eyrekler Aras\u0131 Aral\u0131k) y\u00f6ntemi kullan\u0131labilir. IQR y\u00f6ntemi, verinin %25&#8217;i (Q1) ile %75&#8217;i (Q3) aras\u0131ndaki aral\u0131\u011f\u0131 kullanarak alt ve \u00fcst s\u0131n\u0131rlar\u0131 belirler. Bu s\u0131n\u0131rlar\u0131n d\u0131\u015f\u0131ndaki de\u011ferler ayk\u0131r\u0131 kabul edilir.<\/p>\n<div class=\"code-container\">\n<pre><code>\n# IQR y\u00f6ntemi ile ayk\u0131r\u0131 de\u011fer tespiti ve y\u00f6netimi\nQ1 = df['S\u00fctun3'].quantile(0.25)\nQ3 = df['S\u00fctun3'].quantile(0.75)\nIQR = Q3 - Q1\n\nlower_bound = Q1 - 1.5 * IQR\nupper_bound = Q3 + 1.5 * IQR\n\n# Ayk\u0131r\u0131 de\u011ferleri filtreleme (\u00f6rne\u011fin, \u00fcst s\u0131n\u0131rdan b\u00fcy\u00fck olanlar\u0131 \u00fcst s\u0131n\u0131ra e\u015fitleme)\ndf['S\u00fctun3'] = np.where(df['S\u00fctun3'] > upper_bound, upper_bound, df['S\u00fctun3'])\ndf['S\u00fctun3'] = np.where(df['S\u00fctun3'] < lower_bound, lower_bound, df['S\u00fctun3'])\n\nprint(\"\\nAyk\u0131r\u0131 de\u011ferler sonras\u0131 S\u00fctun3:\")\nprint(df['S\u00fctun3'])\n      <\/code><\/pre>\n<\/p><\/div>\n<p>Bu kod blo\u011funda, <code>S\u00fctun3<\/code>'teki ayk\u0131r\u0131 de\u011ferleri IQR y\u00f6ntemini kullanarak tespit ettik ve bu de\u011ferleri \u00fcst veya alt s\u0131n\u0131ra e\u015fitleyerek y\u00f6netmi\u015f olduk. Ayk\u0131r\u0131 de\u011ferleri tamamen silmek yerine bu \u015fekilde s\u0131n\u0131rlamak, veri kayb\u0131n\u0131 minimize eder.<\/p>\n<h4>Tekrarlayan Kay\u0131tlar\u0131 Kald\u0131rma<\/h4>\n<p>Veri setinizdeki tekrarlayan kay\u0131tlar, modelinize gereksiz a\u011f\u0131rl\u0131k verir ve a\u015f\u0131r\u0131 \u00f6\u011frenmeye yol a\u00e7abilir. Pandas, bu kay\u0131tlar\u0131 kolayca tespit etmenizi ve kald\u0131rman\u0131z\u0131 sa\u011flar. <code>df.duplicated()<\/code> metodu tekrarlayan sat\u0131rlar\u0131 bulurken, <code>df.drop_duplicates()<\/code> metodu bu sat\u0131rlar\u0131 veri setinizden kald\u0131r\u0131r.<\/p>\n<div class=\"code-container\">\n<pre><code>\n# \u00d6rnek DataFrame'e tekrarlayan sat\u0131r ekleyelim\ndf_dup = pd.DataFrame({'ID': [1, 2, 3, 1, 4],\n                       'De\u011fer': ['A', 'B', 'C', 'A', 'D']})\n\nprint(\"\\nTekrarlayan kay\u0131tlar \u00f6ncesi DataFrame:\")\nprint(df_dup)\n\n# Tekrarlayan kay\u0131tlar\u0131 kald\u0131rma\ndf_dup.drop_duplicates(inplace=True)\n\nprint(\"\\nTekrarlayan kay\u0131tlar sonras\u0131 DataFrame:\")\nprint(df_dup)\n      <\/code><\/pre>\n<\/p><\/div>\n<p><code>inplace=True<\/code> parametresi, de\u011fi\u015fikliklerin orijinal DataFrame \u00fczerinde yap\u0131lmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>Veri Tutars\u0131zl\u0131klar\u0131n\u0131 Giderme ve Veri Tiplerini Do\u011frulama<\/h4>\n<p>Veri tutars\u0131zl\u0131klar\u0131, ayn\u0131 bilginin farkl\u0131 \u015fekillerde temsil edilmesinden kaynaklan\u0131r. \u00d6rne\u011fin, \"evet\", \"Evet\", \"EVET\" gibi farkl\u0131 b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf kullan\u0131mlar\u0131 veya \"\u0130stanbul\", \"ist.\" gibi k\u0131saltmalar. Bu t\u00fcr sorunlar\u0131 gidermek i\u00e7in metin temizleme teknikleri kullan\u0131r\u0131z: t\u00fcm metinleri k\u00fc\u00e7\u00fck harfe \u00e7evirme (<code>.str.lower()<\/code>), gereksiz bo\u015fluklar\u0131 kald\u0131rma (<code>.str.strip()<\/code>) ve hatta d\u00fczenli ifadeler (regular expressions) kullanarak belirli desenleri standartla\u015ft\u0131rma. Tarih ve saat verileri i\u00e7in de benzer \u015fekilde standart formatlara d\u00f6n\u00fc\u015ft\u00fcrmek (<code>pd.to_datetime()<\/code>) \u00f6nemlidir.<\/p>\n<p>Veri tiplerinin do\u011fru olmas\u0131 da kritik \u00f6neme sahiptir. Say\u0131sal olmas\u0131 gereken bir s\u00fctunun metin olarak depolanmas\u0131, matematiksel i\u015flemleri engeller. <code>df['s\u00fctun'].astype(int)<\/code> veya <code>pd.to_numeric()<\/code> gibi fonksiyonlarla veri tiplerini do\u011fru formata d\u00f6n\u00fc\u015ft\u00fcrebilirsiniz. \u00d6zellikle say\u0131sal s\u00fctunlarda \"N\/A\" veya \"-\" gibi metin de\u011ferleri varsa, bunlar\u0131 \u00f6nce eksik de\u011fer (<code>np.nan<\/code>) olarak i\u015faretleyip sonra doldurma veya silme i\u015flemi yapman\u0131z gerekebilir.<\/p>\n<div class=\"code-container\">\n<pre><code>\n# \u00d6rnek bir metin s\u00fctunu olu\u015ftural\u0131m\ndf_text = pd.DataFrame({'\u015eehir': [' \u0130stanbul ', 'Ankara', '\u0130STANBUL', 'izmir ', ' ankara']})\n\nprint(\"\\nMetin temizli\u011fi \u00f6ncesi DataFrame:\")\nprint(df_text)\n\n# Metinleri k\u00fc\u00e7\u00fck harfe \u00e7evirme ve bo\u015fluklar\u0131 kald\u0131rma\ndf_text['\u015eehir'] = df_text['\u015eehir'].str.lower().str.strip()\n\nprint(\"\\nMetin temizli\u011fi sonras\u0131 DataFrame:\")\nprint(df_text)\n\n# Veri tipi d\u00f6n\u00fc\u015ft\u00fcrme \u00f6rne\u011fi (e\u011fer 'S\u00fctun1' string olsayd\u0131)\n# df['S\u00fctun1'] = pd.to_numeric(df['S\u00fctun1'], errors='coerce') # Hatal\u0131 de\u011ferleri NaN yapar\n# df['S\u00fctun1'].fillna(df['S\u00fctun1'].mean(), inplace=True) # Sonra eksik de\u011ferleri doldur\n      <\/code><\/pre>\n<\/p><\/div>\n<p>Bu ad\u0131mlar, veri setinizin \"konu\u015ftu\u011fu dili\" standartla\u015ft\u0131rarak modelin daha tutarl\u0131 ve do\u011fru bir \u015fekilde \u00f6\u011frenmesini sa\u011flar. Her bir ad\u0131m, veri setinizin kalitesini art\u0131rmak ve makine \u00f6\u011frenimi modelinizin ba\u015far\u0131s\u0131n\u0131 g\u00fcvence alt\u0131na almak i\u00e7in at\u0131lan \u00f6nemli bir basamakt\u0131r.<\/p>\n<h3>Ger\u00e7ek D\u00fcnya Senaryosu: Bir E-Ticaret Veri Seti \u00dczerine Vaka Analizi<\/h3>\n<p>Teorik bilgileri peki\u015ftirmek i\u00e7in, ilk makine \u00f6\u011frenimi projemden esinlenerek kurgulad\u0131\u011f\u0131m bir e-ticaret veri seti senaryosunu inceleyelim. Bu senaryo, bir \u00fcr\u00fcn tavsiye sistemi geli\u015ftirmek isteyen k\u00fc\u00e7\u00fck bir e-ticaret platformunun kar\u015f\u0131la\u015ft\u0131\u011f\u0131 veri temizli\u011fi zorluklar\u0131n\u0131 ve bu zorluklar\u0131n nas\u0131l a\u015f\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6zler \u00f6n\u00fcne seriyor. Projenin amac\u0131, m\u00fc\u015fterilerin ge\u00e7mi\u015f al\u0131\u015fveri\u015f ve yorum ge\u00e7mi\u015flerine dayanarak onlara ki\u015fiselle\u015ftirilmi\u015f \u00fcr\u00fcn \u00f6nerileri sunmakt\u0131. Ancak elimizdeki ham veri seti, beklendi\u011fi gibi \"m\u00fckemmel\" olmaktan \u00e7ok uzakt\u0131.<\/p>\n<p>Veri seti, a\u015fa\u011f\u0131daki temel s\u00fctunlar\u0131 i\u00e7eriyordu: <code>M\u00fc\u015fteriID<\/code>, <code>\u00dcr\u00fcnAd\u0131<\/code>, <code>Kategori<\/code>, <code>Fiyat<\/code>, <code>De\u011ferlendirme<\/code>, <code>YorumMetni<\/code> ve <code>Sat\u0131\u015fTarihi<\/code>. \u0130lk EDA (Ke\u015fif\u00e7i Veri Analizi) a\u015famas\u0131nda, veri setinin yakla\u015f\u0131k 50.000 sat\u0131rdan olu\u015ftu\u011funu ve bir\u00e7ok potansiyel sorunu bar\u0131nd\u0131rd\u0131\u011f\u0131n\u0131 fark ettik.<\/p>\n<h4>Kar\u015f\u0131la\u015f\u0131lan Sorunlar ve \u00c7\u00f6z\u00fcmleri:<\/h4>\n<ol>\n<li>\n            <strong>Eksik Fiyatlar ve De\u011ferlendirmeler:<\/strong><\/p>\n<ul>\n<li><strong>Sorun:<\/strong> <code>Fiyat<\/code> s\u00fctununda %7, <code>De\u011ferlendirme<\/code> s\u00fctununda ise %12 oran\u0131nda eksik de\u011fer vard\u0131. Bu eksiklikler, \u00fcr\u00fcnlerin ortalama fiyat\u0131n\u0131 veya m\u00fc\u015fteri memnuniyetini do\u011fru bir \u015fekilde analiz etmemizi engelliyordu.<\/li>\n<li><strong>\u00c7\u00f6z\u00fcm:<\/strong> <code>Fiyat<\/code> s\u00fctunu say\u0131sal bir de\u011fer oldu\u011fu i\u00e7in, bu s\u00fctundaki eksik de\u011ferleri \u00fcr\u00fcn kategorisine g\u00f6re medyan fiyat ile doldurmaya karar verdik. Medyan, ayk\u0131r\u0131 de\u011ferlerden daha az etkilendi\u011fi i\u00e7in ortalamaya tercih edildi. <code>De\u011ferlendirme<\/code> s\u00fctununda ise, eksik de\u011ferleri doldurmak yerine, bu de\u011ferleri i\u00e7eren sat\u0131rlar\u0131 sildik. \u00c7\u00fcnk\u00fc bir \u00fcr\u00fcn\u00fcn de\u011ferlendirmesinin olmamas\u0131, o \u00fcr\u00fcn\u00fcn tavsiye sistemindeki a\u011f\u0131rl\u0131\u011f\u0131n\u0131 d\u00fc\u015f\u00fcrebilir ve rastgele bir de\u011ferle doldurmak yan\u0131lt\u0131c\u0131 olabilirdi.<\/li>\n<\/ul>\n<div class=\"code-container\">\n<pre><code>\n# Fiyat s\u00fctununu kategori baz\u0131nda medyan ile doldurma\ndf['Fiyat'] = df.groupby('Kategori')['Fiyat'].transform(lambda x: x.fillna(x.median()))\n\n# De\u011ferlendirme s\u00fctunundaki eksik de\u011ferleri i\u00e7eren sat\u0131rlar\u0131 silme\ndf.dropna(subset=['De\u011ferlendirme'], inplace=True)\n              <\/code><\/pre>\n<\/p><\/div>\n<\/li>\n<li>\n            <strong>Farkl\u0131 Para Birimi Formatlar\u0131:<\/strong><\/p>\n<ul>\n<li><strong>Sorun:<\/strong> <code>Fiyat<\/code> s\u00fctununda baz\u0131 de\u011ferler \"150 TL\", baz\u0131lar\u0131 \"250.00\", baz\u0131lar\u0131 ise \"300$\" gibi farkl\u0131 para birimi sembolleri ve formatlarla girilmi\u015fti. Bu, s\u00fctunun say\u0131sal bir tip olarak i\u015flenmesini engelliyordu.<\/li>\n<li><strong>\u00c7\u00f6z\u00fcm:<\/strong> \u0130lk olarak, t\u00fcm para birimi sembollerini (TL, $, \u20ac vb.) ve binlik ayra\u00e7lar\u0131n\u0131 (nokta veya virg\u00fcl) kald\u0131rd\u0131k. Ard\u0131ndan, kalan metinleri say\u0131sal tipe d\u00f6n\u00fc\u015ft\u00fcrd\u00fck. Hatal\u0131 d\u00f6n\u00fc\u015f\u00fcmler i\u00e7in <code>errors='coerce'<\/code> parametresini kullanarak bu de\u011ferleri <code>NaN<\/code> (Not a Number) olarak i\u015faretledik ve ard\u0131ndan eksik de\u011fer doldurma ad\u0131mlar\u0131n\u0131 tekrar uygulad\u0131k.<\/li>\n<\/ul>\n<div class=\"code-container\">\n<pre><code>\n# Para birimi sembollerini ve binlik ayra\u00e7lar\u0131n\u0131 temizleme\ndf['Fiyat'] = df['Fiyat'].astype(str).str.replace('[^\\d\\.,]', '', regex=True)\ndf['Fiyat'] = df['Fiyat'].str.replace('.', '', regex=False).str.replace(',', '.', regex=False)\n\n# Say\u0131sal tipe d\u00f6n\u00fc\u015ft\u00fcrme, hatalar\u0131 NaN yapma\ndf['Fiyat'] = pd.to_numeric(df['Fiyat'], errors='coerce')\n\n# D\u00f6n\u00fc\u015f\u00fcm sonras\u0131 olu\u015fabilecek yeni NaN de\u011ferlerini doldurma (\u00f6nceki kategori bazl\u0131 medyan ile)\ndf['Fiyat'] = df.groupby('Kategori')['Fiyat'].transform(lambda x: x.fillna(x.median()))\n              <\/code><\/pre>\n<\/p><\/div>\n<\/li>\n<li>\n            <strong>Yaz\u0131m Hatal\u0131 \u00dcr\u00fcn Adlar\u0131 ve Kategori Tutars\u0131zl\u0131klar\u0131:<\/strong><\/p>\n<ul>\n<li><strong>Sorun:<\/strong> <code>\u00dcr\u00fcnAd\u0131<\/code> ve <code>Kategori<\/code> s\u00fctunlar\u0131nda b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf farkl\u0131l\u0131klar\u0131, gereksiz bo\u015fluklar ve yaz\u0131m hatalar\u0131 bulunuyordu (\"Telefon\", \"telefon\", \"TELEFON\" veya \"Elektronik\", \"Elekrtonik\"). Bu durum, ayn\u0131 \u00fcr\u00fcnlerin veya kategorilerin farkl\u0131ym\u0131\u015f gibi alg\u0131lanmas\u0131na neden oluyordu.<\/li>\n<li><strong>\u00c7\u00f6z\u00fcm:<\/strong> Her iki s\u00fctundaki metin de\u011ferlerini k\u00fc\u00e7\u00fck harfe \u00e7evirdik (<code>.str.lower()<\/code>) ve ba\u015ftaki\/sondaki gereksiz bo\u015fluklar\u0131 kald\u0131rd\u0131k (<code>.str.strip()<\/code>). Daha karma\u015f\u0131k yaz\u0131m hatalar\u0131 i\u00e7in, metin benzerli\u011fi algoritmalar\u0131 (\u00f6rne\u011fin, Levenshtein mesafesi) veya manuel d\u00fczeltmeler uygulad\u0131k.<\/li>\n<\/ul>\n<div class=\"code-container\">\n<pre><code>\n# \u00dcr\u00fcnAd\u0131 ve Kategori s\u00fctunlar\u0131n\u0131 temizleme\ndf['\u00dcr\u00fcnAd\u0131'] = df['\u00dcr\u00fcnAd\u0131'].str.lower().str.strip()\ndf['Kategori'] = df['Kategori'].str.lower().str.strip()\n\n# Kategori isimlerini standartla\u015ft\u0131rma (manuel veya mapping ile)\ncategory_mapping = {'elektrtonik': 'elektronik', 'giysi': 'giyim'}\ndf['Kategori'] = df['Kategori'].replace(category_mapping)\n              <\/code><\/pre>\n<\/p><\/div>\n<\/li>\n<li>\n            <strong>Tekrarlayan Yorumlar:<\/strong><\/p>\n<ul>\n<li><strong>Sorun:<\/strong> Baz\u0131 m\u00fc\u015fterilerin ayn\u0131 \u00fcr\u00fcn hakk\u0131nda birden fazla kez ayn\u0131 yorumu yapt\u0131\u011f\u0131 veya sistem hatas\u0131 nedeniyle ayn\u0131 yorumun tekrarland\u0131\u011f\u0131 durumlar mevcuttu. Bu, tavsiye modelinin belirli \u00fcr\u00fcnleri veya yorumlar\u0131 gereksiz yere \u00f6n plana \u00e7\u0131karmas\u0131na neden olabilirdi.<\/li>\n<li><strong>\u00c7\u00f6z\u00fcm:<\/strong> <code>M\u00fc\u015fteriID<\/code> ve <code>YorumMetni<\/code> s\u00fctunlar\u0131n\u0131 kullanarak tekrarlayan yorumlar\u0131 tespit ettik ve sadece ilk kayd\u0131 tutarak di\u011ferlerini sildik. Bu, veri setimizin benzersiz yorumlarla daha do\u011fru bir temsile sahip olmas\u0131n\u0131 sa\u011flad\u0131.<\/li>\n<\/ul>\n<div class=\"code-container\">\n<pre><code>\n# M\u00fc\u015fteriID ve YorumMetni baz\u0131nda tekrarlayan yorumlar\u0131 kald\u0131rma\ndf.drop_duplicates(subset=['M\u00fc\u015fteriID', 'YorumMetni'], inplace=True)\n              <\/code><\/pre>\n<\/p><\/div>\n<\/li>\n<li>\n            <strong>Yanl\u0131\u015f Tarih Formatlar\u0131:<\/strong><\/p>\n<ul>\n<li><strong>Sorun:<\/strong> <code>Sat\u0131\u015fTarihi<\/code> s\u00fctununda \"GG.AA.YYYY\", \"YYYY-AA-GG\" ve \"AA\/GG\/YYYY\" gibi farkl\u0131 formatlar bulunuyordu. Bu, tarih tabanl\u0131 analizler yapmay\u0131 veya zaman serisi modelleri kullanmay\u0131 imkans\u0131z k\u0131l\u0131yordu.<\/li>\n<li><strong>\u00c7\u00f6z\u00fcm:<\/strong> Pandas'\u0131n <code>pd.to_datetime()<\/code> fonksiyonunu kullanarak t\u00fcm tarihleri standart bir formata d\u00f6n\u00fc\u015ft\u00fcrd\u00fck. Bu fonksiyon, farkl\u0131 formatlar\u0131 otomatik olarak alg\u0131lama yetene\u011fine sahiptir, ancak bazen <code>format<\/code> parametresini belirtmek gerekebilir.<\/li>\n<\/ul>\n<div class=\"code-container\">\n<pre><code>\n# Sat\u0131\u015fTarihi s\u00fctununu datetime objesine d\u00f6n\u00fc\u015ft\u00fcrme\ndf['Sat\u0131\u015fTarihi'] = pd.to_datetime(df['Sat\u0131\u015fTarihi'], errors='coerce')\n\n# D\u00f6n\u00fc\u015f\u00fcmde hata veren (ge\u00e7ersiz tarih) sat\u0131rlar\u0131 silme\ndf.dropna(subset=['Sat\u0131\u015fTarihi'], inplace=True)\n              <\/code><\/pre>\n<\/p><\/div>\n<\/li>\n<\/ol>\n<p>Bu detayl\u0131 temizlik s\u00fcreci sonunda, veri setimiz \u00e7ok daha tutarl\u0131, eksiksiz ve modelleme i\u00e7in uygun hale geldi. Temizlenmi\u015f veri setiyle e\u011fitilen \u00fcr\u00fcn tavsiye modelimiz, ba\u015flang\u0131\u00e7taki ham veriyle e\u011fitilen modele g\u00f6re \u00e7ok daha do\u011fru ve anlaml\u0131 \u00f6neriler sunmaya ba\u015flad\u0131. M\u00fc\u015fteri memnuniyetinde ve sat\u0131\u015flarda g\u00f6zle g\u00f6r\u00fcl\u00fcr bir art\u0131\u015f ya\u015fand\u0131. Bu vaka analizi, veri temizli\u011finin sadece bir \"yap\u0131lmas\u0131 gereken\" g\u00f6rev olmad\u0131\u011f\u0131n\u0131, ayn\u0131 zamanda bir makine \u00f6\u011frenimi projesinin ba\u015far\u0131s\u0131 i\u00e7in stratejik bir yat\u0131r\u0131m oldu\u011funu a\u00e7\u0131k\u00e7a g\u00f6stermektedir.<\/p>\n<h3>\u0130leri D\u00fczey Veri Temizli\u011fi Teknikleri ve P\u00fcf Noktalar\u0131<\/h3>\n<p>Temel veri temizli\u011fi ad\u0131mlar\u0131, \u00e7o\u011fu projenin temelini olu\u015ftururken, baz\u0131 durumlarda daha sofistike tekniklere ihtiya\u00e7 duyulabilir. \u0130lk projemde, belirli metin alanlar\u0131ndaki karma\u015f\u0131kl\u0131klar veya veri kalitesi sorunlar\u0131n\u0131n derinli\u011fi, beni bu ileri d\u00fczey y\u00f6ntemleri ara\u015ft\u0131rmaya ve uygulamaya itti. Bu teknikler, \u00f6zellikle b\u00fcy\u00fck ve karma\u015f\u0131k veri setleriyle \u00e7al\u0131\u015f\u0131rken veri kalitesini maksimize etmek i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h4>D\u00fczenli \u0130fadeler (Regular Expressions) ile Metin Temizli\u011fi<\/h4>\n<p>Metin verileri, genellikle temizli\u011fi en zor olan veri t\u00fcrlerinden biridir. Yaz\u0131m hatalar\u0131, \u00f6zel karakterler, gereksiz say\u0131lar veya farkl\u0131 formatlardaki bilgiler metin s\u00fctunlar\u0131nda yayg\u0131n olarak bulunur. D\u00fczenli ifadeler (regex), bu t\u00fcr karma\u015f\u0131k desenleri tespit etmek ve manip\u00fcle etmek i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. \u00d6rne\u011fin, bir yorum metninden t\u00fcm say\u0131lar\u0131 veya \u00f6zel karakterleri kald\u0131rmak, belirli kelimeleri de\u011fi\u015ftirmek veya e-posta adreslerini ay\u0131klamak i\u00e7in regex kullan\u0131labilir.<\/p>\n<div class=\"code-container\">\n<pre><code>\nimport re\n\ntext_data = [\"Bu \u00fcr\u00fcn harika! Fiyat\u0131 123 TL. #\u00fcr\u00fcn\", \"Servis \u00e7ok k\u00f6t\u00fc :( %20 indirim var.\"]\n\n# T\u00fcm \u00f6zel karakterleri ve say\u0131lar\u0131 kald\u0131rma\ncleaned_text = [re.sub(r'[^a-zA-Z\\s]', '', text).strip() for text in text_data]\nprint(cleaned_text) # \u00c7\u0131kt\u0131: ['Bu \u00fcr\u00fcn harika Fiyat\u0131 TL \u00fcr\u00fcn', 'Servis \u00e7ok k\u00f6t\u00fc indirim var']\n\n# Belirli kelimeleri de\u011fi\u015ftirme\ntext_with_typo = \"Bu bir \u00f6rnk metin.\"\ncorrected_text = re.sub(r'\u00f6rnk', '\u00f6rnek', text_with_typo)\nprint(corrected_text) # \u00c7\u0131kt\u0131: Bu bir \u00f6rnek metin.\n      <\/code><\/pre>\n<\/p><\/div>\n<p>Pandas serileri \u00fczerinde <code>.str.replace()<\/code> metoduyla da regex kullanabilirsiniz, bu da b\u00fcy\u00fck veri setlerinde olduk\u00e7a etkilidir.<\/p>\n<h4>Veri Do\u011frulama Kurallar\u0131 Olu\u015fturma<\/h4>\n<p>B\u00fcy\u00fck ve s\u00fcrekli g\u00fcncellenen veri setlerinde, veri kalitesini s\u00fcrekli olarak izlemek ve yeni gelen verilerin belirli standartlara uygun oldu\u011fundan emin olmak \u00f6nemlidir. Bu, veri do\u011frulama kurallar\u0131 olu\u015fturarak yap\u0131labilir. \u00d6rne\u011fin:<\/p>\n<ul>\n<li><code>Fiyat<\/code> s\u00fctunundaki de\u011ferlerin s\u0131f\u0131rdan b\u00fcy\u00fck olmas\u0131.<\/li>\n<li><code>Ya\u015f<\/code> s\u00fctunundaki de\u011ferlerin 0 ile 100 aras\u0131nda olmas\u0131.<\/li>\n<li><code>E-posta<\/code> adreslerinin ge\u00e7erli bir formatta olmas\u0131.<\/li>\n<li><code>M\u00fc\u015fteriID<\/code>'nin benzersiz olmas\u0131.<\/li>\n<\/ul>\n<p>Bu kurallar, veri setine yeni veri eklendi\u011finde veya mevcut veri g\u00fcncellendi\u011finde otomatik olarak kontrol edilebilir. Hatal\u0131 veriler tespit edildi\u011finde, bunlar d\u00fczeltilebilir veya sistem y\u00f6neticilerine uyar\u0131 g\u00f6nderilebilir. Bu proaktif yakla\u015f\u0131m, veri kalitesi sorunlar\u0131n\u0131n modelinize ula\u015fmadan \u00f6nce tespit edilmesini sa\u011flar.<\/p>\n<h4>Otomatik Veri Temizli\u011fi Ara\u00e7lar\u0131 ve K\u00fct\u00fcphaneleri<\/h4>\n<p>Python ekosistemi, veri temizli\u011fi i\u00e7in zengin k\u00fct\u00fcphaneler sunar. Pandas ve NumPy temel ara\u00e7larken, Scikit-learn'in <code>preprocessing<\/code> mod\u00fcl\u00fc (\u00f6rne\u011fin, <code>StandardScaler<\/code>, <code>MinMaxScaler<\/code>, <code>SimpleImputer<\/code>) eksik de\u011fer doldurma ve \u00f6l\u00e7eklendirme gibi g\u00f6revleri otomatikle\u015ftirmeye yard\u0131mc\u0131 olur. Daha geli\u015fmi\u015f otomasyon i\u00e7in, <code>Great Expectations<\/code> gibi k\u00fct\u00fcphaneler, veri kalitesi beklentileri tan\u0131mlaman\u0131za ve verinizin bu beklentilere uygunlu\u011funu test etmenize olanak tan\u0131r. Bu ara\u00e7lar, \u00f6zellikle b\u00fcy\u00fck ve karma\u015f\u0131k projelerde zaman ve \u00e7aba tasarrufu sa\u011flar.<\/p>\n<h4>Veri Kalitesi Metrikleri<\/h4>\n<p>Veri temizli\u011fi s\u00fcrecinin etkinli\u011fini \u00f6l\u00e7mek i\u00e7in veri kalitesi metrikleri kullanmak \u00f6nemlidir. Bu metrikler, veri setinizin ne kadar \"temiz\" oldu\u011funu nicel olarak de\u011ferlendirmenize yard\u0131mc\u0131 olur. \u00d6rnek metrikler:<\/p>\n<ul>\n<li><strong>Eksiklik Oran\u0131:<\/strong> Her s\u00fctundaki eksik de\u011ferlerin y\u00fczdesi.<\/li>\n<li><strong>Benzersizlik Oran\u0131:<\/strong> Kategorik s\u00fctunlardaki benzersiz de\u011ferlerin toplam de\u011ferlere oran\u0131 (d\u00fc\u015f\u00fck oran tutars\u0131zl\u0131klar\u0131 i\u015faret edebilir).<\/li>\n<li><strong>Tutarl\u0131l\u0131k Oran\u0131:<\/strong> Veri do\u011frulama kurallar\u0131na uyan kay\u0131tlar\u0131n y\u00fczdesi.<\/li>\n<li><strong>Ge\u00e7erlilik Oran\u0131:<\/strong> Belirli bir aral\u0131kta veya formatta olan de\u011ferlerin y\u00fczdesi.<\/li>\n<\/ul>\n<p>Bu metrikleri d\u00fczenli olarak takip etmek, veri temizli\u011fi \u00e7abalar\u0131n\u0131z\u0131n sonu\u00e7lar\u0131n\u0131 g\u00f6rmenizi ve gelecekteki iyile\u015ftirmeler i\u00e7in alanlar\u0131 belirlemenizi sa\u011flar.<\/p>\n<h4>Veri Temizli\u011fi Boru Hatt\u0131 (Pipeline) Olu\u015fturma<\/h4>\n<p>Bir makine \u00f6\u011frenimi projesi genellikle birden fazla veri temizli\u011fi ve \u00f6n i\u015fleme ad\u0131m\u0131 i\u00e7erir. Bu ad\u0131mlar\u0131 ayr\u0131 ayr\u0131 uygulamak yerine, bir boru hatt\u0131 (pipeline) olu\u015fturmak, s\u00fcreci daha d\u00fczenli, tekrarlanabilir ve y\u00f6netilebilir hale getirir. Scikit-learn'in <code>Pipeline<\/code> mod\u00fcl\u00fc, bu ad\u0131mlar\u0131 s\u0131ral\u0131 bir \u015fekilde birle\u015ftirmenizi sa\u011flar. Bu sayede, yeni gelen verileri tek bir komutla t\u00fcm temizleme ve \u00f6n i\u015fleme ad\u0131mlar\u0131ndan ge\u00e7irebilirsiniz. Bu yakla\u015f\u0131m, \u00f6zellikle modelinizi \u00fcretim ortam\u0131na da\u011f\u0131t\u0131rken veya d\u00fczenli olarak g\u00fcncellenen veri setleriyle \u00e7al\u0131\u015f\u0131rken vazge\u00e7ilmezdir.<\/p>\n<div class=\"code-container\">\n<pre><code>\nfrom sklearn.pipeline import Pipeline\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.preprocessing import StandardScaler\n\n# Say\u0131sal s\u00fctunlar i\u00e7in bir boru hatt\u0131\nnumeric_transformer = Pipeline(steps=[\n    ('imputer', SimpleImputer(strategy='median')), # Eksik de\u011ferleri medyan ile doldur\n    ('scaler', StandardScaler()) # Verileri \u00f6l\u00e7eklendir\n])\n\n# Bu boru hatt\u0131n\u0131 bir sonraki a\u015famada (\u00f6rne\u011fin, model e\u011fitimi) kullanabilirsiniz.\n# from sklearn.compose import ColumnTransformer\n# preprocessor = ColumnTransformer(\n#     transformers=[\n#         ('num', numeric_transformer, numeric_features),\n#         ('cat', categorical_transformer, categorical_features)\n#     ])\n      <\/code><\/pre>\n<\/p><\/div>\n<p>Bu ileri d\u00fczey teknikler ve p\u00fcf noktalar\u0131, veri temizli\u011fi becerilerinizi bir \u00fcst seviyeye ta\u015f\u0131yarak daha sa\u011flam, g\u00fcvenilir ve ba\u015far\u0131l\u0131 makine \u00f6\u011frenimi modelleri geli\u015ftirmenize yard\u0131mc\u0131 olacakt\u0131r. Unutmay\u0131n, veri temizli\u011fi dinamik bir s\u00fcre\u00e7tir ve s\u00fcrekli \u00f6\u011frenmeyi gerektirir.<\/p>\n<h3>Veri Temizli\u011finin Makine \u00d6\u011frenimi Modelleri \u00dczerindeki Etkisi: Bir \u00d6rnek<\/h3>\n<p>Veri temizli\u011finin \u00f6nemini teorik olarak anlamak bir \u015fey, ancak bunun model performans\u0131 \u00fczerindeki somut etkisini g\u00f6rmek bamba\u015fka bir \u015feydir. \u0130lk makine \u00f6\u011frenimi projemde, bu etkiyi bizzat deneyimledim ve veri temizli\u011fine harcad\u0131\u011f\u0131m her dakikan\u0131n kar\u015f\u0131l\u0131\u011f\u0131n\u0131 fazlas\u0131yla ald\u0131\u011f\u0131m\u0131 g\u00f6rd\u00fcm. Bir \u00f6nceki e-ticaret senaryomuzdan yola \u00e7\u0131karak, temizlenmi\u015f ve temizlenmemi\u015f veri setlerinin bir s\u0131n\u0131fland\u0131rma modeli \u00fczerindeki etkisini basit bir \u00f6rnekle inceleyelim.<\/p>\n<p>Senaryomuzda, m\u00fc\u015fterilerin \u00fcr\u00fcn sat\u0131n al\u0131p almayaca\u011f\u0131n\u0131 (ikili s\u0131n\u0131fland\u0131rma: 0 = sat\u0131n almaz, 1 = sat\u0131n al\u0131r) tahmin eden bir model geli\u015ftirdi\u011fimizi varsayal\u0131m. Veri setimiz <code>Ya\u015f<\/code>, <code>Gelir<\/code>, <code>\u00dcr\u00fcnKategorisi<\/code> ve <code>Sat\u0131nAlma<\/code> (hedef de\u011fi\u015fken) s\u00fctunlar\u0131ndan olu\u015fuyor. Ba\u015flang\u0131\u00e7taki ham veri setimizde \u015fu sorunlar var:<\/p>\n<ul>\n<li><code>Ya\u015f<\/code> s\u00fctununda baz\u0131 eksik de\u011ferler ve ayk\u0131r\u0131 de\u011ferler (\u00f6rne\u011fin, 200 ya\u015f\u0131nda bir m\u00fc\u015fteri).<\/li>\n<li><code>Gelir<\/code> s\u00fctununda eksik de\u011ferler ve metin format\u0131nda girilmi\u015f (\u00f6rne\u011fin, \"50k\", \"yok\") baz\u0131 de\u011ferler.<\/li>\n<li><code>\u00dcr\u00fcnKategorisi<\/code> s\u00fctununda tutars\u0131z b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf kullan\u0131mlar\u0131 (\"Elektronik\", \"elektronik\", \"Elktrnk\").<\/li>\n<\/ul>\n<h4>Temizlenmemi\u015f Veri ile Model E\u011fitimi<\/h4>\n<p>\u0130lk olarak, bu ham veri setini do\u011frudan bir lojistik regresyon modeline besleyelim (eksik de\u011ferleri otomatik olarak ele almak i\u00e7in baz\u0131 k\u00fct\u00fcphaneler varsay\u0131lan doldurma yapabilir veya hata verebilir, biz basitlik ad\u0131na k\u00fct\u00fcphanenin varsay\u0131lan davran\u0131\u015f\u0131na g\u00fcvenelim).<\/p>\n<div class=\"code-container\">\n<pre><code>\nimport pandas as pd\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.metrics import accuracy_score, precision_score, recall_score\nfrom sklearn.preprocessing import LabelEncoder\n\n# Ham (temizlenmemi\u015f) veri seti olu\u015ftural\u0131m\ndata_raw = {\n    'Ya\u015f': [25, 30, None, 40, 50, 200, 35, 28, 45, 55],\n    'Gelir': ['50000', '60000', 'Yok', '75000', '80000', '100000', '65000', '55000', '70000', None],\n    '\u00dcr\u00fcnKategorisi': ['Elektronik', 'Giyim', 'elektronik', 'Ev Aletleri', 'Giyim', 'Elektronik', 'Ev Aletleri', 'Giyim', 'Elektronik', 'Giyim'],\n    'Sat\u0131nAlma': [0, 1, 0, 1, 1, 0, 1, 0, 1, 0]\n}\ndf_raw = pd.DataFrame(data_raw)\n\n# Kategori s\u00fctununu say\u0131sal hale getirelim (Label Encoding)\nle = LabelEncoder()\ndf_raw['\u00dcr\u00fcnKategorisi_Encoded'] = le.fit_transform(df_raw['\u00dcr\u00fcnKategorisi'])\n\n# Eksik de\u011ferleri ve metinleri ele almadan do\u011frudan model e\u011fitimi (hata verebilir veya k\u00f6t\u00fc sonu\u00e7lar \u00fcretir)\n# Ger\u00e7ek senaryoda bu ad\u0131m hatalara yol a\u00e7ar, burada basitle\u015ftirilmi\u015f bir g\u00f6sterim yap\u0131yoruz.\n# df_raw['Ya\u015f'] ve df_raw['Gelir'] s\u00fctunlar\u0131nda sorunlar var.\n# Bu \u00f6rnekte, NaN de\u011ferler ve string 'Yok' de\u011ferleri nedeniyle do\u011frudan model \u00e7al\u0131\u015fmayabilir.\n# Bu y\u00fczden, bu k\u0131sm\u0131 sadece conceptual olarak b\u0131rak\u0131p, temizlenmi\u015f veriye odaklanal\u0131m.\n\n# Ger\u00e7ekte, ham veri ile model e\u011fitmek i\u00e7in bile en az\u0131ndan NaN de\u011ferleri doldurmak gerekir.\n# Basit bir doldurma yapal\u0131m ki model \u00e7al\u0131\u015fabilsin, ancak bu \"temizlenmemi\u015f\" hali temsil etsin.\ndf_raw_for_model = df_raw.copy()\ndf_raw_for_model['Ya\u015f'].fillna(df_raw_for_model['Ya\u015f'].mean(), inplace=True)\ndf_raw_for_model['Gelir'] = pd.to_numeric(df_raw_for_model['Gelir'], errors='coerce')\ndf_raw_for_model['Gelir'].fillna(df_raw_for_model['Gelir'].mean(), inplace=True)\n\nX_raw = df_raw_for_model[['Ya\u015f', 'Gelir', '\u00dcr\u00fcnKategorisi_Encoded']]\ny_raw = df_raw_for_model['Sat\u0131nAlma']\n\nX_train_raw, X_test_raw, y_train_raw, y_test_raw = train_test_split(X_raw, y_raw, test_size=0.3, random_state=42)\n\nmodel_raw = LogisticRegression(solver='liblinear')\nmodel_raw.fit(X_train_raw, y_train_raw)\ny_pred_raw = model_raw.predict(X_test_raw)\n\nprint(\"--- Temizlenmemi\u015f Veri ile Model Performans\u0131 ---\")\nprint(f\"Do\u011fruluk (Accuracy): {accuracy_score(y_test_raw, y_pred_raw):.2f}\")\nprint(f\"Hassasiyet (Precision): {precision_score(y_test_raw, y_pred_raw):.2f}\")\nprint(f\"Geri \u00c7a\u011f\u0131rma (Recall): {recall_score(y_test_raw, y_pred_raw):.2f}\")\n      <\/code><\/pre>\n<\/p><\/div>\n<p>Yukar\u0131daki kod \u00e7\u0131kt\u0131s\u0131, ham veriyle e\u011fitilen modelin d\u00fc\u015f\u00fck performans sergiledi\u011fini g\u00f6sterecektir. \u00d6zellikle k\u00fc\u00e7\u00fck veri setlerinde bu t\u00fcr hatalar \u00e7ok belirgin olabilir. <code>Ya\u015f<\/code> s\u00fctunundaki ayk\u0131r\u0131 de\u011fer (200), <code>Gelir<\/code> s\u00fctunundaki 'Yok' metni ve kategori tutars\u0131zl\u0131klar\u0131 modelin \u00f6\u011frenmesini bozacakt\u0131r. Model, bu \"g\u00fcr\u00fclt\u00fcy\u00fc\" ger\u00e7ek desenlerden ay\u0131rt etmekte zorlan\u0131r.<\/p>\n<h4>Temizlenmi\u015f Veri ile Model E\u011fitimi<\/h4>\n<p>\u015eimdi, yukar\u0131daki veri temizli\u011fi ad\u0131mlar\u0131n\u0131 uygulayarak veri setini haz\u0131rlayal\u0131m:<\/p>\n<ul>\n<li><code>Ya\u015f<\/code>: Eksik de\u011ferleri medyan ile doldur, 100 ya\u015f\u0131ndan b\u00fcy\u00fck ayk\u0131r\u0131 de\u011ferleri 100 ile s\u0131n\u0131rla.<\/li>\n<li><code>Gelir<\/code>: 'Yok' gibi metinleri <code>NaN<\/code>'e \u00e7evir, eksik de\u011ferleri medyan ile doldur.<\/li>\n<li><code>\u00dcr\u00fcnKategorisi<\/code>: K\u00fc\u00e7\u00fck harfe \u00e7evir, bo\u015fluklar\u0131 kald\u0131r ve standartla\u015ft\u0131r.<\/li>\n<\/ul>\n<div class=\"code-container\">\n<pre><code>\n# Temizlenmi\u015f veri seti olu\u015ftural\u0131m\ndf_cleaned = df_raw.copy()\n\n# 1. Ya\u015f s\u00fctunu temizli\u011fi\ndf_cleaned['Ya\u015f'].fillna(df_cleaned['Ya\u015f'].median(), inplace=True)\ndf_cleaned['Ya\u015f'] = df_cleaned['Ya\u015f'].apply(lambda x: min(x, 100)) # Ayk\u0131r\u0131 de\u011ferleri s\u0131n\u0131rla\n\n# 2. Gelir s\u00fctunu temizli\u011fi\ndf_cleaned['Gelir'] = df_cleaned['Gelir'].replace('Yok', np.nan)\ndf_cleaned['Gelir'] = pd.to_numeric(df_cleaned['Gelir'], errors='coerce')\ndf_cleaned['Gelir'].fillna(df_cleaned['Gelir'].median(), inplace=True)\n\n# 3. \u00dcr\u00fcnKategorisi s\u00fctunu temizli\u011fi\ndf_cleaned['\u00dcr\u00fcnKategorisi'] = df_cleaned['\u00dcr\u00fcnKategorisi'].str.lower().str.strip()\ncategory_mapping = {'elektrnk': 'elektronik'} # Varsay\u0131msal bir yaz\u0131m hatas\u0131 d\u00fczeltmesi\ndf_cleaned['\u00dcr\u00fcnKategorisi'] = df_cleaned['\u00dcr\u00fcnKategorisi'].replace(category_mapping)\ndf_cleaned['\u00dcr\u00fcnKategorisi_Encoded'] = le.fit_transform(df_cleaned['\u00dcr\u00fcnKategorisi']) # Tekrar encode et\n\nX_cleaned = df_cleaned[['Ya\u015f', 'Gelir', '\u00dcr\u00fcnKategorisi_Encoded']]\ny_cleaned = df_cleaned['Sat\u0131nAlma']\n\nX_train_cleaned, X_test_cleaned, y_train_cleaned, y_test_cleaned = train_test_split(X_cleaned, y_cleaned, test_size=0.3, random_state=42)\n\nmodel_cleaned = LogisticRegression(solver='liblinear')\nmodel_cleaned.fit(X_train_cleaned, y_train_cleaned)\ny_pred_cleaned = model_cleaned.predict(X_test_cleaned)\n\nprint(\"\\n--- Temizlenmi\u015f Veri ile Model Performans\u0131 ---\")\nprint(f\"Do\u011fruluk (Accuracy): {accuracy_score(y_test_cleaned, y_pred_cleaned):.2f}\")\nprint(f\"Hassasiyet (Precision): {precision_score(y_test_cleaned, y_pred_cleaned):.2f}\")\nprint(f\"Geri \u00c7a\u011f\u0131rma (Recall): {recall_score(y_test_cleaned, y_pred_cleaned):.2f}\")\n      <\/code><\/pre>\n<\/p><\/div>\n<p>Bu \u00f6rnekte, k\u00fc\u00e7\u00fck bir veri setiyle bile temizlenmi\u015f veriyle e\u011fitilen modelin performans metriklerinde (do\u011fruluk, hassasiyet, geri \u00e7a\u011f\u0131rma) g\u00f6zle g\u00f6r\u00fcl\u00fcr bir iyile\u015fme oldu\u011funu fark edeceksiniz. Ayk\u0131r\u0131 de\u011ferler ve tutars\u0131zl\u0131klar giderildi\u011finde, model daha anlaml\u0131 desenleri \u00f6\u011frenebilir ve daha g\u00fcvenilir tahminler yapabilir. \u00d6zellikle hassasiyet (precision) ve geri \u00e7a\u011f\u0131rma (recall) metrikleri, modelin yanl\u0131\u015f pozitif ve yanl\u0131\u015f negatif tahminler yapma e\u011filimini g\u00f6sterdi\u011finden, i\u015f kararlar\u0131 i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<p>Bu kar\u015f\u0131la\u015ft\u0131rma, veri temizli\u011finin sadece bir \"\u00f6neri\" de\u011fil, ba\u015far\u0131l\u0131 bir makine \u00f6\u011frenimi projesinin temel ta\u015f\u0131 oldu\u011funu a\u00e7\u0131k\u00e7a ortaya koymaktad\u0131r. Kirli veriyle harcanan zaman, yanl\u0131\u015f sonu\u00e7lara ve yan\u0131lt\u0131c\u0131 i\u015f kararlar\u0131na yol a\u00e7abilirken, temiz veriye yap\u0131lan yat\u0131r\u0131m, modelinizin potansiyelini tam olarak ortaya \u00e7\u0131kar\u0131r ve ger\u00e7ek d\u00fcnyada de\u011fer yaratmas\u0131n\u0131 sa\u011flar. Unutmay\u0131n, modeliniz ne kadar karma\u015f\u0131k veya algoritmalar\u0131n\u0131z ne kadar geli\u015fmi\u015f olursa olsun, beslendi\u011fi verinin kalitesi kadar iyidir.<\/p>\n<h2>Sonu\u00e7: Veri Temizli\u011fi, Ba\u015far\u0131l\u0131 Bir ML Projesinin Temelidir<\/h2>\n<p>\u0130lk makine \u00f6\u011frenimi projemde edindi\u011fim en \u00f6nemli ders, veri temizli\u011finin sadece bir ba\u015flang\u0131\u00e7 ad\u0131m\u0131 de\u011fil, ayn\u0131 zamanda projenin kalbi oldu\u011fuydu. \"\u00c7\u00f6p girer, \u00e7\u00f6p \u00e7\u0131kar\" ilkesi, makine \u00f6\u011frenimi d\u00fcnyas\u0131nda her zaman ge\u00e7erlili\u011fini koruyan bir ger\u00e7ektir. Eksik de\u011ferler, ayk\u0131r\u0131 de\u011ferler, tekrarlayan kay\u0131tlar ve veri tutars\u0131zl\u0131klar\u0131 gibi sorunlar, modelinizin do\u011fru desenleri \u00f6\u011frenmesini engelleyerek yan\u0131lt\u0131c\u0131 sonu\u00e7lara yol a\u00e7abilir. Bu nedenle, modelinizi e\u011fitmeye ba\u015flamadan \u00f6nce veri setinizi titizlikle temizlemek ve haz\u0131rlamak, ba\u015far\u0131l\u0131 bir projenin temelini olu\u015fturur.<\/p>\n<p>Bu makalede, veri temizli\u011finin neden bu kadar \u00f6nemli oldu\u011funu, temel kavramlar\u0131n\u0131, ad\u0131m ad\u0131m nas\u0131l uygulanaca\u011f\u0131n\u0131 ve ger\u00e7ek d\u00fcnya senaryolar\u0131nda kar\u015f\u0131la\u015f\u0131lan sorunlara pratik \u00e7\u00f6z\u00fcmler sunan bir vaka analizini inceledik. Ayr\u0131ca, d\u00fczenli ifadelerden veri do\u011frulama kurallar\u0131na, otomatik ara\u00e7lardan veri kalitesi metriklerine kadar ileri d\u00fczey tekniklere de\u011findik. Son olarak, temizlenmi\u015f ve temizlenmemi\u015f verilerle e\u011fitilen modeller aras\u0131ndaki performans fark\u0131n\u0131 somut bir \u00f6rnekle g\u00f6stererek, veri temizli\u011fine yap\u0131lan yat\u0131r\u0131m\u0131n modelinizin do\u011frulu\u011funu ve g\u00fcvenilirli\u011fini nas\u0131l art\u0131rd\u0131\u011f\u0131n\u0131 vurgulad\u0131k. Unutmay\u0131n, veri bilimcisi veya makine \u00f6\u011frenimi m\u00fchendisi olarak kariyerinizde ilerlerken, en de\u011ferli becerilerinizden biri, veriye ele\u015ftirel bir g\u00f6zle bakmak ve onu modelleme i\u00e7in en uygun hale getirme yetene\u011finiz olacakt\u0131r. Veri temizli\u011fi, bu yetene\u011fin merkezinde yer al\u0131r ve sizi daha ba\u015far\u0131l\u0131 projelere ta\u015f\u0131yacak anahtard\u0131r.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<ol>\n<li>\n            <strong>Veri temizli\u011fi ne kadar s\u00fcrer ve bir projenin ne kadar\u0131n\u0131 kaplar?<\/strong><\/p>\n<p>Veri temizli\u011fi, projenin karma\u015f\u0131kl\u0131\u011f\u0131na ve veri setinin b\u00fcy\u00fckl\u00fc\u011f\u00fcne\/kalitesine ba\u011fl\u0131 olarak b\u00fcy\u00fck \u00f6l\u00e7\u00fcde de\u011fi\u015fir. Genellikle, bir makine \u00f6\u011frenimi projesinde harcanan zaman\u0131n %60 ila %80'i veri toplama, temizleme ve \u00f6n i\u015fleme a\u015famalar\u0131na ayr\u0131l\u0131r. Bu, projenin en zaman al\u0131c\u0131 ama en kritik a\u015famas\u0131d\u0131r.<\/p>\n<\/li>\n<li>\n            <strong>Eksik de\u011ferleri doldurmak (imputation) m\u0131 yoksa silmek mi daha iyidir?<\/strong><\/p>\n<p>Bu, eksik de\u011ferlerin miktar\u0131na, eksikliklerin t\u00fcr\u00fcne ve veri setinin b\u00fcy\u00fckl\u00fc\u011f\u00fcne ba\u011fl\u0131d\u0131r. E\u011fer bir s\u00fctunda \u00e7ok az say\u0131da eksik de\u011fer varsa (genellikle %5'in alt\u0131), ilgili sat\u0131rlar\u0131 silmek kabul edilebilir bir y\u00f6ntem olabilir. Ancak, daha y\u00fcksek oranlarda eksiklik varsa, veri kayb\u0131n\u0131 \u00f6nlemek i\u00e7in doldurma y\u00f6ntemleri (ortalama, medyan, mod, regresyon tabanl\u0131 doldurma vb.) daha uygundur. Her zaman veri setinizi ve eksikliklerin do\u011fas\u0131n\u0131 analiz ederek en uygun karar\u0131 vermelisiniz.<\/p>\n<\/li>\n<li>\n            <strong>Ayk\u0131r\u0131 de\u011ferleri her zaman kald\u0131rmal\u0131 m\u0131y\u0131m?<\/strong><\/p>\n<p>Hay\u0131r, her zaman kald\u0131rmamal\u0131s\u0131n\u0131z. Ayk\u0131r\u0131 de\u011ferler, veri giri\u015f hatalar\u0131ndan kaynaklanabilece\u011fi gibi, ger\u00e7ek ama nadir olaylar\u0131 da temsil edebilir. Ayk\u0131r\u0131 de\u011ferleri kald\u0131rmadan \u00f6nce, bunlar\u0131n neden olu\u015ftu\u011funu anlamaya \u00e7al\u0131\u015fmak \u00f6nemlidir. E\u011fer bir hatadan kaynaklan\u0131yorsa d\u00fczeltilmeli veya kald\u0131r\u0131lmal\u0131d\u0131r. Ancak, de\u011ferli bir bilgiyi temsil ediyorsa (\u00f6rne\u011fin, \u00e7ok y\u00fcksek gelirli bir m\u00fc\u015fteri), bu de\u011ferleri d\u00f6n\u00fc\u015ft\u00fcrmek (logaritmik d\u00f6n\u00fc\u015f\u00fcm) veya modelinizi ayk\u0131r\u0131 de\u011ferlere daha az duyarl\u0131 hale getirmek (rob\u00fcst modeller kullanmak) gibi y\u00f6ntemler daha uygun olabilir.<\/p>\n<\/li>\n<li>\n            <strong>Veri temizli\u011fi i\u00e7in hangi Python k\u00fct\u00fcphanelerini kullanmal\u0131y\u0131m?<\/strong><\/p>\n<p>Pandas, veri manip\u00fclasyonu ve temel temizlik i\u015flemleri i\u00e7in vazge\u00e7ilmezdir. NumPy, say\u0131sal i\u015flemler ve eksik de\u011fer y\u00f6netimi i\u00e7in kullan\u0131l\u0131r. Metin temizli\u011fi i\u00e7in Python'\u0131n yerle\u015fik <code>re<\/code> (regular expressions) mod\u00fcl\u00fc ve NLTK veya SpaCy gibi do\u011fal dil i\u015fleme (NLP) k\u00fct\u00fcphaneleri faydal\u0131d\u0131r. Scikit-learn k\u00fct\u00fcphanesi ise eksik de\u011fer doldurma (<code>SimpleImputer<\/code>), \u00f6l\u00e7eklendirme (<code>StandardScaler<\/code>) ve kategorik veri d\u00f6n\u00fc\u015ft\u00fcrme (<code>OneHotEncoder<\/code>) gibi \u00f6n i\u015fleme ad\u0131mlar\u0131 i\u00e7in g\u00fc\u00e7l\u00fc ara\u00e7lar sunar.<\/p>\n<\/li>\n<li>\n            <strong>Veri temizli\u011fi bir kez mi yap\u0131l\u0131r, yoksa s\u00fcrekli bir s\u00fcre\u00e7 midir?<\/strong><\/p>\n<p>Veri temizli\u011fi, genellikle projenin ba\u015flang\u0131c\u0131nda yo\u011fun bir \u015fekilde yap\u0131l\u0131r, ancak s\u00fcrekli bir s\u00fcre\u00e7tir. \u00d6zellikle veri setiniz zamanla b\u00fcy\u00fcyor veya g\u00fcncelleniyorsa, yeni gelen verilerde de temizlik ad\u0131mlar\u0131n\u0131n uygulanmas\u0131 gerekir. Bu nedenle, veri temizli\u011fi ad\u0131mlar\u0131n\u0131z\u0131 otomatikle\u015ftirilmi\u015f bir boru hatt\u0131na (pipeline) d\u00f6n\u00fc\u015ft\u00fcrmek, veri kalitesini s\u00fcrekli olarak y\u00fcksek tutmak i\u00e7in en iyi yakla\u015f\u0131md\u0131r.<\/p>\n<\/li>\n<\/ol>\n<p>#VeriTemizli\u011fi #Makine\u00d6\u011frenimi #DataPreprocessing #MLProjesi #Python<\/p>\n<div class=\"github-example-link\"><strong>\u00d6rnek kod:<\/strong> <a href=\"https:\/\/github.com\/fatihsoysalcom\/data-cleaning-impact-on-analysis\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/fatihsoysalcom\/data-cleaning-impact-on-analysis<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"\u0130lk makine \u00f6\u011frenimi projenize ba\u015flarken veri temizli\u011finin ne kadar kritik oldu\u011funu merak m\u0131 ediyorsunuz?","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-43607","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>Veri Temizli\u011fi: \u0130lk Makine \u00d6\u011frenimi Projemden \u00d6\u011frendiklerim - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\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\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Veri Temizli\u011fi: \u0130lk Makine \u00d6\u011frenimi Projemden \u00d6\u011frendiklerim\" \/>\n<meta property=\"og:description\" content=\"\u0130lk makine \u00f6\u011frenimi projenize ba\u015flarken veri temizli\u011finin ne kadar kritik oldu\u011funu merak m\u0131 ediyorsunuz?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-25T18:08:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-25T18:08:41+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=\"33 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Veri Temizli\u011fi: \u0130lk Makine \u00d6\u011frenimi Projemden \u00d6\u011frendiklerim\",\"datePublished\":\"2026-07-25T18:08:04+00:00\",\"dateModified\":\"2026-07-25T18:08:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/\"},\"wordCount\":5041,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/\",\"name\":\"Veri Temizli\u011fi: \u0130lk Makine \u00d6\u011frenimi Projemden \u00d6\u011frendiklerim - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-07-25T18:08:04+00:00\",\"dateModified\":\"2026-07-25T18:08:41+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Veri Temizli\u011fi: \u0130lk Makine \u00d6\u011frenimi Projemden \u00d6\u011frendiklerim\"}]},{\"@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":"Veri Temizli\u011fi: \u0130lk Makine \u00d6\u011frenimi Projemden \u00d6\u011frendiklerim - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","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\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/","og_locale":"tr_TR","og_type":"article","og_title":"Veri Temizli\u011fi: \u0130lk Makine \u00d6\u011frenimi Projemden \u00d6\u011frendiklerim","og_description":"\u0130lk makine \u00f6\u011frenimi projenize ba\u015flarken veri temizli\u011finin ne kadar kritik oldu\u011funu merak m\u0131 ediyorsunuz?","og_url":"https:\/\/fatihsoysal.com\/blog\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-07-25T18:08:04+00:00","article_modified_time":"2026-07-25T18:08:41+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"33 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Veri Temizli\u011fi: \u0130lk Makine \u00d6\u011frenimi Projemden \u00d6\u011frendiklerim","datePublished":"2026-07-25T18:08:04+00:00","dateModified":"2026-07-25T18:08:41+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/"},"wordCount":5041,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/","url":"https:\/\/fatihsoysal.com\/blog\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/","name":"Veri Temizli\u011fi: \u0130lk Makine \u00d6\u011frenimi Projemden \u00d6\u011frendiklerim - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-07-25T18:08:04+00:00","dateModified":"2026-07-25T18:08:41+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/veri-temizligi-ilk-makine-ogrenimi-projemden-ogrendiklerim\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Veri Temizli\u011fi: \u0130lk Makine \u00d6\u011frenimi Projemden \u00d6\u011frendiklerim"}]},{"@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\/43607","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=43607"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/43607\/revisions"}],"predecessor-version":[{"id":43608,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/43607\/revisions\/43608"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=43607"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=43607"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=43607"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}