การใช้ ข้อมูลเพื่อตอบคำถามที่น่าสนใจ คือสิ่งที่นักวิจัยกำลังทำอยู่ในโลกที่ขับเคลื่อนด้วยข้อมูลในปัจจุบัน ด้วยข้อมูลจำนวนมากความท้าทายในการประมวลผลและวิเคราะห์จึงเป็นเรื่องใหญ่ โดยเฉพาะอย่างยิ่งสำหรับนักสถิติหรือนักวิเคราะห์ข้อมูลที่ไม่มีเวลาลงทุนในการเรียนรู้แพลตฟอร์มข่าวกรองธุรกิจหรือเทคโนโลยีที่จัดทำโดยฐานข้อมูล Hadoop eco-system, Spark หรือ NoSQL ซึ่งจะช่วยให้วิเคราะห์ข้อมูลจำนวนเทราไบต์ได้ภายในไม่กี่นาที
บรรทัดฐานในปัจจุบันคือสำหรับนักวิจัยหรือนักสถิติในการสร้างแบบจำลองของพวกเขาบนชุดข้อมูลย่อยในแพ็คเกจการวิเคราะห์เช่น ร , MATLAB , หรือ อ็อกเทฟ จากนั้นให้สูตรและขั้นตอนการประมวลผลข้อมูลแก่ทีมไอทีที่สร้างโซลูชันการวิเคราะห์การผลิต
ปัญหาอย่างหนึ่งของแนวทางนี้คือหากนักวิจัยตระหนักถึงสิ่งใหม่ ๆ หลังจากใช้แบบจำลองของเขากับข้อมูลทั้งหมดในการผลิตกระบวนการนี้จะต้องทำซ้ำอีกครั้ง
จะเป็นอย่างไรหากนักวิจัยสามารถทำงานกับไฟล์ นักพัฒนา MongoDB และเรียกใช้การวิเคราะห์ของเขากับข้อมูลการผลิตทั้งหมดและใช้เป็นชุดข้อมูลเชิงสำรวจโดยไม่ต้องเรียนรู้เทคโนโลยีใหม่หรือภาษาโปรแกรมที่ซับซ้อนหรือแม้แต่ SQL?
ถ้าเราใช้ MongoDB’s Aggregation Pipeline และ หมายถึง อย่างมีประสิทธิภาพเราสามารถบรรลุเป้าหมายนี้ได้ในเวลาอันสั้น ผ่านบทความนี้และรหัสที่มีอยู่ ที่นี่ในที่เก็บ GitHub นี้ เราอยากจะแสดงให้เห็นว่ามันง่ายแค่ไหนในการบรรลุเป้าหมายนี้
เครื่องมือ Business Intelligence ส่วนใหญ่ที่มีอยู่ในตลาดกำลังให้วิธีสำหรับนักวิจัยในการนำเข้าชุดข้อมูลจาก NoSQL และเทคโนโลยี Big Data อื่น ๆ ไปยังเครื่องมือจากนั้นการแปลงและการวิเคราะห์จะดำเนินการภายในเครื่องมือ แต่ในบทช่วยสอนระบบธุรกิจอัจฉริยะนี้เรากำลังใช้พลังของ MongoDB Aggregation Pipeline โดยไม่ดึงข้อมูลออกจาก MongoDB และผู้วิจัยกำลังใช้อินเทอร์เฟซที่เรียบง่ายเพื่อทำการเปลี่ยนแปลงทุกรูปแบบในระบบข้อมูลขนาดใหญ่สำหรับการผลิต
พูดง่ายๆก็คือไปป์ไลน์การรวมของ MongoDB เป็นกรอบในการดำเนินการแปลงข้อมูลชุดหนึ่งบนชุดข้อมูล ขั้นตอนแรกจะใช้คอลเล็กชันเอกสารทั้งหมดเป็นอินพุตและจากนั้นในแต่ละขั้นตอนต่อมาจะใช้ชุดผลลัพธ์ของการแปลงก่อนหน้านี้เป็นอินพุตและสร้างเอาต์พุตที่แปลงแล้ว
การแปลงมี 10 ประเภทที่สามารถใช้ในท่อรวม:
$ geoNear: แสดงเอกสารตามลำดับที่ใกล้ที่สุดถึงไกลที่สุดจากจุดที่ระบุ
$ match: กรองบันทึกการป้อนข้อมูลที่กำหนดโดยนิพจน์ที่กำหนด
$ project: สร้างชุดผลลัพธ์ที่มีฟิลด์อินพุตย่อยหรือฟิลด์ที่คำนวณ
$ redact: จำกัด เนื้อหาของเอกสารตามข้อมูลจากเอกสาร
$ คลี่คลาย: ใช้ฟิลด์อาร์เรย์ที่มีองค์ประกอบ n จากเอกสารและส่งคืนเอกสาร n พร้อมกับแต่ละองค์ประกอบที่เพิ่มลงในเอกสารแต่ละฉบับเป็นฟิลด์แทนที่อาร์เรย์นั้น
$ group: จัดกลุ่มตามคอลัมน์อย่างน้อยหนึ่งคอลัมน์และทำการรวมในคอลัมน์อื่น ๆ
$ limit: เลือก n เอกสารแรกจากชุดอินพุต (มีประโยชน์สำหรับการคำนวณเปอร์เซ็นไทล์ ฯลฯ )
วอร์เรน บัฟเฟตต์ลงทุนอย่างไร
$ skip: ละเว้น n เอกสารแรกจากชุดอินพุต
$ sort: จัดเรียงเอกสารอินพุตทั้งหมดตามวัตถุที่กำหนด
$ out: นำเอกสารทั้งหมดที่ส่งคืนจากขั้นตอนก่อนหน้าและเขียนลงในคอลเลกชัน
ยกเว้นรายการแรกและรายการสุดท้ายในรายการด้านบนไม่มีกฎเกี่ยวกับลำดับที่อาจนำการเปลี่ยนแปลงเหล่านี้ไปใช้ ควรใช้ $ out เพียงครั้งเดียวและในตอนท้ายหากเราต้องการเขียนผลลัพธ์ของไปป์ไลน์การรวมไปยังคอลเล็กชันใหม่หรือที่มีอยู่ $ geoNear สามารถใช้เป็นขั้นตอนแรกของไปป์ไลน์เท่านั้น
เพื่อให้เข้าใจง่ายขึ้นให้เราพิจารณาชุดข้อมูลสองชุดและคำถาม 2 ข้อที่เกี่ยวข้องกับชุดข้อมูลเหล่านี้
เพื่ออธิบายถึงพลังของกระบวนการรวมของ MongoDB เราได้ดาวน์โหลดชุดข้อมูลซึ่งมีข้อมูลเงินเดือนของเจ้าหน้าที่การเรียนการสอนของมหาวิทยาลัยสำหรับทั้งสหรัฐอเมริกา ข้อมูลนี้มีอยู่ที่ nces.ed.gov . เรามีข้อมูลจากสถาบัน 7598 แห่งในฟิลด์ต่อไปนี้:
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 }
ด้วยข้อมูลนี้เราต้องการค้นหา (โดยเฉลี่ย) ว่าความแตกต่างระหว่างเงินเดือนของรองศาสตราจารย์และศาสตราจารย์ตามรัฐคืออะไร จากนั้นรองศาสตราจารย์สามารถรู้ได้ว่ารัฐใดให้ความสำคัญกับศาสตราจารย์มากขึ้นในแง่ของเงินเดือน
ในการตอบคำถามนี้นักวิจัยจำเป็นต้องกำจัดข้อมูลที่ไม่ดีออกจากคอลเล็กชันก่อนเนื่องจากมีแถว / เอกสารไม่กี่แถวในชุดข้อมูลของเราที่เงินเดือนเฉลี่ยเป็นสตริงว่างหรือว่างเปล่า ในการทำความสะอาดชุดข้อมูลนี้ให้สำเร็จเราจะเพิ่มขั้นตอนต่อไปนี้:
{$match: {AVGSalaryProfessors: {$not: {$type: 2}}, AVGSalaryAssociateProfessors: {$not: {$type: 2}}}}
สิ่งนี้จะกรองเอนทิตีทั้งหมดที่มีค่าสตริงในสองฟิลด์นั้น ใน MongoDB แต่ละประเภทคือ แสดงด้วยหมายเลขเฉพาะ - สำหรับสตริงหมายเลขประเภทคือ 2
ชุดข้อมูลนี้เป็นตัวอย่างที่ดีเพราะในการวิเคราะห์ข้อมูลจริงวิศวกรมักจะต้องจัดการกับการล้างข้อมูลด้วยเช่นกัน
เมื่อเรามีข้อมูลที่เสถียรแล้วเราสามารถไปยังขั้นตอนต่อไปซึ่งเราจะเฉลี่ยเงินเดือนตามรัฐ:
{$group: {_id: '$State', StateAVGSalaryProfessors: {$avg: '$AVGSalaryProfessors'}, StateAVGSalaryAssociateProfessors: {$avg: '$AVGSalaryAssociateProfessors'}}}
เราจำเป็นต้องเรียกใช้การคาดการณ์ของชุดผลลัพธ์ข้างต้นและรับส่วนต่างของเงินเดือนเฉลี่ยของรัฐดังที่แสดงด้านล่างในขั้นตอนที่ 3 ของไปป์ไลน์ของเรา:
{$project: {_ID: 1, SalaryDifference: {$subtract: ['$StateAVGSalaryProfessors', '$StateAVGSalaryAssociateProfessors']}}}
สิ่งนี้ควรให้ความแตกต่างของเงินเดือนเฉลี่ยระดับรัฐระหว่างศาสตราจารย์และรองศาสตราจารย์จากชุดข้อมูลของสถาบันการศึกษา 7519 แห่งทั่วสหรัฐอเมริกา เพื่อให้ง่ายยิ่งขึ้นในการตีความข้อมูลนี้ให้เราเรียงลำดับง่ายๆเพื่อให้เรารู้ว่าสถานะใดมีความแตกต่างน้อยที่สุดโดยการเพิ่ม $ sort stage:
{$sort: { SalaryDifference: 1}}
จากชุดข้อมูลนี้เห็นได้ชัดว่าไอดาโฮแคนซัสและเวสต์เวอร์จิเนียเป็นสามรัฐที่ความแตกต่างของเงินเดือนของรองศาสตราจารย์และศาสตราจารย์น้อยที่สุดเมื่อเทียบกับรัฐอื่น ๆ ทั้งหมด
ไปป์ไลน์การรวมแบบเต็มที่สร้างขึ้นสำหรับสิ่งนี้แสดงอยู่ด้านล่าง:
[ {$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}} ]
ชุดข้อมูลผลลัพธ์ที่แสดงขึ้นมีลักษณะดังนี้ นักวิจัยยังสามารถส่งออกผลลัพธ์เหล่านี้เป็น CSV เพื่อรายงานโดยใช้แพ็คเกจการแสดงภาพเช่น Tableau หรือผ่านแผนภูมิ Microsoft Excel อย่างง่าย
อีกตัวอย่างหนึ่งที่เราจะสำรวจในบทความนี้เกี่ยวข้องกับชุดข้อมูลที่ได้รับจาก www.data.gov . จากข้อมูลการจ่ายเงินเดือนขององค์กรของรัฐและรัฐบาลท้องถิ่นทั้งหมดในสหรัฐอเมริกาเราต้องการหาค่าจ้างเฉลี่ยของพนักงาน 'ฝ่ายบริหารการเงิน' แบบเต็มเวลาและแบบพาร์ทไทม์ในแต่ละรัฐ
นำเข้าชุดข้อมูลแล้วส่งผลให้มีเอกสาร 1975 โดยแต่ละเอกสารเป็นไปตามสคีมานี้:
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'});
คำตอบสำหรับคำถามนี้อาจช่วยให้พนักงานฝ่ายบริหารการเงินเลือกรัฐที่ดีที่สุดที่จะย้ายไปได้ ด้วยเครื่องมือที่ใช้ไปป์ไลน์ตัวรวบรวม MongoDB ของเราสิ่งนี้สามารถทำได้ค่อนข้างง่าย:
ในขั้นแรกกรองคอลัมน์ GovernmentFunction เพื่อละทิ้งเอนทิตีที่ไม่ใช่ 'การบริหารการเงิน' ทั้งหมด:
{$match:{GovernmentFunction:'Financial Administration'}}
ในขั้นตอนต่อไปของบทช่วยสอนเราจะจัดกลุ่มเอนทิตีตามรัฐและคำนวณเงินเดือนเต็มเวลาและนอกเวลาเฉลี่ยในแต่ละรัฐ:
{$group: {_id: '$State', FTP_AVG: {$avg: '$FullTimePay'}, PTM_AVG: {$avg: '$PartTimePay'}}}
สุดท้ายเราจะเรียงลำดับผลลัพธ์จากสถานะการจ่ายที่สูงขึ้นไปสู่สถานะการจ่ายที่ต่ำกว่า:
{$sort: {FTP_AVG: -1, PTM_AVG: -1}}
สิ่งนี้ควรอนุญาตให้เครื่องมือสร้างไปป์ไลน์การรวมดังต่อไปนี้:
[ {$match:{GovernmentFunction:'Financial Administration'}}, {$group: {_id: '$State', FTP_AVG: {$avg: '$FullTimePay'}, PTM_AVG: {$avg: '$PartTimePay'}}}, {$sort: {FTP_AVG: -1, PTM_AVG: -1}} ]
การรันไปป์ไลน์การรวมควรให้ผลลัพธ์ดังนี้:
ในการสร้างแอปพลิเคชันระบบธุรกิจอัจฉริยะนี้เราใช้ หมายถึง ซึ่งเป็นการรวมกันของ MongoDB , ExpressJS , AngularJS และ NodeJS .
ดังที่คุณทราบอยู่แล้ว MongoDB เป็นฐานข้อมูลเอกสารที่ไม่มีสคีมา แม้ว่าเอกสารแต่ละฉบับที่จัดเก็บจะมีขนาด จำกัด ที่ 16MB แต่ความยืดหยุ่นและประสิทธิภาพพร้อมกับเฟรมเวิร์กไปป์ไลน์การรวมที่มีให้ทำให้ MongoDB เหมาะอย่างยิ่งสำหรับเครื่องมือนี้ การเริ่มต้นกับ MongoDB นั้นง่ายมากต้องขอบคุณ เอกสารที่ครอบคลุม .
Node.js ซึ่งเป็นส่วนประกอบสำคัญอีกอย่างหนึ่งของ MEAN จัดเตรียมสภาพแวดล้อม Javascript ฝั่งเซิร์ฟเวอร์ที่ขับเคลื่อนด้วยเหตุการณ์ Node.js เรียกใช้ Javascript โดยใช้เครื่องยนต์ V8 ของ Google Chrome ความสามารถในการปรับขยายสัญญาของ Node.js คือสิ่งที่ขับเคลื่อน หลายองค์กร ต่อมัน
Express.js เป็นเฟรมเวิร์กเว็บแอปพลิเคชันยอดนิยมสำหรับ Node.js ทำให้ง่ายต่อการสร้าง API หรือชั้นธุรกิจฝั่งเซิร์ฟเวอร์อื่น ๆ สำหรับเว็บแอปพลิเคชัน มันเร็วมากเนื่องจากมีลักษณะเรียบง่าย แต่ก็ค่อนข้างยืดหยุ่น
AngularJS ซึ่งสร้างและดูแลโดยวิศวกรของ Google จำนวนมากกำลังกลายเป็นหนึ่งในเฟรมเวิร์ก Javascript ที่ได้รับความนิยมมากที่สุดในการจำหน่ายของเรา
มีสองเหตุผลที่ MEAN เป็นที่นิยมและทางเลือกของเราในการพัฒนาแอปพลิเคชันที่ techXplorers:
ชุดทักษะเป็นเรื่องง่าย วิศวกรที่เข้าใจ JavaScript เป็นสิ่งที่ดีที่จะทำงานในทุกเลเยอร์
การสื่อสารระหว่างฟรอนต์เอนด์กับธุรกิจกับเลเยอร์ฐานข้อมูลล้วนเกิดขึ้นผ่านอ็อบเจ็กต์ JSON ซึ่งช่วยให้เราประหยัดเวลาอย่างมากในการออกแบบและพัฒนาในเลเยอร์ต่างๆ
ในบทช่วยสอนไปป์ไลน์การรวม MongoDB นี้เราได้แสดงให้เห็นถึงวิธีที่คุ้มค่าในการให้เครื่องมือแก่นักวิจัยที่พวกเขาสามารถใช้ข้อมูลการผลิตเป็น ชุดข้อมูลการสำรวจ และเรียกใช้การแปลงชุดต่างๆเพื่อวิเคราะห์และสร้างแบบจำลอง
เราสามารถพัฒนาและปรับใช้แอปพลิเคชันนี้แบบ end-to-end ได้ในเวลาเพียง 3 วัน แอปพลิเคชันนี้ได้รับการพัฒนาโดยทีมวิศวกรที่มีประสบการณ์ 4 คน (2 คนในสหรัฐอเมริกาและ 2 คนในอินเดีย) และก นักออกแบบและผู้เชี่ยวชาญด้าน UX อิสระ ช่วยเราคิดเกี่ยวกับการออกแบบอินเทอร์เฟซ ในอนาคตฉันจะใช้เวลาอธิบายวิธีการทำงานร่วมกันในระดับนี้เพื่อสร้างผลิตภัณฑ์ที่ยอดเยี่ยมในเวลาอันสั้นอย่างไม่น่าเชื่อ
เราหวังว่าคุณจะใช้ประโยชน์จาก Aggregation Pipeline ของ MongoDB และมอบอำนาจให้กับนักวิจัยของคุณที่สามารถเปลี่ยนแปลงโลกได้ด้วยการวิเคราะห์และข้อมูลเชิงลึกที่ชาญฉลาด
แอปพลิเคชั่นนี้พร้อมให้เล่นด้วย ที่นี่ .