2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4  След.
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение27.11.2021, 13:35 
Заслуженный участник


18/09/21
1756
Главное - надёжнее. Меньше шанс ошибку сделать.

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение27.11.2021, 13:46 


09/05/16
138
Alm99 в сообщении #1540739 писал(а):
Ну смотрите, предположим, есть вот такой файл:

https://drive.google.com/file/d/1PiU75a ... sp=sharing

В принципе, его можно считать и на R без предварительной обработки:
Код:
get.tables <- function(lines) { # возвращает список из объектов класса data.frame
   # таблицы начинаются словом "Item"
   start_tbl <- grep('^ +Item', lines)
   # и заканчиваются перед словом "Predicted"
   end_tbl <- grep('^ +Predicted', lines)
   # (и тех, и тех вхождений должно быть поровну)
   stopifnot(length(start_tbl) == length(end_tbl))

   # по границам каждой таблицы...
   lapply(seq_along(start_tbl), function(i) {
      read.table( # ...обрежем и передадим стандартной функции
         text = lines[start_tbl[i]:(end_tbl[i]-1)],
         row.names = NULL, check.names = FALSE
      )
   })
}

get.done <- function(lines) # возвращает матрицу из двух столбцов, E и cycles
   # вырезать 2 интересующих части и привести к матрице
   t(simplify2array(Map(function(x) as.numeric(x[2:3]),
      # отфильтровать строки, подпадающие под регулярное выражение
      Filter(length, regmatches(lines, regexec(
         '^ *SCF Done: *E\\([^)]*\\) *= *([\\d.-]+) *A.U. *after *(\\d+) *cycles *$',
         lines, perl = TRUE
      )))
   )))

lines <- readLines('1_HSO4-1_H2SO4-1_DMA-1_HNO3--d_02088_d_SEEDER-1FB2X6F7Q-CBS.out')
get.tables(lines)
get.done(lines)

Возможно, даже проще, чем Ваш файл из первого сообщения. Код, конечно, немного хрупкий, но так всегда с форматами без спецификаций и регулярными выражениями для их разбора.

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение27.11.2021, 14:28 
Заслуженный участник
Аватара пользователя


11/12/05
10059
Alm99 в сообщении #1540727 писал(а):
И еще такой вопрос, если мне потребуется для каждого из параметров выбирать еще и номер шага в поле step number, мне же достаточно будет просто выполнить те же самые команды индексации:
Да, можно так, хотя второе условие лишнее, достаточно одного сравнения
Код:
idx_stepn <- which(data$V1 == "Step") .


Причина, по которой я использовал комбинацию
Код:
which(data[math]$V1 == "Max" & data$[/math]V2 == "F" )
-- это потому, что если я использую только одно
Код:
which(data$V1 == "Max" )
то получу номера строк не только c Мах F но и c Мах D, так как D и F оказались в другом столбце V2 (аналогично и для RMS). То есть получу пересортицу.

В случае же с количеством шагов (Step No) вам не нужно проверять есть ли во втором столбце слово "number". Во всяком случае, я каких-либо других слов после Step в Вашем файле не встречал.

Alm99 в сообщении #1540727 писал(а):
И как в R определять длину массива или вектора

> vec <- c(1,2,7,9,16)
> vec
[1] 1 2 7 9 16
> length(vec)
[1] 5


> vec_char <- c("Alm99","Dan","zykov","dxdy")
> vec_char
[1] "Alm99" "Dan" "zykov" "dxdy"
> length(vec_char)
[1] 4


Для матриц используйте dim()

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение27.11.2021, 16:12 
Заслуженный участник
Аватара пользователя


11/12/05
10059
Alm99 в сообщении #1540739 писал(а):
zykov
Ну смотрите, предположим, есть вот такой файл:

https://drive.google.com/file/d/1PiU75a ... sp=sharing


Кстати, такой файл проще парсится перлом, чем собранное в нерегулярную таблицу. Вот попробуйте такой скрипт, который сразу разделяет таб-ом поля и посмотрите результат в Екселе. Всё ли он делает правильно?

Код:
#!/usr/bin/perl
use strict;
use warnings;

my $Step = "Step number";
my $Max_Force = "Maximum Force";
my $Max_Disp = "Maximum Displacement";
my $RMS_Force = "RMS     Force";
my $RMS_Disp = "RMS     Displacement";
my $Thresh = "Threshold";
my $SCF = "SCF Done";
my @list;
my @all_nums;


my $filename = '1_HSO4-1_H2SO4-1_DMA-1_HNO3--d_02088_d_SEEDER-1FB2X6F7Q-CBS.out';

open(FH, '<', $filename) or die $!;

while(<FH>){

    if(index($_, $Step) != -1)
    {     
        @list = split(/\s+/, $_);
        print "Step number\t$list[3]\t$list[5]\t$list[9]\n";
    }   

    if(index($_, $Thresh) != -1)
    {
        @list = split(/\s+/, $_);
        print "$list[1]\t$list[2]\t$list[3]\t$list[4]\n";
    }

    if(index($_, $Max_Force) != -1)
    {
        @list = split(/\s+/, $_);
        print "$Max_Force\t$list[3]\t$list[4]\t$list[5]\n";
    }

    if(index($_, $Max_Disp) != -1) 
    {
        @list = split(/\s+/, $_);
        print "$Max_Disp\t$list[3]\t$list[4]\t$list[5]\n";
    }
       
    if(index($_, $RMS_Force) != -1)
    {
        @list = split(/\s+/, $_);
        print "$RMS_Force\t$list[3]\t$list[4]\t$list[5]\n";
    }

    if(index($_, $RMS_Disp) != -1)
    {
        @list = split(/\s+/, $_);
        print "$RMS_Disp\t$list[3]\t$list[4]\t$list[5]\n";
    }
   
    if(index($_, $SCF) != -1)
    {
        my @all_nums    = $_ =~ /(\d+)/g;
        print "E = \t-$all_nums[2].$all_nums[3]\nTotal cycles\t$all_nums[4]\n";
    }

}


close(FH);


Если нужно использовать другой файл, отредактируйте строку my $filename = '1_HSO4-1_H2SO4-1_DMA-1_HNO3--d_02088_d_SEEDER-1FB2X6F7Q-CBS.out';

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение27.11.2021, 16:37 
Заслуженный участник


18/09/21
1756
Или если читаете только один файл, то читайте STDIN.

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение27.11.2021, 17:32 


17/03/20
183
Dan B-Yallay
А в каком формате он выводит ( в какой файл), просто я скрипт то запустил, а выходного файла не вижу?

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение27.11.2021, 17:56 
Заслуженный участник
Аватара пользователя


11/12/05
10059
Alm99 в сообщении #1540781 писал(а):
А в каком формате он выводит ( в какой файл), просто я скрипт то запустил, а выходного файла не вижу?
Он выводит на экран. Чтобы результат отправить в файл надо
perl sript.pl > result.txt

где "script.pl"-- это имя, с которым Вы сохранили предложенный мною выше скрипт.

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение27.11.2021, 17:58 
Заслуженный участник


18/09/21
1756
Он же в стандартный выходной поток печатает. В консоли не видите результат?
Это можно в файл перенаравить ">file.txt".

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение27.11.2021, 18:10 


17/03/20
183
Dan B-Yallay
Ну в экселе он так отображает
Изображение

-- 27.11.2021, 18:10 --

zykov
Да, видел в консоли, тупанул...

-- 27.11.2021, 18:18 --

aitap
Т.е. он каждый шаг выводит в виде матрицы, а получается извлекать результат и записывать в другие массивы также проверкой построчно, как и предлагает Dan B-Yallay? Это же тип данных list

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение27.11.2021, 18:29 
Заслуженный участник
Аватара пользователя


11/12/05
10059
Alm99 в сообщении #1540796 писал(а):
Ну в экселе он так отображает

При открытии файла Екселем укажите разделителем только Tab:
Dan B-Yallay в сообщении #1540772 писал(а):
Вот попробуйте такой скрипт, который сразу разделяет таб-ом поля

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение27.11.2021, 18:30 


17/03/20
183
Dan B-Yallay
И еще есть тупой вопрос, не знаю как в perl, но по идее, если передать несколько имен в my $filename то вернет мне только последнее, или же просто несколько раз можно будет вызвать...

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение27.11.2021, 18:38 
Заслуженный участник
Аватара пользователя


11/12/05
10059
Alm99 в сообщении #1540800 писал(а):
если передать несколько имен в my $filename то вернет мне только последнее, или же просто несколько раз можно будет вызвать...
по-моему лучше будет задействовать цикл. Можно организовать это дело внутри перлового, но тогда надо будет привлекать дополнительные библиотеки по прочёсыванию локальной папки на предмет составления перечня имеющихся файлов. Либо писать скрипт на баше, в котором работа c директориями и файлами намного более интуитивна.

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение27.11.2021, 18:41 


09/05/16
138
Alm99 в сообщении #1540796 писал(а):
Т.е. он каждый шаг выводит в виде матрицы, а получается извлекать результат и записывать в другие массивы также проверкой построчно, как и предлагает Dan B-Yallay? Это же тип данных list

Не совсем понимаю, что именно Вы хотите сделать? Данные уже извлечены из файла и записаны в массивы, с которыми можно работать на R: tables <- get.tables(readLines(filename)); print(tables[[42]]); Если Вы хотите записать их снова в текстовый файл, да, это можно сделать при помощи цикла по всем элементам матрицы и списка, но потом этот файл придётся обратно разбирать. Ещё есть save()/saveRDS, который сохраняет бинарные файлы с произвольными структурами данных внутри, их можно прочитать при помощи load()/readRDS.

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение27.11.2021, 18:46 
Заслуженный участник
Аватара пользователя


11/12/05
10059
aitap в сообщении #1540805 писал(а):
Не совсем понимаю, что именно Вы хотите сделать?
В стартовом сообщении прикреплена картинка. Hужно из каждой мини-таблицы извлечь красные данные отдельно, синие отдельно и т.д. чтобы потом работать с ними.

 Профиль  
                  
 
 Re: Извлечение данных из файла и визуализация в R
Сообщение27.11.2021, 18:52 


17/03/20
183
aitap

Dan B-Yallay
Да, все верно, не успел раньше написать)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 59 ]  На страницу Пред.  1, 2, 3, 4  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group