這裡簡單介紹
pandas
套件裡的data frame
以
房價分析.ipynb
為例
先介紹兩個 python
基本指令, print
以及 type
.
print(x)
: 顧名思義就是把 x
顯示出來在銀幕上type(x)
: 顧名思義就是check x
的資料型態所以我自己常常用這個指令 print(type(x))
把 x
的資料型態顯示出來在銀幕上.
這樣就很容易知道每個變數分別代表什麼東西, 或是他存了什麼東西.
接著我們解釋一下這塊 python code:
這裡就是先載入兩個 package
import os
import pandas as pd
這裡是把資料夾裡的資料全都存到 dfs
這個 list 裡.
# 歷年資料夾
dirs = [d for d in os.listdir() if d[:4] == 'real']
dfs = []
for d in dirs:
df = pd.read_csv(os.path.join(d,locToLetter[location] + '_lvr_land_a.csv'), index_col=False)
df['Q'] = d[-1]
dfs.append(df.iloc[1:])
我們可以查一下 dfs
的 data type
print(type(dfs))
<class 'list'>
也可以查一下 dfs
這個 list 的長度 (8年 x 4季 = 32 個檔案)
len(dfs)
32
接著將 dfs
這個 list 以合併成一個 data frame, 並把它叫做 df
也就是 (data frame 的 initials)
df = pd.concat(dfs, sort=True)
查一下 df
的 data type
print(type(df))
<class 'pandas.core.frame.DataFrame'>
對於 data frame 還有一些更進一步的指令可以看他裡面的資料類型, 比如以下三個.
print(df.ndim)
print("---") # 分隔線
print(df.shape)
print("---") # 分隔線
print(df.dtypes)
請自行執行看會顯示出什麼
接著以下就是對 df 做的一些操作. 基本上他增加了 year
, 單價元坪
以及 建物型態2
三個欄位, 以及刪除一些有備註的交易:
# 新增交易年份
df['year'] = pd.to_numeric(df['交易年月日'].str[:-4], errors='coerce') + 1911
# 平方公尺換成坪
df['單價元平方公尺'] = df['單價元平方公尺'].astype(float)
df['單價元坪'] = df['單價元平方公尺'] * 3.30579
# 建物型態
df['建物型態2'] = df['建物型態'].str.split('(').str[0]
# 刪除有備註之交易(多為親友交易、價格不正常之交易)
df = df[df['備註'].isnull()]
最後, 則是改這資料欄的 index. 原本是 1, 2, 3, … 這個索引, 它改成以交易年月日來當 index, 然後可以排序
# 將index改成年月日
df.index = pd.to_datetime(df['year'].astype(str) + df['交易年月日'].str[-4:] ,errors='coerce')
df.sort_index(inplace=True)
df.head()
接著我要說明一下如何取出 data frame 裡的資料來做事.
最基本的指令就是 df['欄位名稱']
, 這樣就能拿到那欄的資料. 不過我們通常想要拿來做數值運算, 所以有時候需要改一下 data type,
比如說我要拿 year
這欄位的資料, 不過這欄位原始資料型態應該是 int64 (整數), 所以就需要利用 astype()
改一下, 括號裡面是我們要改成的數據類型
x = df["year"].astype(float)
接著我們使用 numpy
這個 package 裡的 np.asarray()
指令就可以將 x
改成 numpy
的 array 型態. 不過我通常習慣將 array 改寫成一個矩陣,
x = np.asarray(x)
x = x.reshape((len(x), 1))
或是兩行合併一起
x = np.asarray(x).reshape((len(x), 1))
一樣我們有以下三個指令可以看其資料類型:
print(x.ndim)
print("---") # 分隔線
print(x.shape)
print("---") # 分隔線
print(x.dtype)
請自行執行看會顯示出什麼
那這個 x
就可以拿來丟進 LMS 的 code 來做事了.
這樣拿到的 x
長度很大, 建議取出其中約 10000 筆以內來做就好.