Source code for sccellfie.io.save_data

import os
import warnings

import networkx as nx
import pandas as pd
from pathlib import Path


[docs] def save_adata(adata, output_directory, filename, spatial_network_key='spatial_network', verbose=True): """ Saves an AnnData object and its scCellFie attributes to a folder. Parameters ---------- adata: AnnData object Annotated data matrix. output_directory: str Directory to save the results (AnnData objects). filename: str The name of the file to save the AnnData object. Do not include the file extension. spatial_network_key: str, optional (default: 'spatial_network') The key in adata.uns or a scCellFie_attribute.uns where the spatial knn graph is stored. verbose: bool, optional (default: True) Whether to print the file names that were saved. Returns ------- None The AnnData object is saved to folder/filename.h5ad. The scCellFie attributes are saved to: - reactions: folder/filename_reactions.h5ad. - metabolic_tasks: folder/filename_metabolic_tasks.h5ad. """ # Check folder path Path(output_directory).mkdir(parents=True, exist_ok=True) if spatial_network_key in adata.uns.keys(): if isinstance(adata.uns[spatial_network_key]['graph'], nx.Graph): adata.uns[spatial_network_key]['graph'] = nx.to_pandas_adjacency(adata.uns[spatial_network_key]['graph']) warn = f"adata.uns['{spatial_network_key}']['graph'] was converted from a networkx.Graph object to a pandas adjacency matrix to be saved with the AnnData object." warnings.warn(warn) adata_filename = f'{output_directory}/{filename}.h5ad' adata.write_h5ad(adata_filename) if verbose: print(f'{adata_filename} was correctly saved') if hasattr(adata, 'reactions'): if spatial_network_key in adata.reactions.uns.keys(): if isinstance(adata.reactions.uns[spatial_network_key]['graph'], nx.Graph): adata.reactions.uns[spatial_network_key]['graph'] = nx.to_pandas_adjacency(adata.reactions.uns[spatial_network_key]['graph']) warn = f"adata.reactions.uns['{spatial_network_key}']['graph'] was converted from a networkx.Graph object to a pandas adjacency matrix to be saved with the AnnData object." warnings.warn(warn) reaction_filename = f'{output_directory}/{filename}_reactions.h5ad' adata.reactions.write_h5ad(reaction_filename) if verbose: print(f'{reaction_filename} was correctly saved') else: warnings.warn('No adata.reactions found. Skipping saving reactions.') if hasattr(adata, 'metabolic_tasks'): if spatial_network_key in adata.metabolic_tasks.uns.keys(): if isinstance(adata.metabolic_tasks.uns[spatial_network_key]['graph'], nx.Graph): adata.metabolic_tasks.uns[spatial_network_key]['graph'] = nx.to_pandas_adjacency(adata.metabolic_tasks.uns[spatial_network_key]['graph']) warn = f"adata.metabolic_tasks.uns['{spatial_network_key}']['graph'] was converted from a networkx.Graph object to a pandas adjacency matrix to be saved with the AnnData object." warnings.warn(warn) mt_filename = f'{output_directory}/{filename}_metabolic_tasks.h5ad' adata.metabolic_tasks.write_h5ad(mt_filename) if verbose: print(f'{mt_filename} was correctly saved') else: warnings.warn('No adata.metabolic_tasks found. Skipping saving metabolic_tasks.')
[docs] def save_result_summary(results_dict, output_directory, prefix=''): """ Save the result summary contained in a dictionary to CSV files. Parameters ---------- results_dict : dict Dictionary containing the DataFrames with results from the sccellfie.reports.summary.generate_report_from_adata() function. output_directory : str Directory to save the results. prefix : str, optional (default: '') Prefix to add to the filenames. """ os.makedirs(output_directory, exist_ok=True) # Add prefix if provided if prefix and not prefix.endswith('-'): prefix = f"{prefix}-" # Save each DataFrame for key, df in results_dict.items(): if not isinstance(df, pd.DataFrame) or df.empty: continue filename = f"{prefix}{key.capitalize()}.csv" filepath = os.path.join(output_directory, filename) # Determine if index should be included save_index = key not in ['cell_counts', 'melted'] df.to_csv(filepath, index=save_index) print(f"Results saved to {output_directory}")