Тәжірибелі деректер кәсіпқойының маңызды дағдыларының бірі деректер сапасы мен сенімділігін қамтамасыз ететін үлкен деректер жиынын тиімді өңдеу болып табылады. Деректер кез келген деректер жүйесінің орталық және негізгі бөлігі болып табылады және біздің саудамыздың басқа аспектілерінде сізде қандай жақсы дағдылар болса да, бұл сіз назардан тыс қалдыра алмайтын нәрсе.
Бұл мақалада мен Deequ кітапханасын және статистикалық әдістерді пайдалана отырып, үлкен деректер жиынында QA тексерулерін орындаудың сенімді әдістерін зерттеймін. Төменде түсіндіретін әдістерді біріктіру арқылы сіз деректер тұтастығын сақтай аласыз, деректерді басқару тәжірибелеріңізді жақсарта аласыз және төменгі ағындық қолданбалардағы ықтимал мәселелердің алдын аласыз.
Масштабтағы деректер сапасын қамтамасыз ету қиын міндет болып табылады, әсіресе таратылған файлдық жүйелерде немесе деректер қоймаларында сақталған миллиардтаған жолдармен жұмыс істегенде. Deequ кітапханасы бұл мәселені шешуге арналған заманауи және жан-жақты құрал болып табылатын Spark негізінде жасалған ашық бастапқы деректер профилін жасау және QA жүйесі. Оны ұқсас құралдардан ерекшелендіретін нәрсе - кең ауқымды деректер жиынын тиімді өңдеу үшін бөлінген өңдеу қуатын пайдалана отырып, Spark-пен үздіксіз интеграциялау мүмкіндігі.
Оны қолданып көргенде, оның икемділігі жан-жақты қамтуды қамтамасыз ете отырып, нақты талаптарыңызға бейімделген күрделі тексеру ережелерін анықтауға қалай мүмкіндік беретінін көресіз. Сонымен қатар, Deequ деректер сапасы мәселелерін анықтауға және белсенді түрде шешуге көмектесетін ауқымды өлшемдер мен аномалияларды анықтау мүмкіндіктерін ұсынады. Үлкен және динамикалық деректер жинақтарымен жұмыс істейтін деректер мамандары үшін Deequ - швейцариялық пышақ шешімі. Оны қалай пайдалануға болатынын көрейік.
Deequ кітапханасын орнату және деректерді профильдеу төңірегінде пайдалану жағдайлары туралы қосымша мәліметтерді осы жерден алуға болады. Қарапайымдылық үшін, бұл мысалда біз жай ғана бірнеше ойыншық жазбаларын жасадық:
val rdd = spark.sparkContext.parallelize(Seq( Item(1, "Thingy A", "awesome thing.", "high", 0), Item(2, "Thingy B", "available at http://thingb.com", null, 0), Item(3, null, null, "low", 5), Item(4, "Thingy D", "checkout https://thingd.ca", "low", 10), Item(5, "Thingy E", null, "high", 12))) val data = spark.createDataFrame(rdd)
Деректер қолданбаларының көпшілігі NULL емес мәндер және бірегейлік сияқты деректер атрибуттары туралы жасырын болжамдармен келеді. Deequ көмегімен бұл болжамдар бірлік сынақтары арқылы анық болады. Міне, кейбір жалпы тексерулер:
Жолдар саны: Деректер жиынында жолдардың белгілі бір саны бар екеніне көз жеткізіңіз.
Төлсипаттың толықтығы: id және productName сияқты төлсипаттардың ешқашан NULL болмайтынын тексеріңіз.
Төлсипат бірегейлігі: идентификатор сияқты белгілі бір атрибуттардың бірегей екеніне көз жеткізіңіз.
Мән ауқымы: басымдық және numViews сияқты атрибуттардың күтілетін ауқымдарға жататынын растаңыз.
Үлгіні сәйкестендіру: сипаттамалар күткенде URL мекенжайлары бар екенін тексеріңіз.
Статистикалық сипаттар: сандық атрибуттардың медианасының нақты критерийлерге сәйкес келетініне көз жеткізіңіз.
Deequ көмегімен бұл тексерулерді қалай жүзеге асыруға болады:
import com.amazon.deequ.VerificationSuite import com.amazon.deequ.checks.{Check, CheckLevel, CheckStatus} val verificationResult = VerificationSuite() .onData(data) .addCheck( Check(CheckLevel.Error, "unit testing my data") .hasSize(_ == 5) // we expect 5 rows .isComplete("id") // should never be NULL .isUnique("id") // should not contain duplicates .isComplete("productName") // should never be NULL // should only contain the values "high" and "low" .isContainedIn("priority", Array("high", "low")) .isNonNegative("numViews") // should not contain negative values // at least half of the descriptions should contain a url .containsURL("description", _ >= 0.5) // half of the items should have less than 10 views .hasApproxQuantile("numViews", 0.5, _ <= 10)) .run()
Осы тексерулерді орындағаннан кейін Deequ оларды деректердегі көрсеткіштерді есептеу үшін орындайтын Spark тапсырмаларының сериясына аударады. Содан кейін ол шектеулердің деректерде сақталатынын көру үшін осы көрсеткіштерде бекіту функцияларын (мысалы, өлшемді тексеру үшін _ == 5) шақырады. Сынақта қателер табылғанын білу үшін «verificationResult» нысанын тексере аламыз:
import com.amazon.deequ.constraints.ConstraintStatus if (verificationResult.status == CheckStatus.Success) { println("The data passed the test, everything is fine!") } else { println("We found errors in the data:\n") val resultsForAllConstraints = verificationResult.checkResults .flatMap { case (_, checkResult) => checkResult.constraintResults } resultsForAllConstraints .filter { _.status != ConstraintStatus.Success } .foreach { result => println(s"${result.constraint}: ${result.message.get}") } }
Мысалды орындасақ, келесі нәтижені аламыз:
We found errors in the data: CompletenessConstraint(Completeness(productName)): Value: 0.8 does not meet the requirement! PatternConstraint(containsURL(description)): Value: 0.4 does not meet the requirement!
Сынақ біздің болжамдарымыздың бұзылғанын анықтады! productName төлсипатының мәндерінің 5-тен 4-і (80%) ғана бос емес және сипаттама төлсипатының 5 мәнінің тек 2-сінде (яғни, 40%) ғана URL мекенжайы болды. Бақытымызға орай, біз сынақтан өтіп, қателерді таптық; біреу дереу деректерді түзетуі керек!
Deequ деректерді тексеру үшін сенімді негізді ұсынса да, статистикалық әдістерді біріктіру QA тексерулерін одан әрі жақсарта алады, әсіресе деректер жиынының жинақталған көрсеткіштерімен айналысатын болсаңыз. Деректер сапасын бақылау және қамтамасыз ету үшін статистикалық әдістерді қалай қолдануға болатынын көрейік.
ETL (шығару, түрлендіру, жүктеу) процесі күнделікті жоспарланған тапсырмада N жазбаны жасайтын бизнес сценарийін қарастырыңыз. Қолдау топтары жазбалар санында елеулі ауытқу болса, ескертуді көтеру үшін QA тексерулерін орнатқысы келуі мүмкін. Мысалы, егер процесс әдетте екі ай ішінде күн сайын 9500-ден 10500-ге дейінгі жазбаларды жасаса, кез келген елеулі ұлғаю немесе азаю негізгі деректерге қатысты мәселені көрсетуі мүмкін.
Біз осы шекті анықтау үшін статистикалық әдісті пайдалана аламыз, бұл процесс қолдау көрсету тобына ескертуді көтеруі керек. Төменде екі айдағы жазбаларды бақылаудың суреті берілген:
Мұны талдау үшін күнделікті өзгерістерді байқау үшін жазбалар саны деректерін түрлендіруге болады. Бұл өзгерістер, әдетте, келесі диаграммада көрсетілгендей, нөлдің айналасында тербеледі:
Бұл өзгеру жылдамдығын қалыпты үлестіріммен бейнелейтін болсақ, ол деректердің қалыпты таралғанын көрсететін қоңырау қисығын құрайды. Күтілетін өзгеріс шамамен 0%, стандартты ауытқуы 2,63% құрайды.
Бұл талдау жазбалар саны әдетте 90% сенімділікпен -5,26% пен +5,25% диапазонында болатынын көрсетеді. Осының негізінде жазбалар саны осы ауқымнан ауытқыса, уақтылы араласуды қамтамасыз ете отырып, ескертуді көтеру ережесін орнатуға болады.
Е төлсипаты қамту аймағы NULL емес мәндердің деректер жиынының суреті үшін жалпы жазба санына қатынасын білдіреді. Мысалы, 100 жазбаның 8-інде белгілі бір төлсипат үшін NULL мәні болса, сол төлсипаттың қамтуы 92% құрайды.
Күнделікті өнім кестесінің суретін жасайтын ETL процесі бар басқа бизнес жағдайын қарастырайық. Біз өнім сипаттамасы атрибуттарының қамтылуын бақылағымыз келеді. Егер қамту белгілі бір шекті мәннен төмен түссе, қолдау көрсету тобына ескерту керек. Төменде екі айдағы өнім сипаттамалары үшін атрибуттарды қамтудың көрнекі көрінісі берілген:
Қамтудағы абсолютті күнделікті айырмашылықтарды талдай отырып, біз өзгерістер нөлге жуық тербелетінін байқаймыз:
Бұл деректерді қалыпты үлестірім ретінде көрсету оның шамамен 0% күтілетін өзгеріспен және 2,45% стандартты ауытқуымен қалыпты түрде таратылатынын көрсетеді.
Көріп отырғанымыздай, бұл деректер жиыны үшін өнім сипаттамасы төлсипатының қамтуы әдетте 90% сенімділікпен -4,9%-дан +4,9%-ға дейін ауытқиды. Осы көрсеткішке сүйене отырып, егер қамту осы ауқымнан ауытқыса, ескертуді көтеру ережесін орнатуға болады.
Маусымдық немесе трендтер сияқты факторларға байланысты елеулі өзгерістерді көрсететін деректер жиынымен жұмыс істесеңіз, дәстүрлі статистикалық әдістер жалған ескертулерді тудыруы мүмкін. Уақыт қатарларының алгоритмдері QA тексерулерінің дәлдігі мен сенімділігін арттыра отырып, неғұрлым нақтыланған тәсілді ұсынады.
Ақылға қонымды ескертулер жасау үшін, біреуін пайдалануға болады
Holt-Winters көмегімен трендті де, маусымдық үлгілерді де көрсететін күнделікті сатылымдарды мысқылдап көрейік:
import pandas as pd from statsmodels.tsa.holtwinters import ExponentialSmoothing # Load and preprocess the dataset data = pd.read_csv('sales_data.csv', index_col='date', parse_dates=True) data = data.asfreq('D').fillna(method='ffill') # Fit the Holt-Winters model model = ExponentialSmoothing(data, trend='add', seasonal='add', seasonal_periods=365) fit = model.fit() # Forecast and detect anomalies forecast = fit.fittedvalues residuals = data - forecast threshold = 3 * residuals.std() anomalies = residuals[abs(residuals) > threshold] print("Anomalies detected:") print(anomalies)
Бұл әдісті пайдалана отырып, сіз QA тексерулеріне неғұрлым нюансты тәсілді қамтамасыз ете отырып, деректер сапасы мәселелерін көрсетуі мүмкін елеулі ауытқуларды анықтай аласыз.
Бұл мақала үлкен деректер жинақтары үшін QA тексерулерін тиімді жүзеге асыруға көмектеседі деп үміттенемін. Deequ кітапханасын пайдалану және статистикалық әдістер мен уақыт қатарларының алгоритмдерін біріктіру арқылы сіз деректердің тұтастығы мен сенімділігін қамтамасыз ете аласыз, нәтижесінде деректерді басқару тәжірибесін жақсарта аласыз.
Жоғарыда сипатталған әдістерді енгізу ағынды қолданбалардағы ықтимал мәселелердің алдын алуға және деректер жұмыс үрдістерінің жалпы сапасын жақсартуға көмектеседі.