Add a (useless?) test for features.communication.count_comms.
Formatting.communication
parent
414b30b7e1
commit
b7b60294ba
|
@ -1,8 +1,17 @@
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from sqlalchemy import (TIMESTAMP, BigInteger, Boolean, Column, Float,
|
from sqlalchemy import (
|
||||||
ForeignKey, Integer, SmallInteger, String,
|
TIMESTAMP,
|
||||||
UniqueConstraint)
|
BigInteger,
|
||||||
|
Boolean,
|
||||||
|
Column,
|
||||||
|
Float,
|
||||||
|
ForeignKey,
|
||||||
|
Integer,
|
||||||
|
SmallInteger,
|
||||||
|
String,
|
||||||
|
UniqueConstraint,
|
||||||
|
)
|
||||||
from sqlalchemy.dialects.postgresql import ARRAY as PSQL_ARRAY
|
from sqlalchemy.dialects.postgresql import ARRAY as PSQL_ARRAY
|
||||||
from sqlalchemy.dialects.postgresql import INTEGER as PSQL_INTEGER
|
from sqlalchemy.dialects.postgresql import INTEGER as PSQL_INTEGER
|
||||||
from sqlalchemy.dialects.postgresql import JSONB as PSQL_JSONB
|
from sqlalchemy.dialects.postgresql import JSONB as PSQL_JSONB
|
||||||
|
|
|
@ -2,7 +2,7 @@ from typing import List
|
||||||
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
|
||||||
from config.models import Call, Participant, SMS
|
from config.models import SMS, Call, Participant
|
||||||
from setup import db_engine, session
|
from setup import db_engine, session
|
||||||
|
|
||||||
call_types = {1: "incoming", 2: "outgoing", 3: "missed"}
|
call_types = {1: "incoming", 2: "outgoing", 3: "missed"}
|
||||||
|
@ -117,9 +117,11 @@ def count_comms(comm_df: pd.DataFrame) -> pd.DataFrame:
|
||||||
.add_prefix("duration_")
|
.add_prefix("duration_")
|
||||||
)
|
)
|
||||||
comm_features = comm_counts.join(comm_duration)
|
comm_features = comm_counts.join(comm_duration)
|
||||||
try: comm_features.drop(columns="duration_" + call_types[3], inplace=True)
|
try:
|
||||||
|
comm_features.drop(columns="duration_" + call_types[3], inplace=True)
|
||||||
# The missed calls are always of 0 duration.
|
# The missed calls are always of 0 duration.
|
||||||
except KeyError: pass
|
except KeyError:
|
||||||
|
pass
|
||||||
# If there were no missed calls, this exception is raised.
|
# If there were no missed calls, this exception is raised.
|
||||||
# But we are dropping the column anyway, so no need to deal with the exception.
|
# But we are dropping the column anyway, so no need to deal with the exception.
|
||||||
elif "message_type" in comm_df:
|
elif "message_type" in comm_df:
|
||||||
|
|
|
@ -5,7 +5,7 @@ import pandas as pd
|
||||||
from numpy.random import default_rng
|
from numpy.random import default_rng
|
||||||
from pandas.testing import assert_series_equal
|
from pandas.testing import assert_series_equal
|
||||||
|
|
||||||
from features.communication import enumerate_contacts, get_call_data
|
from features.communication import count_comms, enumerate_contacts, get_call_data
|
||||||
|
|
||||||
rng = default_rng()
|
rng = default_rng()
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ class CallsFeatures(unittest.TestCase):
|
||||||
rng.integers(1612169903000, 1614556703000, size=call_rows)
|
rng.integers(1612169903000, 1614556703000, size=call_rows)
|
||||||
),
|
),
|
||||||
"device_id": "device1",
|
"device_id": "device1",
|
||||||
"call_type": rng.integers(1, 3, size=call_rows),
|
"call_type": rng.integers(1, 3, size=call_rows, endpoint=True),
|
||||||
"call_duration": rng.integers(0, 600, size=call_rows),
|
"call_duration": rng.integers(0, 600, size=call_rows),
|
||||||
"trace": callers,
|
"trace": callers,
|
||||||
"participant_id": 29,
|
"participant_id": 29,
|
||||||
|
@ -65,3 +65,7 @@ class CallsFeatures(unittest.TestCase):
|
||||||
self.assertSeriesEqual(
|
self.assertSeriesEqual(
|
||||||
self.calls["contact_id_manual"], self.calls["contact_id"], check_names=False
|
self.calls["contact_id_manual"], self.calls["contact_id"], check_names=False
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_count_comms(self):
|
||||||
|
self.features = count_comms(self.calls)
|
||||||
|
self.assertIsInstance(self.features, pd.DataFrame)
|
||||||
|
|
Loading…
Reference in New Issue