Como analisar eficientemente os resultados da simulação com vários graus de liberdade?

1

Eu tenho feito muitos testes de aplicativos, experimentando bibliotecas diferentes, índices de threading, distribuições de operações, etc ... Eu quero ser capaz de gerar rapidamente gráficos a partir dos meus dados de execução.

Os dados são enviados para um arquivo separado por tabulação que é conceitualmente dividido em uma metade esquerda e uma metade direita. Cada linha é uma configuração de execução separada.

A metade esquerda tem vários parâmetros de configuração e a metade direita é uma série de tempo de execução. (Por exemplo, podemos executar uma configuração 20 vezes para garantir uma média uniforme)

Eu quero rapidamente plotar gráficos desses dados e / ou calcular valores como desvio padrão.

Por exemplo, eu especificaria uma coluna na metade direita para ser usada como o eixo X, e o restante das meias colunas da direita seria usado para identificar a configuração de execução usada para gerar a linha. O eixo Y será sempre o tempo de execução (ou desempenho normalizado)

Por exemplo, o lado esquerdo pode ser

| Threads | Elements | AlgorithmA | AlgorithmB |
|---------+----------+------------+------------|
|       1 |      100 | t1a        | t1b        |
|       2 |      100 | t1a        | t1b        |
|       3 |      100 | t1a        | t1b        |
|       1 |   100000 | t1a        | t1b        |
|       2 |   100000 | t1a        | t1b        |
|       3 |   100000 | t1a        | t1b        |
|---------+----------+------------+------------|
|       1 |      100 | t2a        | t1b        |
|       2 |      100 | t2a        | t1b        |
|       3 |      100 | t2a        | t1b        |
|       1 |   100000 | t2a        | t1b        |
|       2 |   100000 | t2a        | t1b        |
|       3 |   100000 | t2a        | t1b        |
|---------+----------+------------+------------|
|       1 |      100 | t2a        | t2b        |
|       2 |      100 | t2a        | t2b        |
|       3 |      100 | t2a        | t2b        |
|       1 |   100000 | t2a        | t2b        |
|       2 |   100000 | t2a        | t2b        |
|       3 |   100000 | t2a        | t2b        |
|---------+----------+------------+------------|
|       1 |      100 | t1a        | t2b        |
|       2 |      100 | t1a        | t2b        |
|       3 |      100 | t1a        | t2b        |
|       1 |   100000 | t1a        | t2b        |
|       2 |   100000 | t1a        | t2b        |
|       3 |   100000 | t1a        | t2b        |
|---------+----------+------------+------------|

Se o eixo X fosse Threads, haveria 8 linhas de cada linha com 3 pontos de dados e, em seguida, filtrar apenas um tamanho de elemento. Se o eixo X fosse elementos, então haveria 16 linhas, cada linha com 2 pontos de dados, então eu filtraria para apenas um nível de thread.

Meu google fu falhou em encontrar um que eu gostasse, talvez eu esteja pesquisando as palavras-chave erradas ... então minhas perguntas são quais aplicativos você pode recomendar para resolver o meu problema e tornar meus dias menos repetitivos.

    
por Steven Feldman 20.03.2013 / 06:10

1 resposta

2

Você pode fazer praticamente tudo isso em Python com o IPython , matplotlib e pandas , com alguns statsmodels jogado em boa medida. Existem algumas outras dependências, como NumPy , leia os documentos.

Eu recomendo a leitura do Python para análise de dados , enquanto ele acompanha todos os pacotes que mencionei e mais, embora o conhecimento básico do Python seja assumido.

    
por 20.03.2013 / 06:30