corrected property exclusions

This commit is contained in:
Khalim Conn-Kowlessar 2024-08-20 19:51:18 +01:00
parent 520aa430b7
commit f186c00df5
3 changed files with 48 additions and 15 deletions

View file

@ -1038,7 +1038,7 @@ class Ownership:
return asset_list return asset_list
def create_final_outputs(self, portfolio_timestamp, exclusion_uprns=None): def create_final_outputs(self, portfolio_timestamp, storage_date, exclusion_uprns=None):
""" """
Given the completed outputs of the matching process, this function creates the final outputs, after matching Given the completed outputs of the matching process, this function creates the final outputs, after matching
valuation data, and creates a "working" directory, which is our current view of the sfr portfolio. This means valuation data, and creates a "working" directory, which is our current view of the sfr portfolio. This means
@ -1051,7 +1051,7 @@ class Ownership:
exclusion_uprns = [] if exclusion_uprns is None else exclusion_uprns exclusion_uprns = [] if exclusion_uprns is None else exclusion_uprns
# Step 1: Read in the valuations data # Step 1: Read in the valuations data
valuatio_ns = read_excel_from_s3( valuations = read_excel_from_s3(
bucket_name=self.bucket, bucket_name=self.bucket,
file_key=f"ownership/{self.project_name}/sfr property valuations.xlsx", file_key=f"ownership/{self.project_name}/sfr property valuations.xlsx",
header_row=0 header_row=0
@ -1087,15 +1087,40 @@ class Ownership:
# We make some final cuts based on UPRNs that at a later stage are found to be odd # We make some final cuts based on UPRNs that at a later stage are found to be odd
if portfolio_properties["UPRN"].isin(exclusion_uprns).sum(): if portfolio_properties["UPRN"].isin(exclusion_uprns).sum():
raise Exception("Implement me!")
# Identify who the owners are for thes uprns # Identify who the owners are for thes uprns
owners = portfolio_properties[portfolio_properties["UPRN"].isin(exclusion_uprns)].groupby( # owners = portfolio_properties[portfolio_properties["UPRN"].isin(exclusion_uprns)].groupby(
"Company Registration No. (1)" # "Company Registration No. (1)"
)["UPRN"].nunique().reset_index().rename( # )["UPRN"].nunique().reset_index().rename(
columns={"UPRN": "number_of_properties_to_exclude"} # columns={"UPRN": "number_of_properties_to_exclude"}
) # )
#
# min_owners_threshold = portfolio_owners["total_number_of_properties"].min()
#
# portfolio_owners = portfolio_owners.merge(
# owners, how="left", on="Company Registration No. (1)", suffixes=("", "_excluded")
# )
min_owners_threshold = portfolio_owners["total_number_of_properties"].min() # Step 2: Merge in the valuations data
portfolio_properties = portfolio_properties.merge(
valuations, how="left", on="UPRN"
)
portfolio_owners = portfolio_owners.merge( # Step 3: Store the final outputs
owners, how="left", on="Company Registration No. (1)", suffixes=("", "_excluded") save_excel_to_s3(
) df=portfolio_owners,
bucket_name=self.bucket,
file_key=f"ownership/{self.project_name}/current/{storage_date}/portfolio_owners.xlsx",
)
save_excel_to_s3(
df=portfolio_properties,
bucket_name=self.bucket,
file_key=f"ownership/{self.project_name}/current/{storage_date}/portfolio_properties.xlsx",
)
save_excel_to_s3(
df=portfolio_epc_data,
bucket_name=self.bucket,
file_key=f"ownership/{self.project_name}/current/{storage_date}/portfolio_epc_data.xlsx",
)

View file

@ -3,10 +3,10 @@ OWNERS_WHO_CANT_SELL = [
# Al Rayan - they're the senior lender, not able to sell # Al Rayan - they're the senior lender, not able to sell
"4483430", "4483430",
# Ultrabarn - they're unwilling to sell and will sort any retrofits themselves # Ultrabarn - they're unwilling to sell and will sort any retrofits themselves
"2794851" "2794851",
# Mountview - Anna spoke with someone from Mounview - they acquire tenancies and sell them as soon as they become # Mountview - Anna spoke with someone from Mounview - they acquire tenancies and sell them as soon as they become
# vacant. They have no immediate opportunities but we may come back and remove this # vacant. They have no immediate opportunities but we may come back and remove this
"328090" "328090",
] ]
EXCLUDED_UPRNS = [ EXCLUDED_UPRNS = [

View file

@ -1,4 +1,5 @@
import pandas as pd import datetime
from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import sessionmaker
from backend.app.db.connection import db_engine from backend.app.db.connection import db_engine
from backend.app.db.models.portfolio import Portfolio, PortfolioUsers from backend.app.db.models.portfolio import Portfolio, PortfolioUsers
@ -170,6 +171,13 @@ def app():
# missed.to_csv("missed_valuations.csv") # missed.to_csv("missed_valuations.csv")
# We now need a distinct step to prepare final outputs # We now need a distinct step to prepare final outputs
portfolio_timestamp = "2024-08-20 18:53:08.326351" portfolio_timestamp = "2024-08-20 19:28:18.260205"
exclusion_uprns = EXCLUDED_UPRNS exclusion_uprns = EXCLUDED_UPRNS
# Create a date in the yyyy-mm-dd format to store the data against
storage_date = datetime.datetime.now().strftime("%Y-%m-%d")
ownership_instance.create_final_outputs(
portfolio_timestamp=portfolio_timestamp, storage_date=storage_date, exclusion_uprns=EXCLUDED_UPRNS
)