-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
163 lines (140 loc) · 6.65 KB
/
Copy pathMakefile
File metadata and controls
163 lines (140 loc) · 6.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
.DEFAULT_GOAL := help
DATA_DIR := data
# LF_DATA := $(DATA_DIR)/bihar_land_records_csv
FIGURE_DIR := figures
SCRIPTS_DIR := ./scripts
PY_UTILITIES := $(SCRIPTS_DIR)/utilities/utils.py
PY_GRAPH_UTILITIES := $(SCRIPTS_DIR)/utilities/graph_utils.py
EXECUTE_JUPYTERNB = cd $(SCRIPTS_DIR) && runpynb $(<F)
# ============================================================================
# Intermediate Data: Going from the raw Bihar land records to intermediate
# data (e.g., account holder names with gender, religion, castes)
# ============================================================================
$(NAMES_DATA): # Get unique ryot hindi names and caste
NAMES_DATA := $(DATA_DIR)/ryot_hindi_caste.csv.gz
$(NAMES_DATA): $(SCRIPTS_DIR)/get_ryot_hindi_caste.ipynb $(PY_UTILITIES)
$(EXECUTE_JUPYTERNB)
$(HINDI_NAMES_RELIGION_DATA): # Get religion using pranaam and hindi names
HINDI_NAMES_RELIGION_DATA := $(DATA_DIR)/hindi_names_religion.csv.gz
$(HINDI_NAMES_RELIGION_DATA): $(SCRIPTS_DIR)/get_religion.ipynb $(NAMES_DATA)
@$(EXECUTE_JUPYTERNB) -t 10000
TRANSLATED_NAMES_DATA := $(DATA_DIR)/hindi_names_religion_translated.csv.gz
$(HINDI_ENG_NAMES_GENDER_DATA): # Get gender using naampy and english names
HINDI_ENG_NAMES_GENDER_DATA := $(DATA_DIR)/hindi_eng_names_gender.csv.gz
$(HINDI_ENG_NAMES_GENDER_DATA): $(SCRIPTS_DIR)/get_gender.ipynb $(TRANSLATED_NAMES_DATA)
@$(EXECUTE_JUPYTERNB)
$(HINDI_ENG_NAMES_OUTKAST_DATA): # Get caste using outkast and english names
HINDI_ENG_NAMES_OUTKAST_DATA := $(DATA_DIR)/hindi_eng_names_caste_outkast.csv.gz
$(HINDI_ENG_NAMES_OUTKAST_DATA): $(SCRIPTS_DIR)/get_caste_outkast.ipynb $(TRANSLATED_NAMES_DATA)
@$(EXECUTE_JUPYTERNB)
idata: # Build intermediate datasets
INTERMEDIATE_DATA := $(NAMES_DATA) $(HINDI_NAMES_RELIGION_DATA) $(HINDI_ENG_NAMES_OUTKAST_DATA) $(HINDI_ENG_NAMES_GENDER_DATA)
idata: $(INTERMEDIATE_DATA)
.PHONY: idata
# ============================================================================
# Main results: For main figures and tables
# ============================================================================
# $(UNCOND_DIST): # Make the unconditional distribution plots
# UNCOND_DIST := uncond_number_plots uncond_plot_area uncond_number_plots_dots
# UNCOND_DIST := $(addprefix $(FIGURE_DIR)/, $(UNCOND_DIST))
# UNCOND_DIST := $(addsuffix .png, $(UNCOND_DIST)) $(addsuffix .pdf, $(UNCOND_DIST))
# $(UNCOND_DIST): $(SCRIPTS_DIR)/uncond_dist.ipynb $(PY_UTILITIES) $(PY_GRAPH_UTILITIES)
# $(EXECUTE_JUPYTERNB)
# $(RELIGION_DIST): # Make distribution plots, by religion
# RELIGION_DIST := religion_number_plots religion_barplot_plots religion_plot_area religion_barplot_plotarea
# RELIGION_DIST := $(addprefix $(FIGURE_DIR)/, $(RELIGION_DIST))
# RELIGION_DIST := $(addsuffix .png, $(RELIGION_DIST)) $(addsuffix .pdf, $(RELIGION_DIST))
# $(RELIGION_DIST): $(SCRIPTS_DIR)/muslims_dist.ipynb $(PY_UTILITIES) $(PY_GRAPH_UTILITIES) $(HINDI_NAMES_RELIGION_DATA)
# $(EXECUTE_JUPYTERNB)
# $(GENDER_DIST): # Make distribution plots, by gender
# GENDER_DIST := gender_number_plots gender_barplot_plots gender_plot_area gender_barplot_plotarea
# GENDER_DIST := $(addprefix $(FIGURE_DIR)/, $(GENDER_DIST))
# GENDER_DIST := $(addsuffix .png, $(GENDER_DIST)) $(addsuffix .pdf, $(GENDER_DIST))
# $(GENDER_DIST): $(SCRIPTS_DIR)/gender_dist.ipynb $(PY_UTILITIES) $(PY_GRAPH_UTILITIES) $(HINDI_ENG_NAMES_GENDER_DATA)
# $(EXECUTE_JUPYTERNB)
# $(CASTE_OUTKAST_DIST): # Make distribution plots, by caste
# CASTE_OUTKAST_DIST := castes_outkast_number_plots castes_outkast_barplot_plots castes_outkast_plot_area castes_outkast_barplot_plotarea
# CASTE_OUTKAST_DIST := $(addprefix $(FIGURE_DIR)/, $(CASTE_OUTKAST_DIST))
# CASTE_OUTKAST_DIST := $(addsuffix .png, $(CASTE_OUTKAST_DIST)) $(addsuffix .pdf, $(CASTE_OUTKAST_DIST))
# $(CASTE_OUTKAST_DIST): $(SCRIPTS_DIR)/caste_outkast_dist.ipynb $(PY_UTILITIES) $(PY_GRAPH_UTILITIES) $(HINDI_ENG_NAMES_GENDER_DATA)
# $(EXECUTE_JUPYTERNB)
# .PHONY: all
# all: # Make everything
# all: uplots idata religion_plots gender_plots caste_outkast_plots
# .PHONY: uplots
# uplots: # Make the unconditional plots
# uplots: $(UNCOND_DIST)
# .PHONY: religion_plots
# religion_plots: # Make the religion plots
# religion_plots: $(RELIGION_DIST)
# .PHONY: gender_plots
# gender_plots: # Make the gender plots
# gender_plots: $(GENDER_DIST)
# .PHONY: caste_outkast_plots
# caste_outkast_plots: # Make the caste (via outkast) plots
# caste_outkast_plots: $(CASTE_OUTKAST_DIST)
.PHONY: build
build: # Prepare data and figure folders if they do not exist
build:
mkdir -p $(DATA_DIR)
mkdir -p $(FIGURE_DIR)
# ============================================================================
# Set up the Python virtual environment and prepare the Jupyter distribution
# Installs packages from requirements.txt
# ============================================================================
.PHONY: setup
VENVPATH ?= venv_land
ifeq ($(OS),Windows_NT)
VENVPATH := c:/users/admin/$(VENVPATH)
ACTIVATE_PATH := $(VENVPATH)/Scripts/activate
else
ACTIVATE_PATH := $(VENVPATH)/bin/activate
endif
REQUIREMENTS := ./requirements.txt
setup: # Set up venv
setup: $(REQUIREMENTS)
@echo "==> $@"
@echo "==> Creating and initializing virtual environment..."
rm -rf $(VENVPATH)
python -m venv $(VENVPATH)
. $(ACTIVATE_PATH) && \
pip install --upgrade pip && \
which pip && \
pip list && \
echo "==> Installing requirements" && \
pip install -r $< && \
jupyter contrib nbextensions install --sys-prefix --skip-running-check && \
python -m ipykernel install --user --name=$(VENVPATH) --display-name "Python ($(VENVPATH))" && \
echo "==> Packages available:" && \
which pip && \
pip list && \
which jupyter && \
deactivate
@echo "==> Setup complete."
# ============================================================================
# Open Jupyter notebook in the venv
# ============================================================================
.PHONY: jn
jn: # Launch jupyter notebook in venv
@echo "==> $@"
if [ -f $(VENVPATH)/Scripts/activate ]; then \
. $(VENVPATH)/Scripts/activate && jupyter notebook; \
elif [ -f $(VENVPATH)/bin/activate ]; then \
. $(VENVPATH)/bin/activate && jupyter notebook; \
else \
@echo "No venv found"; \
fi
# ============================================================================
# Additional utilities
# ============================================================================
.PHONY: clean
clean: # Clean results in ./figures
# rm -f figures/*
rm -f $(GENDER_DIST)
rm -f $(CASTE_OUTKAST_DIST)
rm -f $(RELIGION_DIST)
rm -f $(UNCOND_DIST)
rm -f $(INTERMEDIATE_DATA)
.PHONY: help
help: # Show Help
@egrep -h '\s#\s' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?# "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'