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