特徵工程入門與實踐----特徵理解

        特徵理解,簡單說就是理解數據中都有什麼,對數據的理解方便我們認清數據,從而對數據進行操作,構造有用的特徵。我們將從以下幾個方面來認清數據:

  • 結構化數據與非結構化數據
  • 定量數據與定性數據
  • 數據的4個等級
  • 探索性數據分析和數據可視化
  • 描述性統計
1. 結構化數據和非結構化數據

結構化(有組織)數據:分成觀察值和特徵的數據,以表格的形式組織,行是觀察值,列是特徵。例如,科學儀器報告的氣象數據,是存在表格的行列結構。

結構化數據
非結構化(無組織)數據:作爲自由流動的實體,不遵循標準組織結構的數據。例如,服務器日誌和推文。
非結構化數據

2. 定量數據和定性數據

定量數據:本質上是數值,應該是衡量某樣東西的數量。
定性數據:本質上是類別,應該是描述某樣東西的性質。
        我們首先導入一個數據,這個數據是舊金山做不同工作的工資。

# 導包
# 數學計算包
import numpy as np
# 存儲表格數據
import pandas as pd
# 數據可視化包
import matplotlib.pyplot as plt
import seaborn as sns
# 允許行內渲染圖形
%matplotlib inline
# 流行的數據可視化主題
plt.style.use('fivethirtyeight')

# 導入數據
salary_ranges = pd.read_csv('./data/Salary_Ranges_by_Job_Classification.csv')

# 查看前幾行
salary_ranges.head()

數據展示

# 查看數據的信息
salary_ranges.info()

數據信息

# 查看數據是否存在缺失
salary_ranges.isnull().sum()

是否存在缺失值

# 數據的描述性統計
salary_ranges.describe()

數據的統計特性

3. 數據的4個等級

        每個等級都有不同的控制和數學操作等級。瞭解數據讓我們選擇合適的可視化類型和操作。

(1)定類等級

        定類等級,其結構最弱。數據只按名稱分類。例如血型和人名。這些數據都是定性的。定類等級的數據上不能執行任何定量的數學操作。如下,對工作種類進行計數,出現次數最多的工作種類是00000。

# 對工作種類進行計數
salary_ranges['Grade'].value_counts().head()

工作種類計數

# 對工作種類繪製條形圖
salary_ranges['Grade'].value_counts().sort_values(ascending=False).head(20).plot(kind='bar')

工作種類條形圖

# 繪製餅圖
salary_ranges['Grade'].value_counts().sort_values(ascending=False).head(5).plot(kind='pie')

工作種類餅圖

(2)定序等級

        定序等級繼承了定類等級的屬性,而且有重要的附加屬性。定序等級的數據可以自然排序,但其天然數據屬性仍然是類別。定序等級數據也是定性的。其可以像定類等級一樣計數,還可以;引入比較和排序。還可以繪製莖葉圖和箱線圖。例如考試的等級(F、D、C、B、A)。我們使用舊金山國際機場的數據來實現操作。在這個數據的Q7A_ART屬性是關於;藝術品和展覽的,能選擇的是0,1,2,3,4,5,6,每個數字都有含義。我們只考慮1-5。

# 導入數據集
customer = pd.read_csv('./data/2013_SFO_Customer_survey.csv')
customer.shape

# 只考慮1-5
art_ratings = art_ratings[(art_ratings >= 1) & (art_ratings <= 6)]
# 將值轉爲字符串
art_ratings = art_ratings.astype(str)
art_ratings.describe()

數據信息

# 使用條形圖進行可視化
art_ratings.value_counts().plot(kind='bar')

條形圖

# 使用箱線圖進行可視化
art_ratings.value_counts().plot(kind='box')

箱線圖

(3)定距等級

        定距等級的數據是定量的數據。定距等級的數據之差是有意的。因此,不僅可以對值進行排序和比較,還可以進行加減法的運算。例如,當我們考慮溫度的時候,上海的溫度是32度,哈爾濱的溫度是4度,32-4=28代表兩地的溫差爲28度。相反,對於李克特量表做這種減法則沒有任何意義。

# 加載數據
climate = pd.read_csv('./data/GlobalLandTemperaturesByCity.csv')
# 移除缺失值
climate.dropna(axis=0, inplace=True)
climate.head()

移除缺失值後的數據

# 對溫度畫直方圖,擦好看溫度分佈
climate['AverageTemperature'].hist()

溫度分佈直方圖

# 將dt欄轉換爲日期,取年份
climate['dt'] = pd.to_datetime(climate['dt'])
climate['year'] = climate['dt'].map(lambda value: value.year)

# 只看美國
climate_sub_us = climate.loc[climate['Country'] == 'United States']
climate_sub_us['century'] = climate_sub_us['year'].map(lambda x: int(x/100+1))

# 使用新的centery列,對每個世紀化直方圖
climate_sub_us['AverageTemperature'].hist(by=climate_sub_us['century'], sharex=True, sharey=True, figsize=(10, 10), bins=20)

不同世紀的溫度情況

climate_sub_us.groupby('century')['AverageTemperature'].mean().plot(kind='line')

溫度變換折線圖
在氣候變化數據集中,我們針對year和averageTemperature兩列數據進行描繪。

x = climate_sub_us['year']
y = climate_sub_us['AverageTemperature']
fig, ax = plt.subplots(figsize=(10, 5))
ax.scatter(x, y)
plt.show()

# 用groupby清除美國氣溫的噪聲
climate_sub_us.groupby('year').mean()['AverageTemperature'].plot()

# 用滑動均值平滑圖像
climate_sub_us.groupby('year').mean()['AverageTemperature'].rolling(10).mean().plot()

溫度隨year的變化

(4)定比等級

        定比等級處理的也是定量數據,擁有最高程度的控制和數學運算能力。除了加減運算,還有一個絕對零點的概念,可以做乘除運算。例如,100元是50元的兩倍。100/50=2100/50=2

# 那個工資最高
fig = plt.figure(figsize=(15, 5))
ax = fig.gca()

salary_ranges.groupby('Grade')[['Biweekly High Rate']].mean().sort_values('Biweekly High Rate', ascending=False).head(20).plot.bar(stacked=False, ax=ax, color='darkorange')
ax.set_title('Top 20 Grade by Mean Biweekly High Rate')

不同工作的工資(top20)

# 哪個工作工資最低
fig = plt.figure(figsize=(15, 5))
ax = fig.gca()
salary_ranges.groupby('Grade')[['Biweekly High Rate']].mean().sort_values('Biweekly High Rate', ascending=False).tail(20).plot.bar(stacked=False, ax=ax, color='darkorange')
ax.set_title('Bottom 20 Grade by Mean Biweekly High Rate')

不同工作的工資(Bottom20)

# 計算最高工資和最低工資的比值
sorted_df = salary_ranges.groupby('Grade')[['Biweekly High Rate']].mean().sort_values('Biweekly High Rate', ascending=False)
sorted_df.iloc[0][0] / sorted_df.iloc[-1][0]

13.931919540229886

        在本文中,最主要的內容是我們將數據分爲了4個不同的等級。不同的等級我們有不同的操作和可視化方法。應用這些方法我們可以加深對數據的理解與認識。當我們拿到一個新數據集時,應首先做如下操作:

  1. 判斷數據是結構化的還是非結構化的
  2. 每列的數據是定量的還是定性的
  3. 每列處於的數據等級,是定類、定序、定距還是定比?
  4. 可以用什麼圖標可視化,條形圖、餅圖等。

特徵理解:處理數據流程

注:本文的內容與圖片來源於《特徵工程入門與實踐》。如有您也想學習相關知識,建議買一本來看。
個人博客.
聯繫方式:2391855138(加好友請備註)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章