「Python 數據分析」學習筆記(五)

前言

本文為「成為 Python 數據分析達人的第一堂課」課程的學習筆記。

Pandas

Pandas 是一個像是 Excel 的 Python 擴充程式庫。

1
2
3
4
>>> %matplotlib inline
import numpy as np
import matplotlib as plt
>>> import pandas as pd

使用魔術方法查看資料夾內容。

1
>>> %ls

讀取一個 CSV 檔。

1
>>> df = pd.read_csv('grades.csv')

取得前五列資料。

1
>>> df.head()

取得整行「國文」的資料。

1
2
>>> df['國文']
>>> 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
2
3
4
5
6
>>> mydata = np.random.randn(4, 3)
>>> mydata
array([[ 1.26839626, -1.63129233, 1.72274939],
[-0.75622526, 0.80755271, -1.34714513],
[ 0.59913502, -0.88825021, 0.11831564],
[-0.08307195, 0.02702474, 1.72341442]])

建立一個 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
2
3
>>> df = pd.DataFrame(np.random.rand(5, 3),
index=list(range(1, 6)),
columns=list("ABC"))

列出 B 行大於 0 的資料。

1
>>> df[df.B > 0]

使用 loc() 函數定位特定範圍的資料。

1
2
>>> df.loc[2:3, "B":"C"]
>>> df.loc[2, "B"]

更改特定範圍的資料。

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
2
>>> df = web.DataReader("AAPL", "yahoo", start="2012-09-01", end="2017-08-31")
df.head()

將這五年內的收盤價畫出來。

1
2
>>> P = df["Adj Close"]
>>> P.plot()

使用 diff() 函式計算報酬率,並畫出圖來。

1
2
3
>>> r = P.diff()/P
>>> r.plot()
>>> r[-100:].plot() # 最近一百天

使用 rolling() 函式以每 20 天為區間計算平均値,並畫出圖來。

1
>>> P.rolling(window=20).mean().plot()