Назначение максимального значения после np.genfromtxt - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь выяснить, в какое время (столбец 2) самая высокая цена (столбец 5) происходила каждый день (столбец 1), а затем изобразить эти времена визуально.

Я считаю, что первым шагом является просмотр даты, а затем поиск максимального значения в столбце 5. Будет ли это сделано с помощью цикла for?Что произойдет, если их будет 2 одинаковых?

Далее я бы хотел визуально увидеть время (гистограмму), когда произошла самая высокая цена при загрузке в файл еще многих дней.

КогдаЯ пытаюсь найти максимум, я получаю ошибку.

Данные успешно загружаются с помощью этого кода:

import numpy as np

my_data = np.genfromtxt('downloads/USDJPY.csv', delimiter=",", dtype=None, names=True, encoding='utf-8')

print (my_data)

Это вывод ... Мне нужно найти максимум (столбец 5), это всего лишь один деньdata ..

[('6/3/19', '7:05', 'USD/JPY', 108.37 , 108.37 , 108.345, 108.345)
 ('6/3/19', '7:10', 'USD/JPY', 108.345, 108.345, 108.325, 108.325)
 ('6/3/19', '7:15', 'USD/JPY', 108.33 , 108.36 , 108.33 , 108.34 )
 ('6/3/19', '7:20', 'USD/JPY', 108.335, 108.335, 108.295, 108.305)
 ('6/3/19', '7:25', 'USD/JPY', 108.305, 108.305, 108.27 , 108.305)
 ('6/3/19', '7:30', 'USD/JPY', 108.3  , 108.3  , 108.25 , 108.26 )
 ('6/3/19', '7:35', 'USD/JPY', 108.265, 108.295, 108.265, 108.29 )
 ('6/3/19', '7:40', 'USD/JPY', 108.275, 108.29 , 108.25 , 108.29 )
 ('6/3/19', '7:45', 'USD/JPY', 108.285, 108.29 , 108.275, 108.29 )
 ('6/3/19', '7:50', 'USD/JPY', 108.295, 108.35 , 108.295, 108.35 )
 ('6/3/19', '7:55', 'USD/JPY', 108.355, 108.355, 108.325, 108.33 )
 ('6/3/19', '8:00', 'USD/JPY', 108.335, 108.36 , 108.325, 108.35 )
 ('6/3/19', '8:05', 'USD/JPY', 108.345, 108.375, 108.32 , 108.37 )
 ('6/3/19', '8:10', 'USD/JPY', 108.375, 108.38 , 108.365, 108.365)
 ('6/3/19', '8:15', 'USD/JPY', 108.365, 108.37 , 108.33 , 108.33 )
 ('6/3/19', '8:20', 'USD/JPY', 108.335, 108.345, 108.33 , 108.345)
 ('6/3/19', '8:25', 'USD/JPY', 108.35 , 108.38 , 108.35 , 108.38 )
 ('6/3/19', '8:30', 'USD/JPY', 108.37 , 108.39 , 108.37 , 108.38 )
 ('6/3/19', '8:35', 'USD/JPY', 108.375, 108.435, 108.37 , 108.42 )
 ('6/3/19', '8:40', 'USD/JPY', 108.42 , 108.425, 108.4  , 108.405)
 ('6/3/19', '8:45', 'USD/JPY', 108.41 , 108.415, 108.35 , 108.355)
 ('6/3/19', '8:50', 'USD/JPY', 108.355, 108.36 , 108.3  , 108.325)
 ('6/3/19', '8:55', 'USD/JPY', 108.32 , 108.33 , 108.265, 108.27 )
 ('6/3/19', '9:00', 'USD/JPY', 108.27 , 108.29 , 108.25 , 108.265)
 ('6/3/19', '9:05', 'USD/JPY', 108.22 , 108.34 , 108.195, 108.27 )
 ('6/3/19', '9:10', 'USD/JPY', 108.27 , 108.365, 108.25 , 108.34 )
 ('6/3/19', '9:15', 'USD/JPY', 108.33 , 108.355, 108.3  , 108.32 )
 ('6/3/19', '9:20', 'USD/JPY', 108.31 , 108.33 , 108.29 , 108.33 )
 ('6/3/19', '9:25', 'USD/JPY', 108.325, 108.33 , 108.315, 108.325)
 ('6/3/19', '9:30', 'USD/JPY', 108.335, 108.345, 108.32 , 108.345)
 ('6/3/19', '9:35', 'USD/JPY', 108.345, 108.345, 108.325, 108.33 )
 ('6/3/19', '9:40', 'USD/JPY', 108.34 , 108.37 , 108.33 , 108.355)
 ('6/3/19', '9:45', 'USD/JPY', 108.355, 108.4  , 108.345, 108.395)
 ('6/3/19', '9:50', 'USD/JPY', 108.39 , 108.41 , 108.38 , 108.385)
 ('6/3/19', '9:55', 'USD/JPY', 108.385, 108.385, 108.35 , 108.35 )
 ('6/3/19', '10:00', 'USD/JPY', 108.355, 108.39 , 108.355, 108.375)
 ('6/3/19', '10:05', 'USD/JPY', 108.37 , 108.41 , 108.36 , 108.405)
 ('6/3/19', '10:10', 'USD/JPY', 108.4  , 108.405, 108.37 , 108.37 )
 ('6/3/19', '10:15', 'USD/JPY', 108.375, 108.375, 108.35 , 108.36 )
 ('6/3/19', '10:20', 'USD/JPY', 108.36 , 108.37 , 108.355, 108.37 )
 ('6/3/19', '10:25', 'USD/JPY', 108.37 , 108.425, 108.37 , 108.41 )
 ('6/3/19', '10:30', 'USD/JPY', 108.405, 108.42 , 108.395, 108.405)
 ('6/3/19', '10:35', 'USD/JPY', 108.405, 108.435, 108.405, 108.415)
 ('6/3/19', '10:40', 'USD/JPY', 108.405, 108.405, 108.38 , 108.405)
 ('6/3/19', '10:45', 'USD/JPY', 108.4  , 108.425, 108.395, 108.415)
 ('6/3/19', '10:50', 'USD/JPY', 108.42 , 108.445, 108.4  , 108.41 )
 ('6/3/19', '10:55', 'USD/JPY', 108.4  , 108.415, 108.4  , 108.405)
 ('6/3/19', '11:00', 'USD/JPY', 108.395, 108.395, 108.38 , 108.39 )
 ('6/3/19', '11:05', 'USD/JPY', 108.39 , 108.41 , 108.39 , 108.39 )]

Я пробовал это, чтобы найти максимум и получить ошибку.

import numpy as np

my_data = np.genfromtxt('downloads/USDJPY.csv', delimiter=",", dtype=None, names=True, encoding='utf-8')

High = my_data.max[:4]

print (High)

Я ожидаю, что на выходе будет High = 108.435, и это произошло в 8:35.

Как только я найду максимум, как я могу передать его в контейнер времени?

Я также буду делать минимум.

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Я могу воссоздать часть вашего массива с помощью:

In [210]: data = np.array([('6/3/19', '7:05', 'USD/JPY', 108.37 , 108.37 , 108.345, 108.345), 
     ...:  ('6/3/19', '7:10', 'USD/JPY', 108.345, 108.345, 108.325, 108.325), 
     ...:  ('6/3/19', '7:15', 'USD/JPY', 108.33 , 108.36 , 108.33 , 108.34 ), 
     ...:  ('6/3/19', '7:20', 'USD/JPY', 108.335, 108.335, 108.295, 108.305), 
     ...:  ('6/3/19', '7:25', 'USD/JPY', 108.305, 108.305, 108.27 , 108.305), 
     ...:  ('6/3/19', '7:30', 'USD/JPY', 108.3  , 108.3  , 108.25 , 108.26 )], 
     ...: dtype='U7,U4,U10,f,f,f,f') 
     ...:  
     ...:  
     ...:                                                                                            
In [211]: data                                                                                       
Out[211]: 
array([('6/3/19', '7:05', 'USD/JPY', 108.37 , 108.37 , 108.345, 108.345),
       ('6/3/19', '7:10', 'USD/JPY', 108.345, 108.345, 108.325, 108.325),
       ('6/3/19', '7:15', 'USD/JPY', 108.33 , 108.36 , 108.33 , 108.34 ),
       ('6/3/19', '7:20', 'USD/JPY', 108.335, 108.335, 108.295, 108.305),
       ('6/3/19', '7:25', 'USD/JPY', 108.305, 108.305, 108.27 , 108.305),
       ('6/3/19', '7:30', 'USD/JPY', 108.3  , 108.3  , 108.25 , 108.26 )],
      dtype=[('f0', '<U7'), ('f1', '<U4'), ('f2', '<U10'), ('f3', '<f4'), ('f4', '<f4'), ('f5', '<f4'), ('f6', '<f4')])

Это составной dtype - с 7 полями

In [212]: data.dtype                                                                                 
Out[212]: dtype([('f0', '<U7'), ('f1', '<U4'), ('f2', '<U10'), ('f3', '<f4'), ('f4', '<f4'), ('f5', '<f4'), ('f6', '<f4')])

поля доступны по имени. Количество обращений к строкам, записям:

In [213]: data['f4']                                                                                 
Out[213]: 
array([108.37 , 108.345, 108.36 , 108.335, 108.305, 108.3  ],
      dtype=float32)

Макс и его позиция:

In [214]: np.argmax(data['f4'])                                                                      
Out[214]: 0
In [215]: np.max(data['f4'])                                                                         
Out[215]: 108.37
0 голосов
/ 25 июня 2019

Если я правильно понимаю ваш вопрос, вы можете решить эту проблему, посмотрев на ваш массив np и найдя строку # самого высокого значения в столбце 5, а затем получите значение в столбце 1 соответствующей строки

loc_max = my_data[:,4].argmax() #gives row of the max in col 5
time_max = my_data[loc_max,0]

но похоже, что у вас могли возникнуть проблемы с импортом из-за разделителя ... это решение будет работать, если вы сможете правильно импортировать ваши данные в массив np, как описано в вопросе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...