【数据分析Tushare】金融数据处理

Tushare
• 免费、开源的python财经数据接口包
• 实现对股票等金融数据从数据采集、清洗加工到 数据存储的过程
• Tushare返回的绝大部分的数据格式都是pandas DataFrame类型
官网链接

一.安装模块

Windows系统: pip install lxml pip install tushare
Mac系统: pip3 install lxml pip3 install tushare

二.读取沪深300成分及权重

#沪深股市数据获取及分析
import tushare as ts   #导入tushare模块


stock_df = ts.get_hs300s() #读取数据

print(stock_df)
          date    code  name  weight
0   2020-01-23  600000  浦发银行    0.99
1   2020-01-23  600004  白云机场    0.12
2   2020-01-23  600009  上海机场    0.49
3   2020-01-23  600010  包钢股份    0.21
4   2020-01-23  600011  华能国际    0.18
..         ...     ...   ...     ...
295 2020-01-23  300347  泰格医药    0.29
296 2020-01-23  300408  三环集团    0.18
297 2020-01-23  300413  芒果超媒    0.18
298 2020-01-23  300433  蓝思科技    0.20
299 2020-01-23  300498  温氏股份    0.90

三.获取沪深股市上市公司基本情况

import tushare as ts
stock_basics = ts.get_stock_basics() # 获取沪深股市上市公司基本情况
print(stock_basics)
         name industry area       pe  ...  profit    gpr        npr  holders
code                                  ...                                   
688233    N神工     化工原料   辽宁   124.47  ...    0.00  68.04      45.15  32803.0
688169    N石头     家用电器   北京    42.95  ...    0.00  34.75      19.21  16299.0
688177   N百奥泰     生物制药   广东     0.00  ...    0.00  81.76 -126299.71  37257.0
688258   卓易信息     软件服务   江苏   451.17  ...    0.00  48.88      14.46  20266.0
002447   晨鑫科技      互联网   辽宁  4365.47  ...  -98.95  51.30       1.00  98802.0
...       ...      ...  ...      ...  ...     ...    ...        ...      ...
603719   良品铺子       食品   湖北     0.00  ...    0.00  32.50       5.76      0.0
601696   中银证券       证券   上海     0.00  ...    0.00   0.00      36.36      0.0
600610  *ST毅达     建筑工程   上海     0.00  ...    4.45   0.00       0.00  69536.0
600074  *ST保千     IT设备   江苏     0.00  ...   14.92  37.35    -294.40  92835.0
300819   聚杰微纤       化纤   江苏     0.00  ...    0.00  26.30      11.18      0.0

四.筛选沪深300成分股上市公司基本情况

import tushare as ts   #导入tushare模块


stock_df = ts.get_hs300s()           # 读取数据  读取沪深300成分及权重
#print(stock_df)
stock_basics = ts.get_stock_basics() # 获取沪深股市上市公司基本情况
#print(stock_basics)
stock_basics = stock_basics.loc[stock_df["code"].values]  
#筛选沪深300成分股上市公司基本情况
print(stock_basics)

五.去掉名字、领域、地域

X = stock_basics.drop(["name","industry","area"],1)   #去掉名字、领域、地域

六.导入MeanShift进行分类
MeanShift——均值漂移
不断查找质心的位置并移动
原理如下 均值漂移原理

from sklearn.cluster import MeanShift,estimate_bandwidth  
bandwidth = estimate_bandwidth(X)
ms = MeanShift(bandwidth=bandwidth,bin_seeding=True)
ms.fit(X)

七.对股份分类
方法一:.labels_属性

labels = ms.labels_
for company,label in zip(stock_basics["name"],labels):
	print('{} is {}'.format(company,label))
浦发银行 is 0
白云机场 is 0
上海机场 is 0
包钢股份 is 1
华能国际 is 0
华夏银行 is 0
民生银行 is 1
上港集团 is 0
宝钢股份 is 1
浙能电力 is 0
华能水电 is 0
华电国际 is 0
中国石化 is 1
南方航空 is 0
中信证券 is 1
三一重工 is 0
招商银行 is 0
中直股份 is 0
保利地产 is 0
中国联通 is 1
国投资本 is 0
宇通客车 is 0
葛洲坝 is 0
同仁堂 is 0
特变电工 is 0
同方股份 is 0
上汽集团 is 0
国金证券 is 0
北方稀土 is 1
东方航空 is 0
中国卫星 is 0
建发股份 is 0
上海建工 is 0
中国巨石 is 0
雅戈尔 is 0
生益科技 is 0
兖州煤业 is 0
复星医药 is 0
新湖中宝 is 0
南山铝业 is 0
海航控股 is 1
圆通速递 is 0
航天信息 is 0
恒瑞医药 is 0
广汇汽车 is 0
安迪苏 is 0
万华化学 is 0
白云山 is 0
华夏幸福 is 0
恒力石化 is 0
浙江龙盛 is 0
江西铜业 is 0
西南证券 is 0
中航电子 is 0
金地集团 is 0
五矿资本 is 0
海澜之家 is 0
国电南瑞 is 0
片仔癀 is 0
通威股份 is 0
中国动力 is 0
亨通光电 is 0
中金黄金 is 0
烽火通信 is 0
方大炭素 is 0
贵州茅台 is 0
中天科技 is 0
天士力 is 0
山东黄金 is 0
济川药业 is 0
恒生电子 is 0
海油工程 is 0
海螺水泥 is 0
用友网络 is 0
绿地控股 is 0
东方明珠 is 0
豫园股份 is 0
福耀玻璃 is 0
陆家嘴 is 0
川投能源 is 0
海尔智家 is 0
三安光电 is 0
中航资本 is 0
北汽蓝谷 is 0
华域汽车 is 0
中航沈飞 is 0
国电电力 is 1
山西汾酒 is 0
安信信托 is 0
海通证券 is 0
上海临港 is 0
通化东宝 is 0
国投电力 is 0
伊利股份 is 0
航发动力 is 0
长江电力 is 0
江苏银行 is 0
杭州银行 is 0
西安银行 is 0
东方证券 is 0
海油发展 is 1
中国电影 is 0
宝丰能源 is 0
九州通 is 0
招商证券 is 0
大秦铁路 is 0
南京银行 is 0
隆基股份 is 0
宁波港 is 0
春秋航空 is 0
中信建投 is 0
中国神华 is 0
财通证券 is 0
中国国航 is 0
中国化学 is 0
工业富联 is 0
新城控股 is 0
天风证券 is 0
兴业银行 is 0
北京银行 is 0
中国铁建 is 0
东兴证券 is 0
国泰君安 is 0
白银有色 is 0
君正集团 is 0
陕西煤业 is 0
上海银行 is 0
红塔证券 is 0
广汽集团 is 0
农业银行 is 2
青岛港 is 0
中国平安 is 1
中国人保 is 0
交通银行 is 1
新华保险 is 0
三六零 is 0
兴业证券 is 0
中国中铁 is 1
工商银行 is 2
东吴证券 is 0
长沙银行 is 0
中国铝业 is 1
中国太保 is 0

方法二:
Kmeans分类

from sklearn.cluster import KMeans

kmeans = KMeans(n_clusters=20,random_state=0).fit(X)  #2.Kmeans分类
for company,label in zip(stock_basics["name"],kmeans.labels_):
	print('{} is {}'.format(company,label))
浦发银行 is 4
白云机场 is 13
上海机场 is 3
包钢股份 is 1
华能国际 is 13
华夏银行 is 13
民生银行 is 12
上港集团 is 10
宝钢股份 is 12
浙能电力 is 11
华能水电 is 11
华电国际 is 0
中国石化 is 14
南方航空 is 17
中信证券 is 1
三一重工 is 19
招商银行 is 19
中直股份 is 3
保利地产 is 0
中国联通 is 1
国投资本 is 3
宇通客车 is 3
葛洲坝 is 19
同仁堂 is 3
特变电工 is 19
同方股份 is 4
上汽集团 is 4
国金证券 is 9
北方稀土 is 12
东方航空 is 4
中国卫星 is 9
建发股份 is 9
上海建工 is 4
中国巨石 is 9
雅戈尔 is 9
生益科技 is 9
兖州煤业 is 3
复星医药 is 9
新湖中宝 is 9
南山铝业 is 19
海航控股 is 14
圆通速递 is 3
航天信息 is 13
恒瑞医药 is 9
广汇汽车 is 3
安迪苏 is 3
万华化学 is 13
白云山 is 13
华夏幸福 is 13
恒力石化 is 3
浙江龙盛 is 19
江西铜业 is 13
西南证券 is 17
中航电子 is 13
金地集团 is 13
五矿资本 is 3
海澜之家 is 3
国电南瑞 is 13
片仔癀 is 13
通威股份 is 13
中国动力 is 13
亨通光电 is 17
中金黄金 is 17
烽火通信 is 13
方大炭素 is 19
贵州茅台 is 13
中天科技 is 17
天士力 is 13
山东黄金 is 17
济川药业 is 3
恒生电子 is 13
海油工程 is 13
海螺水泥 is 13
用友网络 is 13
绿地控股 is 9
东方明珠 is 4
豫园股份 is 9
福耀玻璃 is 9
陆家嘴 is 9
川投能源 is 3
海尔智家 is 4
三安光电 is 4
中航资本 is 4
北汽蓝谷 is 3
华域汽车 is 3
中航沈飞 is 3
国电电力 is 1
山西汾酒 is 3
安信信托 is 9
海通证券 is 19
上海临港 is 9
通化东宝 is 3
国投电力 is 9
伊利股份 is 19
航发动力 is 9
长江电力 is 13
江苏银行 is 11
杭州银行 is 16
西安银行 is 16
东方证券 is 16
海油发展 is 2
中国电影 is 16
宝丰能源 is 11
九州通 is 8
招商证券 is 0
大秦铁路 is 0
南京银行 is 0
隆基股份 is 8
宁波港 is 10
春秋航空 is 6
中信建投 is 16
中国神华 is 17
财通证券 is 16
中国国航 is 17
中国化学 is 0
工业富联 is 11
新城控股 is 16
天风证券 is 16
兴业银行 is 10
北京银行 is 17
中国铁建 is 2
东兴证券 is 16
国泰君安 is 11
白银有色 is 11
君正集团 is 0
陕西煤业 is 6
上海银行 is 16
红塔证券 is 16
广汽集团 is 8
农业银行 is 15
青岛港 is 16
中国平安 is 14
中国人保 is 11
交通银行 is 2
新华保险 is 0
三六零 is 8
兴业证券 is 10
中国中铁 is 1
工商银行 is 5
东吴证券 is 0
长沙银行 is 6
中国铝业 is 14
中国太保 is 0
上海医药 is 9
中国中冶 is 14
中国人寿 is 0
长城汽车 is 8
中国建筑 is 14
中国电建 is 10
华泰证券 is 10
中国卫通 is 16
上海电气 is 2
中国中车 is 18
光大证券 is 0
中国交建 is 0
中海油服 is 8
光大银行 is 10

八.扩展延伸
1.储存方式
.csv

import tushare as ts

df = ts.get_hist_data('000875')
#直接保存
df.to_csv('c:/day/000875.csv')

#选择保存
df.to_csv('c:/day/000875.csv',columns=['open','high','low','close'])
追加数据的方式:

某些时候,可能需要将一些同类数据保存在一个大文件中,这时候就需要将数据追加在同一个文件里,简单举例如下:

import tushare as ts
import os

filename = 'c:/day/bigfile.csv'
for code in ['000875', '600848', '000981']:
    df = ts.get_hist_data(code)
    if os.path.exists(filename):
        df.to_csv(filename, mode='a', header=None)
    else:
        df.to_csv(filename)

.excel

import tushare as ts

df = ts.get_hist_data('000875')
#直接保存
df.to_excel('c:/day/000875.xlsx')

#设定数据位置(从第3行,第6列开始插入数据)
df.to_excel('c:/day/000875.xlsx', startrow=2,startcol=5)

2.获取新闻

import tushare as ts

ts.get_latest_news() #默认获取最近80条新闻数据,只提供新闻类型、链接和标题
ts.get_latest_news(top=5,show_content=True) #显示最新5条新闻,并打印出新闻内容

Tushare的功能还有很多,这里不一一赘述,感兴趣的读者可以参考官网提供的基本流程进行学习

发布了28 篇原创文章 · 获赞 25 · 访问量 2036

猜你喜欢

转载自blog.csdn.net/AI_LINNGLONG/article/details/104442075