?數(shù)據(jù)挖掘:也就是data mining,是一個很寬泛的概念刊咳,字面意思就是從大型數(shù)據(jù)存儲庫中挖掘有用的信息彪见。
數(shù)據(jù)挖掘是統(tǒng)計學(xué),機器學(xué)習(xí)芦缰,數(shù)據(jù)庫三者的統(tǒng)一企巢。它利用的思想有:
(1)統(tǒng)計學(xué)的抽樣枫慷、估計让蕾、假設(shè)檢驗;
(2)人工智能或听、機器學(xué)習(xí)的算法探孝、建模技術(shù)和理論;
(3)此外需要數(shù)據(jù)庫提供有效的存儲誉裆、索引顿颅、查詢等處理支持。
之后的數(shù)據(jù)挖掘?qū)W習(xí)就分這幾部分去學(xué)習(xí):
數(shù)據(jù)預(yù)處理足丢,關(guān)聯(lián)分析粱腻,回歸分析,分類斩跌,聚類绍些,預(yù)測,診斷
在開始數(shù)據(jù)挖掘六大任務(wù)之前的耀鸦,先了解數(shù)據(jù)預(yù)處理相關(guān)知識柬批。
由于數(shù)據(jù)挖掘的數(shù)據(jù)基本來自生產(chǎn)啸澡、生活、商業(yè)中的實際數(shù)據(jù)氮帐,現(xiàn)實中我們采集到的數(shù)據(jù)往往存在:不正確嗅虏、不完整、不一致這三個問題上沐。因此需要提高數(shù)據(jù)質(zhì)量皮服,滿足數(shù)據(jù)挖掘的需要。
數(shù)據(jù)預(yù)處理一般就四種:
數(shù)據(jù)清洗
用來清除數(shù)據(jù)中的噪聲参咙,糾正不一致冰更。一般包括缺失值處理和異常值處理。
一昂勒、缺失值的處理:
總的來說分刪除法和插補法
判斷是否有缺失值:isnull(缺失True)蜀细、notnull(缺失False)
結(jié)合bool索引篩選不為空的數(shù)據(jù):df[df['col1'].notnull()]
刪除缺失值:df.dropna( )
填充缺失值:df.fillna()填充缺失值
替換缺失數(shù)據(jù):df.replace()
缺失值插補-均值mean/中位數(shù)median/眾數(shù)mode
臨近值插補:method參數(shù):pad / ffill → 用之前的數(shù)據(jù)填充,backfill / bfill → 用之后的數(shù)據(jù)填充
(1)刪除法:刪除存在缺失值的記錄(僅當(dāng)樣本量很大且缺失值記錄所占樣本比例<5%時可行)
# 判斷是否有缺失值數(shù)據(jù) - isnull戈盈,notnull?
df = pd.DataFrame({'value1':[12,33,45,23,np.nan,np.nan,66,54,np.nan,99,190],
? ? ? ? ? ? ? ? ? 'value2':['a','b','c','d','e',np.nan,np.nan,'f','g',np.nan,'g']})
print(df.notnull())? # Dataframe直接判斷是否是缺失值奠衔,返回一個兩列的Series
print(df['value1'].notnull())? # 通過索引判斷
# 刪除缺失值 - dropna
s = pd.Series([12,33,45,23,np.nan,np.nan,66,54,np.nan,99])
df = pd.DataFrame({'value1':[12,33,45,23,np.nan,np.nan,66,54,np.nan,99,190],
? ? ? ? ? ? ? ? ? 'value2':['a','b','c','d','e',np.nan,np.nan,'f','g',np.nan,'g']})
s.dropna(inplace = True)? ? # 5.26發(fā)現(xiàn)可以這樣寫:s[s>0]
df2 = df['value1'].dropna()
(2)插補法:對稱數(shù)據(jù)可以使用均值,傾斜數(shù)據(jù)應(yīng)該使用中位數(shù)塘娶。
# 填充/替換缺失數(shù)據(jù) - fillna归斤、replace
s = pd.Series([12,33,45,23,np.nan,np.nan,66,54,np.nan,99])
s.fillna(0,inplace = True)
s.replace(np.nan,'缺失數(shù)據(jù)',inplace = True)? ?
# 缺失值插補
# 幾種思路:均值/中位數(shù)/眾數(shù)插補、臨近值插補刁岸、插值法
#? 1)均值/中位數(shù)/眾數(shù)插補
s.fillna(s.mean(),inplace = True)? ? ? ? ??# 用均值填補脏里,s.median()? # 中位數(shù)
s.replace(np.nan,s.mean(),inplace = True)? ??
#? 2)臨近值插補
s.fillna(method = 'ffill',inplace = True)? ? # 用前值插補
# method參數(shù):# pad / ffill → 用之前的數(shù)據(jù)填充 # backfill / bfill → 用之后的數(shù)據(jù)填充
二、異常值處理方法?
異常值是指樣本中的個別值虹曙,其數(shù)值明顯偏離其余的觀測值迫横。異常值也稱離群點,異常值的分析也稱為離群點的分析酝碳。
異常值分析:
3σ原則:數(shù)據(jù)服從正態(tài)分布矾踱,異常值被定義為一組測定值中與平均值的偏差超過3倍的值 → p(|x - μ| > 3σ) ≤ 0.003 error=data[np.abs(data-u)>3*std]
箱型圖:dat.plot.box()借助describe函數(shù)計算分位差I(lǐng)QR,下限mi=q1-1.5*iqr疏哗,上限ma=q3+1.5*iqrerror = data[(data < mi) | (data > ma)]
散點圖:利用散點圖觀察異常點位置
(1)呛讲、3σ原則:如果數(shù)據(jù)服從正態(tài)分布,異常值被定義為一組測定值中與平均值的偏差超過3倍的值 → p(|x - μ| > 3σ) ≤ 0.003
data = pd.Series(np.random.randn(10000)*100)? ? ? # 創(chuàng)建數(shù)據(jù)
u = data.mean()? ? # 計算均值
error = data[np.abs(data - u) > 3*std]?? ? ? # 篩選出異常值error
data_c = data[np.abs(data - u) <= 3*std]?? ?# 剔除異常值之后的數(shù)據(jù)data_c
print('異常值共%i條' % len(error))
(2)返奉、箱型圖分析
s = data.describe()
q1 = s['25%']
q3 = s['75%']
iqr = q3 - q1? ? # # 計算分位差
mi = q1 - 1.5*iqr
ma = q3 + 1.5*iqr
print('分位差為:%.3f贝搁,下限為:%.3f,上限為:%.3f' % (iqr,mi,ma))
ax2 = fig.add_subplot(2,1,2)
error = data[(data < mi) | (data > ma)]? ? ? ? ??# 篩選出異常值error
data_c = data[(data >= mi) & (data <= ma)]
print('異常值共%i條' % len(error))? ? ? ? ? ? ? ? ?# 剔除異常值之后的數(shù)據(jù)data_c
數(shù)據(jù)集成
將數(shù)據(jù)由多個數(shù)據(jù)源合并成一個一致的數(shù)據(jù)存儲芽偏,減少數(shù)據(jù)集的冗余和不一致雷逆,去除重復(fù)。
數(shù)據(jù)規(guī)約
刪除冗余特征或聚類降低數(shù)據(jù)的規(guī)模哮针,仍接近原始數(shù)據(jù)的完整性关面。
數(shù)據(jù)變換
數(shù)據(jù)變化是將數(shù)據(jù)由一種表現(xiàn)形式變?yōu)榱硪环N表現(xiàn)形式坦袍。常見的數(shù)據(jù)變換方式是:數(shù)據(jù)標(biāo)準(zhǔn)化、數(shù)據(jù)離散化等太、語義轉(zhuǎn)換捂齐。
0-1標(biāo)準(zhǔn)化 將數(shù)據(jù)的最大最小值記錄下來,并通過Max-Min作為基數(shù)(即Min=0缩抡,Max=1)進(jìn)行數(shù)據(jù)的歸一化處理 x = (x - Min) / (Max - Min)
Z-score標(biāo)準(zhǔn)化z=(x-μ)/σ奠宜,其中x為某一具體分?jǐn)?shù),μ為平均數(shù)瞻想,σ為標(biāo)準(zhǔn)差Z值的量代表著原始分?jǐn)?shù)和母體平均值之間的距離压真,有正負(fù)。在分類蘑险、聚類算法中滴肿,需要使用距離來度量相似性的時候,Z-score表現(xiàn)更好
(1)數(shù)據(jù)標(biāo)準(zhǔn)化
0-1標(biāo)準(zhǔn)化:
# 將數(shù)據(jù)的最大最小值記錄下來佃迄,并通過Max-Min作為基數(shù)(即Min=0泼差,Max=1)進(jìn)行數(shù)據(jù)的歸一化處理
# x = (x - Min) / (Max - Min)
Z-score標(biāo)準(zhǔn)化:
# Z分?jǐn)?shù)(z-score),是一個分?jǐn)?shù)與平均數(shù)的差再除以標(biāo)準(zhǔn)差的過程 → z=(x-μ)/σ,其中x為某一具體分?jǐn)?shù)呵俏,μ為平均數(shù)堆缘,σ為標(biāo)準(zhǔn)差
# Z值的量代表著原始分?jǐn)?shù)和母體平均值之間的距離,是以標(biāo)準(zhǔn)差為單位計算普碎。在原始分?jǐn)?shù)低于平均值時Z則為負(fù)數(shù)吼肥,反之則為正數(shù)
# 數(shù)學(xué)意義:一個給定分?jǐn)?shù)距離平均數(shù)多少個標(biāo)準(zhǔn)差?
# 經(jīng)過處理的數(shù)據(jù)符合標(biāo)準(zhǔn)正態(tài)分布,即均值為0麻车,標(biāo)準(zhǔn)差為1
# 什么情況用Z-score標(biāo)準(zhǔn)化:
# 在分類缀皱、聚類算法中,需要使用距離來度量相似性的時候绪氛,Z-score表現(xiàn)更好
(2)離散化
指將連續(xù)性數(shù)據(jù)切分為多個“段”唆鸡,有些數(shù)據(jù)挖掘算法要求數(shù)據(jù)是分類屬性的形式涝影。
(3)語義轉(zhuǎn)換
將{非常好枣察,好,一般燃逻,差序目,非常差}這種轉(zhuǎn)化為{1,2,3,4,5}來替代。