代碼講解
1. 保存並輸出徐工機械[000425]股票2012年初到2017年末的后復權成交價數據,存為csv文件,再繪制折線圖
2. 繪制最近一年的數據樂視網[300104]股票每日漲跌幅核密度估計圖
#觀測當前的股價
import tushare as ts
STOCK = ['600219', '000002', '000623', '000725', '600036', '601166', '600298', '600881', '002582', '600750',
'601088',
'000338',
'000895',
'000792']
quotes= ts.get_realtime_quotes(STOCK)
獲取實時分筆數據
print(quotes)
quotes.to_csv('d:/bigdata/realtime_quotes.csv',encoding="utf_8_sig")
#保存並輸出徐工機械[000425]股票2012年初到2017年末的后復權成交價數據,存為csv文件,再繪制折線圖
import matplotlib.pyplot as plt #繪圖
import seaborn as sns #基於matplotlib的數據可視化庫
import tushare as ts #財經數據接口
from datetime import datetime #從datetime模塊導入datetime函數
#首先用tushare獲取成交價數據,復權類別是后復權,開始時間2012年1月1日,截止時間2017年12月31日
#get_k_data獲取分時k線數據,保存為dataframe數據類型
stock = ts.get_k_data('000425', autype='hfq', ktype='M', start='2012-1-1', end='2017-12-31')
#存為csv文件:逗號分隔值(Comma-Separated Values,CSV,也稱為字符分隔值,因為分隔字符也可以不是逗號),其文件以純文本形式存儲表格數據(數字和文本)
stock.to_csv('d:/23.csv')
#用seaborn繪制畫板,加上白色網格
sns.set_style("whitegrid")
#在畫板上加上線條和圖例說明,圖片比例為15:9
stock['open'].plot(legend=True, figsize=(15, 9))
stock['close'].plot(legend=True, figsize=(15, 9))
stock['high'].plot(legend=True, figsize=(15, 9))
stock['low'].plot(legend=True, figsize=(15, 9))
#輸出K線數據
print(stock)
#展示畫板
plt.show()
#繪制最近一年的數據樂視網[300104]股票每日漲跌幅核密度估計圖
import matplotlib.pyplot as plt #繪圖
import seaborn as sns #基於matplotlib的數據可視化庫
import tushare as ts #財經數據接口
from datetime import datetime
end = datetime.today() #結束時間
start = datetime(end.year-1,end.month,end.day) #開始時間,選取最近一年的數據
#字符串化,datetime抓取時間是精確到秒,只保留年、月、日,YYYY-MM-DD,因此保留長度為10位
end = str(end)[0:10]
start = str(start)[0:10]
# get_hist_data函數,獲取某只股票的歷史交易數據,參數與get_k_data相同
stock = ts.get_hist_data('300104',start,end)
#計算每日漲跌幅度,pct_change()函數用來計算兩個相鄰數字之間的變化率
stock['Daily Return'] = stock['close'].pct_change()
# kdeplot函數繪制核密度估計圖,dropna()方法刪除缺失數據
sns.kdeplot(stock['Daily Return'].dropna())
#展示畫板
plt.show()
get_hist_data()
獲取個股歷史交易數據(包括均線數據),可以通過參數設置獲取日k線、周k線、月k線,以及5分鍾、15分鍾、30分鍾和60分鍾k線數據。本接口只能獲取近3年的日線數據,適合搭配均線數據進行選股和分析。
參數說明:
code:股票代碼,即6位數字代碼,或者指數代碼(sh=上證指數 sz=深圳成指 hs300=滬深300指數 sz50=上證50 zxb=中小板 cyb=創業板)
start:開始日期,格式YYYY-MM-DD
end:結束日期,格式YYYY-MM-DD
ktype:數據類型,D=日k線 W=周 M=月 5=5分鍾 15=15分鍾 30=30分鍾 60=60分鍾,默認為D
retry_count:當網絡異常后重試次數,默認為3
pause:重試時停頓秒數,默認為0
返回值說明:
date:日期
open:開盤價
high:最高價
close:收盤價
low:最低價
volume:成交量
price_change:價格變動
p_change:漲跌幅
ma5:5日均價
ma10:10日均價
ma20:20日均價
v_ma5:5日均量
v_ma10:10日均量
v_ma20:20日均量
turnover:換手率[注:指數無此項]
推薦學習資料
tushare:
http://www.361way.com/python-stock-tushare/4579.html
matplotlib:
https://www.cnblogs.com/duye/p/8862666.html
https://blog.csdn.net/ScarlettYellow/article/details/80458797
seaborn:
https://blog.csdn.net/qq_33120943/article/details/76569756
https://www.cnblogs.com/gczr/p/6767175.html
總題干
烽火通信(股票代碼600498)經營光纖通信和相關通信技術、信息技術領域科技開發;相關高新技術產品設計、制造和銷售,含光纖預制棒、光纖復合架空地線(OPGW)、光纖復合相線(OPPC)及金具和附件、電力導線、電線 、電纜及相關材料和附件、通訊線纜及附件、 海底光纜、海底電纜及海底通信設備的設計、制造與銷售;數據中心機房基礎設施及配套產品(含供配電、空調制冷設備、智能管理監控等)的規划設計、開發、生產、銷售、技術服務、工程安裝、維修和咨詢;通用服務器、存儲產品、雲計算、大數據、虛擬化軟件、應用軟件、交換機、工作站軟硬件產品的技術開發和產品生產、銷售和售后服務;系統集成、代理銷售;增值電信業務中的互聯網接入服務業務及增值電信業務中的互聯網接入數據中心業務。
相關資料如下:
1、在計算公司股票和上證指數收益率指標時,用一元線性回歸直線分析法計算公司股票的β系數,所有市場組合收益率為上證指數2017年1-12月的指數漲跌幅度之和。在計算公司股票和上證指數收益率指標時,直接以k線圖中的月線漲跌幅度為依據。回歸分析時,以公司股價漲跌幅度作為因變量,以上證指數漲跌幅度作為自變量。
2、烽火通信公司的凈利潤和股利增長率為1.67%。以2017年度12月31日總股本1113938974股為基數,每10股派發現金紅利3.4元(含稅);不進行資本公積金轉增股本。
此外,梅泰諾(300038) 與烽火通信是類似企業,梅泰諾預期明年每股凈利和股利增長2%。
假設2017年梅泰諾公司、烽火通信的凈利潤取自合並報表中的凈利潤
3、假定公司資產負債率為40%,為公司最佳目標資本結構,則公司下年度有一個投資計划需要資金7億元。
注:計算結果如有小數,除有特殊說明外,均四舍五入保留兩位小數,最終結果中的比率指標四舍五入計算到0.01%,財務報表取數采用合並報表口徑,回歸線性方程y=a+bx。
樣題1——抓取數據,讀寫csv,折線圖
(案例題 v4)【17 分】、
大數據分析師編寫python程序,利用tushare包抓取烽火通信與上證指數2017年1-12月的指數漲跌幅度數據。(升序排序)
分別存儲為csv文件,文件分別為:
烽火通信2017年1-12月的指數漲跌幅度數據.csv
上證指數2017年1-12月的指數漲跌幅度數據.csv
對存儲后的兩個文件分別進行清洗,工具不限,只保留指數漲跌幅度數據后存儲為csv文件,文件名分別為:
烽火通信2017年1-12月的指數漲跌幅度數據(已清洗).csv
上證指數2017年1-12月的指數漲跌幅度數據(已清洗).csv
編寫python程序,根據文件在一張圖片上生成開盤價、收盤價和最高價的折線圖。大小為(10,7),存儲為png格式。
文件名為:開盤價收盤價最高價折線圖.png
編寫python程序,根據文件在一張圖片上生成5日均價、10日均價和20日均價的折線圖。大小為(10,7),存儲為png格式。
文件名為:5日均價10日均價20日均價折線圖.png
所有文件的存儲路徑為"D:\BigData\"
請將代碼全部復制粘貼到下框
答案解析:
import matplotlib.pyplot as plt #繪圖
import seaborn as sns #基於matplotlib的數據可視化庫
import tushare as ts #財經數據接口
import pandas as pd
from datetime import datetime
# get_hist_data函數,獲取某只股票的歷史交易數據,參數與get_k_data相同
stock1 = ts.get_hist_data('600498','2017-01-01','2017-12-31')
stock2 = ts.get_hist_data('sh','2017-01-01','2017-12-31')
stock1.to_csv('d:/bigdata/烽火通信.csv')
stock2.to_csv('d:/bigdata/上證指數.csv')
filename=open('d:/bigdata/烽火通信.csv')
stock3=pd.read_csv(filename)
#stock4=pd.read_csv('d:/bigdata/上證指數.csv')
print(stock3)
sns.set_style("whitegrid")
stock3['open'].plot(legend=True, figsize=(10, 7))
stock3['close'].plot(legend=True, figsize=(10, 7))
stock3['high'].plot(legend=True, figsize=(10, 7))
#plt.show()
plt.savefig('d:/bigdata/折線圖1.png')
樣題3——抓取月度不復權收盤股價,排序
案例題 v4)【2 分】、
請運用tushare工具,搜集2016-2017年烽火通信(股票代碼600498)月度不復權收盤股價,並請在大數據中心搜集2016-2017年月度上證綜合收盤指數。
答案:
import matplotlib.pyplot as plt #繪圖
import seaborn as sns #基於matplotlib的數據可視化庫
import tushare as ts #財經數據接口
import pandas as pd
from datetime import datetime
# get_hist_data函數,獲取某只股票的歷史交易數據,參數與get_k_data相同
stock1 = ts.get_hist_data('600498','2016-01-01','2017-12-31',ktype='M')
print(stock1.sort_values(axis = 0,ascending = True,by=['date'])) #axis=0表示按列排序,為1表示按列
樣題6——抓取年末利潤表,讀寫csv,遍歷,篩選單元格,柱狀圖,UTF8編碼
(案例題 v4)【5 分】、
大數據分析師編寫python程序,利用tushare包抓取烽火通信公司2017年度末利潤表(數據來源:上交所/披露/上市公司信息)。
提示:利用tushare包抓取烽火通信公司2017年度末利潤表的接口為:ts.get_profit_statement('600498')。 將利潤表存儲為csv文件
文件名為:烽火通信2017年末利潤表.csv
編寫python程序,根據文件在一張圖片上按季度生成每季度的所得稅的柱狀圖。大小為(10,7),存儲為png格式。
文件名為:季度所得稅柱狀圖.png
大數據分析師將1個csv文件,1個png文件。
所有文件的存儲路徑為"D:\BigData\"
請將代碼全部復制粘貼到下框
答案解析:
import matplotlib.pyplot as plt #繪圖
import seaborn as sns #基於matplotlib的數據可視化庫
import tushare as ts #財經數據接口
import pandas as pd
import csv
from datetime import datetime
stock1 = ts.get_profit_statement('600498')
stock1.to_csv('d:/bigdata/利潤表.csv',encoding='utf_8_sig')
filename='d:/bigdata/利潤表.csv'
with open(filename,encoding='utf_8_sig') as f:
r=csv.DictReader(f)
d={} #空字典,用來保存各季度所得稅
for row in r:
if row['報表日期'] == '減:所得稅費用':
d['第一季度'] = float(row['20170331'])
d['第二季度'] = float(row['20170630'])
d['第三季度'] = float(row['20170930'])
d['第四季度'] = float(row['20171231'])
#print(d)
sns.set_style("whitegrid")
plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文字體設置-黑體
plt.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示為方塊的問題
sns.set(font='SimHei') # 解決Seaborn中文顯示問題
sns.barplot(x=list(d.keys()),y=list(d.values()))
plt.title('各季度所得稅')
plt.xlabel('季度')
plt.ylabel('所得稅')
plt.savefig('d:/bigdata/所得稅柱狀圖.png')
break
代碼講解
import matplotlib.pyplot as plt
import seaborn as sns #Seaborn是基於matplotlib的python數據可視化庫
import tushare as ts
from datetime import datetime
#保存並輸出徐工機械[000425]股票2012年初到2017年末的后復權成交價數據,存為csv文件,再繪制折線圖
#首先用tushare獲取成交價數據,復權類別是后復權,開始時間2012年1月1日,截止時間2017年12月31日
stock = ts.get_k_data('000425', autype='hfq', ktype='M', start='2012-1-1', end='2017-12-31')
#存為csv文件
stock.to_csv('e:/23.csv')
#用seaborn繪制畫板,加上白色網格
sns.set_style("whitegrid")
#在畫板上加上線條說明
stock['open'].plot(legend=True, figsize=(15, 9))
stock['close'].plot(legend=True, figsize=(15, 9))
stock['high'].plot(legend=True, figsize=(15, 9))
stock['low'].plot(legend=True, figsize=(15, 9))
#輸出K線數據
print(stock)
#展示畫板
plt.show()
#繪制最近一年的數據樂視網[300104]股票每日漲跌幅核密度估計圖
end = datetime.today() #開始時間結束時間,選取最近一年的數據
start = datetime(end.year-1,end.month,end.day)
#datetime抓取時間是精確到秒的所以只保留年月日
end = str(end)[0:10]
start = str(start)[0:10]
#選取股票獲取日K線數據
stock = ts.get_hist_data('300104',start,end)
stock['Daily Return'] = stock['close'].pct_change()
sns.kdeplot(stock['Daily Return'].dropna())
plt.show()