Титла: Обработка на данни от апарат Публикувано от: Yasen6275 в Aug 26, 2015, 22:44 Предполагам че това което искам е елементарно, но познанията ми с awk, sed и подобни е практически нулеви. Може и да има и по-човешки начин да се направи от това което съм намислил, но поне аз не знам. Ако има ще съм благодарен да го обясните.
Апарат изплюва данните в директория с името на пробата и файл с име "data.txt" в нея. С цел статистическа проверка на апарата са пуснати много измервания при една и съща концентрация, за няколко различни концентрации. Всичките тези данни трябва да влезнат в една електронна таблица. Файла изглежда по следния начин: Код Data File реда съвпада с името на директорията. Концентрацията е преди "mg", а номера на измерването е след тирето след "mg" и принадлежността и към едната или другата група (има или няма s пред номера на измерването). Идеята ми е накрая да имам по един csv файл за всеки един ред от таблицата ( PCB 194, Hexaconasole...). Колоните трябва да са: номер на измерването (ако има s да се махне), концентрация (взета от името), RT от таблицата във файла (една колона за пробите без s в името и една за със), Response (пак по една за със/без s). Как си представям аз решението. 1. Преименувам всички файлове с име еднакво с това на директорията (и ги местя в една директория?). 2. Махам първите 20 и последните 5 реда от всички файлове 3. Обхождам файловете 9 пъти (по един за всеки ред от таблицата) и извличам от името или съдържанието нужните данни и ги записвам в нов файл. Ще съм благодарен за всякакви насоки. Титла: Re: Обработка на данни от апарат Публикувано от: ji в Aug 29, 2015, 09:27 Аз бих използвал регулярни изрази за парсване на данните .
Един за мета иформацията на файла и един за данните от измерването. За скоростна реализация, ще изполвам javascript. Първо ще дебъгна (изтествам) изразите в конзолата firefox/chrome, после ще имплементирам набързо заданието с 3-4 финкции под nodejs. Титла: Re: Обработка на данни от апарат Публикувано от: jet в Aug 29, 2015, 17:27 Аз бих го импортирал в MySQL временна таблица
Код
после с цикли (например php, perl или pyton - там каквото знаеш) обикаляш таблицата и попълваш line - да расте от 1 до 37, sample еднакъв за всички 37 редове със данните от ред 7, date, time съответно с данните от ред 14. С цикъл попълваш и target_compound, rt, QIon, Response, Conc, Units - но САМО за редовете 21-29, другите редове не се попълват. Само за редовете 21-29 се попълва поле is_data като "истина" например, всички други с "лъжа" Можеш да си добавиш и още полета например за: оператор, ALS Vial, Sample Multiplier, file name, quant title, response via, ... etc Така попълнената таблица се апендва към голямата таблица със всички измервания до момента със същата структура. Така освен, че ще имаш и отчетите в оригиналния им вид, но ще можеш да си правиш MySQL заявки и статистики за минали периоди, само за определени компоненти, по оператори, по макс. или минималин стойности, да усредняваш, да сортираш етц. Все неща, които после ще се бориш да правиш в Ексел-а Експорт можеш да правиш в csv файл и от там в Ексел Например: дай всички n-Dodecane, за период от дата... до дата само за is_data = true Ако имаш Апаче на машината, можеш да направиш форми и визуализации и download на резултата Титла: Re: Обработка на данни от апарат Публикувано от: Yasen6275 в Aug 30, 2015, 08:08 Сямо не мога да разбера защо ме псувате на влашки и двамата. ;)
Това не е нещо което се върши често. Максимум веднъж в годината а може и по-рядко. За това си мислех за нещо по-простичко. За момента успях да си преместя/преименувам файловете както аз искам и да скълцам излишните редове с командите: Код С цел улесняване на живота премахнах белите полета в имената на компонентите с команди подобни на Код , и преименувах файловете така че да има "-" пред mg с: Код и превърнах файловете от space delimited в tab delimited с: Код
И от тук на татък май трябва да се правя на баш майстор, защото нещата загрубяват и с едноредови команди май няма как да стане. С малко врътки (копиране на файлове с нова директория, махане на "-s" от името, слагане на ".s" след ".txt" и връщане на файловете в директорията) си подготвям нещата за по-лесно извличане на данните. И след 2 часа мъка по измислянето (20 мин) и дебъгването на скрипта се получи. Код Надявам се да не забравя къде съм го описал :) и да съм бил полезен на някого. Титла: Re: Обработка на данни от апарат Публикувано от: 4096bits в Aug 30, 2015, 13:48 $ echo hello | md5sum | cut -f 1 | wc -c
36 Дано това не те бърка нещо. Титла: Re: Обработка на данни от апарат Публикувано от: gat3way в Aug 30, 2015, 14:26 Защо ви е да се тормозите с многократно изпълнение на команди върху набор от файлове, само ще си отровите живота в някой частен случай в който нов файл се появява докато се изпълняват командите.
Защо ви е да се тормозите с регулярни изрази след като форматът не е толкова детерминиран и горе в хедъра на репорта не е сигурно че няма да ви излязат търсените низове, за които ровите долу в показанията? После вероятно не е и известен, например не е ясно какво бълва апарата ако има грешка при вземане на пробата. Затва най-добре един скрипт дето изчита рекурсивно всички текстови файлове в една директория и поддиректориите и и парсване ред по ред, с някакво елементарно пазене на състояние (дали сме във хедъра, дали сме в измерванията), проверки за валидност накрая (дали определени полета имат стойност) и генериране на csv реда в рамките на едно обхождане на файла, не на няколко такива. Това не би трябвало да е особено сложно. Титла: Re: Обработка на данни от апарат Публикувано от: Yasen6275 в Aug 30, 2015, 14:57 $ echo hello | md5sum | cut -f 1 | wc -cНе разбрах какво те притеснява теб. Защо ви е да се тормозите с многократно изпълнение на команди върху набор от файлове, само ще си отровите живота в някой частен случай в който нов файл се появява докато се изпълняват командите.Идеята на занятието не е да работи в реално време, а при приключила работа на апарата да се извлекат данните. Защо ви е да се тормозите с регулярни изрази след като форматът не е толкова детерминиран и горе в хедъра на репорта не е сигурно че няма да ви излязат търсените низове, за които ровите долу в показанията? После вероятно не е и известен, например не е ясно какво бълва апарата ако има грешка при вземане на пробата.Хедъра и футъра на рапорта се реже преди да се ползват регулярните изрази. Вероятно нещата могат да се прецизират за изследване в което компонентите са повече или по-малко от девет. Грешка при вземане на пробата води до спиране на апарата. Няма как да се тръгне да се обработват данните. Затва най-добре един скрипт дето изчита рекурсивно всички текстови файлове в една директория и поддиректориите и и парсване ред по ред, с някакво елементарно пазене на състояние (дали сме във хедъра, дали сме в измерванията), проверки за валидност накрая (дали определени полета имат стойност) и генериране на csv реда в рамките на едно обхождане на файла, не на няколко такива. Това не би трябвало да е особено сложно.Никой няма за цел пълна автоматизация. Задачата възникна поради ограничения на софтуера с който идва апарата. Не позволява да се обработват повече от 20 точки за компонент. При положение че имам 6 концентрации и за всяка имам 20 измервания, съм с точно 100 точки над лимита на софтуера. И както казах процедурата се прави относително рядко. За нормалното ползване на апарата, 20-те точки на компонент са повече от достатъчно. Титла: Re: Обработка на данни от апарат Публикувано от: Dojnow в Aug 30, 2015, 20:48 Код: function D = conv_fn(fn) Титла: Re: Обработка на данни от апарат Публикувано от: Yasen6275 в Aug 31, 2015, 18:50 Това на какъв език е?
Титла: Re: Обработка на данни от апарат Публикувано от: Dojnow в Sep 01, 2015, 21:09 Цитат Това на какъв език е?Matlab. Апаратът, освен четим за хората файл, не издава ли и друг тип. Ако Compounds е с друг брой на думите в ред, може да се настроят константите във втория ред. Ако след всяко измерване са различни ето по-универсална функция: Код: function D=conv_fn(fn) |