Вывод данных в csv в python - PullRequest
       19

Вывод данных в csv в python

0 голосов
/ 06 апреля 2020

У меня есть данные, которые этот скрипт выводит в виде диаграммы рассеяния ID_all[:,0],ID_all[:,1], но я также хочу сохранить данные, использованные для диаграммы рассеяния, в виде двух столбцов (в виде файла CSV). Любая помощь действительно ценится! Заранее спасибо.

Подробнее:

Вот ссылка на исходные данные CSV, чтобы вы могли увидеть мою проблему (используются только первые два столбца).

https://www.dropbox.com/s/966iviv01tccv1k/contacts.csv?dl=0

Если вы построите входной CSV-файл (см. Рисунок 1), вы увидите, что он содержит только половину значений, которые мне нужны. Поэтому, когда я строю это с помощью приведенного ниже сценария, я транспонирую «матрицу», делая зеркальное отображение этой главной диагонали. Теперь с помощью этого сценария я рисую и оригинал, и транспонирование (рисунок 2), но я почему-то не могу понять, как просто выводить столбцы данных в дополнение к рисунку. Figure 1 Figure 2

import numpy as np
import matplotlib.pyplot as plt

def parsefile(filename):
    i = 0
    print('Opening File')
    try:
        for line in open(filename):
            line = line.split()
            ID = np.hstack((int(line[0]), int(line[1])))
            if i==0:
                ID_list = ID
            i+=1
            if i>0:
                ID_list = np.vstack((ID_list, ID))
        print('File Opened')   
        return ID_list
    except:
        return ID_list

def get_scatter_data(ID_list):
    ID_swapped1 = ID_list[:, 1]
    ID_swapped2 = ID_list[:, 0]
    ID_swapped = np.transpose([ID_swapped1.T, ID_swapped2.T])
    N = np.max(ID_list)
    diagonal = np.linspace(1,N,N)
    ID_diagonal = np.transpose([diagonal.T,diagonal.T])
    ID_all = np.vstack((ID_list,ID_swapped,ID_diagonal))
    return ID_all

def plot_contactmap(ID_all, savefilename):
    f = plt.figure()
    plt.scatter(ID_all[:,0],ID_all[:,1], marker='o', s=0.01)
    plt.axis('square')
    plt.xlabel('Residue Number', fontsize = 14)
    plt.ylabel('Residue Number', fontsize = 14)
    plt.tick_params(axis='both', which='major', labelsize=14)
    plt.show()
    f.savefig(savefilename+'.png', bbox_inches='tight')
    f.savefig(savefilename+'.pdf', bbox_inches='tight')

def main(filename, savefilename):
    ID_list = parsefile(filename+'.csv')
    ID_all  = get_scatter_data(ID_list)
    plot_contactmap(ID_all, savefilename)

main('contacts', 'test')


1 Ответ

2 голосов
/ 06 апреля 2020

Вы можете сохранить, используя numpy.savetxt() метод

import numpy as np
ID_all = np.array([[1,2],[3,4],[5,6]])
np.savetxt('output.csv', ID_all, delimiter=',', fmt="%d")

Если вы хотите дать имена столбцов, вы можете использовать header аргумент np.savetxt() метод.

np.savetxt('output.csv', ID_all, delimiter=',', header='first, second', fmt="%d")

...