Skip to content

Commit

Permalink
Add basic geocoding analytics to dashboard, to help with debugging.
Browse files Browse the repository at this point in the history
  • Loading branch information
janbaykara committed Jan 5, 2025
1 parent d149c5c commit 1fb3b06
Show file tree
Hide file tree
Showing 6 changed files with 2,743 additions and 12,067 deletions.
16 changes: 16 additions & 0 deletions hub/analytics.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,22 @@ class AreaStat(TypedDict):
gss: Optional[str]
external_data: dict

def imported_data_count_located(self) -> int:
return (
self.get_analytics_queryset().filter(postcode_data__isnull=False).count()
or 0
)

def imported_data_count_unlocated(self) -> int:
return self.get_analytics_queryset().filter(postcode_data=None).count() or 0

def imported_data_geocoding_rate(self) -> float:
located = self.imported_data_count_located()
total = self.imported_data_count()
if total == 0:
return 0
return (located / total) * 100

# TODO: Rename to e.g. row_count_by_political_boundary
def imported_data_count_by_area(
self,
Expand Down
31 changes: 29 additions & 2 deletions hub/graphql/types/model_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -705,6 +705,9 @@ class AnalyticalAreaType(Enum):
admin_district = "admin_district"
admin_county = "admin_county"
admin_ward = "admin_ward"
msoa = "msoa"
lsoa = "lsoa"
postcode = "postcode"
european_electoral_region = "european_electoral_region"
country = "country"

Expand Down Expand Up @@ -749,7 +752,7 @@ class Analytics:
def imported_data_count_by_area(
self,
analytical_area_type: AnalyticalAreaType,
layer_ids: Optional[List[str]],
layer_ids: Optional[List[str]] = [],
) -> List[GroupedDataCount]:
data = self.imported_data_count_by_area(
postcode_io_key=analytical_area_type.value,
Expand All @@ -761,11 +764,35 @@ def imported_data_count_by_area(
for datum in data
]

@strawberry_django.field
def imported_data_count_of_areas(
self,
analytical_area_type: AnalyticalAreaType,
layer_ids: Optional[List[str]] = [],
) -> int:
data = self.imported_data_count_by_area(
postcode_io_key=analytical_area_type.value,
layer_ids=layer_ids,
)
return max(len([d for d in data if d.get("count", 0) > 0]) or 0, 0)

@strawberry_django.field
def imported_data_count_unlocated(self) -> int:
return self.imported_data_count_unlocated()

@strawberry_django.field
def imported_data_count_located(self) -> int:
return self.imported_data_count_located()

@strawberry_django.field
def imported_data_geocoding_rate(self) -> float:
return self.imported_data_geocoding_rate()

@strawberry_django.field
def imported_data_by_area(
self,
analytical_area_type: AnalyticalAreaType,
layer_ids: Optional[List[str]],
layer_ids: Optional[List[str]] = [],
) -> List[GroupedData]:
data = self.imported_data_by_area(
postcode_io_key=analytical_area_type.value,
Expand Down
4 changes: 2 additions & 2 deletions nextjs/src/__generated__/gql.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 1fb3b06

Please sign in to comment.