Hazırladığım yeni bir yazılımdan “makale” çıkar mı?


Bu sorunun eski cevabı “hayır” idi. Nitekim, akademi bir yazılımı arkasında kuramsal bir geçmiş olan, hipotez sorusu mevcut ve bir soruya çözüm bulan bir konu olarak görmüyordu, kısmen haklıydı da.

Bu durum bir yazılımın ağzıyla kuş tutsa akademik değerinin olmaması anlamına geliyordu. Ancak geçenlerde Elsevier’in sitesinden tesadüfen karşılaştığım yeni bir “kampanya” artık yazılımların da akademik bir değere dönüşmesine olanak veriyor.

Ve şöyle diyor:

Yazılım geliştiriciler, genellikle normal makaleler, kılavuzlar veya kitaplar gibi proxy’lere akademik olarak tanınmakta güçlük çekerler. Yazılımın şu anda sistematik olarak tam ve eşit bir akademik öğe olarak değerlendirilmediğini düşünüyoruz. Yazılımın, bilimsel iletişim ekosisteminin ayrılmaz bir parçası olması gerektiğine inanıyoruz.

https://www.elsevier.com/authors/author-resources/research-elements/software-articles/original-software-publications

Bu “Orginal Software Publications” kampanyası, bu şekilde çalışmaları olan ben de dahil bir çok kişiye umut kapısı oldu. Bu sayede hazırlanan çalışmalar yeniden ele alınabilir, değerlendirilebilir ve iyi şeylere dönüşebilir.

Akademik Dergiler’de Sıkça Duyacağınız jargonlar


Elsevier’a ait Journal Finder adlı araçla makalenizi hangi dergiye göndermenizin uygun olduğunu bulabilirsiniz. Neticede doğru dergiye göndermek çalışmanızın kabul ihtimalini arttıracaktır. Ancak bu aracı kullanırken bir sürü ölçüt görürsünüz. Bu ölçütleri burada açıklıyorum. Bu yazıda ayrıca bu dergilerde karşılaşabileceğiniz ve epey uzun hikayeleri olan başka jargonları da ele alacağım.

Gold Open Access: Yazarlardan ücret istenilir, dergi tamamen açık erişimlidir. Elbette daha fazla insanın erişimine açık olduğu için daha fazla atıf alma ihtimali yaratır, ama bunun bir bedeli vardır.

Journals with subscription: Yazarlardan istenen bir ücret yoktur (yine de kontrol etmekte fayda vardır). Bu dergiler sadece abonelerine açıktır. Yazarlar ambargo periyodu boyunca çalışmayı tamamen açamazlar.

CiteScore: Bir dergideki bir makalenin son 3 yıl içinde aldığı ortalama atıftır. 3 yıllık ortalama atıf 0 ila 10 arasında olabilir. Bu ölçüt Scopus’a aittir. (Daha fazla olması da olasıdır). Scopus Elsevier’a aittir.

Impact Factor: CiteScore’un bir nevi 2 yıllık versiyonudur. Bu değer Clarivate Analytics tarafından icat edilmişir. Impact factor de genellikle 0 ila 10 yıl arasında olur. (Daha fazla olması da olasıdır)

Time to 1st decision: Elsevier çoğu dergisi için gönderilen makalenin ilk değerlendirmesinin tarih istatistiğini tutar. Bu değer Elsevier için 0 ila 16 hafta arasında görülmektedir. Elbette ilk değerlendirme kabul, ret ya da düzeltme olabilir ve yayına kadar olan tarih değişkendir. Ancak derginin ne kadar hızlı çalıştığını anlamak için göstergedir.

Acceptance Rate: Derginin makale kabul oranıdır. Bu oranlar iyi dergilerde % 5 ila %20 arasındadır.

Nereye Göndermeliyim

  • Çabuk yayınlansın, kaç atıf aldığı önemli değil: O zaman en yüksek hızlı ve kabul oranı yüksek dergiyi seçmek gerekir.
  • Çok atıf alsın: CiteScore ve Impact Factor değerleri yüksek olan dergileri seçmek gereklidir.
  • Makul yaklaşım: CiteScore, Kabul oranı ve ImpactFactor’u yüksek, karar süresi düşük dergileri seçmek gereklidir.

ESCI: https://mjl.clarivate.com/ adresinde bir dergiyi arattığınızda, bu derginin Web of Science collection açıklamasında SCI, SCI Expanded dışında ESCI yani ” Emerging Sources Citation Index” ifadesini de görebilirsiniz. Bu konuda araştırma yaptığımda isa-sari.com adresinde şu açıklayıcı ifadeyi gördüm:

ESCI, Clarivate Analytics (önceden Thomson Reuters) tarafından yayımlanan Web of Science (önceden Web of Knowledge) kapsamındaki bir bilimsel atıf indeksidir. Bu indeks; Science Citation Index Expanded (SCI-Expanded), Social Sciences Citation Index (SSCI), Arts & Humanities Citation Index (AHCI) gibi daha itibarlı indekslerin* bir alt basamağı veya bir gömlek altı olarak tanımlanabilir. Doğal olarak ESCI’ye dâhil olan dergilerin sayısı daha fazla ve bu indekse girmek diğer indekslere kıyasla daha kolay. Açıkçası ESCI, daha çok bölgesel öneme sahip veya gelişmekte olan bilim dalları temelinde makaleler yayımlayan dergileri kapsamayı amaçlıyor.

https://www.isa-sari.com/esci-nedir-nasil-basvuru-yapilir/

ESCI indeksine Türkiye’den de giren dergiler olduğunu öğrenince Web of Science’den “dergisi” anahtar terimi ile arama yaptım ve 82 Türkçe derginin bu indekse girmiş olduğunu gördüm. Link paylaşılamıyor ancak aynı şeyi siz de https://mjl.clarivate.com/ adresinden aratarak bulabilirsiniz.

Short Communications: Elsevier’de bazı dergilerin “short communications” da kabul ediyoruz diye yazdığı görülür. Maksimum 10 sayfa civarı olan bu tip çalışmaları Elsevier resmi olarak şöyle tanımlar:

Short communications, yeni fikirlere, tartışmalı görüşlere, “negatif” sonuçlara ve daha fazlasına yönelik kısa makalelere adanmış yeni bir bölümdür.

https://www.journals.elsevier.com/information-and-software-technology/short-communications

Nelerin short communications olabileceğine dair tartışma için şurayı inceleyebilirsiniz. Özetle short communications henüz tam bir makale olmak üzere gerekli somut sonuçlara veya yorumlara erişmemiş çalışmaları tanımlamaktadır.

Preprint (Ön baskı): Akademik yayıncılıkta, bir önyazı, hakemli bir bilimsel veya bilimsel dergide resmi meslektaş incelemesinden (peer-review) ve yayınlanmasından önceki bilimsel veya bilimsel bir makalenin bir versiyonudur. Ön baskı, genellikle bir dergide bir makalenin yayınlanmasından önce ve / veya sonra ücretsiz olarak temin edilemeyen, yazı tipi olmayan bir sürüm olarak kullanılabilir.

Neden var: Hakemli dergilerde yayınlanan makalelerin yayınlanması, editörlerin ve hakemlerin makaleleri değerlendirmek ve eleştirmek için gerekli zamanları ve yazarların eleştirilere hitap etmeleri için gerekli olan süreleri, genellikle ilk başvuru tarihinden itibaren haftalar, aylar veya hatta yıllar alır. Bilimsel bir topluluk içinde mevcut sonuçları hızlı bir şekilde dağıtma ihtiyacı, araştırmacıları, henüz akran incelemesine tabi olmayan, el yazması olan, ön baskı olarak bilinen belgeleri dağıtmaya yönlendirmiştir. Bu durumdaki literatür gri literatür da olarak tanımlanır. Ön baskıların derhal dağıtılması, yazarların akranlarından erken geri bildirim almalarını sağlar; bu da gönderim için makalelerin gözden geçirilmesinde ve hazırlanmasında yardımcı olabilir.

https://www.wikiwand.com/en/Preprint

Preprint için akademisyenin Google Docs’u kabul edilen Authorea ve ArXiv.org gibi siteler mevcuttur (ArXiv.org sosyal bilimleri kapsamaz). Çalışmalarınızın ön baskı versiyonunu eğer gönderdiğiniz dergi buna mani olduğunu belirtmiyorsa kullanmak, erken geri bildirimler için faydalı olabilir. Authorea preprint versyionlarınızı yayınlamaya ve DOI vermeye olanak vermektedir.

Mesela Elsevier’in Knowledge Based Systems adlı dergisi preprint’in bir preprint sunucusundan (Authorea gibi) yayınlanması halinde makaleyi reddetmeyeceğini şöyle bildirmektedir.


Preprints: Please note that preprints can be shared anywhere at any time, in line with Elsevier’s sharing policy. Sharing your preprints e.g. on a preprint server will not count as prior publication (see ‘Multiple, redundant or concurrent publication’ for more information).

https://www.elsevier.com/journals/knowledge-based-systems/0950-7051?generatepdf=true

Elsevier Yazar Akademisi: Elsevier’in genç akademisyenler için hazırladığı ücretsiz e-öğrenme platformudur: https://researcheracademy.elsevier.com/

Single ve Double Blind Peer Review: Tek kör hakem değerlendirmesinde yazarlar hakemlerin kim olduğunu bilmez ama Hakemler yazarların kim olduğunu bilir. Çift kör hakem değerlendirmesinde, ne yazarlar ne de hakemler birbirlerinin adlarını bilmez. Tek kör hakem incelemesi geleneksel modeldir.

13 Adımda Uluslararası Dergilere Makale Yollama Rehberi


academic journals ile ilgili görsel sonucu"

Uluslararası dergilere akademik çalışmanızı yollamak özen ve sabır isteyen bir iştir. Bu konuda akademik mentörlük sitesi olan AuthorAID üzerinden karşılaştığım ve faydalandığım kişi ve kaynaklar ve özellikle şu podcast ile daha önce farklı kaynaklardan derlediğim tecrübelere göre tüm değerli araştırmacılarımız için şöyle bir rehber hazırladım. Umarım faydalı olur:

1- Makale taslağını yaz, özeti hazırla

2- Makaleyi göndereceğin dergiyi seçmek için şu aracı kullanabilirsin. https://mjl.clarivate.com/mjl-beta/home Bu aracın özelliği, yazdığın taslak makalenin başlığı ve özetine göre en uygun dergiyi bulmaktır. Buna benzer iki araç daha var: Springer Journal Finder: https://journalsuggester.springer.com/ ve Edanz Journal Finder: https://en-author-services.edanzgroup.com/journal-selector

3- Dergi aramayı bir de manuel olarak gerçekleştir, Google Scholar’da anatar terimini (örneğin: text mining) ara ve çıkan makalelerin dergilerini not et. Bu dergilerle bir önceki adımdaki dergileri mukayese et.

4- Göndereceğin dergiyi seç, ancak ret ihtimaline karşı “etki faktörü” (impact factor) daha düşük bir dergi de seç. Mümkünde 4 veya 5 ilgili dergi adlarını al.

5- İlgili dergi sitesine git ve bu dergide ilgilendiğin anahtar terimle ilgili tüm makaleleri listele: örnek

6- Bu listedeki makalelerden en güncel bir kaçını oku, mümkünse diğerlerine de göz at. Ayrıca çalışmanı göndermeden önce istersen bu makaleleri “export” fonksiyonu ile indir ve çalışmanı daha da zenginleştir.

7- Göndermeye karar verdiğin dergi Elsevier’de ise bu derginin değerlendirme ve yayınlama süreleri de vardır.

Bunun için “View More on Journal Insights” linkini tıkla.

8- Süre konusunda problemin varsa daha hızlı değerlendirme yapan dergilere bakabilirsin.

9- Son dergi listeni yap.

10- Göndereceğin ilk dergide “Guidelines for Authors” ya da benzeri bölümlerdeki materyalleri dikkatle oku, derginin yayın politikasını vs. kontrol et, şartları incele, özellikle ücret istenip istenmediğine bak.

11-Makaleni gönderime hazırla

12- 5. adımdaki dergi sitesinde bulduğun makaleri de dikkate alarak, editöre özenle hazırlanmış bir “cover letter” hazırla, çalışmanın neden o dergide yayınlanması konusunda argümanlarını ortaya koy. O dergide alanındaki eski makalelerden de bahset.

13- Makaleni yükle ve cover letter’ini de ekle veya editöre epostala.

Bu kılavuz dışında şunlarada da bakabilirsiniz.

  • Erciyes Üniversitesinde bir çalıştay sunumu
  • Emerald Insihts Türkiye sunumu

Sizin de tecrübeleriniz varsa, paylaşmanızdan ötürü minnetdar olurum.

configR paketi ile R’da konfigürasyon dosyaları yazmak, okumak


Şöyle bir config dosyamız olsun, iki parametremiz var:

[max_allowed_error]
=10

[a]
=10

Bu dosyayı R’da okumak için şöyle yaparız:

library(configr)
#
config <- read.config(file="config.ini")
print(config$max_allowed_error)

Gördüğünüz gibi direkt olarak parametrlerimizi alanımıza çağırdık. Şimdi parametreleri değiştirip config.ini dosyamıza bir daha yazdıralım:

yazilacak_veriler <- list(max_allowed_error =200,a=10)
write.config(yazilacak_veriler,file="config.ini")

Bu durumda config.ini dosyamızı açınca değerlerimiz 200 ve 10 olarak görülecektir.

Bu configR paketi bizi dosya aç, oku gibi işlemler yerine config.ini dosyalarından kolayca okuma yazma yapmamızı sağlar.

INI formatı yerine YAML formatı

Daha pratik olan yaml formatını da kullanabilirsiniz

library(configr)
config <- read.config(file="config.ini",file.type = "yaml")
print(config)

yazilacak_veriler <- list(max_allowed_error =200,starting_id=10)
write.config(yazilacak_veriler,file="config.ini",write.type = "yaml")

Sadece Tek Değişkeni Değiştirikten Sonra Dosyaya Yazmak

Yukarıda her write işleminde tüm değişkenleri yeniden yazmamız gerekirdi, ama aşağıdaki gibi liste parametresini yukarıda tanımlayarak tekli parametre güncellemesinden sonra bunu konfigürasyon dosyasına yazdırabiliriz.

library(configr)

yazilacak_veriler <- list(a=10,b=20)

#ilk yazma
write.config(yazilacak_veriler,file="deneme.yaml",write.type = "yaml",)

config <- read.config(file="deneme.yaml",file.type = "yaml")
print(config)

#sadece tek değişkeni editleme
yazilacak_veriler[['a']] = 10000
write.config(yazilacak_veriler,file="deneme.yaml",write.type = "yaml",)

Hangi Veri Tipine Hangi Grafik Uygundur


Veri analizinde artık sadece çubuk, çizgi ve pasta diyagramla yetinmiyoruz. Heatmap’lar, treemap’lar, sankey diyagramları, network diyagramları gibi bir çok seçenek var. Problem şu ki bu şık diyagramlar her veri tipi ile uyumlu değildir. Çoğu kez analiz yaparken hangi veri tipi ile hangi diyagramın daha açıklayıcı olacağını hatırlamakta güçlük çekebiliriz.

İşte bunun için şu şekilde bir web sayfası var:

https://www.data-to-viz.com/#treemap

Bu web sayfasında elinizdeki veri setine göre grafiğe bakarak karar verebiliyorusunuz. Grafik bir resim değil interaktif bir uygulama, ilgili grafik tipi hakkında veriler ve örnek veri seti var.

Bu sayfayı R ile harika görselleştirmeler yapabileceğimiz şu sayfada görmüştüm:

https://www.r-graph-gallery.com/index.html

Bu sayfada ayrıca interaktif R diyagramları ile R ile animatif diyagramlar hazırlama yolları da anlatılmış.

İyi eğlenceler

RCrawler ile Web Crawling İşlemi


Metin madenciliği yapabilmek için elde büyük miktarda verinin olması gereklidir. Bu miktardaki veriyi ancak ya hazır bulmak ya da web scraping adını verdiğimiz yöntemlerle web sayfalarından derlemek durumundayız. Bu durumda ise Python için kullanılacak scrapy, ve python selenium gibi kütüphanelerin yanında R için Rvest ve scrapeR gibi kütüphaneler bulunmaktadır.

R için Rcrawl adlı bir kütüphane daha bulunmaktadır. Bu kütüphaneyi yeni keşfettim. RCrawl kütüphanesinin diğerlerinden temel farkı scraping işleminde sayfa içerisinde scrape edilecek elementlerin yerlerini CSS veya XPath ile belirleme ihtiyacının olmaması. Bu durum sayfa içinde “iğne” arama külfetinden kurtarıyor. Ayrıca çok ama çok daha kısa kod ile scraping yapmayı sağlıyor.

library(Rcrawler)
Rcrawler(Website = "https://www.sayfa_adi.com/lg-mobile", 
                    no_cores = 4, 
                    no_conn = 4, 
                    crawlZoneCSSPat = c("#gridListView",".pagination"))

ASlında sadece web sayfasını parametre olarak versek de crawler sayfaları derlemeye ve bir klasöre atmaya başlıyor. Ancak bu kütüphanenin (şu adresteki https://github.com/salimk/Rcrawler ) dokümantasyonunda gördüğüm çok iyi özellikler var. Bunlardan en önemlisi no_cores ve no_conn parametreleri bu parametreler aynı anda birden fazla scraping bağlantısı ile hızı arttırıyor.

Bu crawler epey agresif. Sayfada bulduğu her bağlantıyı açarak o bağlantıyı ve altındaki bağlantıları da alıyor. Bu durum daha sonra baş edilmesi güç miktarda ilgili ilgisiz verinin gelmesine neden olabilir. Bunu engellemek için crawlZoneCSSPat parametresi mevcut, bu parametre saydada sadece ilgili CSS selectorü ile tanımlı yerdeki linkleri (mesela haber linki, yorumlar vs.) açıyor, sayfadaki diğer ilgisiz linklere izin vermiyor.

Kütüphane dokümantasyonunda ayrıca URL parametresi ile filtreleme, proxy ekleme, sadece belli bir url listesini indirme gibi özelliklerin yanında sayfalar arası bağlantıları network grafiği ile gösterme gibi harika özellikler de mevcut.

Keyifli kullanımlar…

Artık Script Src denerek Javascript Yazılmıyor


npm ile ilgili görsel sonucu"

Normalde Javascript ile işimiz olduğunda ne yapardık? Eski web uygulama geliştiricileri hatırlayacaklardır. Hatta bir çok genç geliştirici de halen eski yöntemleri sürdürmeye devam ediyor. Çünkü çalışıyor. Nedir bu yöntem:

<script src="kutuphane_1"/>
<script>
//Buraya işlerimizi kodlarız
</script>

Bu kodları HTML dosyamıza koyarız ve çalışır. Buraya kada problem yok. Sonra ne olur, yeni kütüphaneler ekleriz ve scriptlerimiz şöyle olur

<script src="kutuphane_1"/>
<script src="kutuphane_2"/>
<script src="kutuphane_3"/>
<script src="kutuphane_4"/>
<script src="kutuphane_5"/>
<script src="kutuphane_6"/>



<script>
//Buraya işlerimizi kodlarız
</script>

Çorba Hazır!

İşte hikaye ondan sonra başlar, kütüphaneler çakışır, karışır, kodları düzenlerken bilerek bilmeyerek silinir (Ertan abi….!)

Ondan sonra insanlar Javascript’e sövmeye başlar ve Javascript ile harika şekilde halledilebilecek işleri bile garibim sunucu tarafına C#’a veya Java’ya yaptırır.

Oysa kurallar değişmiştir. npm denen mucizevi paket yöneticisi icat olmuş, insanlar aya çıkmıştır ama bir çok kişi bunu görmezden gelmektedir. Haksız sayılmazlar, çünkü sinsi sinsi yayılıp yüzbinden fazla paketi artık bünyesinde barındırmaktadır npm.

NPM nedir?

Visual Studio kullananlar nuget’i, Python kullananlar pip’i, Linux kullananlar apt-get’i bilirler. Komut satırına şunu getir, bunu kur, bunu güncelle deriz. Bu tür araçlar “konsol üzerinden paketlerimizi kurmamıza olanak verir.”

NPM ya da npm.js ise Javascript kütüphanelerinin tamamını barındıran evrensel bir yerdir. Bu kütüphane yardımı ile yukarıdaki gibi eski usülde “srcipt src” satırlarını şiir gibi dizmezsiniz, lazım olanlarını “npm install” komutu yardımı ile indirir, daha sonra browserify adlı araç yardımı ile (elbette bu da bir npm paketidir) hepsini tek bir “bundle.js” dosyasına sıkıştırır ve sayfanızdan sadece tek bir “bundle.js” dosyası çağırırsınız. Tüm paketler güvenle bir arada olur. Her seferinde bu birleştirme işleminini yapmamak için ise watchify adlı paket kullanabilirsiniz. Bu ise sizin ayrı ayrı javascriptlerinizi her kaydedişte otomatik birleştirir.

Haydi Deneyelim

  • Linux kullanıyorsanız “sudo apt-get install npm” komutu ile windows kullanıyorsanız önce ilgili programı kurun. https://www.npmjs.com/get-npm
  • Konsolu açın ve npm yazıp enter’a basın. Eğer çalışırsa npm kurulmuştur.
  • Boş bir klasör açın ve cd komutu ile içine girin
  • Konsolda bu klasörde iken “npm init” komutunu verin.
  • Bu komut bu klasörde package.json adlı paket envanterini yaratır. Bu bir nevi kuracağınız her paketin otomatik olarak listeleneceği yerdir.
  • Şimdi javascript birleştirme aracı browserify’i kurmak için şu komutu verin: npm install -g browserify
  • Klasöre göz atınca node_modules adlı klasör oluştuğunu görürsünüz bu otomatik inen paketlerdir.
  • Şimdi ise denemek için hesap makinesi kütüphanesi olan arithmetic adlı kütüphaneyi indirelim. Bunun için ise npm install –save arithmetic komutunu kullanırız. Burada save parametresi paketin adını daha önce oluşturduğumuz package.json dosyasına yazar.
  • Her şey hazır, şimdi direkt olarak newway.js diye bir dosya oluşturup içerisine aşağıdaki kodları yazalım:
 var arithmetic = require('arithmetic');
 var x = arithmetic.add(2,4);
 console.log("---merhaba---");
 console.log(x);
  • Şimdi ne oluyor diyebilirsiniz? Bu kodları ayrı bir dosyaya yazdık. Bu kodlardaki arithmetic nesnesi için daha önce duymadığımız ‘require’ fonksiyonunu kullandık. Bu yeni Javascript’çenin importu demek.
  • Şimdi browserify yardımı ile bu javascriptimizi sıkıştıracağız.
  • Bunun için konsola: browserify newway.js -o bundle.js Normalde bu zorunlu değildir ancak olması faydalıdır. Bu komut sonrasında bundle.js adlı bir dosyamız oluşur.
  • Şimdi index.html dosyasını açık sadece <script src="bundle.js"> diyerek dosyamızı çağırabiliriz.

Ne Yaptık, Ne Fark Var?

Normalde bu işlem için önce gidip artihmetic kütüphanesini bulup dosyasını indirip daha sonra bu dosyayı “script src” ile html dosyamıza çağıracaktık. Sonra da kendi yazdığımız (içinnde merhaba yazan) newway.js dosyamızı oluşturacaktık, ortada iki js dosyası ve html içinden çağrılan iki js referansı olacaktı. Bu daha fazla js için daha fazla iş demekti.

Yeni yöntemdeki senaryoda ise tek js dosyası mevcut, ayrıca kütüphaneleri indirmek için sitesine gitmek gerekmiyor.

Buna Değer Mi?

npm paketlerini şuradan inceleyebilirsiniz: https://www.npmjs.com/search?q=keywords:packages

Bu paketlerin içersinde daha önce javascript’e yaptırmadığınız onlarca işlevi barındıran süper paketler var. Örneğin resim işlemeden Json içinden sorgu yapmaya, tarihleri şekillendirmeden (moment.js), yapay zeka ile resim tanıma kütüphanelerine kadar “ücretsiz” yüzbinlerce kütüphane var. Emeğinize değer.

Evet bu yazıyı buraya kadar okumuş pek az kişi olacağını biliyorum, o parmaklar ekrandaki yazıları kaydırırken bir çok fırsat kaçıyor 🙂 Buraya kadar okuduysanız da “ehemm” diyip bu yazıyı unutup eski alışkanlıklarınızla kod yazmaya devam edebilirsiniz. Ama konfor zonda kalmak, ilkelliğe razı olmaktır. Daha sonra javascript çakışmaları yaşadığınızda bu yazıyı hatırlayacaksınız:)

Daha detaylı İngilizce bir yazı için: https://medium.com/jeremy-keeshin/hello-world-for-javascript-with-npm-modules-in-the-browser-6020f82d1072

Beğendiniz mi?