इस ब्लॉग पोस्ट में, हम बताएंगे कि आप अपने स्ट्रीमिंग प्रवाह की गुणवत्ता में सुधार के लिए ओपन-सोर्स स्ट्रीमिंग समाधान, बाइटवैक्स को ydata-profileing के साथ कैसे जोड़ सकते हैं और उसका लाभ उठा सकते हैं। सीट बेल्ट लगा लो!
स्ट्रीम प्रोसेसिंग उड़ान के दौरान और भंडारण से पहले डेटा के वास्तविक समय के विश्लेषण को सक्षम बनाता है और स्टेटफुल या स्टेटलेस हो सकता है।
स्टेटफुल स्ट्रीम प्रोसेसिंग का उपयोग वास्तविक समय की सिफारिशों, पैटर्न का पता लगाने, या जटिल घटना प्रसंस्करण के लिए किया जाता है, जहां प्रसंस्करण के लिए जो कुछ हुआ है उसका इतिहास आवश्यक है (विंडोज़, एक कुंजी द्वारा जुड़ना, आदि)।
स्टेटलेस स्ट्रीम प्रोसेसिंग का उपयोग इनलाइन ट्रांसफ़ॉर्मेशन के लिए किया जाता है जिसके लिए स्ट्रीम में अन्य डेटा बिंदुओं के ज्ञान की आवश्यकता नहीं होती है जैसे किसी ईमेल को मास्क करना या किसी प्रकार को परिवर्तित करना।
कुल मिलाकर, डेटा स्ट्रीम का उद्योग में व्यापक रूप से उपयोग किया जाता है और इसे धोखाधड़ी का पता लगाने , रोगी की निगरानी , या घटना पूर्वानुमानित रखरखाव जैसे मामलों में उपयोग करने के लिए लागू किया जा सकता है।
पारंपरिक मॉडलों के विपरीत जहां डेटा गुणवत्ता का आकलन आमतौर पर डेटा वेयरहाउस या डैशबोर्ड समाधान के निर्माण के दौरान किया जाता है, स्ट्रीमिंग डेटा को निरंतर निगरानी की आवश्यकता होती है ।
संग्रहण से लेकर डाउनस्ट्रीम अनुप्रयोगों को फीड करने तक, पूरी प्रक्रिया के दौरान डेटा गुणवत्ता बनाए रखना आवश्यक है। आख़िरकार, ख़राब डेटा गुणवत्ता की कीमत संगठनों के लिए बहुत अधिक हो सकती है:
“खराब डेटा की लागत अधिकांश कंपनियों के राजस्व का आश्चर्यजनक रूप से 15% से 25% है। (...) डेटा गुणवत्ता पर आगे आकर इनमें से दो-तिहाई लागत को समाप्त किया जा सकता है।
- थॉमस सी. रेडमैन, "गेटिंग इन फ्रंट ऑन डेटा क्वालिटी" के लेखक
इस पूरे लेख में, हम आपको दिखाएंगे कि आप प्रोफाइल के लिए bytewa
ydata-profiling
के साथ कैसे जोड़ सकते हैं और अपने स्ट्रीमिंग प्रवाह की गुणवत्ता में सुधार कर सकते हैं!
यह उपयोगकर्ताओं को एक अनुकूल और परिचित इंटरफ़ेस और पायथन पारिस्थितिकी तंत्र के साथ 100% अनुकूलता प्रदान करते हुए फ़्लिंक, स्पार्क और काफ्का स्ट्रीम जैसी क्षमताओं के साथ स्ट्रीमिंग डेटा पाइपलाइन और वास्तविक समय एप्लिकेशन बनाने की अनुमति देता है।
बिल्ट-इन का उपयोग करना
परिवर्तनों के लिए, बाइटवैक्स मैप , विंडोिंग और एकत्रीकरण विधियों के साथ स्टेटफुल और स्टेटलेस ट्रांसफॉर्मेशन की सुविधा देता है और रिकवरी और स्केलेबिलिटी जैसी परिचित सुविधाओं के साथ आता है।
बाइटवैक्स
यह उपयोगकर्ताओं को स्पार्क या फ्लिंक जैसे जेवीएम-आधारित स्ट्रीमिंग प्लेटफॉर्म को सीखने और बनाए रखने के बिना स्ट्रीमिंग डेटा पाइपलाइन और वास्तविक समय एप्लिकेशन बनाने और उनकी आवश्यकताओं को पूरा करने के लिए आवश्यक अनुकूलन बनाने की अनुमति देता है।
बाइटवैक्स कई उपयोग के मामलों के लिए उपयुक्त है, अर्थात्,
उपयोग के मामले की प्रेरणा और दस्तावेज़ीकरण, ट्यूटोरियल और गाइड जैसी अधिक जानकारी के लिए, बेझिझक जाँच करें
डेटा प्रोफाइलिंग किसी भी मशीन लर्निंग कार्य की सफल शुरुआत की कुंजी है और यह चरण को संदर्भित करता है
संक्षेप में,
उच्च डेटा गुणवत्ता मानकों को सुनिश्चित करना सभी डोमेन और संगठनों के लिए महत्वपूर्ण है, लेकिन विशेष रूप से निरंतर डेटा आउटपुट करने वाले डोमेन के साथ काम करने वाले डोमेन के लिए प्रासंगिक है, जहां परिस्थितियां तेजी से बदल सकती हैं और तत्काल कार्रवाई की आवश्यकता हो सकती है (उदाहरण के लिए, स्वास्थ्य देखभाल निगरानी, स्टॉक मूल्य, वायु गुणवत्ता नीतियां)।
कई डोमेन के लिए, डेटाबेस में संग्रहीत ऐतिहासिक डेटा पर विचार करते हुए, डेटा प्रोफाइलिंग का उपयोग खोजपूर्ण डेटा विश्लेषण लेंस से किया जाता है। इसके विपरीत, डेटा स्ट्रीम के लिए, स्ट्रीम के साथ लगातार सत्यापन और गुणवत्ता नियंत्रण के लिए डेटा प्रोफाइलिंग आवश्यक हो जाती है , जहां डेटा को प्रक्रिया के विभिन्न समय सीमा या चरणों में जांचने की आवश्यकता होती है।
हमारे डेटा प्रवाह में एक स्वचालित प्रोफाइलिंग को एम्बेड करके, हम तुरंत अपने डेटा की वर्तमान स्थिति पर प्रतिक्रिया प्राप्त कर सकते हैं और किसी भी संभावित महत्वपूर्ण मुद्दों के लिए सतर्क रह सकते हैं - चाहे वे डेटा स्थिरता और अखंडता (उदाहरण के लिए, दूषित मूल्य या बदलते प्रारूप) से संबंधित हों, या कम समय में होने वाली घटनाओं (उदाहरण के लिए, डेटा बहाव, व्यावसायिक नियमों और परिणामों से विचलन) से संबंधित हों।
वास्तविक दुनिया के डोमेन में - जहां आप जानते हैं कि मर्फी का नियम लागू होता है और "सबकुछ निश्चित रूप से गलत हो सकता है" - स्वचालित प्रोफाइलिंग हमें कई मस्तिष्क पहेली और सिस्टम को उत्पादन से बाहर करने से बचा सकती है!
डेटा प्रोफाइलिंग के संबंध में, ydata-profiling
लगातार एक रही है
जटिल और समय बर्बाद करने वाले ऑपरेशन हुड के तहत किए जाते हैं: ydata-प्रोफाइलिंग स्वचालित रूप से डेटा में शामिल फीचर प्रकारों का पता लगाता है, और फीचर प्रकारों (या तो संख्यात्मक या श्रेणीबद्ध) के आधार पर, यह प्रोफाइलिंग रिपोर्ट में दिखाए गए सारांश आंकड़ों और विज़ुअलाइज़ेशन को समायोजित करता है ।
डेटा-केंद्रित विश्लेषण को बढ़ावा देते हुए, पैकेज सुविधाओं के बीच मौजूदा संबंधों पर भी प्रकाश डालता है , उनके जोड़ीदार इंटरैक्शन और सहसंबंधों पर ध्यान केंद्रित करता है, और डुप्लिकेट या निरंतर मूल्यों से लेकर विषम और असंतुलित सुविधाओं तक डेटा गुणवत्ता अलर्ट का गहन मूल्यांकन प्रदान करता है।
यह वास्तव में हमारे डेटा की गुणवत्ता का 360º दृश्य है - न्यूनतम प्रयास के साथ।
प्रोजेक्ट शुरू करने से पहले, हमें पहले अपनी पायथन निर्भरताएँ सेट करनी होंगी और अपने डेटा स्रोत को कॉन्फ़िगर करना होगा।
सबसे पहले, आइए bytewax
और ydata-profiling
पैकेज इंस्टॉल करें ( आप इसके लिए वर्चुअल वातावरण का उपयोग करना चाह सकते हैं -
pip install bytewax==0.16.2 ydata-profiling==4.3.1
फिर, हम अपलोड करेंगे
wget https://raw.githubusercontent.com/bytewax/air-quality-sensor/main/data/iot_telemetry_data_1000
उत्पादन परिवेश में, ये माप प्रत्येक डिवाइस द्वारा लगातार उत्पन्न किए जाएंगे , और इनपुट वैसा ही दिखेगा जैसा हम स्ट्रीमिंग प्लेटफ़ॉर्म में अपेक्षा करते हैं।
(एक त्वरित साइड नोट के रूप में, डेटाफ्लो अनिवार्य रूप से एक डेटा पाइपलाइन है जिसे एक निर्देशित एसाइक्लिक ग्राफ - डीएजी के रूप में वर्णित किया जा सकता है)
सबसे पहले, आइए कुछ आवश्यक आयात करें:
from datetime import datetime, timedelta, timezone from bytewax.dataflow import Dataflow from bytewax.connectors.stdio import StdOutput from bytewax.connectors.files import CSVInput from bytewax.testing import run_main
फिर, हम अपने डेटाफ्लो ऑब्जेक्ट को परिभाषित करते हैं। इसके बाद, हम एक स्टेटलेस मैप विधि का उपयोग करेंगे जहां हम स्ट्रिंग को डेटटाइम ऑब्जेक्ट में बदलने और डेटा को प्रारूप (डिवाइस_आईडी, डेटा) में पुनर्गठित करने के लिए एक फ़ंक्शन पास करते हैं।
मानचित्र विधि प्रत्येक डेटा बिंदु में स्टेटलेस तरीके से परिवर्तन करेगी। हमने अपने डेटा के आकार को संशोधित करने का कारण यह है कि हम अगले चरणों में डेटा को आसानी से सभी डिवाइसों के बजाय प्रत्येक डिवाइस के लिए अलग-अलग प्रोफ़ाइल डेटा में समूहित कर सकते हैं।
flow = Dataflow() flow.input("simulated_stream", CSVInput("/content/iot_telemetry_data_1000")) # parse timestamp def parse_time(reading_data): reading_data["ts"] = datetime.fromtimestamp(float(reading_data["ts"]), timezone.utc) return reading_data flow.map(parse_time) # remap format to tuple (device_id, reading_data) flow.map(lambda reading_data: (reading_data['device'], reading_data))
अब, हम अपने द्वारा परिभाषित समयावधि में प्रत्येक डिवाइस के लिए डेटा इकट्ठा करने के लिए bytewax
की स्टेटफुल क्षमताओं का लाभ उठाएंगे। ydata-profiling
समय के साथ डेटा के स्नैपशॉट की अपेक्षा करता है, जो विंडो ऑपरेटर को ऐसा करने के लिए उपयोग करने के लिए सही तरीका बनाता है।
ydata-profiling
में, हम किसी विशेष संदर्भ के लिए निर्दिष्ट डेटाफ़्रेम के लिए सारांशित आँकड़े तैयार करने में सक्षम हैं। उदाहरण के लिए, हमारे उदाहरण में, हम प्रत्येक IoT डिवाइस या विशेष समय सीमा का संदर्भ देते हुए डेटा के स्नैपशॉट तैयार कर सकते हैं:
from bytewax.window import EventClockConfig, TumblingWindow # This is the accumulator function, and outputs a list of readings def acc_values(acc, reading): acc.append(reading) return acc # This function instructs the event clock on how to retrieve the # event's datetime from the input. def get_time(reading): return reading["ts"] # Configure the `fold_window` operator to use the event time. cc = EventClockConfig(get_time, wait_for_system_duration=timedelta(seconds=30)) # And a tumbling window align_to = datetime(2020, 1, 1, tzinfo=timezone.utc) wc = TumblingWindow(align_to=align_to, length=timedelta(hours=1)) flow.fold_window("running_average", cc, wc, list, acc_values) flow.inspect(print)
स्नैपशॉट परिभाषित होने के बाद, ydata-profiling
लाभ उठाना उतना ही सरल है जितना कि प्रत्येक डेटाफ़्रेम के लिए ProfileReport
कॉल करना, जिसका हम विश्लेषण करना चाहते हैं:
import pandas as pd from ydata_profiling import ProfileReport def profile(device_id__readings): print(device_id__readings) device_id, readings = device_id__readings start_time = readings[0]['ts'].replace(minute=0, second=0, microsecond=0).strftime('%Y-%m-%d %H:%M:%S') df = pd.DataFrame(readings) profile = ProfileReport( df, tsmode=True, sortby="ts", title=f"Sensor Readings - device: {device_id}" ) profile.to_file(f"Ts_Profile_{device_id}-{start_time}.html") return f"device {device_id} profiled at hour {start_time}" flow.map(profile)
इस उदाहरण में, हम मानचित्र विधि में फ़ंक्शन के भाग के रूप में छवियों को स्थानीय फ़ाइलों में लिख रहे हैं। इन्हें एक मैसेजिंग टूल के माध्यम से रिपोर्ट किया जा सकता है या हम उन्हें भविष्य में किसी रिमोट स्टोरेज में सहेज सकते हैं।
एक बार प्रोफ़ाइल पूरी हो जाने के बाद, डेटाफ़्लो कुछ आउटपुट की अपेक्षा करता है ताकि हम उस डिवाइस को प्रिंट करने के लिए अंतर्निहित StdOutput
उपयोग कर सकें जिसे प्रोफ़ाइल किया गया था और जिस समय इसे प्रोफ़ाइल किया गया था वह मानचित्र चरण में प्रोफ़ाइल फ़ंक्शन से बाहर चला गया था:
flow.output("out", StdOutput())
बाइटवैक्स डेटाफ्लो निष्पादित करने के कई तरीके हैं। इस उदाहरण में, हम एक ही स्थानीय मशीन का उपयोग करते हैं, लेकिन बाइटवैक्स एक से अधिक होस्ट में, कई पायथन प्रक्रियाओं पर भी चल सकता है।
इस लेख में, हम स्थानीय सेटअप जारी रखेंगे, लेकिन हम आपको हमारे सहायक टूल की जांच करने के लिए प्रोत्साहित करते हैं
यह मानते हुए कि हम डेटाफ्लो परिभाषा वाली फ़ाइल के समान निर्देशिका में हैं, हम इसका उपयोग करके इसे चला सकते हैं:
python -m bytewax.run ydata-profiling-streaming:flow
फिर हम डेटा गुणवत्ता को सत्यापित करने, स्कीमा या डेटा प्रारूपों में परिवर्तनों की जांच करने और विभिन्न उपकरणों या समय विंडो के बीच डेटा विशेषताओं की तुलना करने के लिए प्रोफाइलिंग रिपोर्ट का उपयोग कर सकते हैं।
वास्तव में, हम इसका लाभ उठा सकते हैं
snapshot_a_report = ProfileReport(df_a, title="Snapshot A") snapshot_b_report = ProfileReport(df_b, title="Snapshot B") comparison_report =snapshot_a_report(snapshot_b_report) comparison_report.to_file("comparison_report.html")
निरंतर तरीके से डेटा गुणवत्ता में समस्याओं की पहचान करने और अलग-अलग समयावधियों में डेटा की स्थिति की तुलना करने के लिए डेटा स्ट्रीम को मान्य करना महत्वपूर्ण है।
स्वास्थ्य देखभाल , ऊर्जा , विनिर्माण और मनोरंजन में संगठनों के लिए - सभी डेटा की निरंतर धाराओं के साथ काम कर रहे हैं - गुणवत्ता मूल्यांकन से लेकर डेटा गोपनीयता तक, डेटा प्रशासन सर्वोत्तम प्रथाओं को स्थापित करने के लिए एक स्वचालित प्रोफ़ाइलिंग महत्वपूर्ण है।
इसके लिए डेटा के स्नैपशॉट के विश्लेषण की आवश्यकता होती है, जैसा कि इस आलेख में दिखाया गया है, bytewax
और ydata-profiling
के संयोजन से सहज तरीके से प्राप्त किया जा सकता है।
बाइटवैक्स डेटा स्ट्रीम को स्नैपशॉट में संभालने और संरचना करने के लिए आवश्यक सभी प्रक्रियाओं का ख्याल रखता है, जिसे बाद में सारांशित किया जा सकता है और डेटा विशेषताओं की एक व्यापक रिपोर्ट के माध्यम से ydata-प्रोफाइलिंग के साथ तुलना की जा सकती है।
आने वाले डेटा को उचित रूप से संसाधित करने और प्रोफ़ाइल करने में सक्षम होने से डेटा स्कीमा और प्रारूपों में त्रुटियों के सुधार से लेकर वास्तविक दुनिया की गतिविधियों से उत्पन्न होने वाले अतिरिक्त मुद्दों को उजागर करने और कम करने तक, विभिन्न डोमेन में उपयोग के मामलों की एक बड़ी संख्या खुल जाती है, जैसे कि विसंगति का पता लगाना (उदाहरण के लिए, धोखाधड़ी या घुसपैठ / खतरों का पता लगाना), उपकरण की खराबी , और अन्य घटनाएं जो अपेक्षाओं से भटकती हैं (उदाहरण के लिए, डेटा बहाव या व्यावसायिक नियमों के साथ गलत संरेखण)।
अब, आप अपनी डेटा स्ट्रीम की खोज शुरू करने के लिए पूरी तरह तैयार हैं! हमें बताएं कि आपको कौन से अन्य उपयोग के मामले मिलते हैं, और हमेशा की तरह, बेझिझक हमें टिप्पणियों में एक पंक्ति लिखें, या हमें यहां खोजें
यह लेख फैबियाना क्लेमेंटे (सह-संस्थापक और सीडीओ @) द्वारा लिखा गया था
आपको संबंधित दस्तावेज़ों में ओएसएस पैकेजों के बारे में अतिरिक्त जानकारी मिल सकती है:
यहाँ भी प्रकाशित किया गया