Необходимо составить точечный график из 5 случайных наборов данных из текстового файла. - PullRequest
0 голосов
/ 24 сентября 2019

Мне нужно прочитать около 5000 наборов данных с несколькими значениями для каждого набора.Оттуда мне нужно установить условия на то, что считается «хорошей ценностью».Я думаю, что я достиг этого, и из этой новой выборки подмножества из всей совокупности мне нужно случайным образом выбрать 5 наборов данных и построить их график зависимости длины волны от потока.

Я попытался использовать цикл for для считывания 'идентификаторы случайно выбранных наборов данных, но они всегда возвращаются с одним и тем же номером.Каждый из наборов данных имеет три условных значения, как показано в цикле for gal in allgal, который выбирает галактики с хорошими точками данных.

import random
import numpy as np
from numpy.polynomial.polynomial import polyfit
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import csv
import math
from collections import Counter

galnum = []
goodgal = []
xval = [3650, 4450, 5510, 6580, 8060, 9000, 12200, 21900]
yval = []


class Galaxy:
    def __init__(self, id , ra , dec , x , y , hawkiks_tot , k_flag , k_star , k_fluxrad , totmask , hawkiks , ehawkiks , vimosu , evimosu , vimosb , \
        evimosb , vimosv , evimosv , vimosr , evimosr , vimosi , evimosi , decamz , edecamz , fourstarj1 , efourstarj1 , hawkij , ehawkij , \
        irac1 , eirac1 , irac2, eirac2 , irac3 , eirac3 , irac4 , eirac4):
        self.id    = int(id)
        self.hawkiks_tot    = float(hawkiks_tot)
        self.k_flag = int(k_flag)
        self.totmask    = int(totmask)
        self.hawkiks    = float(hawkiks)
        self.vimosu    = float(vimosu)
        self.vimosb    = float(vimosb)
        self.vimosv    = float(vimosv)
        self.vimosr    = float(vimosr)
        self.vimosi    = float(vimosi)
        self.decamz    = float(decamz)
        self.hawkij    = float(hawkij)

    def __str__(self):
        return id + ' ' + hawkiks_tot + ' ' + k_flag + ' ' + totmask + ' ' + hawkiks + ' ' + vimosu + ' ' + vimosb + ' ' \
               + vimosv + ' ' + vimosr + ' ' + vimosi + ' ' + decamz + ' ' + hawkij


allgal = []

with open('/home/jacob/PHOTOMETRY/PHOTOM_CATS/SpARCS-0035_totalall_HAWKIKs.cat', 'r') as magfile:
    magplots = csv.reader(magfile)
    firstmagline = magfile.readline()
    for line in magfile:
        id , ra , dec , x , y , hawkiks_tot , k_flag , k_star , k_fluxrad , totmask , hawkiks , ehawkiks , vimosu , evimosu , vimosb , \
        evimosb , vimosv , evimosv , vimosr , evimosr , vimosi , evimosi , decamz , edecamz , fourstarj1 , efourstarj1 , hawkij , ehawkij , \
        irac1 , eirac1 , irac2, eirac2 , irac3 , eirac3 , irac4 , eirac4 = line.split()

        gal = Galaxy(id , ra , dec , x , y , hawkiks_tot , k_flag , k_star , k_fluxrad , totmask , hawkiks , ehawkiks , vimosu , evimosu , vimosb , \
        evimosb , vimosv , evimosv , vimosr , evimosr , vimosi , evimosi , decamz , edecamz , fourstarj1 , efourstarj1 , hawkij , ehawkij , \
        irac1 , eirac1 , irac2, eirac2 , irac3 , eirac3 , irac4 , eirac4)

        allgal.append(gal)


for gal in allgal:
    if gal.k_flag == 0 and gal.totmask == 0 and -2.5*math.log10(gal.hawkiks_tot) + 25 < 23:
        goodgal.append(gal)


random.seed(21)
sample_list = random.sample(goodgal, k=5)
print(sample_list)      #IDs: 2279, 3914, 3016, 4310, 2638

for goodgal in sample_list:
    print(id)

Финальный цикл for просто проверяет, что id распечатывается с помощьюцикл for соответствует идентификаторам генератора случайных чисел, как показано в строке комментария в коде.Но он всегда печатает 4889, который является последним идентификатором набора данных.Я не понимаю, почему это появляется, потому что идентификаторы назначенных галактик в random.sample () даже не имеют этого идентификатора.Он продолжает печатать 4889, 4889, 4889, 4889, 4889. В то время как он должен печатать, «2279, 3914, 3016, 4310, 2638».Это просто проверка, чтобы убедиться, что все читается правильно.То, что я хочу сделать, это в основном считывать различные потоки (заданные hawkiks, vimosv, vimosb и т. Д.), Добавлять их в массив yval и затем строить 5 отдельных графиков для каждой галактики (набор данных) с точки зрения длины волны (xvalмассив) и поток (массив yval).

...