Skip to content

Event

kloppy.domain.Event dataclass

Event(
    period,
    timestamp,
    statistics,
    ball_owning_team,
    ball_state,
    event_id,
    team,
    player,
    coordinates,
    raw_event,
    state,
    related_event_ids,
    freeze_frame,
)

Bases: DataRecord, ABC

Abstract event baseclass. All other event classes inherit from this class.

ATTRIBUTE DESCRIPTION
event_id

Event identifier given by provider. Alias for record_id.

TYPE: str

event_type

The type of event.

TYPE: EventType

event_name

Name of the event type.

TYPE: str

time

Time in the match the event takes place.

TYPE: Time

coordinates

Coordinates where event happened.

TYPE: Point

team

Team related to the event.

TYPE: Team

player

Player related to the event.

TYPE: Player

ball_owning_team

Team in control of the ball during the event.

TYPE: Optional[Team]

ball_state

Whether the ball is in play.

TYPE: Optional[BallState]

raw_event

The data provider's raw representation of the event.

TYPE: object

dataset

A reference to the dataset the event is part of.

TYPE: Dataset

prev_record

A reference to the previous event.

TYPE: Optional[Self]

next_record

A reference to the next event.

TYPE: Optional[Self]

related_event_ids

Event identifiers of related events.

TYPE: List[str]

freeze_frame

A snapshot with the location of other players at the time of the event.

TYPE: Optional['Frame']

attacking_direction

The playing direction of team during the event.

TYPE: AttackingDirection

state

Additional game state information.

TYPE: Dict[str, Any]

event_id instance-attribute

event_id

team instance-attribute

team

player instance-attribute

player

coordinates instance-attribute

coordinates

raw_event instance-attribute

raw_event

state instance-attribute

state

related_event_ids instance-attribute

related_event_ids

freeze_frame instance-attribute

freeze_frame

record_id property

record_id

event_type abstractmethod property

event_type

event_name abstractmethod property

event_name

attacking_direction property

attacking_direction

dataset class-attribute instance-attribute

dataset = field(init=False)

prev_record class-attribute instance-attribute

prev_record = field(init=False)

next_record class-attribute instance-attribute

next_record = field(init=False)

period instance-attribute

period

timestamp instance-attribute

timestamp

statistics instance-attribute

statistics

ball_owning_team instance-attribute

ball_owning_team

ball_state instance-attribute

ball_state

time property

time
get_related_events()
Source code in kloppy/domain/models/event.py
def get_related_events(self) -> List[Event]:
    if not self.dataset:
        raise OrphanedRecordError()

    return [
        event
        for event_id in self.related_event_ids
        if (event := self.dataset.get_record_by_id(event_id)) is not None
    ]
get_related_event(type_)
Source code in kloppy/domain/models/event.py
def get_related_event(
    self, type_: Union[str, EventType]
) -> Optional[Event]:
    event_type = (
        EventType[type_.upper()] if isinstance(type_, str) else type_
    )
    for related_event in self.get_related_events():
        if related_event.event_type == event_type:
            return related_event
    return None

related_pass

related_pass()
Source code in kloppy/domain/models/event.py
def related_pass(self) -> Optional[PassEvent]:
    return cast(
        Optional[PassEvent], self.get_related_event(EventType.PASS)
    )

related_shot

related_shot()
Source code in kloppy/domain/models/event.py
def related_shot(self) -> Optional[ShotEvent]:
    return cast(
        Optional[ShotEvent], self.get_related_event(EventType.SHOT)
    )

related_take_on

related_take_on()
Source code in kloppy/domain/models/event.py
def related_take_on(self) -> Optional[TakeOnEvent]:
    return cast(
        Optional[TakeOnEvent], self.get_related_event(EventType.TAKE_ON)
    )

related_carry

related_carry()
Source code in kloppy/domain/models/event.py
def related_carry(self) -> Optional[CarryEvent]:
    return cast(
        Optional[CarryEvent], self.get_related_event(EventType.CARRY)
    )

related_substitution

related_substitution()
Source code in kloppy/domain/models/event.py
def related_substitution(self) -> Optional[SubstitutionEvent]:
    return cast(
        Optional[SubstitutionEvent],
        self.get_related_event(EventType.SUBSTITUTION),
    )

related_card

related_card()
Source code in kloppy/domain/models/event.py
def related_card(self) -> Optional[CardEvent]:
    return cast(
        Optional[CardEvent], self.get_related_event(EventType.CARD)
    )

related_player_on

related_player_on()
Source code in kloppy/domain/models/event.py
def related_player_on(self) -> Optional[PlayerOnEvent]:
    return cast(
        Optional[PlayerOnEvent],
        self.get_related_event(EventType.PLAYER_ON),
    )

related_player_off

related_player_off()
Source code in kloppy/domain/models/event.py
def related_player_off(self) -> Optional[PlayerOffEvent]:
    return cast(
        Optional[PlayerOffEvent],
        self.get_related_event(EventType.PLAYER_OFF),
    )

related_recovery

related_recovery()
Source code in kloppy/domain/models/event.py
def related_recovery(self) -> Optional[RecoveryEvent]:
    return cast(
        Optional[RecoveryEvent], self.get_related_event(EventType.RECOVERY)
    )

related_ball_out

related_ball_out()
Source code in kloppy/domain/models/event.py
def related_ball_out(self) -> Optional[BallOutEvent]:
    return cast(
        Optional[BallOutEvent], self.get_related_event(EventType.BALL_OUT)
    )

related_foul_committed

related_foul_committed()
Source code in kloppy/domain/models/event.py
def related_foul_committed(self) -> Optional[FoulCommittedEvent]:
    return cast(
        Optional[FoulCommittedEvent],
        self.get_related_event(EventType.FOUL_COMMITTED),
    )

related_formation_change

related_formation_change()
Source code in kloppy/domain/models/event.py
def related_formation_change(self) -> Optional[FormationChangeEvent]:
    return cast(
        Optional[FormationChangeEvent],
        self.get_related_event(EventType.FORMATION_CHANGE),
    )

matches

matches(filter_)
Source code in kloppy/domain/models/event.py
def matches(
    self, filter_: Optional[Union[str, Callable[[Event], bool]]]
) -> bool:
    if filter_ is None:
        return True
    elif callable(filter_):
        return filter_(self)
    elif isinstance(filter_, str):
        """
        Allowed formats:
        1. <event_type>
        2. <event_type>.<result>

        This format always us to go to css selectors without breaking existing code.
        """
        parts = filter_.upper().split(".")
        if len(parts) == 2:
            event_type, result = parts
        elif len(parts) == 1:
            event_type = parts[0]
            result = None
        else:
            raise InvalidFilterError(
                f"Don't know how to apply filter {filter_}"
            )

        if event_type:
            try:
                if self.event_type != EventType[event_type]:
                    return False
            except KeyError:
                raise InvalidFilterError(
                    f"Cannot find event type {event_type}. Possible options: {[e.value.lower() for e in EventType]}"
                )

        if result:
            return False

        return True

set_refs

set_refs(dataset, prev, next_)
Source code in kloppy/domain/models/event.py
def generic_record_converter(event: Event):
    row = record_converter(event)
    if additional_columns:
        for k, v in additional_columns.items():
            if callable(v):
                value = v(event)
            else:
                value = v
            row.update({k: value})
    return row

return pd.DataFrame.from_records(
    map(generic_record_converter, self.records)
)

prev

prev(filter_=None)
Source code in kloppy/domain/models/event.py
"ClearanceEvent",
"InterceptionEvent",
"InterceptionResult",
"SubstitutionEvent",
"PlayerOnEvent",
"PlayerOffEvent",
"CardEvent",
"CardType",
"CardQualifier",

next

next(filter_=None)
Source code in kloppy/domain/models/event.py
"FormationChangeEvent",
"EventDataset",
"RecoveryEvent",
"MiscontrolEvent",
"FoulCommittedEvent",
"BallOutEvent",
"SetPieceType",
"Qualifier",
"SetPieceQualifier",

replace

replace(**changes)
Source code in kloppy/domain/models/event.py
"PassType",
"BodyPart",