Рубрики
Без рубрики

Статистика запуска лосося: приливы и события (часть 3)

Первый |. Предыдущий | Далее сегодня мы посмотрим на распределение вероятностей событий и приливов …. Теги с Showdev, Python.

Первый |. Предыдущий | Следующий

Сегодня мы посмотрим на распределение вероятности событий и приливов.

high tide:
none: 15.0058% occurrence; 80.8970% wave cleared
mothership: 0.7407% occurrence; 98.5512% wave cleared
fog: 0.7919% occurrence; 83.2775% wave cleared
rush: 0.9527% occurrence; 75.1159% wave cleared
cohock_charge: 0.0% occurrence
griller: 0.9929% occurrence; 77.6987% wave cleared
goldie_seeking: 0.9623% occurrence; 92.9686% wave cleared

normal tide:
none: 45.5480% occurrence; 81.9957% wave cleared
mothership: 2.4686% occurrence; 95.6328% wave cleared
fog: 2.5295% occurrence; 86.8992% wave cleared
rush: 3.1385% occurrence; 85.3304% wave cleared
cohock_charge: 0.0% occurrence
griller: 2.9823% occurrence; 88.2238% wave cleared
goldie_seeking: 3.0713% occurrence; 83.7560% wave cleared

low tide:
none: 15.0909% occurrence; 87.9722% wave cleared
mothership: 0.7476% occurrence; 97.6866% wave cleared
fog: 0.7793% occurrence; 92.1918% wave cleared
rush: 0.0% occurrence
cohock_charge: 4.1976% occurance; 92.0484% wave cleared
griller: 0.0% occurrence
goldie_seeking: 0.0% occurrence

События

none: 75.64554806202921
mothership: 3.9574326151171575
fog: 4.100073531455544
rush: 4.0913558846642696
cohock_charge: 4.1982418148877196
griller: 3.973857167042747
goldie_seeking: 4.033490924803348

Приливы

high: 0.19446164109069133
normal: 0.5973773780856048
low: 0.2081609808237039

Судя по этим данным, я думаю, что он сначала генерирует событие, а затем прилив. Существует приблизительно 25% шанс иметь событие, с вероятностью какого-либо конкретного события, находящегося примерно на 4%. Для событий, которые могут возникать на любом приливах, существует приблизительно 60% вероятность получения нормального прилива, а также 20% шанс каждый для высокого и низкого. Зарядка COHOCK – это единственное событие, которое может происходить только на низком приливе, поэтому, если это событие закатается, он гарантируется низкий прилив. Грильерс, Goldie Seeping и Rush Все являются нормальными или высокими приливами, поэтому на 75% нормальный прилив и 25% прилив.

Из возможных комбинаций высокий прилив спешель имеет самый низкий прозрачный процент волны, а приливное матье имеет самый высокий.

Сегодняшний файл является соответствующим образом названным Отчеты/Tides_and_events.py Отказ

Давайте пройдемся через этот файл вместе.

data = core.init("All")

Обычное обновление набора данных.

tideList: List[str] = ["high", "normal", "low"]
eventList: List[str] = [
    "None",
    "mothership",
    "fog",
    "rush",
    "cohock_charge",
    "griller",
    "goldie_seeking",
]
tideDict: Dict[str, dict] = {}
for tideStr in tideList:
    eventDict: Dict[str, Union[str, int]] = {}
    for eventStr in eventList:
        eventDict[eventStr] = {"key": eventStr, "count": 0.0, "clear_count": 0.0}
    tideDict[tideStr] = eventDict

Это создает словарь словарей из списка приливов и перечень событий, где приливы являются внешним слоем и событиями являются внутренним слоем, с помощью внутреннего слоя, имеющие имя события, количество возникновения и четкое количество.

total: float = 0.0

Нам нужно хранить общее количество волн в файле данных, чтобы рассчитать процент вхождений, поэтому мы инициализируем эту переменную сейчас со значением 0,0. Конечно, это только удерживает целочисленные ценности, но это экономит на необходимости отбрасывать его на поплавок позже.

with gzip.open(data) as reader:
    for job in jsonlines.Reader(reader, ujson.loads):
        waveCount: int = 0
        for wave in job["waves"]:
            total += 1.0
            if wave["known_occurrence"] is not None:
                cast(
                    Dict[str, float],
                    tideDict[wave["water_level"]["key"]][
                        wave["known_occurrence"]["key"]
                    ],
                )["count"] += 1.0
                if job["clear_waves"] > waveCount:
                    cast(
                        Dict[str, float],
                        tideDict[wave["water_level"]["key"]][
                            wave["known_occurrence"]["key"]
                        ],
                    )["clear_count"] += 1.0
            else:
                cast(
                    Dict[str, float], tideDict[wave["water_level"]["key"]]["None"]
                )["count"] += 1.0
                if job["clear_waves"] > waveCount:
                    cast(
                        Dict[str, float],
                        tideDict[wave["water_level"]["key"]]["None"],
                    )["clear_count"] += 1.0
            waveCount += 1

Теперь мы раскрываем файл данных и начнем собирать наши результаты. Первые две строки предназначены для извлечения задания из GZIP-закодированного файла JSONLINES. Нам нужна переменная, чтобы подсчитать, какую волну мы находимся, потому что нам нужно проверить, если "clear_waves" Значение в работе выше, чем это. Мы проверяем, есть ли волна события, и если так мы храним данные в соответствующем словаре события, в противном случае мы храним его в "Нет" Словарь. Затем мы проверяем, была ли волна очищена или нет.

for tide in tideDict.values():
    for event in tide.values():
        print(
            cast(str, event["key"])
            + ": "
            + str(100.0 * cast(float, event["count"]) / total)
            + "% occurance; "
            + str(
                100.0
                * cast(float, event["clear_count"])
                / (
                    cast(float, event["count"])
                    if cast(float, event["count"]) > 0.0
                    else 1.0
                )
            )
            + " % wave cleared"
        )

Эти петли распечатывают результаты в формате, аналогично показанному в этом посте. Я редактировал результаты печати, чтобы выглядеть приятнее в этом посте.

Оригинал: “https://dev.to/cassdlcm/salmon-run-statistics-tides-and-events-part-3-jo6”