Я новичок в питоне.Буду признателен за любую помощь.
Я хочу показать этот график , используя первый блок кодов, который я пробовал, но когда я пытаюсь запустить этот код:
date, value = np.loadtxt(revenue_ar, delimiter=',', unpack=True, converters={ 0: bytespdate2num('%Y-%m-%d')})
с использованием yield_ar (numpy.ndarray) это сообщение об ошибке выскакивает:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Первый блок кодов:
import time
import requests
import intrinio
import pandas as pd
import numpy as np
api_username = 'hidden'
api_password = 'hidden'
def bytespdate2num(fmt, encoding='utf-8'):
strconverter = mdates.strpdate2num(fmt)
def bytesconverter(b):
s = b.decode(encoding)
return strconverter(s)
return bytesconverter
ticker = 'AAPL'
revenue_data = requests.get('https://api.intrinio.com/historical_data?identifier=' + ticker + '&item=totalrevenue', auth=(api_username, api_password))
revenue1 = revenue_data.json()['data']
revenue = pd.DataFrame(revenue1)
revenue_ar = revenue.values
date, value = np.loadtxt(revenue_ar, delimiter=',', unpack=True,
converters={ 0: bytespdate2num('%Y-%m-%d')})('%Y-%m-%d')})('%Y-%m-%d')})
fig = plt.figure()
ax1 = plt.subplot2grid((6,4), (0,0), rowspan=6, colspan=4)
ax1.plot(date,value)
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.show()
Однако это кажетсяработать с использованием дохода.txt :
date, value = np.loadtxt('revenue.txt', delimiter='\t', unpack=True,
converters={0: bytespdate2num('%Y-%m-%d')})
Пожалуйста, дайте мне знать, если мне нужно уточнить мой вопрос дальше.Заранее спасибо.
доход1:
[{'date': '2018-03-31', 'value': 247417000000.0},
{'date': '2017-12-30', 'value': 239176000000.0},
{'date': '2017-09-30', 'value': 229234000000.0},
{'date': '2017-07-01', 'value': 223507000000.0},
{'date': '2017-04-01', 'value': 220457000000.0},
{'date': '2016-12-31', 'value': 218118000000.0},
{'date': '2016-09-24', 'value': 215639000000.0},
{'date': '2016-06-25', 'value': 220288000000.0},
{'date': '2016-03-26', 'value': 227535000000.0},
{'date': '2015-12-26', 'value': 234988000000.0},
{'date': '2015-09-26', 'value': 233715000000.0},
{'date': '2015-06-27', 'value': 224337000000.0},
{'date': '2015-03-28', 'value': 212164000000.0},
доход_ар:
array([['2018-03-31', 247417000000.0],
['2017-12-30', 239176000000.0],
['2017-09-30', 229234000000.0],
['2017-07-01', 223507000000.0],
['2017-04-01', 220457000000.0],
['2016-12-31', 218118000000.0],
['2016-09-24', 215639000000.0],
['2016-06-25', 220288000000.0],
['2016-03-26', 227535000000.0],
['2015-12-26', 234988000000.0],
['2015-09-26', 233715000000.0],
доход.txt:
2007-09-29 2.457800e+10
2008-09-27 3.749100e+10
2009-09-26 4.290500e+10
2009-12-26 4.670800e+10
2010-03-27 5.112300e+10
2010-06-26 5.708900e+10
2010-09-25 6.522500e+10
2010-12-25 7.628300e+10
2011-03-26 8.745100e+10
2011-06-25 1.003220e+11
2011-09-24 1.082490e+11
Это было бы решением, как вы предложили.Это потрясающе, так как работает гладко.
import time
import urllib.request
from urllib.request import urlopen
import requests
import intrinio
import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import matplotlib.dates as mdates
import datetime
api_username = 'hidden'
api_password = 'hidden'
def grab_intrinio(ticker):
try:
revenue_data = requests.get('https://api.intrinio.com/historical_data? identifier=' + ticker + '&item=totalrevenue', auth=(api_username, api_password))
revenue1 = revenue_data.json()['data']
revenue = pd.DataFrame(revenue1)
revenue['date'] = pd.to_datetime(revenue['date'])
plt.plot(revenue['date'], revenue['value'])
except Exception as e:
print('failed in the main loop',str(e))
pass
grab_intrinio('AAPL')
Это производит вывод как:
** У меня есть еще 2 вещиработать на.Во-первых, я хочу построить еще две переменные (net_income и roe)
Во-вторых, мои данные по икрам имеют значение nm, которое нельзя преобразовать в число с плавающей точкой или целое число.
Как я мог решить эту проблему? **
В качестве окончательного результата я хочу показать график, подобный этому (я могу сделать свою собственную работу над графиками и деталями конфигурации):
Я пробовал эту строку, но, похоже, не работает с ошибкой, показывающей 'list' object has no attribute 'plot'.
fig = plt.figure()
ax1 = plt.plot(net_income['date'], net_income['value'])
ax1.plot(net_income['date'], net_income['value'])
ax2 = plt.plot(revenue['date'], revenue['value'])
ax2.plot(revenue['date'], revenue['value'])
Этот производит net_income и доход на том же участке:
plt.plot(net_income['date'], net_income['value'])
plt.plot(revenue['date'], revenue['value'])
Blockquote
Воткоды для net_income и roe (тот же формат, что и для выручки)
net_income_data = requests.get('https://api.intrinio.com/historical_data?identifier=' + ticker + '&item=totalrevenue', auth=(api_username, api_password))
net_income1 = net_income_data.json()['data']
net_income = pd.DataFrame(net_income1)
net_income['date'] = pd.to_datetime(net_income['date'])
roe_data = requests.get('https://api.intrinio.com/historical_data?identifier=' + ticker + '&item=roe', auth=(api_username, api_password))
roe1 = roe_data.json()['data']
roe = pd.DataFrame(roe1)
roe['date'] = pd.to_datetime(revenue['date'])
Это дата roe с nm value
date value
30 2010-09-25 0.352835
31 2010-06-26 0.354701
32 2010-03-27 0.274779
33 2009-12-26 0.261631
34 2009-09-26 0.305356
35 2008-09-27 0.274432
36 2007-09-29 nm
Вот результаты для roe.dtypes
In: roe.dtypes
Out: date datetime64[ns]
value object
dtype: object
Принимая во внимание, что net_income.dtypes
и revenue.dtypes
производят вывод следующим образом:
In: net_income.dtypes(revenue.dtypes)
Out: date datetime64[ns]
value float64
dtype: object
Ваша поправка на икру для преобразования из объекта в число с плавающей точкой сработала для построения графика.Когда я объединяю функцию в качестве последнего шага, я получаю ошибку invalid syntax
, как показано ниже:
File "<ipython-input-141-537d7c6c91a3>", line 28
fig axs = plt.subplots(3)
Для этой функции, написанной с вашей помощью.
def grab_intrinio(ticker):
try:
net_income_data = requests.get('https://api.intrinio.com/historical_data?identifier=' + ticker + '&item=netincome', auth=(api_username, api_password)) #
net_income1 = net_income_data.json()['data']
net_income = pd.DataFrame(net_income1)
net_income['date'] = pd.to_datetime(net_income['date'])
revenue_data = requests.get('https://api.intrinio.com/historical_data?identifier=' + ticker + '&item=totalrevenue', auth=(api_username, api_password))
revenue1 = revenue_data.json()['data']
revenue = pd.DataFrame(revenue1)
revenue['date'] = pd.to_datetime(revenue['date'])
revenue
roe_data = requests.get('https://api.intrinio.com/historical_data?identifier=' + ticker + '&item=roe', auth=(api_username, api_password))
roe1 = roe_data.json()['data']
roe = pd.DataFrame(roe1)
roe['date'] = pd.to_datetime(roe['date'])
roe.index = roe['date']
roe = roe.drop(columns=['date'])
nm_idx = roe['value'] =='nm'
roe.value[nm_idx] = np.nan
roe.value = roe.value.astype(float)
fig axs = plt.subplots(3)
for ax, dat in zip(axs, [net_income, Revenue, roc]):
ax.plot(dat['date'], dat['value'])
except exception as e:
print('failed in the main loop',str(e))
pass
grab_intrinio('AAPL')
Заранее благодарю за помощь.