dateframe取某列数据_Python获取时序数据并进行可视化分析
1. 準備工作
tushare是一個第三方財經數據接口包,需要安裝包并完成注冊。
安裝tushare包
為防惡意調用接口數據,官方()需要新用戶完成注冊、提高積分(例如達到200)、取得訪問權限token ID
2. 加載數據
首先需要導入包已安裝的tushare包。然后通過tokenID獲取一個有訪問權限的API接口,最終通過官方文檔說明,使用index_daily()?來獲取樣例數據。這里取399401.SZ的交易日期和收盤價。
import?tushare?as?ts?ts.set_token("1797f6915fbc1e612c33c6ed4cf85a2b7b349d85db80bf0860337fff")
pro=ts.pro_api()
df1=pro.index_daily(ts_code="399401.SZ")[['trade_date',?'close']]
3. 數據處理-轉化與合并
數據類型轉化為datetime
導入數據后,先觀察源數據的字段類型是否符合預期。通過執行如下腳本,得到當前數據集中,trade_date為object 并非日期類型
#?查看數據類型print(df1.dtypes)
#?查看樣例數據
print(df1.head())
pandas中改變某列的數據類型為日期時,可用pd.to_datetime。修改完成后,將數據集中的日期字段重新設為索引。注意不要漏掉inplace=True。
df1.sort_values('trade_date',?inplace=True)#?轉換列數據類型為日期
df1['trade_date']=pd.to_datetime(df1['trade_date'])
#?將指定的日期類型?列設為索引,并替代。
df1.set_index('trade_date',?inplace=True)
數據合并concat
上面的df1對象中只包含一支股票的信息,當在matplotlib中展現時,僅可以觀察趨勢。如果需要與其它股票作對比分析,則需要合并另外的數據。
#?獲取多支交易數據數據,作對比分析?list1?=?['000002.SZ',?'000012.SZ',?'600010.SH']
for?i,?ts_code?in?enumerate(list1):
????#?取指定日期的數據?
????df_tmp?=?pro.daily(ts_code=ts_code,?start_date='20170101',?end_date='20180101')[['trade_date',?'close']]
????df_tmp.sort_values('trade_date',?inplace=True)
????df_tmp['trade_date']=pd.to_datetime(df_tmp['trade_date'])
????df_tmp.rename(columns={'close':?ts_code},?inplace=True)
????df_tmp.set_index('trade_date',?inplace=True)
????if?i==0?:
????????df?=?df_tmp
????else:
????# axis=1,沿第2條軸即X軸。列增加
????????df?=?pd.concat([df,?df_tmp],?axis=1)
????print(ts_code)
#?查看數據?
df.head()
4. 可視化展現
查看單一股票的年度趨勢圖,并添加參考線
ax?=?df1.plot(color="blue",?figsize=(12,?4),?linewidth=2,?fontsize=6)
ax.set_xlabel("trade?date")
ax.set_ylabel("399401.SZ?close")
ax.set_title("Trend?analysis?of?recent?years?2013-2019?",?fontsize=8)
#?添加水平線
ax.axvline("2018-08-15",?color="red",?linestyle="--",?linewidth=2)
ax.axhline(6000,?color="green",?linestyle="--",linewidth=2?)
plt.show()
如下示圖:
參數設置。
主題切換
可先調用語句`plt.style.available`,查看當前可用的主題名稱,再選擇即可。設置X軸日期格式
matploblib中也提供了的dates對象,對X軸的顯示日期格式與頻度進行設置。如下腳本,將設置日期區間為'2013-01-01'?至?'2019-12-01',顯示'年-月',頻度為10個月。#?查看可用樣式
import?matplotlib.dates?as?mdate?
print(plt.style.available)
plt.style.use("seaborn-talk")
ax1=df1.plot(figsize=(12,?4))
ax1.set_title("my?mew?style?-?seaborn-talk")
ax1.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m'))
plt.xticks(pd.date_range("2013-01-01",?"2019-12-01",?freq="10m"))
plt.show()
示例圖如下:
對比分析
先預覽已完成合并的數據。dataFrame對象df中trade_date仍為索引,但是新增了其它列。
ax3?=?df.plot(linewidth=3?,?fontsize=16,?figsize=(12,?4?))ax3.set_xlabel('trade_date')
ax3.set_ylabel("unit?price")
#?指定X軸顯示刻度?,取代默認設置
ax3.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m'))
plt.xticks(pd.date_range("2017-01-01",?"2018-01-01",?freq="3m"))
ax3.legend(fontsize=12)
ax3.set_title("Comparison?of?analysis")
plt.show()
展現結果為:
5. 小結
介紹了獲取第三方平臺的接口數據的方法
數據清洗與合并,主要有數據類型轉換、重新排序、索引重置、數據合并
時序數據的可視化對比分析與基本展現設置
圖文 / 來源網絡
版權歸原作者所有,侵聯刪
END碧茂課堂精彩課程推薦:
1.Cloudera數據分析課;
2.Spark和Hadoop開發員培訓;
3.大數據機器學習之推薦系統;
4.Python數據分析與機器學習實戰;
詳情請關注我們公眾號:碧茂大數據-課程產品-碧茂課堂
現在注冊互動得海量學幣,大量精品課程免費送!
關注最新行業動態,
加群進行技術交流!
總結
以上是生活随笔為你收集整理的dateframe取某列数据_Python获取时序数据并进行可视化分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何完美的将对话框设置成无边框无标题栏样
- 下一篇: VC资源分配、释放表