前言
本文為「成為 Python 數據分析達人的第一堂課」課程的學習筆記。
Pandas
Pandas 是一個像是 Excel 的 Python 擴充程式庫。
1 | %matplotlib inline |
使用魔術方法查看資料夾內容。
1 | %ls |
讀取一個 CSV 檔。
1 | df = pd.read_csv('grades.csv') |
取得前五列資料。
1 | df.head() |
取得整行「國文」的資料。
1 | df['國文'] |
將整行「國文」的資料放進陣列。
1 | cg = df.國文.values |
使用 mean() 函數取得「國文」的平均値。
1 | cg.mean() |
使用 std() 函數取得「國文」的標準差。
1 | cg.std() |
使用 plot() 函數畫出折線圖。
1 | df.國文.plot() |
使用 hist() 函數畫出直方圖。
1 | df.國文.hist(grid=False) |
grid參數代表是否有網格。
基本數據分析
使用 describe() 函數算出常用的基本統計數據。
1 | df.describe() |
使用 corr() 函數算出各科之間的相關係數。
1 | df.corr() |
使用 corr() 函數算出「國文」與「數學」之間的相關係數。
1 | df.國文.corr(df.數學) |
使用 sum() 函數算出總級分,並新增到陣列內。
1 | df['總級分'] = df.sum(axis=1) |
sum()函數的axis參數是1代表將同一列相加。
新增一個加權過的主科成績到陣列內。
1 | df['主科'] = df.數學*1.5 + df.英文 |
使用 sort_values() 函數先對「總級分」進行排序,再對「主科」進行排序。
1 | df.sort_values(by=['總級分', '主科'], ascending=False).head(20) |
ascending參數為False代表降冪排序。
組裝 DataFrame 物件
建立一個亂數矩陣。
1 | mydata = np.random.randn(4, 3) |
建立一個 DataFrame 物件。
1 | df1 = pd.DataFrame(mydata, columns=list("ABC")) |
建立第二個 DataFrame 物件。
1 | df2 = pd.DataFrame(np.random.randn(3, 3), columns=list("ABC")) |
合併二個 DataFrame 物件,方向是列的方向。
1 | df3 = pd.concat([df1, df2], axis=0) |
重新編排索引。
1 | df3.index = range(7) |
合併二個 DataFrame 物件,方向是行的方向。
1 | df4 = pd.concat([df1, df2], axis=1) |
統計 UFO 目擊數量
讀取線上 CSV 檔。
1 | df = pd.read_csv('http://bit.ly/uforeports') |
使用 groupby() 函數群組化特定欄位,並且計數。
1 | df_state = df.groupby('State').count() |
以 Time 欄位進行排序,並且實際改變原來的 df_state 變數。
1 | df_state.sort_values(by="Time", ascending=False, inplace=True) |
畫出長條圖。
1 | df_state[:10].Time.plot(kind="bar") |
定位特定資料
建立一個 DataFrame 物件。
1 | df = pd.DataFrame(np.random.rand(5, 3), |
列出 B 行大於 0 的資料。
1 | df[df.B > 0] |
使用 loc() 函數定位特定範圍的資料。
1 | df.loc[2:3, "B":"C"] |
更改特定範圍的資料。
1 | df.loc[df.B > 0, "C"] = 0 |
分析股票資料
先在 Anaconda 終端機安裝 pandas-datareader 套件。
1 | conda install pandas-datareader |
如果出現以下錯誤:
1 | ImportError: cannot import name 'is_list_like' |
則直接到儲存庫下載下來重新安裝。
1 | pip install git+https://github.com/pydata/pandas-datareader.git |
讀取 Yahoo 特定期間 Apple 公司的股票資料。
1 | df = web.DataReader("AAPL", "yahoo", start="2012-09-01", end="2017-08-31") |
將這五年內的收盤價畫出來。
1 | P = df["Adj Close"] |
使用 diff() 函式計算報酬率,並畫出圖來。
1 | r = P.diff()/P |
使用 rolling() 函式以每 20 天為區間計算平均値,並畫出圖來。
1 | P.rolling(window=20).mean().plot() |