《用Python玩转数据》学习笔记第4周Part1

本文是《用Python玩转数据》学习笔记的一部分,介绍了如何处理Pandas中数据列宽问题,以及Matplotlib的基本使用,包括获取雅虎财经数据、绘图功能,并给出了用Pandas和Matplotlib绘制股票数据图表的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值