def read_xu_et_al(data_file, learn_options=None, verbose=True, subsetting='ours'):
    if data_file is None:
        data_file = '../data/xu_et_al_data.xlsx'

    datasets = ['ribo', 'non_ribo', 'mESC']
    aggregated = None

    for d in datasets:
        data_efficient = pandas.read_excel(data_file, sheetname='%s_efficient_sgRNA' % d, skiprows=2)
        data_inefficient = pandas.read_excel(data_file, sheetname='%s_inefficient_sgRNA' % d, skiprows=2)

        data_efficient['threshold'] = 1.
        data_inefficient['threshold'] = 0.

        exp_data = pandas.concat((data_efficient, data_inefficient))
        exp_data['rank_KBM7'] = exp_data.groupby('Gene Symbol')['log2 fold change, KBM7'].transform(rank_transform)
        exp_data['rank_HL60'] = exp_data.groupby('Gene Symbol')['log2 fold change, HL60'].transform(rank_transform)

        if aggregated is None:
            aggregated = exp_data
        else:
            aggregated = pandas.concat((aggregated, exp_data))


    # go from 40mer to 30mer
    if subsetting == 'ours':
        aggregated["sequence(target+3'+5')"] = aggregated["sequence(target+3'+5')"].apply(lambda x: x[6:-4])
    else:
        aggregated["sequence(target+3'+5')"] = aggregated["sequence(target+3'+5')"].apply(lambda x: x[10:])

    # make sure EVEYTHING is uppercase
    aggregated["sequence(target+3'+5')"] = aggregated["sequence(target+3'+5')"].apply(lambda x: x.upper())

    # rename columns
    aggregated.rename(columns={"sequence(target+3'+5')": '30mer', 'Gene Symbol': 'Target gene', 'strand':'Strand'}, inplace=True)

    aggregated['Strand'].loc[aggregated['Strand']=='+'] = 'sense'
    aggregated['Strand'].loc[aggregated['Strand']=='-'] = 'antisense'

    aggregated['average rank'] = aggregated[['rank_HL60', 'rank_KBM7']].mean(axis=1)
    df = aggregated
    df = df.rename(columns={'30mer': 'Sequence', 'Target gene': 'Target'})
    df['drug'] = 'nodrug'
    df['test'] = 1
    df = df.set_index(['Sequence', 'Target', 'drug'])
    df['30mer'] = df.index.get_level_values(0)
    df['Target gene'] = df.index.get_level_values(1)
    df['Organism'] = 'unknown'
    df['score_drug_gene_rank'] = df['average rank']
    df['score_drug_gene_threshold'] = df['threshold']
    df['Nucleotide cut position'] = df['start of target']
    df['Percent Peptide'] = 0
    df['Amino Acid Cut position'] = 0
    target_genes = np.unique(df['Target gene'].values)

    return df[['Nucleotide cut position', 'Percent Peptide', 'Amino Acid Cut position']], target_genes, df[['30mer', 'Strand']], df[['score_drug_gene_rank', 'score_drug_gene_threshold', 'test', 'Target gene']]
dataset/ETHPy150Open MicrosoftResearch/Azimuth/azimuth/load_data.py/read_xu_et_al/original