Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
self._treatment,
self._outcome,
common_cause_names=self._common_causes,
effect_modifier_names = self._effect_modifiers,
observed_node_names=self._data.columns.tolist()
)
elif instruments is not None:
self._graph = CausalGraph(
self._treatment,
self._outcome,
instrument_names=self._instruments,
effect_modifier_names = self._effect_modifiers,
observed_node_names=self._data.columns.tolist()
)
else:
cli.query_yes_no(
"WARN: Are you sure that there are no common causes of treatment and outcome?",
default=None
)
else:
self._graph = CausalGraph(
self._treatment,
self._outcome,
graph,
observed_node_names=self._data.columns.tolist(),
missing_nodes_as_confounders = self._missing_nodes_as_confounders
)
self._common_causes = self._graph.get_common_causes(self._treatment, self._outcome)
self._instruments = self._graph.get_instruments(self._treatment,
self._outcome)
self._effect_modifiers = self._graph.get_effect_modifiers(self._treatment, self._outcome)
estimands_dict = {}
causes_t = self._graph.get_causes(self.treatment_name)
causes_y = self._graph.get_causes(self.outcome_name, remove_edges={'sources':self.treatment_name, 'targets':self.outcome_name})
common_causes = list(causes_t.intersection(causes_y))
self.logger.info("Common causes of treatment and outcome:" + str(common_causes))
if self._graph.all_observed(common_causes):
self.logger.info("All common causes are observed. Causal effect can be identified.")
else:
self.logger.warning("If this is observed data (not from a randomized experiment), there might always be missing confounders. Causal effect cannot be identified perfectly.")
if self._proceed_when_unidentifiable:
self.logger.info(
"Continuing by ignoring these unobserved confounders because proceed_when_unidentifiable flag is True."
)
else:
cli.query_yes_no(
"WARN: Do you want to continue by ignoring any unobserved confounders? (use proceed_when_unidentifiable=True to disable this prompt)",
default=None
)
observed_common_causes = self._graph.filter_unobserved_variables(common_causes)
observed_common_causes = list(observed_common_causes)
backdoor_estimand_expr = self.construct_backdoor_estimand(
self.estimand_type, self._graph.treatment_name,
self._graph.outcome_name, observed_common_causes
)
self.logger.debug("Identified expression = " + str(backdoor_estimand_expr))
estimands_dict["backdoor"] = backdoor_estimand_expr
# Now checking if there is also a valid iv estimand
instrument_names = self._graph.get_instruments(self.treatment_name,
import dataiku
from flask import json, request
import numpy as np
import pandas as pd
import dowhy
from dowhy.do_why import CausalModel
def new_query_yes_no(question, default=False):
pass
# the original dowhy package prompts the user to acknowledge
# with a y/n answer that the effect is not identifiable.
# Removing this.
dowhy.utils.cli_helpers.query_yes_no = new_query_yes_no
@app.route('/datasets')
def get_dataset_flow():
client = dataiku.api_client()
project_key = dataiku.default_project_key()
project = client.get_project(project_key)
datasets = project.list_datasets()
dataset_names = [datasets[i]["name"] for i in range(len(datasets))]
return json.jsonify({"dataset_names": dataset_names})
@app.route('/columns')
def get_columns():
dataset = request.args.get("dataset")
df = dataiku.Dataset(dataset).get_dataframe(limit=0)