- calender 日期包
- datetime 日期時(shí)間處理
- 導(dǎo)入日期包 和 時(shí)間處理包
import calender
from datetime import datetime
特征工程 feature engineering
- 數(shù)據(jù)和特征決定了機(jī)器學(xué)習(xí)的上限,而一個(gè)好的模型,只是逼近那個(gè)上限而已
- 我們的目標(biāo)是盡可能從原始數(shù)據(jù)上獲取有用的信息,一些原始數(shù)據(jù)本身往往不能直接作為模型的變量
- 特征工程是利用數(shù)據(jù)領(lǐng)域的相關(guān)知識(shí)來創(chuàng)建能夠使機(jī)器學(xué)習(xí)算法達(dá)到最佳性能的特征的過程
以datetime為例,這個(gè)特征里包含了日期和時(shí)間點(diǎn)兩個(gè)重要信息,我們還可以進(jìn)一步從日期中導(dǎo)出其所對(duì)應(yīng)的月份和星期數(shù)
首先引入calender中的day_name,列舉了周一到周日
calendar.day_name[:]
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
字符串轉(zhuǎn)時(shí)間格式
使用datatime中的striptime函數(shù)將字符串轉(zhuǎn)換為日期時(shí)間類型
注意這里的datatime是一個(gè)包不是我們dataframe里的變量名
第二個(gè)參數(shù)是 時(shí)間日期的格式
這里我們使用"%Y-%m-%d"來指定輸入日期的格式是按照年月日排序,有時(shí)候可能會(huì)有月日年的排序形式
dateDT = datetime.strptime(dateString,"%Y-%m-%d")
使用時(shí)間日期格式的weekday方法取出日期對(duì)應(yīng)的星期數(shù) 0-6
week_day = dataDT.weekday() #5
將星期映射到名字上
calender.day_name[week_day]
datetime格式還有其他的一些屬性 比如 month year 可以獲取 月份 年份
dateDT.month
繪制復(fù)習(xí)
設(shè)置畫布大小
fig = plt.figure(figsize=(18,5))
添加第一個(gè)子圖
ax1 = fig.add_subplot(121)
sns.boxplot(data=BikeData,y='count')
ax1.set(ylabel='count',title='box plot on count')
添加第二個(gè)子圖
ax2 = fig.add_subplot(122)
sns.boxplot(data=BikeData,y='count',x='hour')
ax2.set(xlabel='Hour', ylabel='Count',title="Box Plot On Count Across Hours")
相關(guān)性分析 correlation analysis
相關(guān)性分析是一種基于 不同特征相關(guān)系數(shù)的 分析,
是一種幫助我們理解特征是如何影響變量的常用方法。
相關(guān)系數(shù)的計(jì)算和可視化
相關(guān)系數(shù)是一個(gè)介于-1到1之間的一個(gè)實(shí)數(shù)
- 符號(hào)表示正相關(guān)和負(fù)相關(guān)
- 0 表示不相關(guān) 沒有相關(guān)性
- 先關(guān)系數(shù)的絕對(duì)值大小決定了這種線性相關(guān)性的強(qiáng)弱
使用df.corr()函數(shù)計(jì)算相關(guān)性
相關(guān)系數(shù)矩陣對(duì)角線的值永遠(yuǎn)為1,因?yàn)槭翘卣鞅旧砼c自己的相關(guān)系數(shù)
相關(guān)系數(shù)矩陣是一個(gè)對(duì)稱矩陣,我們只需要看上三角部分或者下三角部分即可
correlation = BikeData[["casual","registered","temp","atemp","humidity","windspeed","count"]].corr()
使用熱地圖顯示相關(guān)矩陣
暖色表示正相關(guān)。冷色表示負(fù)相關(guān),大小由深淺來表示
由于對(duì)稱性,我們只需考慮圖形上半部分或者下半部分即可
其實(shí)熱地圖和上面的相關(guān)矩陣攜帶的信息是一模一樣的,只不過加上了顏色更加直觀。
#annot 注釋 表示顯示數(shù)字
#square 正方形 表示使用正方形顯示
fig = plt.figure(figsize = (10, 10))
sns.heatmap(correlation, vmax=.8, square=True, annot=True)
在散點(diǎn)圖中擬合簡單線性回歸
線性回歸是利用數(shù)理統(tǒng)計(jì)中回歸分析,來確定兩種或兩種以上變量間相互依賴的定量關(guān)系的一種統(tǒng)計(jì)分析方法。
擬合一條直線更好的幫助我們查看趨勢
斜率就是相關(guān)系數(shù)
我們使用seaborn中的regplot(regression plot)線性回歸函數(shù)
sns.regplot(x='tmep',y='count',data=BikeData)
將無意義的數(shù)據(jù)變成有意義的數(shù)據(jù)
map函數(shù)可以做映射,比如 把 0 映射成假期
舉個(gè)例子
使用map方法,將holiday數(shù)據(jù)做映射, 0對(duì)應(yīng)'non-holiday', 1對(duì)應(yīng) 'holiday'
BikeData['holiday_cat'] = BikeData['holiday'].map( {0: 'non-holiday', 1: 'holiday'} )
FacetGrid繪圖
#add_legend()表示顯示圖例
#size=3 表示長為3
#aspect=2 表示寬高比為2
#row='humidity_band'豎著畫 并且以humidity_band為分組
#map()參數(shù)表示 繪制條形圖 橫坐標(biāo)是temp_band 縱坐標(biāo)count 以holiday_cat分類也是圖例的依據(jù) 深色配色 不顯示置信區(qū)間
sns.FacetGrid(data = BikeData, row='humidity_band', size=3, aspect=2).\
map(sns.barplot, 'temp_band', 'count', 'holiday_cat', palette='deep', ci=None).\
add_legend()