2011-07-29 6 views
0

MYSQL (또는 루비의 계산 된 값 중 일부)의 행에서 값 분포를 계산하는 가장 좋은 방법은 무엇입니까?Rails/MySQL에서 값의 분포를 계산하십시오.

예제는 사이트를 통해 보낸 메시지 길이입니다. 그래서 우리는 모든 메시지를 살펴보고이 메시지가 100 자 길이, 1000 등인 것을 볼 수 있습니다.

그런 다음 주어진 메시지에 대해 "이 메시지는 길이에 대한 90 백분위 수에 해당합니다"와 같이 %로 돌아가고 싶습니다. 다른 메시지.

주의 사항

  • 이 그렇게 단순 평균은
  • 분포가 빠른 조회에 어떻게 든 캐시해야 여기 충분하지 않을 것 선형 분포는 이러한 분포 수십에서 끌어해야 할 수도 있습니다, 필요하지 않습니다 단일 페이지로드

루비의 일부 통계 패키지/보석 또는이 밖의 좋은 예가 있습니까? 감사!

답변

0

계산 문제 데이터의 표준 편차와 평균을 구하고 역 정규 룩업을 수행하는 것은 매우 제한적인 가정을하고 있다는 것입니다. 데이터가 정상적이지 않은 경우 어떻게해야합니까? 이것이 꽤 나쁜 가정 인 많은 경우가 있습니다.

이 아닌 매개 변수가 아닌의 질문에 이상적으로 대답하고 싶습니다. 즉, 일부 가정을 사용하지 않아도됩니다. 이 작업을 수행하는 한 가지 방법은 MySQL의보기를 사용하는 것입니다

http://www.mysqltutorial.org/mysql-views-tutorial.aspx

당신은 테이블의 각 행의 메시지 길이에 대한 백분위를 계산하려는 가정을 수행 할 수 있습니다 행에 대해 계산 MySQL의보기를 만들어보십시오 i, i 행의 메시지 길이보다 작거나 같은 다른 메시지 길이의 수. 표가 삽입 될 때마다 표가 한 번 업데이트되므로 조회가 빨라집니다. 자신의 "# 메시지가보다 작거나 같은 길이를 만들기

  1. :

    는 MySQL을보기가 계산에 너무 느리게하는 경우, 당신은 또한 데이터 액세스 계층에 쓰기로 다음과 같은 논리를 삽입 시도 할 수 있습니다 나 "열에.
  2. 새 행 삽입시 적절한 SQL 수식을 사용하여이 행에 대해 "# 이하의 메시지 길이"열을 채 웁니다.
  3. 또한 새 행 삽입시이 테이블의 다른 모든 행을 반복하고 메시지 길이가 새 행의 메시지 길이보다 큰 모든 행에 대해이 "#보다 작은 메시지 길이"를 증가시킵니다.

문제가 순위에서 매우 선형적이기 때문에 후자의 접근 방식을 사용하여 O (n^2) 복잡성을 O (n)으로 줄이면됩니다. 희망이 도움이됩니다.

또한 백분위 수 이외의 다른 조작에 관심이있는 경우이 블로그에서 정규화, 크기 조정, 순위 지정 등에 대한 정보를 확인하십시오. 데이터에 무슨 일이 일어나고 있는지에 대한 좋은 그래픽이 포함되어 있습니다. :

http://www.redowlconsulting.com/Blog/post/2011/07/28/StatisticalTricksForLists.aspx

관련 문제