python : pandas 读取csv 文件, matplotlib 画基金净值线

数据文件 66001.txt 内容格式:
2017-09-01,1.0202,1.6531,2.4647,1.1081,NaN,2.9068
2017-09-04,1.0134,1.6621,2.4576,1.1083,NaN,2.8983
2017-09-05,1.0168,1.6637,2.4616,1.1085,NaN,2.9010

... ...

mpl_funds.py  读取csv 文件, 画基金净值线

# -*- coding: utf8 -*-
import datetime as dt
import matplotlib as mpl
import matplotlib.dates as mdate
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator
from matplotlib.ticker import FormatStrFormatter
import csv
#import numpy as np
#import pandas as pd

date2num = mdate.strpdate2num('%Y-%m-%d')
x = []
y = []
y1 =[]
y2 =[]
y3 =[]
y4 =[]
y5 =[]
with open("66001.txt",'r') as csvfile:
    rows = csv.reader(csvfile, delimiter=',')
    for row in rows:
        #print row
        x.append(date2num(row[0]))
        y.append(float(row[1]))
        y1.append(float(row[2]))
        y2.append(float(row[3]))
        y3.append(float(row[4]))
        y4.append(float(row[5]))
        y5.append(float(row[6]))
#
# 加这个两句 可以显示中文
mpl.rcParams['font.sans-serif'] = [u'SimHei']
mpl.rcParams['axes.unicode_minus'] = False

fig = plt.figure(figsize=(12,6)) # 1200x600
fig.autofmt_xdate()        # 设置x轴时间外观
ax1 = fig.add_subplot(1,1,1)
autodate = mdate.AutoDateLocator()
ax1.xaxis.set_major_locator(autodate)  # 设置时间间隔
# 设置时间标签显示格式
dateFmt = mdate.DateFormatter('%y%m%d')
ax1.xaxis.set_major_formatter(dateFmt)
# 将x轴次刻度标签设置为61的倍数
xminorLocator = MultipleLocator(61)
# 显示次刻度标签的位置,没有标签文本
ax1.xaxis.set_minor_locator(xminorLocator)
#ax1.set_xticks() # 设置x轴间隔  
ax1.set_xlim(date2num('2012-01-01'),date2num('2017-09-30')) # 设置x轴范围
#plt.xticks(pd.date_range('2012-01-01','2017-09-30'))
plt.xticks(rotation=90) # 显示日期旋转90度 
plt.title(u'基金净值图')
plt.plot(x,y, label='660010')
plt.plot(x,y1,label='660011')
plt.plot(x,y2,label='660012')
plt.plot(x,y3,label='660013')
plt.plot(x,y4,label='660014')
plt.plot(x,y5,label='660015')
plt.grid(True)
plt.xlabel(u'日期')
plt.ylabel(u'净值')
plt.legend(loc=2,prop={'family':'SimHei','size':12}) # loc=2 : upper left
plt.savefig("66001.png", dpi=100)
#plt.show()
看了参考书:[利用Python进行数据分析] 第6章 数据加载   读写文本格式的数据 第167页
先在数据文件加入表头: date,jz0,jz1,jz2,jz3,jz4,jz5

再简化脚本 mpl_pd_csv.py

# -*- coding: utf-8 -*-
import pandas as pd
# dataFrame  
df = pd.read_csv('./66001.txt', parse_dates=True, index_col=0 )

df.head() # 预览前5行数据
df.describe() # 数据基本统计量

import matplotlib.pyplot as plt
# 加这个两句 可以显示中文
plt.rcParams['font.sans-serif'] = [u'SimHei']
plt.rcParams['axes.unicode_minus'] = False

df.plot(title= u'基金净值图', grid=True )
plt.show()
how to 画30日移动平均线
df['jz5'].plot(grid=True)
# 画30日移动平均线
pd.rolling_mean(df['jz5'], 30).plot(grid=True)
plt.show()





  • 0
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值