Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26,651 changes: 26,651 additions & 0 deletions data/bihar/MASTER_VARIABLES.csv

Large diffs are not rendered by default.

26,651 changes: 26,651 additions & 0 deletions data/bihar/factor_scores_l1_exposure.csv

Large diffs are not rendered by default.

26,651 changes: 26,651 additions & 0 deletions data/bihar/factor_scores_l1_government-response.csv

Large diffs are not rendered by default.

26,651 changes: 26,651 additions & 0 deletions data/bihar/factor_scores_l1_hazard.csv

Large diffs are not rendered by default.

40,468 changes: 26,651 additions & 13,817 deletions data/factor_scores_l1_government-response.csv

Large diffs are not rendered by default.

10 changes: 3 additions & 7 deletions scripts/exposure.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,10 @@
# Suppress all warnings
warnings.filterwarnings("ignore")

master_variables = pd.read_csv(os.getcwd()+'/data/MASTER_VARIABLES.csv')
master_variables = pd.read_csv('/home/prajna/civicdatalab/ids-drr/bihar/flood-data-ecosystem-Bihar/MASTER_VARIABLES.csv')

exposure_vars = ['sum_population', 'total_hhd',
"schools_count",
"HealthCenters",
"rail_length",
"road_length",
"net_sown_area_in_hac"]
]

exposure_df = master_variables[exposure_vars + ['timeperiod', 'object_id']]

Expand Down Expand Up @@ -59,4 +55,4 @@
master_variables = master_variables.merge(exposure[['timeperiod', 'object_id', 'exposure']],
on = ['timeperiod', 'object_id'])

master_variables.to_csv(os.getcwd()+'/data/factor_scores_l1_exposure.csv', index=False)
master_variables.to_csv(os.getcwd()+'/data/bihar/factor_scores_l1_exposure.csv', index=False)
18 changes: 9 additions & 9 deletions scripts/govtresponse.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,24 +20,24 @@
# ---------------------------------------------------------------------------
# 1. CONFIG
# ---------------------------------------------------------------------------
DATA_DIR = Path("data")
IN_FILE = DATA_DIR / "MASTER_VARIABLES.csv"
DATA_DIR = Path("data/bihar")
IN_FILE ='/home/prajna/civicdatalab/ids-drr/bihar/flood-data-ecosystem-Bihar/MASTER_VARIABLES.csv'
OUT_FILE = DATA_DIR / "factor_scores_l1_government-response.csv"

# columns
GOV_RESPONSE_VARS = [
"total_tender_awarded_value",
"SDRF_sanctions_awarded_value",
"RIDF_tenders_awarded_value",
"Preparedness Measures_tenders_awarded_value",
"Immediate Measures_tenders_awarded_value",
"Others_tenders_awarded_value",
# "SDRF_sanctions_awarded_value",
# "RIDF_tenders_awarded_value",
# "Preparedness Measures_tenders_awarded_value",
# "Immediate Measures_tenders_awarded_value",
# "Others_tenders_awarded_value",
]

MODEL_VARS = [ # used for Min–Max scaling + sum
"total_tender_awarded_value",
"SDRF_sanctions_awarded_value",
"Others_tenders_awarded_value",
# "SDRF_sanctions_awarded_value",
# "Others_tenders_awarded_value",
]

# ---------------------------------------------------------------------------
Expand Down
27 changes: 13 additions & 14 deletions scripts/hazard.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
path = os.getcwd() + r"/flood-data-ecosystem-Odisha"

# Load data
master_variables = pd.read_csv(os.getcwd()+'/data/MASTER_VARIABLES.csv')
hazard_vars = ['inundation_intensity_mean_nonzero', 'inundation_intensity_sum', 'mean_rain', 'max_rain','drainage_density', 'Sum_Runoff', 'Peak_Runoff','slope_mean','elevation_mean','distance_from_river','distance_from_sea']
master_variables = pd.read_csv('/home/prajna/civicdatalab/ids-drr/bihar/flood-data-ecosystem-Bihar/MASTER_VARIABLES.csv')
hazard_vars = ['mean_rain', 'max_rain']
hazard_df = master_variables[hazard_vars + ['timeperiod', 'object_id']]
hazard_df_months = []

Expand Down Expand Up @@ -57,21 +57,20 @@ def log_quantile_binning(df, var):
hazard_df_month = hazard_df[hazard_df.timeperiod == month]

# Apply custom binning based on value ranges
hazard_df_month['inundation_intensity_sum_binned'] = custom_binning(hazard_df_month, 'inundation_intensity_sum')
hazard_df_month['inundation_intensity_mean_nonzero_binned'] = custom_binning(hazard_df_month, 'inundation_intensity_mean_nonzero')
hazard_df_month['drainage_density_binned'] = custom_binning(hazard_df_month, 'drainage_density')
# hazard_df_month['inundation_intensity_sum_binned'] = custom_binning(hazard_df_month, 'inundation_intensity_sum')
# hazard_df_month['inundation_intensity_mean_nonzero_binned'] = custom_binning(hazard_df_month, 'inundation_intensity_mean_nonzero')
# hazard_df_month['drainage_density_binned'] = custom_binning(hazard_df_month, 'drainage_density')
hazard_df_month['mean_rain_binned'] = custom_binning(hazard_df_month, 'mean_rain')
hazard_df_month['max_rain_binned'] = custom_binning(hazard_df_month, 'max_rain')
hazard_df_month['Sum_Runoff_binned'] = custom_binning(hazard_df_month, 'Sum_Runoff')
hazard_df_month['Peak_Runoff_binned'] = custom_binning(hazard_df_month, 'Peak_Runoff')
hazard_df_month['slope_mean_binned'] = custom_binning(hazard_df_month, 'slope_mean')
hazard_df_month['elevation_mean_binned'] = custom_binning_reversed(hazard_df_month, 'elevation_mean')
hazard_df_month['distance_from_river_mean_binned'] = custom_binning_reversed(hazard_df_month, 'distance_from_river')
# hazard_df_month['Sum_Runoff_binned'] = custom_binning(hazard_df_month, 'Sum_Runoff')
# hazard_df_month['Peak_Runoff_binned'] = custom_binning(hazard_df_month, 'Peak_Runoff')
# hazard_df_month['slope_mean_binned'] = custom_binning(hazard_df_month, 'slope_mean')
# hazard_df_month['elevation_mean_binned'] = custom_binning_reversed(hazard_df_month, 'elevation_mean')
# hazard_df_month['distance_from_river_mean_binned'] = custom_binning_reversed(hazard_df_month, 'distance_from_river')

# Average hazard score
hazard_df_month['flood-hazard'] = (hazard_df_month[['inundation_intensity_sum_binned','inundation_intensity_mean_nonzero_binned','drainage_density_binned', 'mean_rain_binned',
'max_rain_binned', 'Sum_Runoff_binned',
'Peak_Runoff_binned','slope_mean_binned','elevation_mean_binned','distance_from_river_mean_binned']]
hazard_df_month['flood-hazard'] = (hazard_df_month[[ 'mean_rain_binned',
'max_rain_binned']]
.astype(float).mean(axis=1))
hazard_df_month['flood-hazard'] = round(hazard_df_month['flood-hazard'])

Expand All @@ -83,4 +82,4 @@ def log_quantile_binning(df, var):


# Save the final results
master_variables.to_csv(os.getcwd() + r'/data/factor_scores_l1_hazard.csv', index=False)
master_variables.to_csv(os.getcwd() + r'/data/bihar/factor_scores_l1_hazard.csv', index=False)
2 changes: 1 addition & 1 deletion scripts/topsis_riskscore.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
## MASTER DATA WITH FACTOR SCORES
#print(os.getcwd())
## INPUT: FACTOR SCORES CSV
factor_scores_dfs = glob.glob(os.getcwd()+'/data/factor_scores_l1*.csv')
factor_scores_dfs = glob.glob(os.getcwd()+'/data/bihar/factor_scores_l1*.csv')

# Select only the columns that exist in both the DataFrame and the list
factors = [ 'flood-hazard', 'exposure', 'vulnerability','government-response']#,'historical_tenders','flood-hazard-float']
Expand Down
52 changes: 26 additions & 26 deletions scripts/vulnerability-landd-weight.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,54 +13,54 @@
# ----------------------------------------------------------------------
# 1. CONFIG
# ----------------------------------------------------------------------
DATA_DIR = Path("data")
IN_FILE = DATA_DIR / "MASTER_VARIABLES.csv"
DATA_DIR = Path("data/bihar")
IN_FILE = '/home/prajna/civicdatalab/ids-drr/bihar/flood-data-ecosystem-Bihar/MASTER_VARIABLES.csv'
OUT_FILE = DATA_DIR / "factor_scores_l1_vulnerability_weighted.csv"

VULNERABILITY_VARS = [
"mean_sex_ratio", "schools_count", "HealthCenters", "rail_length",
"net_sown_area_in_hac", "avg_electricity",
"block_piped_hhds_pct", "block_nosanitation_hhds_pct",
"sum_aged_population",
# "mean_sex_ratio", "schools_count", "HealthCenters", "rail_length",
"avg_electricity",
"sd_piped_hhds_pct", "sd_nosanitation_hhds_pct",
# "sum_aged_population",
]

DAMAGE_VARS = [
"Total_No_Of_Death_of_Humans_In_Flood_and_Cyclone",
"Population_Affected", "Cultivated_Area_affected_in_Hectare",
"road_length",
# "Total_No_Of_Death_of_Humans_In_Flood_and_Cyclone",
# "Population_Affected", "Cultivated_Area_affected_in_Hectare",
# "road_length",
]

NEG_INPUTS = ["block_nosanitation_hhds_pct", "sum_aged_population"]
NEG_INPUTS = ["sd_nosanitation_hhds_pct"]
GOOD_INPUTS = [
"schools_count", "HealthCenters", "rail_length",
"avg_electricity", "block_piped_hhds_pct",
# "schools_count", "HealthCenters", "rail_length",
"avg_electricity", "sd_piped_hhds_pct",
]

# ----------------------------------------------------------------------
# 2. LOAD & NORMALISE
# ----------------------------------------------------------------------
mv = pd.read_csv(IN_FILE).loc[:, ~pd.read_csv(IN_FILE).columns.duplicated()].copy()

mv["Total_Livestock_Lost"] /= mv["sum_population"]
mv["Total_No_Of_Death_of_Humans_In_Flood_and_Cyclone"] /= mv["sum_population"]
mv["House_Damage_Total"] /= mv["sum_population"]
# mv["Total_Livestock_Lost"] /= mv["sum_population"]
# mv["Total_No_Of_Death_of_Humans_In_Flood_and_Cyclone"] /= mv["sum_population"]
# mv["House_Damage_Total"] /= mv["sum_population"]

mv["Cultivated_Area_affected_in_Hectare"] /= mv["net_sown_area_in_hac"]
mv["road_length"] /= mv["block_area"]
mv["sum_aged_population"] /= mv["block_area"]
mv["rail_length"] /= mv["block_area"]
mv["schools_count"] /= mv["block_area"]
mv["HealthCenters"] /= mv["block_area"]
mv["net_sown_area_in_hac"] /= mv["block_area"]
# mv["Cultivated_Area_affected_in_Hectare"] /= mv["net_sown_area_in_hac"]
# mv["road_length"] /= mv["block_area"]
# mv["sum_aged_population"] /= mv["block_area"]
# mv["rail_length"] /= mv["block_area"]
# mv["schools_count"] /= mv["block_area"]
# mv["HealthCenters"] /= mv["block_area"]
# mv["net_sown_area_in_hac"] /= mv["block_area"]

# ----------------------------------------------------------------------
# 3. WORKING DF + LANDD SCORE
# ----------------------------------------------------------------------
vul = mv[VULNERABILITY_VARS + DAMAGE_VARS + ["timeperiod", "object_id"]].copy()
vul[DAMAGE_VARS + NEG_INPUTS] = vul[DAMAGE_VARS + NEG_INPUTS].astype("float64")
vul[DAMAGE_VARS + NEG_INPUTS] = vul[NEG_INPUTS].astype("float64")

scaler = MinMaxScaler()
vul["landd_score"] = scaler.fit_transform(vul[DAMAGE_VARS]).sum(axis=1) + 1
vul["landd_score"] = scaler.fit_transform(vul[NEG_INPUTS]).sum(axis=1) + 1

# ---- helper to keep weighted damages ≤ 1 --------------------------------
def weight_and_clip(df, cols, w):
Expand Down Expand Up @@ -109,9 +109,9 @@ def weight_and_clip(df, cols, w):
if len(np.unique(eff_vals)) >= 5:
breaks = jenkspy.jenks_breaks(eff_vals, n_classes=5)
df_m["vulnerability"] = pd.cut(eff_vals, breaks,
labels=[5, 4, 3, 2, 1], include_lowest=True)
labels=[5, 4, 3, 2, 1], include_lowest=True, duplicates='drop')
else: # too few distinct values
df_m["vulnerability"] = pd.qcut(eff_vals, q=5, labels=[5, 4, 3, 2, 1])
df_m["vulnerability"] = pd.qcut(eff_vals, q=5, labels=[5, 4, 3, 2, 1], duplicates='drop')

out_frames.append(df_m)

Expand Down