版权声明:本文为作者原创文章,可以随意转载,但必须在明确位置标明出处!!!
最近一直在想怎么去写好pandas,「送给2018的你我」这篇文章也说了今年我个人的目标是要去学习投资,理财和股票。所以我决定从这个方向入手,毕竟跟钱相关的学习更有动力。
在正式开始之前需要介绍一个开源的财经数据接口包TuShare,它主要实现对股票等金融数据从数据采集、清洗加工 到 数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。考虑到Python pandas包在金融量化分析中体现出的优势,Tushare返回的绝大部分的数据格式都是pandas DataFrame类型,非常便于用pandas/NumPy/Matplotlib进行数据分析和可视化。当然,如果您习惯了用Excel或者关系型数据库做分析,您也可以通过Tushare的数据存储功能,将数据全部保存到本地后进行分析。应一些用户的请求,从0.2.5版本开始,Tushare同时兼容Python 2.x和Python 3.x,对部分代码进行了重构,并优化了一些算法,确保数据获取的高效和稳定。当然你们可以到官网上去了解更多的详情http://tushare.org/index.html
话说铁柱和小花都在证券公司工作,公司那是狼多肉少啊,小花又正值芳华,年方二八,青春靓丽、肤白貌美、凹凸有致。是公司里公认的女神啊,只要一有空闲时间公司里的狼总是围绕在小花身边转啊转,都想把女神变成自己的私有财产啊。当然铁柱也不例外,但铁柱有自知之明啊,他知道知己是个“屌丝”,这种想法想法只在夜深人静的时候在心里“意淫,意淫”。
一天领导给铁柱安排了很多工作,铁柱没办发只能加班了啊。哼哧,哼哧,晚上10点铁柱终于把工作搞定了,在心里骂了句“万恶的资本家”,准备收拾东西走人。刚把公司灯关了就听到一声娇滴滴的声音“还有人呐”。哎呀!妈啊,铁柱一个激灵。这不是女神小花的声音是谁的声音。尼玛,铁柱的小心脏扑扑乱跳啊,现在公司只有我和小花了啊,机会难得啊。要不要上去打个招呼、要不要上去问问女神有没有什么需要帮助的,要不要送回家、要不要去吃个夜宵,哎呀,妈啊,铁柱的脑子里那是天人交战。这时又一个声音传来“给我开一下灯,谢谢”,铁柱把灯打开,走向了小花的工位,告诉自己不能怂。小花这么完了咋还不回去啊。小花:“领导让我统计一下茅台去年到现在的数据,我刚来不知道咋统计啊, 咋办啊,领导让我今天一定要弄完,完了,完了,这回我死定了”。铁柱一听,尼玛!这不正是我这个屌丝程序员擅长的吗。铁柱虎躯一震说:“小花这个我会一点,你看是不是下面这样的”,铁柱拿出自己的笔记本“啪,啪,啪”敲出下面的下面的代码执行,这一刻的铁柱查克拉简直是爆满状态啊。
import pandas as pd
import numpy as np
import tushare as tu
df = tu.get_k_data('600519', start='2017-01-01')
print(df)
OUT:
date open close high low volume code
0 2017-01-03 329.299 329.575 331.979 327.851 20763.0 600519
1 2017-01-04 329.634 346.667 346.923 329.615 65257.0 600519
2 2017-01-05 344.785 341.574 346.213 340.293 41704.0 600519
3 2017-01-06 341.475 345.534 354.419 340.943 68095.0 600519
4 2017-01-09 342.618 343.317 347.622 341.377 35405.0 600519
5 2017-01-10 343.258 343.800 346.755 341.436 31727.0 600519
6 2017-01-11 342.815 340.303 342.815 338.382 23598.0 600519
7 2017-01-12 341.386 341.879 342.224 339.377 17779.0 600519
8 2017-01-13 341.810 339.731 342.214 338.756 18282.0 600519
9 2017-01-16 339.003 336.382 339.663 333.752 36855.0 600519
10 2017-01-17 337.495 343.928 346.263 336.904 35188.0 600519
11 2017-01-18 343.682 349.789 351.454 342.037 46005.0 600519
12 2017-01-19 349.711 349.435 353.139 346.460 28523.0 600519
13 2017-01-20 349.612 349.701 352.075 347.770 21344.0 600519
14 2017-01-23 351.563 345.987 354.439 344.253 32581.0 600519
15 2017-01-24 346.036 345.090 347.543 341.583 26914.0 600519
16 2017-01-25 344.765 342.450 344.765 341.042 22990.0 600519
17 2017-01-26 342.953 339.288 343.603 336.215 37826.0 600519
18 2017-02-03 340.845 341.682 343.977 339.860 20936.0 600519
19 2017-02-06 343.298 341.682 343.692 339.820 15680.0 600519
20 2017-02-07 341.672 338.461 342.224 338.027 20519.0 600519
.. ... ... ... ... ... ... ...
小花看到上面的结果高兴极了,告诉铁柱:“铁柱,这就是我要的结果,当有些地方不对,想0,1,2,3...这些数字能不能把它换成date这一列的日期格式”。铁柱听完一想这还不简单吗,不就是重新设置一下索引吗,so easy。
import pandas as pd
import numpy as np
import tushare as tu
df = tu.get_k_data('600519', start='2017-01-01')
df.set_index('date', inplace=True)
print(df)
OUT:
open close high low volume code
date
2017-01-03 329.299 329.575 331.979 327.851 20763.0 600519
2017-01-04 329.634 346.667 346.923 329.615 65257.0 600519
2017-01-05 344.785 341.574 346.213 340.293 41704.0 600519
2017-01-06 341.475 345.534 354.419 340.943 68095.0 600519
2017-01-09 342.618 343.317 347.622 341.377 35405.0 600519
2017-01-10 343.258 343.800 346.755 341.436 31727.0 600519
2017-01-11 342.815 340.303 342.815 338.382 23598.0 600519
2017-01-12 341.386 341.879 342.224 339.377 17779.0 600519
2017-01-13 341.810 339.731 342.214 338.756 18282.0 600519
2017-01-16 339.003 336.382 339.663 333.752 36855.0 600519
2017-01-17 337.495 343.928 346.263 336.904 35188.0 600519
2017-01-18 343.682 349.789 351.454 342.037 46005.0 600519
2017-01-19 349.711 349.435 353.139 346.460 28523.0 600519
2017-01-20 349.612 349.701 352.075 347.770 21344.0 600519
小花看到上面的结果跟铁柱说:“把code这一列改成茅台汉字, high,low, volume列不要”,铁柱一听就知道这不就是删除列和替换列吗,于是又一阵鼓捣
import pandas as pd
import numpy as np
import tushare as tu
df = tu.get_k_data('600519', start='2017-01-01')
df.set_index('date', inplace=True)
df['code'] = '茅台'
df.drop(['high', 'low', 'volume'], axis=1, inplace=True)
print(df)
OUT:
open close code
date
2017-01-03 329.299 329.575 茅台
2017-01-04 329.634 346.667 茅台
2017-01-05 344.785 341.574 茅台
2017-01-06 341.475 345.534 茅台
2017-01-09 342.618 343.317 茅台
2017-01-10 343.258 343.800 茅台
2017-01-11 342.815 340.303 茅台
2017-01-12 341.386 341.879 茅台
铁柱能不能筛选出收盘价大于开盘价的记录啊,小花问道。铁柱一想这不就是逻就是一个比较操作吗。pandas里还有逻辑操作且(“&”),或(“|”),包含(“isin”),非(“~”)
按照小花提的要求铁柱又释放一下查克拉
import pandas as pd
import numpy as np
import tushare as tu
df = tu.get_k_data('600519', start='2017-01-01')
df.set_index('date', inplace=True)
df['code'] = '茅台'
df.drop(['high', 'low', 'volume'], axis=1, inplace=True)
df1 = df[df['close'] > df['open']]
print(df1)
小花看到结果很满意啊,距离老板要求的结果越来越近了,这时小花跟铁柱说:“铁柱,根据收盘价排一下序行不”。行啊,必须行啊,铁柱一听想都不带想得说道,自己现在是查卡拉爆满状态啊,遇神杀神,遇佛杀佛。
import pandas as pd
import numpy as np
import tushare as tu
df = tu.get_k_data('600519', start='2017-01-01')
df.set_index('date', inplace=True)
df['code'] = '茅台'
df.drop(['high', 'low', 'volume'], axis=1, inplace=True)
df1 = df[df['close'] > df['open']].copy()
df1.sort_values(by='close', inplace=True)
print(df1)
OUT:
open close code
date
2017-01-03 329.299 329.575 茅台
2017-02-08 338.638 339.081 茅台
2017-02-03 340.845 341.682 茅台
2017-01-12 341.386 341.879 茅台
2017-02-09 339.860 342.431 茅台
2017-01-09 342.618 343.317 茅台
2017-01-10 343.258 343.800 茅台
2017-01-17 337.495 343.928 茅台
2017-02-13 338.874 344.539 茅台
2017-02-14 344.332 344.992 茅台
2017-02-17 343.701 345.337 茅台
2017-01-06 341.475 345.534 茅台
2017-01-04 329.634 346.667 茅台
2017-01-20 349.612 349.701 茅台
2017-01-18 343.682 349.789 茅台
2017-03-03 349.711 351.228 茅台
铁柱就是这个结果了,我明天给领导看看。不过铁柱你能把结果写到Excel里吗,可以啊,必须的可以啊,谁叫你是女神呢,你什么要求我都答应,铁柱贱兮兮的回答到,强势调戏一波。
import pandas as pd
import numpy as np
import tushare as tu
df = tu.get_k_data('600519', start='2017-01-01')
df.set_index('date', inplace=True)
df['code'] = '茅台'
df.drop(['high', 'low', 'volume'], axis=1, inplace=True)
df1 = df[df['close'] > df['open']].copy()
df1.sort_values(by='close', inplace=True)
File = r'600519.xlsx'
writer = pd.ExcelWriter(File)
df1.to_excel(writer, 'Sheet1')
writer.save()
NICE,铁柱帅气的说了句洋文,小花怎么样,是你要的结果吧。小花看到Excel上的数据心里面压着的石头终于落地了,整个人也变得轻松了。真不知道怎么谢谢你铁柱,要不我请你吃夜宵吧。铁柱当然满心欢喜的答应了,看看时间已经夜里12点多了,这时间过得真TM快啊,爱因斯坦哪个老头果真没有骗我,时间是相对的。铁柱和小花吃完夜宵然后.........