Julia에서 시계열 데이터를 실시간(기분 정도)에 그리기

7191 단어 ShellScriptJulia

소개



실험이나 데모를 하고 싶을 때, 취득한 신호를 그 자리에서 가시화하고 싶은 요구가 있다고 생각합니다.
예를 들어 Arduino IDE의 시리얼 플로터와 같은 좋은 느낌의 드로잉 소프트웨어가 이미 있습니다.
이번에는 csv 파일에 저장된 시계열 데이터를 그리기를 원했기 때문에 간단한 스크립트를 만들었습니다.

타이틀에 「기분 정도」라고 거절한 것은,
「데드 타임을 넘지 않는 것을 보증한다」리얼타임성은 전혀 고려하고 있지 않기 때문입니다.

그렇지만, 이러한 용도의 스크립트를 조사하려고 하면, 결국 「실시간 그리기」로 검색하겠지요

할 수있는 것





시도한 환경



Mac Book의 Ubuntu 20.04 (Virtual Box) + Julia 1.41

고집한 곳


  • 플롯 점이 일정 수를 초과해도 계속 그립니다.
  • 플롯 점의 이동에 맞추어 x축(시간)도 움직인다

  • 그리기 스크립트


  • 적절하게 필요한 패키지를 Pkg.add() 해 주세요.
  • 사용 환경에서 qt5 설치가 필요합니다.

  • SignalPlot.jl
    
    using Plots
    using CSV
    
    gr(show = true)
    
    function main()
    
        # graph setting
        Title = "time-series data"
        Label = "random data"
        XLabel = "time (s)"
        YLabel = "number"
        # sampling time
        dt = 0.1
        # graph width(number of plotting point)
        width = 100
        # declear x, y
        x = dt:dt:dt*width
        y = zeros(width,1)
        x_offset = 0
    
        for i in 1:500
            data = CSV.read("tmp.csv",header=false)
            datalen = length(data.Column1)
            if datalen <= width
                y[1:datalen] = data.Column1
            else
                y = data.Column1[end-(width-1):end]
                x_offset = dt*(datalen-width)
            end
            display(plot(x + x_offset*ones(width,1),y,title = Title,label = Label,xlabel=XLabel,ylabel=YLabel))
        end
    end
    
    

    덤: 데모에 사용한 난수 생성 스크립트



    위의 드로잉 스크립트를 실행하기 전에 백그라운드 실행하십시오.
    100 이하의 정수는 샘플링주기 0.1 초마다 csv 파일에 저장됩니다.

    GenerateSignal.sh
    
    #! /bin/bash
    FILE=tmp.csv
    
    if [ -e $FILE ]; then
        rm $FILE
    fi
    
    while true
    do
        echo $(($(od -vAn -N1 -tu < /dev/urandom) % 101 )) >> $FILE
        sleep 0.1s
    done
    
    

    결론


  • 가상 머신상에서도 묘화 속도는 양호하고 만족하고 있습니다.
  • csv 파일로 시계열 데이터를 저장할 수 있는 기기, 어플리케이션에 대체로 적용할 수 있을 것 같습니다.
  • 렌더링 처리를 무한 루프로 해도 좋지만, 강제 종료할 수 없기 때문에 추천하지 않습니다.
  • 대규모 데이터를 취급하고 싶은 or 보다 고속으로 렌더링 하고 싶은 경우는,
    시계열 데이터를 바이너리 파일로 취급하면 좋을까 생각합니다.

  • 참고


  • CSV Tutorial
  • Plots Tutorial

  • 그래프를 그리는 방법 (stack overflow)

  • 난수 생성 방법 (사적 비망록 님)
  • 좋은 웹페이지 즐겨찾기