시리즈에서 데이터 포인트 수를 줄이려면 어떻게합니까?


11

나는 10 년 이상 통계를 공부하지 않았으며 (그리고 기본 코스), 내 질문은 이해하기 어려울 것입니다.

어쨌든, 내가하고 싶은 일은 일련의 데이터 포인트 수를 줄이는 것입니다. x 축은 측정 시작 이후 밀리 초 수이며 y 축은 해당 지점의 판독 값입니다.

종종 수천 개의 데이터 포인트가 있지만 수백 개만 필요할 수도 있습니다. 내 질문은 : 데이터 포인트 수를 정확하게 줄이려면 어떻게해야합니까?

프로세스는 무엇입니까? (Google에서 할 수 있습니다) 선호하는 알고리즘이 있습니까 (C #에서 구현할 것입니다)

단서가 있기를 바랍니다. 적절한 용어가 부족하여 죄송합니다.


편집 : 자세한 내용은 여기에 있습니다 :

내가 얻은 원시 데이터는 심박수 데이터이며 마지막 비트 이후 밀리 초 수의 형태입니다. 데이터를 플로팅하기 전에 첫 번째 샘플에서 밀리 초 수를 계산하고 각 데이터 포인트 (60000 / timesincelastbeat)에서 bpm (분당 비트 수)을 계산합니다.

데이터를 시각화하고 싶습니다. 즉, 선 그래프로 플로팅합니다. 그래프의 포인트 수를 수천에서 수백으로 줄이려고합니다.

하나의 옵션은 시리즈에서 1 초마다 또는 5 초마다 평균 bpm을 계산하는 것입니다. 각 기간 (5 초 간격)에 적어도 하나의 샘플이 있음을 알면 매우 쉬웠을 것입니다.


나는 이것을 잊었다 : x 축을 따라 점은 간격이 다양합니다.

잘 모르겠습니다. y 축이 없습니까?

아 죄송합니다 잘못 입력했습니다. 나는 지금 그것을 위에서 변경했다.

또한 더 많은 정보를 제공해야한다고 생각합니다. 예를 들어, 여전히 그래프를 시각화 할 수 없습니다. 당신의 목표는 무엇입니까?

알았어 미안해. 위에 몇 가지 세부 정보를 추가했습니다.

답변:


10

점이 너무 많고 나머지 점을 부드럽게하는 방법에는 두 가지 문제가 있습니다.

샘플 희석

실시간으로 너무 많은 관측치가 도착하는 경우 항상 간단한 랜덤 샘플링 을 사용 하여 샘플을 희석 할 수 있습니다. 이것도 역시 사실이기 때문에 포인트의 수는 매우 커야합니다.

N 점이 있고 n 점만 원한다고 가정하십시오 . 그런 다음 불연속 균일 한 U (0, N-1) 분포 에서 n 개의 난수를 생성 합니다. 이것이 당신이 사용하는 포인트입니다.

이를 순차적으로 수행하려는 경우, 즉 각 지점에서 사용 여부를 결정하려면 확률이 p 인 점을 수락하십시오 . 따라서 p = 0.01로 설정 하면 평균적으로 1 점을 100으로 받아들입니다.

데이터가 고르지 않게 분산되어 있고 밀도가 높은 영역 만 얇게하려면 얇게 기능을 조금 더 정교하게 만드십시오. 예를 들어 p 대신 다음은 어떻습니까?

1pexp(λt)

어디 λ 양수이고 t마지막 관찰 이후의 시간입니다. 두 지점 사이의 시간이 큰 경우t점을 받아 들일 확률은 1입니다. 반대로 두 점이 서로 가깝다면 점을 받아 들일 확률은 다음과 같습니다.1p.

당신은 값을 실험해야합니다 λp.

다듬기

아마도 단순한 이동 평균 유형 체계와 같은 것입니다. 또는 다른 사람들이 제안한 것처럼 커널보다 매끄럽게 진행할 수 있습니다. 시나리오에서 갑작스런 하락이 매우 빨리 발생한다고 가정하기 때문에 너무 부드럽게하지 않도록주의해야합니다.

이런 종류의 것들에 사용할 수 있는 C # 라이브러리 가 있어야합니다 .

결론

필요한 경우 얇게 한 다음 부드럽게합니다.


아, 흥미롭지 만 예측할 수 있어야합니다. 즉, 데이터를 볼 때마다 같은 결과를 가져야합니다.

이 경우 선택한 점 의 n 인덱스를 생성하고 해당 인덱스를 저장하십시오.
csgillespie

또는 샘플링하기 전에 시드를 RNG에 저장하십시오.
Dirk Eddelbuettel

씨앗에 관한 더크의 해결책은 아마도 더 나은 선택 일 것입니다.
csgillespie

초당 평균을 계산하는 것은 괜찮지 만 특정 초에 대한 데이터가 없을 때 수행하는 작업입니다. 나는 그 전후의 몇 초부터 보간을 할 수 있다고 생각하지만, 이것에 대한 특정 (명명 된) 방법으로 좋을 것이므로 이미 발명 된 것을 발명하려고하지 않습니다.

9

글쎄, 나는 당신이 찾고있는 단어가 "샘플링"이라고 생각하지만, 왜 당신이 그것을하고 싶어하는지 모르겠습니다. 수천 개의 데이터 포인트는 그리 많지 않습니다. 아니면 같은 간격으로 더 적은 수의 점을 그리는 것입니까? 보통은 "binning"이라고합니다.

시각화 생성 목표가 있습니까? 이 경우 원시 데이터를 유지하고 산점도로 플로팅 한 다음 일종의 중심 경향 (회귀선, 스플라인 등)을 오버레이하여 테이크 홈 메시지를 전달해야 할 수 있습니다.

아니면 어떤 방식으로 결과를 수치 적으로 요약하는 것이 목표입니까? 이 경우 문제점을보다 자세히 설명 할 수 있습니다.


그렇습니다. 시각화는 내가 원하는 것입니다. 질문에 더 많은 정보를 추가했습니다.

스무딩 라인을 사용하여 원시 데이터를 플로팅합니다.
JoFrhwld

스무딩 라인을 사용하여 원시 데이터 플로팅 --- 시간에 따른 BPM의 변화를 별도의 시각화로 플롯 할 수도 있습니다.
John

5

평균을 계산하면 단순히 데이터 포인트 수를 줄이는 것과 다른 데이터 세트가 생성됩니다. 분당 하나의 하트 비트가 다른 하트 비트보다 훨씬 빠르면 스무딩 프로세스를 통해 신호가 손실됩니다.

125-125-0-125-125를 100으로 요약하면 데이터가 말하는 이야기가 스무딩을 통해 다릅니다.

때로는 심장이 박동을 건너 뛰기도하는데 이것이 흥미있는 것은 플롯 된 심박수 데이터를보고 싶어하는 것입니다.

따라서와 같은 공식으로 두 점 사이의 거리를 계산할 것을 제안합니다 d=sqrt((time1-time2)^2 + (bpm1-bpm2)).

프로그램에서 최소 거리를 설정했습니다. 그런 다음 데이터를 반복하고 매 지점마다 d가 최소 거리보다 작은 다음 지점을 모두 삭제합니다.

시간 단위와 bpm이 같지 않기 때문에 단위를 의미있게 확장하는 방법을 찾는 방법에 대해 생각할 수 있습니다. 이 작업을 올바르게 수행하려면 결국 그래프를 해석하고 필수적인 것으로 간주되는 정보를 물어보아야하는 의사와상의해야합니다.


재미있는 게시물. 저도 살펴볼 것입니다. 당신 말이 맞을 것입니다.

2

BPM이 많은 샘플에서 동일하게 유지되는 경우 (또는 걱정하지 않는 방식으로 무한 변경되는 경우) 실제로 관심있는 유효 숫자로 데이터를 자른 다음 Run Length Encoding을 수행 할 수 있습니다.

예를 들어, R에서이 데이터는 다음과 같습니다.

0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

이 출력이

rle(data)
Run Length Encoding
  lengths: int [1:3] 10 15 15
  values : num [1:3] 0 1 2

1

충분한 정보를 제공하지 않습니다. 왜 데이터 포인트를 줄이고 싶습니까? 요즘 몇 천 개는 아무것도 아닙니다.

동일한 데이터를 볼 때마다 동일한 결과를 원할 경우 평균을 간단히 계산할 수 있습니다. x 축에 가변 간격이 있습니다. 어쩌면 당신은 일관성을 유지하려고 노력하고 있습니까? 이 경우 빈 너비를 50msec 또는 100으로 설정 한 다음 그 안에있는 모든 점의 평균을 구합니다. 데이터 포인트를 원하는 세트 크기로 줄이려면 빈 너비를 크게 만드십시오.

왜 데이터를 삭제해야하는지에 대한 이유없이 대답하기 란 정말 어려운 질문입니다.


알았어 미안해. 위에 몇 가지 세부 정보를 추가했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.