[英]Unpacking numpy using ndarray
我是python的新手。 任何幫助,將不勝感激。
我想使用我嘗試過的第一段代碼來顯示此圖 ,但是當我嘗試運行此代碼時:
date, value = np.loadtxt(revenue_ar, delimiter=',', unpack=True, converters={ 0: bytespdate2num('%Y-%m-%d')})
使用Revenue_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()
但是,這似乎可以使用Revenue.txt起作用:
date, value = np.loadtxt('revenue.txt', delimiter='\t', unpack=True,
converters={0: bytespdate2num('%Y-%m-%d')})
如果需要進一步澄清我的問題,請告訴我。 提前致謝。
revenue1:
[{'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},
revenue_ar:
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],
revenue.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'.
的錯誤不兼容'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'])
大段引用
這是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'])
這是一個具有nm value
的roe_date
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')
提前謝謝你的幫助。
np.loadtxt
需要一個文件名或一個字符串變量,從中可以解析出數據。 這就是為什么通過告訴它一個路徑而不是告訴它一個值數組來工作的原因。
很顯然你通過得到有效的JSON數據requests.get
,並通過對其進行解碼
revenue1 = revenue_data.json()['data']
並把它放在一個數據框中
df = pd.DataFrame(revenue1)
看起來是這樣的:
In: df.head()
Out:
date value
0 2018-01-31 247417000000
1 2017-12-30 239176000000
2 2017-09-30 229234000000
3 2017-07-01 223507000000
這就是檢查數據框中列的數據類型的方法:
In: df.dtypes
Out:
date object
value int64
dtype: object
value
是一個整數,很好,但是沒有解析date
,它只是對象數據,所以讓我們解決這個問題:
df['date'] = pd.to_datetime(df['date'])
In: df
Out:
date value
0 2018-01-31 247417000000
1 2017-12-30 239176000000
2 2017-09-30 229234000000
3 2017-07-01 223507000000
In: df.dtypes
Out:
date datetime64[ns]
value int64
dtype: object df = df.drop(columns=['date'])
現在date
具有正確的數據類型,您可以像這樣繪制它
plt.plot(df['date'], df['value'])
但是,如果將日期作為索引,則可以更加方便:
df.index = pd.to_datetime(df['date'])
df = df.drop(columns=['date'])
因為您可以簡單地致電
df.plot()
因為熊貓板載matplotlib接口。
[![在此處輸入圖片描述] [2]] [2]
對於您的三重情節,您需要:
fig axs = plt.subplots(3)
for ax, dat in zip(axs, [net_income, Revenue, roc]):
ax.plot(dat['date'], dat['value'])
由於nm
-entries,您的某些數據無法轉換為浮點型。 用np.nan
替換它們,以便繪圖命令可以處理它,並且您可以使用數據:
In: roe
Out:
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.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)
In: roe
Out:
value
date
2010-09-25 0.352835
2010-06-26 0.354701
2010-03-27 0.274779
2009-12-26 0.261631
2009-09-26 0.305356
2008-09-27 0.274432
2007-09-29 NaN
In: roe.dtypes
Out:
value float64
dtype: object
roe.plot()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.