Advertisement

Python金融数据分析(一)

阅读量:

Python提供了数据挖掘和许多机器学习算法的实现。

准备数据

Tickhistory的数据能够精确到每个tick。我决定导出一个月的XAU日线OHLC数据。样本如下:

Date Open High Low Close Volume
20170927 1293.231 1296.208 1281.451 1283.511 108.903715221408
20170928 1283.512 1288.741 1277.682 1286.932 105.861770183576
20170929 1286.931 1290.332 1275.751 1278.502 105.976955427706
20171001 1279.541 1280.072 1276.771 1277.868 3.52173000181574
20171002 1277.861 1277.878 1269.328 1271.092 95.848550074621
20171003 1271.071 1274.701 1268.298 1272.439 85.1280900694219
20171004 1272.439 1282.172 1270.592 1273.959 92.5239001664886
20171005 1273.952 1278.962 1266.328 1269.052 92.4760702919739
20171006 1269.051 1276.492 1260.581 1276.262 92.658720124633
20171008 1276.051 1277.722 1275.332 1276.591 2.77864000279806
20171009 1276.592 1285.431 1275.251 1283.169 86.3232300794261
20171010 1283.191 1294.169 1282.081 1289.581 101.68240010105
20171011 1289.582 1293.491 1284.538 1292.372 104.91177014196
20171012 1292.401 1297.431 1289.631 1293.916 96.6392201421004
20171013 1293.923 1303.772 1290.858 1303.511 97.4759100139127
20171015 1303.131 1304.268 1301.718 1304.229 4.44811000813934
20171016 1304.178 1306.012 1290.482 1294.971 100.152445203097
20171017 1294.989 1295.209 1281.518 1285.932 103.87640020813
20171018 1285.931 1288.851 1276.972 1280.301 98.6450122981942
20171019 1280.301 1291.038 1276.639 1290.072 115.682070135092
20171020 1290.071 1290.568 1277.921 1280.061 105.518403077434
20171022 1279.421 1279.422 1274.261 1274.942 5.02500604657143
20171023 1274.938 1283.231 1272.518 1282.631 98.7542351619195
20171030 1272.331 1272.831 1270.671 1271.361 8.96640002776985

创建数据

复制代码
    import pandas as pd
    def read_data():
    location = '****.csv'
    df = pd.read_csv(location)

索引数据

Pandas会使用从0开始的整数作为每条数据的默认索引,并且同样支持基于日期的时间序列数据进行索引。此外,在需要时还可以依据时间范围筛选所需的数据。

复制代码
    import pandas as pd
    def read_data_and_index_by_date():
    location = 'XAUUSD.csv'
    df = pd.read_csv(location, index_col = "Date", parse_dates=True)
    return df
    
    def fillter_data_by_date(start_date, end_date):
    df = read_data_and_index_by_date();
    return df.ix[start_date:end_date]

十年数据

离开大数据分析技术的支持后,在这一背景下机器学习在这一领域的应用前景就显得力不从心了

复制代码
    def how_long(func, *args):
    t0 = time()
    result = func(*args)
    t1 = time()
    return result, (t1 - t0)

运行结果:

$ python ReadCSV.py
Date Close
2017-10-11 1292.372
2017-10-12 1293.916
2017-10-13 1303.511
2017-10-15 1304.229
2017-10-16 1294.971
2017-10-17 1285.932
To index period data of 10 years, python takes: 0.0149998664856

描述数据

也可以视为对数据进行操作的一种方式,在pandas中,数据操作通常以声明式的方式进行。这种设计使得开发者能够将更多的时间和精力投入到算法的研究和优化中去。由于算法通常需要处理多种形式的数据以及不同形态的数据表达方式,在实际应用中可能会遇到诸多挑战。为了高效地描述数据特征以及反映当前市场状况的基本形态特征,则是我们对其功能需求之一之一。此外,在Python环境中Pandas可以被视为一个非常有用的工具包,并且它能够帮助我们轻松地完成许多复杂的数据分析任务。其中最基础的功能模块包括:针对二维数组设计的各种函数集合以及基于Numpy框架开发的一系列扩展库功能组件等。具体来说,在这一部分我尝试通过编写代码来展示如何计算并绘制出过去一年中XAU货币20日移动平均线的变化趋势图

复制代码
    def get_rolling_mean(values, window):
    """Return rolling mean of given values, using specified window size."""
    return values.rolling(window=20,center=False).mean()

$ python ReadCSV.py
Date 移动平均值
2017-01-24 1191.73710
2017-01-25 1194.26645
2017-01-26 1195.82240
2017-01-27 1197.03590
2017-01-29 1197.70235
2017-01-30 1198.92290
2017-01-31 1200.81040
2017-02-01 1202.16790
2017-02-02 1203.59285
2017-02-03 1204.89665
2017-02-05 1206.12345
……

在截至2017年1月24日之前不会有数据,在前期缺乏必要的移动平均指标的数据情况下

在截至2017年1月24日之前不会有数据,在前期缺乏必要的移动平均指标的数据情况下

复制代码
    def plot_data(df, title="prices"):
    ax = df.plot(title=title, fontsize=12)
    ax.set_xlabel("Date")
    ax.set_ylabel("Price")
    plt.show()
这里写图片描述

全部评论 (0)

还没有任何评论哟~