iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 21
2
Data Technology

使用Python進行資料分析系列 第 21

[Day21]Pandas就能輕易將資料視覺化!

  • 分享至 

  • xImage
  •  

今天是第21天了!
前兩天說明了matplotlib是如何將資料視覺化的,今天就要來看看如何用Pandas就可以將資料視覺化!

首先,先import

import pandas as pd

不過這裡我會直接使用yahoo的資料所以再加上下面兩行:

from pandas_datareader import data
import pandas_datareader.data as web

如果顯示沒有pandas_datareader的話:

conda install pandas_datareader
or 
pip install pandas_datareader

import datetime:

import datetime

  • 2018-07-17 更新:

關於pandas_datareader的問題,上網找了發現似乎也不能夠使用了,這是測試後能夠執行的程式碼:

import pandas as pd
pd.core.common.is_list_like = pd.api.types.is_list_like
import pandas_datareader as web

來源:stackoverflow

Remote Data Access

開始定義資料吧:

start = datetime.datetime(2016, 1, 1)
end = datetime.datetime(2017, 1, 1)

上面我們先定義start開始時間與end結束時間為我們要抓取的資料範圍。
接下來抓取yahoo上的資料:

data = web.DataReader("F", 'yahoo', start, end)

上面這邊引入了yahoo"F"也就是Finance的資料,並給予要抓取的開始時間start與結束時間end。
Imgur

  • 2018-07-17 更新:

不過我剛看了一下,yahoo的金融資料似乎在2018年2月停止運作無法使用了(參考來源),測試資料可以改成用morningstar
程式碼:

web.DataReader('F', 'morningstar', start, end)

Plot()

OK,接下來就要來看今天最神奇的部分了!

有了資料後,直接使用plot()函數:

data.plot()

然後!登冷!你就會看到:
Imgur
竟然不需要自行定義資料或標籤!

那因為Volume的數值太大了,以至於其他的值變動在圖上會看不出來,現在要取單獨一個值來看!

假設我們要看Close:

data.plot(y="Close")

我們只需要改變plot()內的y參數就可以了!

或是我們之前在說明pandas的時候是如何取出單項資料的還記得嗎!
只要:

data["Close"]

Imgur

所以繪圖也可以這樣做:

data["Close"].plot()

Imgur
兩個方式是一樣的哦!

可以一次取兩個以上嗎?

既然可以用data["Close"]一次取單項了,要取兩項資料當然可以:

data[["High","Low"]].plot()

只需要裡面放list格式就可以了!是不是跟超級方便呢!
Imgur

with Numpy

用padas繪圖,若要用Numpy的資料呢?

import numpy as np
df = pd.DataFrame(np.random.randn(100, 4), index=pd.date_range('12/31/2017', periods=100), columns=list('ABCD'))

上面建立一筆隨機的資料np.random.randn(100, 4),x為日期,columns設定為A,B,C,D

將資料累加

df = df.cumsum()

plot()

df.plot()

Imgur

總結

今天說明了如何用pandas將資料視覺化,也介紹了pandas-datareader這個好用的東西!
如果想暸解更多使用pandas-datareader抓股票的話可以到: pandas-datareader


上一篇
[Day20]Matplotlib資料視覺化進階!
下一篇
[Day22]Bokeh更簡單的資料視覺化!
系列文
使用Python進行資料分析30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
oooopppp1
iT邦新手 5 級 ‧ 2018-07-17 05:28:33

Excuseme me,
這一篇有些地方似乎沒法執行唷,小妹一直沒有試成功,都卡在pandas_datareader問題,國外討論區似乎建議用0.7.0版本,因為也是一樣有error問題,另外有關.plot直接匯出profile chart,我也沒有成功說...sadly...

P.S. from pandas_datareader import data 載入data,後面又宣告data為收下來的資料,這樣的命名好像也不行...我的環境是 VS-Code,謝謝您~

plusone iT邦新手 5 級 ‧ 2018-07-17 10:22:19 檢舉

嗨,關於pandas_datareader的問題,我剛剛上網找了發現似乎也不能夠使用了,這是我測試後能夠執行的程式碼:

import pandas as pd
pd.core.common.is_list_like = pd.api.types.is_list_like
import datetime
import pandas_datareader as web

來源:stackoverflow

不過我剛看了一下,yahoo的金融資料似乎也在2018年2月停止運作無法使用了(參考來源),測試資料可以改成用morningstar
程式碼:

web.DataReader('F', 'morningstar', start, end)

執行結果:
Imgur
感謝你的回覆,希望回答有幫助到你哦!

oooopppp1 iT邦新手 5 級 ‧ 2018-07-17 19:44:46 檢舉

謝謝您~^o^~y
也提供另一方法,但要先用pip install去載入fix_yahoo_finance
import pandas as pd
pd.core.common.is_list_like = pd.api.types.is_list_like
from pandas_datareader import data
import fix_yahoo_finance as yf
yf.pdr_override()
import datetime
start = datetime.datetime(2017, 1, 1)
end = datetime.datetime(2018, 1, 1)
df = data.get_data_yahoo('MS', start, end)
print(df[['Open', 'Close']])
df[['Open','Close']].plot() #Spyder可用此法秀chart

我要留言

立即登入留言