İş Zekası Platformu: MongoDB Toplama İşlem Hattını Kullanma Eğitimi
Yayınlanan: 2022-03-11İlginç soruları yanıtlamak için verileri kullanmak, araştırmacıların günümüzün veri odaklı dünyasında yapmakla meşgul oldukları şeydir. Büyük hacimli veriler göz önüne alındığında, onu işlemek ve analiz etmek büyük bir zorluktur; özellikle Hadoop ekosistemi, Spark veya NoSQL veritabanları tarafından sağlanan ve terabaytlarca veriyi dakikalar içinde analiz etmelerine yardımcı olacak iş zekası platformlarını veya teknolojilerini öğrenmeye yatırım yapacak zamanı olmayan istatistikçiler veya veri analistleri için.
Günümüzün normu, araştırmacıların veya istatistikçilerin modellerini R, MATLAB veya Octave gibi analitik paketlerindeki veri alt kümeleri üzerinde oluşturması ve ardından formülleri ve veri işleme adımlarını daha sonra üretim analitiği çözümleri oluşturan BT ekiplerine vermesidir.
Bu yaklaşımla ilgili bir sorun, araştırmacının modelini üretimdeki tüm veriler üzerinde çalıştırdıktan sonra yeni bir şey fark etmesi durumunda, işlemin baştan tekrar edilmesi gerektiğidir.
Araştırmacı bir MongoDB geliştiricisi ile çalışıp analizini tüm üretim verileri üzerinde çalıştırabilir ve yeni teknoloji veya karmaşık programlama dilleri ve hatta SQL öğrenmek zorunda kalmadan onu keşif veri seti olarak kullanabilirse ne olur?
MongoDB'nin Toplama Hattını ve MEAN'i etkin bir şekilde kullanırsak, bunu oldukça kısa sürede başarabiliriz. Bu makale ve bu GitHub deposunda bulunan kod aracılığıyla, bunu başarmanın ne kadar kolay olduğunu göstermek istiyoruz.
Piyasadaki İş Zekası araçlarının çoğu, araştırmacılara NoSQL ve diğer Büyük Veri teknolojilerinden veri kümelerini araca aktarmanın yollarını sağlıyor, ardından dönüştürmeler ve analizler araç içinde yapılıyor. Ancak bu iş zekası eğitiminde, verileri MongoDB'den çekmeden MongoDB Toplama Hattı'nın gücünü kullanıyoruz ve araştırmacı, bir üretim büyük veri sisteminde her türlü dönüşümü yapmak için basit bir arayüz kullanıyor.
İş Zekası için MongoDB Toplama Hattı
Basitçe söylemek gerekirse, MongoDB'nin toplama ardışık düzeni, bir veri kümesinde bir dizi veri dönüşümü gerçekleştirmek için bir çerçevedir. İlk aşama, tüm belge koleksiyonunu girdi olarak alır ve bundan sonraki her aşama, önceki dönüşümün sonuç kümesini girdi olarak alır ve bir miktar dönüştürülmüş çıktı üretir.
Bir toplama işlem hattında kullanılabilecek 10 tür dönüşüm vardır:
$geoNear: Belgeleri belirli bir noktadan en yakından en uzağa sıralar
$match: herhangi bir ifade tarafından ayarlanan giriş kaydını filtreler
$project: girdi alanlarının veya hesaplanan alanların bir alt kümesiyle bir sonuç kümesi oluşturur
$redact: belgedeki bilgilere dayalı olarak belgelerin içeriğini kısıtlar
$unwind: bir belgeden n elemanlı bir dizi alanı alır ve her bir belgeye o dizinin yerini alan bir alan olarak eklenen her elemanla birlikte n belge döndürür
$group: bir veya daha fazla sütuna göre gruplar ve diğer sütunlarda toplama gerçekleştirir
$limit: girdi kümelerinden ilk n belgeyi seçer (yüzdelik hesaplamalar vb. için kullanışlıdır)
$atla: giriş kümesindeki ilk n belgeyi yok sayar
$sort: tüm girdi belgelerini verilen nesneye göre sıralar
$out: Bir önceki aşamadan dönen tüm belgeleri alır ve bir koleksiyona yazar
Yukarıdaki listedeki ilk ve sonuncu hariç, bu dönüşümlerin uygulanabileceği sıra hakkında herhangi bir kural yoktur. Toplama ardışık düzeninin sonucunu yeni veya mevcut bir koleksiyona yazmak istiyorsak, $out yalnızca bir kez ve sonunda kullanılmalıdır. $geoNear, yalnızca bir işlem hattının ilk aşaması olarak kullanılabilir.
İşleri daha kolay anlamak için, iki veri kümesini ve bu veri kümeleriyle ilgili iki soruyu gözden geçirelim.
Atamaya Göre Maaş Farkı
MongoDB'nin toplama hattının gücünü açıklamak için, tüm ABD için üniversite öğretim personelinin maaş bilgilerini içeren bir veri seti indirdik. Bu veriler nces.ed.gov adresinde mevcuttur. 7598 kurumdan aşağıdaki alanlara sahip verilerimiz var:
var FacultySchema = mongoose.Schema({ InstitutionName : String, AvgSalaryAll : Number, AVGSalaryProfessors : Number, AVGSalaryAssociateProfessors : Number, AVGSalaryAssistantProfessors : Number, AVGSalaryLecturers : Number, AVGSalaryInstructors : Number, StreetAddress : String, City : String, State : String, ZIPCode : String, MenStaffCount : Number, WomenStaffCount : Number }
Bu verilerle (ortalama olarak) doçent ve profesör maaşları arasında eyaletlere göre ne kadar fark olduğunu öğrenmek istiyoruz. O zaman bir doçent, maaş açısından hangi durumda bir profesöre daha yakın olduğunu anlayabilir.
Bu soruyu yanıtlamak için, bir araştırmacının ilk olarak koleksiyondaki kötü verileri ayıklaması gerekir, çünkü veri kümemizde ortalama maaşın boş veya boş bir dize olduğu birkaç satır/belge vardır. Veri kümesinin bu temizliğini gerçekleştirmek için aşağıdaki aşamayı ekleyeceğiz:
{$match: {AVGSalaryProfessors: {$not: {$type: 2}}, AVGSalaryAssociateProfessors: {$not: {$type: 2}}}}
Bu, bu iki alanda dize değerlerine sahip tüm varlıkları filtreleyecektir. MongoDB'de her tür benzersiz bir sayı ile temsil edilir - dizeler için tür numarası 2'dir.
Bu veri kümesi iyi bir örnektir çünkü gerçek dünya veri analitiğinde mühendisler genellikle veri temizleme işlemleriyle de uğraşmak zorundadır.
Artık elimizde bazı sabit veriler olduğuna göre, maaşları eyalet bazında ortalamasını alacağımız bir sonraki aşamaya geçebiliriz:
{$group: {_id: "$State", StateAVGSalaryProfessors: {$avg: "$AVGSalaryProfessors"}, StateAVGSalaryAssociateProfessors: {$avg: "$AVGSalaryAssociateProfessors"}}}
Sadece yukarıdaki sonuç kümesinin bir projeksiyonunu çalıştırmamız ve boru hattımızın 3. Aşamasında aşağıda gösterildiği gibi eyalet ortalama maaşlarındaki farkı almamız gerekiyor:
{$project: {_ID: 1, SalaryDifference: {$subtract: ["$StateAVGSalaryProfessors", "$StateAVGSalaryAssociateProfessors"]}}}
Bu bize, ABD genelindeki 7519 eğitim kurumundan oluşan bir veri kümesinden profesörler ve doçentler arasındaki eyalet düzeyindeki ortalama maaş farkını vermelidir. Bu bilgiyi yorumlamayı daha da kolaylaştırmak için, basit bir sıralama yapalım, böylece bir $sort aşaması ekleyerek hangi durumun en az farka sahip olduğunu bilelim:

{$sort: { SalaryDifference: 1}}
Bu veri setinden, Idaho, Kansas ve Batı Virginia'nın, doçent ve profesör maaşları arasındaki farkın diğer tüm eyaletlerle karşılaştırıldığında en az olduğu üç eyalet olduğu açıktır.
Bunun için oluşturulan tam toplama işlem hattı aşağıda gösterilmiştir:
[ {$match: {AVGSalaryProfessors: {$not: {$type: 2}}, AVGSalaryAssociateProfessors: {$not: {$type: 2}}}}, {$group: {_id: "$State", StateAVGSalaryProfessors: {$avg: "$AVGSalaryProfessors"}, StateAVGSalaryAssociateProfessors: {$avg: "$AVGSalaryAssociateProfessors"}}}, {$project: {_ID: 1, SalaryDifference: {$subtract: ["$StateAVGSalaryProfessors", "$StateAVGSalaryAssociateProfessors"]}}}, {$sort: { SalaryDifference: 1}} ]
Ortaya çıkan sonuç veri kümesi şuna benzer. Araştırmacılar ayrıca Tableau gibi görselleştirme paketlerini kullanarak veya basit Microsoft Excel çizelgeleri aracılığıyla rapor vermek için bu sonuçları CSV'ye aktarabilir.
İstihdam Türüne Göre Ortalama Ücret
Bu makalede inceleyeceğimiz başka bir örnek, www.data.gov adresinden elde edilen bir veri kümesini içermektedir. Amerika Birleşik Devletleri'ndeki tüm eyalet ve yerel yönetim kuruluşlarının bordro bilgileri göz önüne alındığında, her eyalette tam zamanlı ve yarı zamanlı “Mali İdare” çalışanlarının ortalama maaşını bulmak istiyoruz.
Veri kümesi içe aktarıldı ve her belgenin şu şemayı takip ettiği 1975 belgeleri elde edildi:
mongoose.Schema({ State : String, GovernmentFunction : String, FullTimeEmployees : Number, VariationPCT : Number, FullTimePay : Number, PartTimeEmployees : Number, PartTimePay : Number, PartTimeHours : Number, FullTimeEquivalentEmployment : Number, TotalEmployees : Number, TotalMarchPay : Number }, {collection: 'payroll'});
Bu sorunun cevabı, bir Mali Yönetim çalışanının taşınacak en iyi durumu seçmesine yardımcı olabilir. MongoDB toplayıcı boru hattı tabanlı aracımızla bu oldukça kolay bir şekilde yapılabilir:
İlk aşamada, "Mali Yönetim" dışındaki tüm varlıkları atmak için GovernmentFunction sütununu filtreleyin:
{$match:{GovernmentFunction:'Financial Administration'}}
Eğitimin bir sonraki aşamasında, varlıkları eyaletlere göre gruplandıracağız ve her eyaletteki ortalama tam zamanlı ve yarı zamanlı maaşları hesaplayacağız:
{$group: {_id: '$State', FTP_AVG: {$avg: '$FullTimePay'}, PTM_AVG: {$avg: '$PartTimePay'}}}
Son olarak, sonuçları yüksek ücretli eyaletlerden düşük ücretli eyaletlere doğru sıralayacağız:
{$sort: {FTP_AVG: -1, PTM_AVG: -1}}
Bu, aracın aşağıdaki toplama işlem hattını oluşturmasına izin vermelidir:
[ {$match:{GovernmentFunction:'Financial Administration'}}, {$group: {_id: '$State', FTP_AVG: {$avg: '$FullTimePay'}, PTM_AVG: {$avg: '$PartTimePay'}}}, {$sort: {FTP_AVG: -1, PTM_AVG: -1}} ]
Toplama işlem hattını çalıştırmak, aşağıdaki gibi bazı sonuçlar üretmelidir:
Yapı taşları
Bu iş zekası uygulamasını oluşturmak için MongoDB, ExpressJS, AngularJS ve NodeJS'nin birleşimi olan MEAN'i kullandık.
Bildiğiniz gibi MongoDB şemasız bir belge veritabanıdır. Sakladığı her belgenin boyutu 16 MB ile sınırlı olsa da, sağladığı toplama ardışık düzen çerçevesi ile birlikte esnekliği ve performansı MongoDB'yi bu araç için mükemmel bir seçim haline getiriyor. Kapsamlı belgeleri sayesinde MongoDB'ye başlamak çok kolaydır.
MEAN'in diğer bir ayrılmaz bileşeni olan Node.js, olaya dayalı sunucu tarafı Javascript ortamı sağlar. Node.js, Javascript'i Google Chrome'un V8 motorunu kullanarak çalıştırır. Node.js'nin ölçeklenebilirlik vaatleri, birçok kuruluşu buna yönlendiren şeydir.
Express.js, Node.js için en popüler web uygulaması çerçevesidir. Web uygulamaları için API'ler veya herhangi bir sunucu tarafı iş katmanı oluşturmayı kolaylaştırır. Minimalist doğası nedeniyle çok hızlıdır, ancak aynı zamanda oldukça esnektir.
Birkaç Google mühendisi tarafından oluşturulan ve bakımı yapılan AngularJS, hızla elimizdeki en popüler ön uç Javascript çerçevelerinden biri haline geliyor.
MEAN'in bu kadar popüler olmasının ve techXplorers'da uygulama geliştirme konusundaki tercihimizin iki nedeni vardır:
Beceri seti basittir. JavaScript'i anlayan bir mühendis, tüm katmanlarda ilerlemek iyidir.
Ön uçtan işletmeye veri tabanı katmanları arasındaki iletişimin tümü, farklı katmanlarda tasarım ve geliştirmede bize önemli ölçüde zaman kazandıran JSON nesneleri aracılığıyla gerçekleşir.
Çözüm
Bu MongoDB toplama işlem hattı eğitiminde, araştırmacılara üretim verilerini keşif amaçlı veri kümeleri olarak kullanabilecekleri ve analiz etmek ve model oluşturmak için farklı dönüşüm kümeleri çalıştırabilecekleri bir araç vermenin uygun maliyetli bir yolunu gösterdik.
Bu uygulamayı uçtan uca yalnızca 3 gün içinde geliştirip dağıtabildik. Bu uygulama, 2'si ABD'de ve 2'si Hindistan'da olmak üzere 4 deneyimli mühendisten oluşan bir ekip ve arayüz tasarımı konusunda bize yardımcı olan bir tasarımcı ve serbest UX uzmanı tarafından geliştirilmiştir. Gelecekte bir noktada, inanılmaz kısa sürede harika ürünler oluşturmak için bu düzeyde bir işbirliğinin nasıl çalıştığını açıklamak için zaman ayıracağım.
MongoDB'nin Toplama İşlem Hattından yararlanmanızı ve akıllı analizleri ve içgörüleriyle dünyayı değiştirebilecek araştırmacılarınızın eline güç vermenizi umuyoruz.
Bu uygulama burada oynanmak için yayında.