1、如果Excel单元格的数据过长,就会显示一长串#。在Pandas中,如果数据长度超过了列宽,也会报错。需要使用pandas.set_option
修改默认的设置:
import pandas as pd
pd.set_option('display.height', 1000)
pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)
来源:http://stackoverflow.com/questions/11707586/python-pandas-widen-output-display
2、Matplotlib,大库,用于科学绘图,还有一些内置的函数,例如直接抓取雅虎财经的函数。后面的课程会讲,这里先记下2个参考资料:
http://www.cnblogs.com/qianlifeng/archive/2012/02/13/2350086.html
http://www.ibm.com/developerworks/cn/linux/l-matplotlib/index.html
另外,在matplotlib的官网,有很多examples
3、第4周测验。话说,用PPT讲课真是一场灾难。从头开始自学,然后写出完整的代码:
from matplotlib.finance import quotes_historical_yahoo_ohlc
from datetime import date
import pandas as pd
import matplotlib.pyplot as plt
date1 = (2014, 1, 1)
date2 = (2015, 1, 1)
#获取微软2014年的股票数据。注意:quotesMS的类型是list
quotesMS = quotes_historical_yahoo_ohlc('MS', date1, date2)
fields = ['date', 'open', 'close', 'high', 'low', 'volume']
list1 = []
list2 = []
for i in range(len(quotesMS)):
#把时间的原始格式转换成标准格式
x = date.fromordinal(int(quotesMS[i][0]))
#把时间格式化输出
y = date.strftime(x, '%Y-%m-%d')
list1.append(y)
#生成month数据
list2.append(x.month)
#使用日期作为index,生成带列名的DataFrame
dfMS14 = pd.DataFrame(quotesMS, index = list1, columns = fields)
#把原来的date列删除。当然也可以直接用del函数删除,但不建议这样做
dfMS14 = dfMS14.drop(['date'], axis = 1)
#给DataFrame增加1个month列
dfMS14['month'] = pd.Series(list2, index = dfMS14.index)
#按月分组,然后取每个月的开盘价
openMS = dfMS14.groupby('month').first().open
list_open = []
#对于DataFrame, df[i]中的i,指的是序列号。而openMS按月分组,序列号是1~12
#所以for循环也要从1开始循环
for i in range(1, len(openMS)+1):
list_open.append(openMS[i])
#生成曲线图
plt.plot(openMS.index, list_open)
实际上,因为openMS是仅有1列的DataFrame,所以也可以不用for循环取值,直接使用下面的命令就可以生成曲线图:
#'-.*r': 用星型标识数据点,用“-.”这样有点的虚线连接数据点
plt.plot(openMS.index, openMS.values,'-.*r')
给坐标增加说明,给图形增加标题:
plt.xlabel('Month')
plt.ylabel('Average Open Price')
plt.title('Stock Statistics of MicroSoft')
还可以使用plt.suptitle
在标题的上方增加子标题
上面是使用matplotlib进行绘图,还可以直接用pandas进行绘图,则plt.plot()
语句就变为:
openMS.plot(x = openMS.index, y = openMS.values)
使用matplotlib绘制每日收盘价-开盘价,与成交量的散点图:
plt.scatter(dfMS14.close - dfMS14.open, dfMS14.volume)