boxplot 사분위값을 이용하여 데이터의 분표 모양, 대칭성, 극단 값을 쉽게 파악할 있는 그림이다.

크게 중앙 50% 데이터의 분포 형태를 파악하는 부분과 나머지 50%(outlier) 분포 형태를 파악하는 부분 가지로 나누어 있다.


[5, 10,  15, 15, 16, 16, 20, 20, 20, 21, 25, 45, 50]


위의 데이터에서 사분위값은 아래와 같다


1사분위(Q1) = 15

2사분위(Q2) = 20

3사분위(Q3) = 25

(사분위값을 구하는 방법은 여러가지가 있다방법에 따라 값이 달라질  있다.)


Q1 Q3 끝으로 하는 상자를 그리고 Q2 실선으로 그어 중앙 50% 데이터가 어떻게 분포되어 있는지 나타낸.


나머지 50% 분포는 IQR 이용하여 그린다.

IQR(InterQuartile Range) 'Q1 Q3 사이 길이'이다.


Q1 Q3 주변으로 1.5 * IQR 범위에 있는 데이터를 울타리 안에 표시하고,

바깥에 있는 데이터는 * 또는 O 으로 표시한다.

(이때 울타리 안의 데이터를 'suspect outliers' 하고울타리 밖의 데이터를 'highly suspect outliers' 한다.)


IQR = 25 - 15 = 10

1.5*IQR = 15

Q1 - 1.5*IQR = 15 - 15 = 0

Q3 + 1.5*IQR = 25 + 15 = 40


위에서 구한 값을 그림으로 그리면 다음과 같다.




1. 금새 vs 금세


'금시에'의 줄인말인 '금세'가 올바른 표현이다.




2. 그새 vs 그세


'그 사이'의 준말인 '그새'가 올바른 표현이다.




3. 어느새 vs 어느세


'어느 사이'의 준말인 '어느새'가 올바른 표현이다.




프로그래밍에서 시간을 표현하거나 계산 할 때 년/월/일/시/분/초를 나누어 표현 또는 계산하는 방법도 있으나,

Timestamp를 사용하는 경우도 자주 있다.


Timestamp란 특정 시간을 기준으로 지금까지 경과된 시간을 나타내는 숫자이다.


년/월/일/시/분/초 형식으로 구분하여 사용하면 인간이 읽기에는 편하나 더하고 빼고 등의 시간 계산을 하기에는 복잡하고 비효율적이다.

그래서 이러한 경우에는 Timestamp를 자주 사용한다.


Timestamp를 통신에 사용할 경우 주의해야 할 점이 있는데 OS 또는 언어마다 Timestamp의 기준시와 단위가 달라진다는 점이다.


OS 별 Timestamp는 다음과 같다.


<Unix>

 time_t

 UTC 1970년 1월 1일 0시 0분 0초를 기준으로 하는 초 단위의 시간을 저장하는 형식

https://ko.wikipedia.org/wiki/Time.h

2038년 문제를 주의해야 한다. 32bit 자료형을 사용할 경우 2038년 1월 19일까지 밖에 표현하지 못한다.


<Windows>

FILETIME

Contains a 64-bit value representing the number of 100-nanosecond intervals

since January 1, 1601 (UTC).

https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms724284(v=vs.85).aspx



Windows에서 사용하는 Timestamp는 1601년 1월 1일 0시부터 지금까지의 시간을 100 나노초 단위로 표시한다.

반면 Unix에서는 1970년 1월 1일 0시부터 지금까지 경과된 시간을 초 단위로 표시한다.

Python은 Unix와 동일한 Timestamp를 사용한다.


그렇기 때문에 통신에서 Timestamp를 사용할 경우에는 OS에 따라 변환 과정을 거쳐야 한다.


변환 방법은 1)단위를 통일하고 2)기준시간을 변경하면 된다.



예를 들어 현재 시점으로 만들어진 Timestamp를 변환한다고 가정해 보자.

작업 환경이 Windows 라면 의 크기가 Timestamp가 될 것이고 Unix 라면 가 될 것이다.


로 변환하기 위해서는 우선 단위를 '100나노초'에서 '초'로 변경하고 를 빼면 된다.


의 크기는 116444736000000000 나노초 또는 11644473600 초 이다.

그리고 나노초를 초로 변경하기 위해서는 10000000을 곱하면 된다.


WinAPI를 기준으로 아래와 같이 구현할 수 있다.


1
2
3
4
5
6
7
8
9
LARGE_INTEGER Win2UnixStamp (LARGE_INTEGER largeWinStamp)
{
    LARGE_INTEGER largeUnixStamp;
    LARGE_INTEGER largeUnixInitValue;
    largeUnixInitValue.QuadPart = 11644473600// UNIX time_t 1970/01/01 00:00 (UTF)
    largeUnixStamp.QuadPart = (largeWinStamp.QuadPart / 10000000- largeUnixInitValue.QuadPart;
    return largeUnixStamp;
 
}
cs


1
2
3
4
5
6
7
8
LARGE_INTEGER Unix2WinStamp (LARGE_INTEGER largeUnixStamp)
{
    LARGE_INTEGER largeWinStamp;
    LARGE_INTEGER largeUnixInitValue;
    largeUnixInitValue.QuadPart = 116444736000000000;
    largeWinStamp.QuadPart = (largeUnixStamp.QuadPart * 10000000+ largeUnixInitValue.QuadPart;
    return largeWinStamp;
}
cs


+ Recent posts