2016-09-27 3 views
1

Excelのスプレッドシートからデータを抽出しようとしています。私がこの操作をしたい列は列1と4です。次に、x軸として列0を使用するサブプロットを使用して、これらの変化率を2つの異なる棒グラフでグラフ化したいと思います。
データを抽出し、隣接する行の間に変化率を定式化する以外はすべて実行できます。パーセント変化の式は、Current/previous-1または(r、0)/(r-1,0)-1です。値のpython、xlrd:xlrd関数を使用してスプレッドシートデータを操作し、操作したデータをグラフ化します。

import xlrd 
import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.ticker as tkr 
import matplotlib.dates as mdates 
import datetime 
from matplotlib import rc 
rc('mathtext', default='regular') 

file_location = "/Users/adampatel/Desktop/psw01.xls" 
workbook = xlrd.open_workbook(file_location, on_demand = False) 
worksheet = workbook.sheet_by_name('Data 1') 

x = [worksheet.cell_value(i+1699, 0) for i in range(worksheet.nrows-1699)] 
y1 = [worksheet.cell_value(i+1699, 1) for i in range(worksheet.nrows-1699)] 
y2 = [worksheet.cell_value(i+1699, 4) for i in range(worksheet.nrows-1699)] 

fig = plt.figure() 
ax1 = fig.add_subplot(211) 
ax2 = fig.add_subplot(212, sharex = ax1) 

start_date = datetime.date(1899, 12, 30) 
dates=[start_date + datetime.timedelta(xval) for xval in x] 
ax1.xaxis.set_major_locator(mdates.MonthLocator((), bymonthday=1,  interval=2)) 
ax1.xaxis.set_minor_locator(mdates.MonthLocator((), bymonthday=1, interval=1)) 
ax1.xaxis.set_major_formatter(mdates.DateFormatter("%b'%y")) 

ly1 = ax1.bar(dates, y1, 0.9) 
ly2 = ax2.bar(dates, y2, 0.9) 

ax1.grid() 
ax2.grid() 
ax1.set_ylim(-3,3) 
ax2.set_ylim(-3,3) 

fig.text(0.5, 0.04, 'Inventory Weekly Percent Change', ha='center', va='center', size = '14') 
fig.text(0.06, 0.5, 'Weekly Percent Change', ha='center', va='center', size = '14', rotation='vertical') 

ax1.set_title('Oil', size = '12') 
ax2.set_title('Gasoline', size = '12') 

plt.savefig('Gasoline Inventories Weekly Percent Change.png', bbox_inches='tight', dpi=300) 
plt.show() 

答えて

0

与えられたリスト:

y1 = [1000,1010,950,1050,1100,1030] 

ピュアPythonのソリューション:

使用zip機能分子と分母のタプルを作成するには、以下の私の現在のスクリプトです。その後、リスト内包表記を使用してパーセント変化のリストを取得します。

pct_chg = [1.0*num/den - 1 for num, den in zip(y1[1:], y1)] 

numpyの溶液:numpyのアレイに

変換リストは、その後、アレイ・スライスを使用して計算を行います。

a1 = np.array(y1) 
pct_chg = np.divide(a1[1:],a1[:-1])-1 

パンダパッケージ・ソリューション:

変換リストパンダシリーズへと今、pct_chgがあまりにもシリーズです

内蔵のパーセント変化機能

s1 = pd.Series(y1) 
pct_chg = s1.pct_change() 
を使用しています。数値は pct_chg.valuesで数値配列で取得できます。 Matplotlibは、大抵の場合、配列としてnumpy配列を受け入れるべきです。

関連する問題