임의의 숫자 행렬 데이터의 히트맵을 렌더링할 수 있는 표준 텍스트 모드 도구가 있습니까?

임의의 숫자 행렬 데이터의 히트맵을 렌더링할 수 있는 표준 텍스트 모드 도구가 있습니까?

호기심에서 나는 몇 가지 통계를 수집하기 위해 기본 주간/시간별 타임스탬프로 Git 기록을 시각화하는 스크립트를 만들었습니다. 다음 스크립트

#!/bin/bash

# Declare the global heatmap hashmap
declare -A HEATMAP

# Composes a key in a form of a <WEEKDAY:1><HOUR:02>
function key {
    local WEEKDAY="$1"
    local HOUR="$2"
    echo -n "$WEEKDAY"
    if [[ "$HOUR" -lt 10 ]]; then
        echo -n '0'
    fi
    echo "$HOUR"
}

# Generate a sequence of weekdays (Mon-Sat,Sun)
function generate_weekdays {
    seq 1 6
    seq 0 0
}

# Generate a sequence of hours in day (00-23)
function generate_hours {
    seq 0 23
}

# Initialize and fill the heatmap with zeroes
for WEEKDAY in $(generate_weekdays); do
    for HOUR in $(generate_hours); do
        HEATMAP[$(key "$WEEKDAY" "$HOUR")]=0
    done
done

# Read the stats into the heatmap
MAX_PEAK=1
while read WEEKDAY_HOUR; do
    HEATMAP["$WEEKDAY_HOUR"]=$((${HEATMAP["$WEEKDAY_HOUR"]} + 1))
    if [[ ${HEATMAP["$WEEKDAY_HOUR"]} -gt "$MAX_PEAK" ]]; then
        MAX_PEAK=${HEATMAP["$WEEKDAY_HOUR"]}
    fi
done < <(git rev-list --date=format:'%w%H' --pretty='format:%ad' $@ | awk 'NR % 2 == 0')

# Render the heatmap
RATIO=0
for WEEKDAY in $(generate_weekdays); do
    for HOUR in $(generate_hours); do
        RATIO=$((100 * ${HEATMAP[$(key "$WEEKDAY" "$HOUR")]} / $MAX_PEAK))
        if [[ "$RATIO" -eq 0 ]]; then echo -ne '\e[38;5;236m'
        elif [[ "$RATIO" -lt 10 ]]; then echo -ne '\e[38;5;107m'
        elif [[ "$RATIO" -lt 20 ]]; then echo -ne '\e[38;5;22m'
        elif [[ "$RATIO" -lt 30 ]]; then echo -ne '\e[38;5;28m'
        elif [[ "$RATIO" -lt 40 ]]; then echo -ne '\e[38;5;70m'
        elif [[ "$RATIO" -lt 50 ]]; then echo -ne '\e[38;5;190m'
        elif [[ "$RATIO" -lt 60 ]]; then echo -ne '\e[38;5;226m'
        elif [[ "$RATIO" -lt 70 ]]; then echo -ne '\e[38;5;220m'
        elif [[ "$RATIO" -lt 80 ]]; then echo -ne '\e[38;5;214m'
        elif [[ "$RATIO" -lt 90 ]]; then echo -ne '\e[38;5;208m'
        elif [[ "$RATIO" -lt 100 ]]; then echo -ne '\e[38;5;160m'
        elif [[ "$RATIO" -eq 100 ]]; then echo -ne '\e[38;5;196m'; fi
        echo -n '*'
        echo -ne '\e[0m'
    done
    echo
done

as를 호출하면 ./git-heatmap --all다음과 같은 샘플 출력이 생성됩니다(현재는 Linux 시스템이 아니고 Windows/MinGW에서 실행 중이며 Fixsys 글꼴을 사용하고 있습니다. 별표 \u2BC0보다 사각형을 선호하지만 Fixsys는 더 좋다고 생각되는 사각형을 렌더링할 수 없습니다).

./git-heatmap --모든 샘플 출력

이 스크립트는 세 가지 작업을 수행하므로 다음과 같습니다.

  • Git 평일/시간 타임스탬프 출력을 사용합니다.
  • 통계를 계산하고,
  • 히트맵을 렌더링하고

...위의 히트맵과 유사한 것을 계산/렌더링할 수 있는 표준 도구 같은 것이 있는지 궁금합니다. 내 스크립트는 Git에서 제공한 다음 샘플 데이터를 처리합니다.

100
101
420
517
...

첫 번째 숫자는 근무일을 나타내고, 두 번째와 세 번째 숫자는 하루의 시간을 나타냅니다. 감사해요.

관련 정보