Nano Hash - криптовалюты, майнинг, программирование

Проблема либо с количеством символов, превышающим лимит ячеек, либо с сохранением списков переменной длины

Проблема:

У меня есть списки генов, экспрессирующихся в 53 различных тканях. Первоначально эти данные хранились в максимальном наборе генов с «NaN», где не было экспрессии. Я пытаюсь создать новые списки для каждой ткани, в которой просто экспрессированы гены, поскольку было очень неэффективно искать в этом массиве каждый раз, когда я запускал свой скрипт. У меня есть код, который находит нужные гены для каждой ткани, но я не знаю, как сохранить вывод.

Я использовал фрейм данных pandas, а затем конвертировал в csv. Но это не принимает списки различной длины, если только я не поставлю этот список как один элемент. Однако затем, когда я сохраняю кадр данных в csv, он пытается сжать этот очень длинный список (все гены, экспрессированные для одной ткани) в одну ячейку. Я получаю сообщение об ошибке длины строки, превышающей ограничение на количество символов в ячейке Excel.

Поэтому мне нужен способ либо справиться с этим ограничением, либо по-другому построить свои списки. Я бы предпочел иметь один файл для всех списков.

Мой код:

import csv
import pandas as pd
import math
import numpy as np


#Import list of tissues:
df = pd.read_csv(r'E-MTAB-5214-query-results.tsv', skiprows = [0,1,2,3], sep='\t')
tissuedict=df.to_dict()
tissuelist = list(tissuedict.keys())[2:]

all_genes = [gene for key,gene in tissuedict['Gene Name'].items()]

data = []


for tissue in tissuelist:

    #Create array to keep track of the protein mRnaS in tissue that are not present in the network
    #initiate with first tissue, protein

    nanInd = [key for key,value in tissuedict[tissue].items() if math.isnan(value)]

    tissueExpression = np.delete(all_genes, nanInd)

    datatis = [tissue, tissueExpression.tolist()]

    print(datatis)

    data.append(datatis)


print(data)


df = pd.DataFrame(data)

df.to_csv(r'tissue_expression_data.csv')

Ссылка на данные (любой):

https://github.com/joanna-lada/gene_data/blob/master/E-MTAB-5214-query-results.tsv

https://raw.githubusercontent.com/joanna-lada/gene_data/master/E-MTAB-5214-query-results.tsv


Ответы:


1

IIUC вам нужны списки названий генов, найденных в каждой ткани. Это записывает эти списки в виде столбцов в csv:

import pandas as pd

df = pd.read_csv('E-MTAB-5214-query-results.tsv', skiprows = [0,1,2,3], sep='\t')
df = df.drop(columns='Gene ID').set_index('Gene Name')

res = pd.DataFrame()
for c in df.columns:
    res = pd.concat([res, pd.Series(df[c].dropna().index, name=c)], axis=1)

res.to_csv('E-MTAB-5214-query-results.csv', index=False)

(Было бы проще записать их в виде строк, но Excel не может импортировать столько столбцов). Не открывайте CSV-файл в Excel напрямую, а используйте пустой лист и импортируйте CSV-файл (Данные — Внешние данные, Из текста), иначе вы не можете разделить их на столбцы Excel за один прогон (по крайней мере, в Excel 2010).

введите здесь описание изображения

30.07.2019
  • Привет Стеф, спасибо за ваше предложение. Я пробовал это, но я не совсем получаю результат. Список из 53 тканей находится в ячейке A1, а ячейки до A33000 заполнены списками. Это не может соответствовать спискам тканей, так как их всего 53! 30.07.2019
  • Я добавил изображение того, как выглядит результат: 53 столбца с максимальным количеством строк 33061 (pyhton 3.7.3, pandas 0.25.0 — какие у вас версии?) 30.07.2019
  • Как вы делали импорт? Перейдите в «Данные», затем «Внешние данные» - «Из текста», затем откроется помощник преобразования текста, вы выбираете «разделить» (должно быть выбрано по умолчанию), затем «Далее», затем отметьте разделитель = запятая, затем «Готово». (Я в немецкой версии Excel, поэтому точные английские имена могут немного отличаться) 30.07.2019
  • Я понимаю! Разделитель каким-то образом изменился на табуляцию! 30.07.2019

  • 2

    создайте свою переменную data в качестве словаря, вы можете сохранить словарь в файл json, используя json.dump см. здесь

    import json
    
    data = {}
    for tissue in tissuelist:
        nanInd = [key for key,value in tissuedict[tissue].items() if math.isnan(value)]
        tissueExpression = np.delete(all_genes, nanInd)
        data[tissue] =  tissueExpression.tolist()
    
    with open('filename.json', 'w') as fp:
        json.dump(data, fp)
    
    30.07.2019
  • Спасибо за ваш ответ! Однако, похоже, у этого нет заголовка? Хотелось бы прочитать списки по заголовкам (названиям тканей). Я проверил документацию, и там нет опции «заголовок». Я не совсем уверен, что skpkeys делает то же самое. 30.07.2019
  • На самом деле, выход немного странный. Нет никаких «имен генов»! 30.07.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..