steinbock.export
data
try_convert_to_anndata_from_disk(x_files, *obs_file_lists)
Source code in steinbock/export/data.py
def try_convert_to_anndata_from_disk(
x_files: Sequence[Union[str, PathLike]], *obs_file_lists
) -> Generator[Tuple[Path, Tuple[Path, ...], AnnData], None, None]:
for x_file, *obs_files in zip(x_files, *obs_file_lists):
obs_files = tuple(Path(obs_file) for obs_file in obs_files)
try:
x = io.read_data(x_file)
obs = None
if len(obs_files) > 0:
obs = io.read_data(obs_files[0])
for obs_file in obs_files[1:]:
obs = pd.merge(
obs,
io.read_data(obs_file),
left_index=True,
right_index=True,
)
obs.index = obs.index.astype(str)
anndata = AnnData(X=x.values, obs=obs)
yield Path(x_file), obs_files, anndata
del x, obs
except:
_logger.exception(f"Error converting {x_file} to AnnData")
try_convert_to_dataframe_from_disk(*data_file_lists)
Source code in steinbock/export/data.py
def try_convert_to_dataframe_from_disk(*data_file_lists) -> pd.DataFrame:
data_objs = []
img_file_names = []
for data_files in zip(*data_file_lists):
data = io.read_data(data_files[0])
for data_file in data_files[1:]:
data = pd.merge(
data,
io.read_data(data_file),
left_index=True,
right_index=True,
)
img_file = io._as_path_with_suffix(data_files[0], ".tiff")
data_objs.append(data)
img_file_names.append(img_file.name)
return pd.concat(data_objs, keys=img_file_names, names=["Image", "Object"])
graphs
convert_to_networkx(neighbors, *data_list)
Source code in steinbock/export/graphs.py
def convert_to_networkx(neighbors: pd.DataFrame, *data_list) -> nx.Graph:
edges = neighbors[["Object", "Neighbor"]].astype(int).values.tolist()
undirected_edges = [tuple(sorted(edge)) for edge in edges]
is_directed = any([x != 2 for x in Counter(undirected_edges).values()])
graph: nx.Graph = nx.from_pandas_edgelist(
neighbors,
source="Object",
target="Neighbor",
edge_attr=True,
create_using=nx.DiGraph if is_directed else nx.Graph,
)
if len(data_list) > 0:
merged_data = data_list[0]
for data in data_list[1:]:
merged_data = pd.merge(
merged_data, data, left_index=True, right_index=True
)
node_attributes = {
int(object_id): object_data.to_dict()
for object_id, object_data in merged_data.iterrows()
}
nx.set_node_attributes(graph, node_attributes)
return graph
try_convert_to_networkx_from_disk(neighbors_files, *data_file_lists)
Source code in steinbock/export/graphs.py
def try_convert_to_networkx_from_disk(
neighbors_files: Sequence[Union[str, PathLike]], *data_file_lists
) -> Generator[Tuple[Path, Tuple[Path, ...], nx.Graph], None, None]:
for neighbors_file, *data_files in zip(neighbors_files, *data_file_lists):
data_files = tuple(Path(data_file) for data_file in data_files)
try:
neighbors = io.read_neighbors(neighbors_file)
data_list = [io.read_data(data_file) for data_file in data_files]
graph = convert_to_networkx(neighbors, *data_list)
yield Path(neighbors_file), data_files, graph
del neighbors, data_list, graph
except:
_logger.exception(f"Error converting {neighbors_file} to networkx")