A. 數據挖掘中常用的數據清洗方法
數據挖掘中常用的數據清洗方法
對於數據挖掘來說,80%的工作都花在數據准備上面,而數據准備,80%的時間又花在數據清洗上,而數據清洗的工作,80%又花在選擇若干種適當高效的方法上。用不同方法清洗的數據,對後續挖掘的分析工作會帶來重大影響。
1、數值化
由於原始數據往往存在各種不同格式的數據形式,比如如果你要處理的數據是數值型,但是原始數據也許有字元型或者其他,那就要對其進行標准化操作。處理的方式可以很簡單也可以很復雜,我採取過的一個方法是:對字元串取值,按照ANSI碼值求和得到字元串的值,如果值太大,可以取一個適當的質數對其求模,本質上就是映射到一個區間了。然後就得到數值型的數據了。
2、標准化 normalization
由於原始數據各個維度之間的數值往往相差很大,比如一個維度的最小值是0.01,另一個維度最小值卻是1000,那麼也許在數據分析的時候,計算相關性或者方差啥的指標,後者會掩蓋了前者的作用。因此有必要對整體數據進行歸一化工作,也就是將它們都映射到一個指定的數值區間,這樣就不會對後續的數據分析產生重大影響。我採取過的一個做法是:min-max標准化。
3、降維
由於原始數據往往含有很多維度,也就是咱們所說的列數。比如對於銀行數據,它往往就含有幾十個指標。這些維度之間往往不是獨立的,也就是說也許其中之間若乾的維度之間存在關聯,也許有他就可以沒有我,因此咱們可以使用數據的相關性分析來降低數據維度。我使用過的一個方法是:主成分分析法。
4、完整性:
解決思路:數據缺失,那麼補上就好了。
補數據有什麼方法?
- 通過其他信息補全,例如使用身份證件號碼推算性別、籍貫、出生日期、年齡等
- 通過前後數據補全,例如時間序列缺數據了,可以使用前後的均值,缺的多了,可以使用平滑等處理,記得Matlab還是什麼工具可以自動補全
- 實在補不全的,雖然很可惜,但也必須要剔除。但是不要刪掉,沒准以後可以用得上
- 解決數據的唯一性問題
解題思路:去除重復記錄,只保留一條。
去重的方法有:
- 按主鍵去重,用sql或者excel「去除重復記錄」即可,
- 按規則去重,編寫一系列的規則,對重復情況復雜的數據進行去重。例如不同渠道來的客戶數據,可以通過相同的關鍵信息進行匹配,合並去重。
- 解決數據的權威性問題
解題思路:用最權威的那個渠道的數據
方法:
對不同渠道設定權威級別,例如:在家裡,首先得相信媳婦說的。。。
- 解決數據的合法性問題
解題思路:設定判定規則
- 設定強制合法規則,凡是不在此規則范圍內的,強制設為最大值,或者判為無效,剔除
- 欄位類型合法規則:日期欄位格式為「2010-10-10」
- 欄位內容合法規則:性別 in (男、女、未知);出生日期<=今天
設定警告規則,凡是不在此規則范圍內的,進行警告,然後人工處理
- 警告規則:年齡》110
離群值人工特殊處理,使用分箱、聚類、回歸、等方式發現離群值
解決數據的一致性問題
解題思路:建立數據體系,包含但不限於:
- 指標體系(度量)
- 維度(分組、統計口徑)
- 單位
- 頻度
- 數據
B. 常用的數據凈化方法
1、刪除缺失值
當樣本數很多的時候,並且出現缺失值的樣本在整個的樣本的比例相對較小,這種情況下,我們可以使用最簡單有效的方法處理缺失值的情況。那就是將出現有缺失值的樣本直接丟棄。這是一種很常用的策略。
2、均值填補法
根據缺失值的屬性相關系數最大的那個屬性把數據分成幾個組,然後分別計算每個組的均值,把這些均值放入到缺失的數值裡面就可以了。
3、熱卡填補法
對於一個包含缺失值的變數,熱卡填充法的做法是:在資料庫中找到一個與它最相似的對象,然後用這個相似對象的值來進行填充。不同的問題可能會選用不同的標准來對相似進行判定。最常見的是使用相關系數矩陣來確定哪個變數(如變數Y)與缺失值所在變數(如變數X)最相關。然後把所有變數按Y的取值大小進行排序。那麼變數X的缺失值就可以用排在缺失值前的那個個案的數據來代替了。
還有類似於最近距離決定填補法、回歸填補法、多重填補方法、K-最近鄰法、有序最近鄰法、基於貝葉斯的方法等。
異常值通常被稱為「離群點」,對於異常值的處理,通常使用的方法有下面幾種:
1、簡單的統計分析
拿到數據後可以對數據進行一個簡單的描述性統計分析,譬如最大最小值可以用來判斷這個變數的取值是否超過了合理的范圍,如客戶的年齡為-20歲或200歲,顯然是不合常理的,為異常值。
2、3∂原則
如果數據服從正態分布,在3∂原則下,異常值為一組測定值中與平均值的偏差超過3倍標准差的值。如果數據服從正態分布,距離平均值3∂之外的值出現的概率為P(|x-u| > 3∂) <= 0.003,屬於極個別的小概率事件。如果數據不服從正態分布,也可以用遠離平均值的多少倍標准差來描述。
3、箱型圖分析
箱型圖提供了識別異常值的一個標准:如果一個值小於QL01.5IQR或大於OU-1.5IQR的值,則被稱為異常值。QL為下四分位數,表示全部觀察值中有四分之一的數據取值比它小;QU為上四分位數,表示全部觀察值中有四分之一的數據取值比它大;IQR為四分位數間距,是上四分位數QU與下四分位數QL的差值,包含了全部觀察值的一半。箱型圖判斷異常值的方法以四分位數和四分位距為基礎,四分位數具有魯棒性:25%的數據可以變得任意遠並且不會干擾四分位數,所以異常值不能對這個標准施加影響。因此箱型圖識別異常值比較客觀,在識別異常值時有一定的優越性。
4、基於模型檢測
首先建立一個數據模型,異常是那些同模型不能完美擬合的對象;如果模型是簇的集合,則異常是不顯著屬於任何簇的對象;在使用回歸模型時,異常是相對遠離預測值的對象
優缺點:1.有堅實的統計學理論基礎,當存在充分的數據和所用的檢驗類型的知識時,這些檢驗可能非常有效;2.對於多元數據,可用的選擇少一些,並且對於高維數據,這些檢測可能性很差。
5、基於距離
通常可以在對象之間定義鄰近性度量,異常對象是那些遠離其他對象的對象
優缺點:1.簡單;2.缺點:基於鄰近度的方法需要O(m2)時間,大數據集不適用;3.該方法對參數的選擇也是敏感的;4.不能處理具有不同密度區域的數據集,因為它使用全局閾值,不能考慮這種密度的變化。
6、基於密度
當一個點的局部密度顯著低於它的大部分近鄰時才將其分類為離群點。適合非均勻分布的數據。
優缺點:1.給出了對象是離群點的定量度量,並且即使數據具有不同的區域也能夠很好的處理;2.與基於距離的方法一樣,這些方法必然具有O(m2)的時間復雜度。對於低維數據使用特定的數據結構可以達到O(mlogm);3.參數選擇困難。雖然演算法通過觀察不同的k值,取得最大離群點得分來處理該問題,但是,仍然需要選擇這些值的上下界。
7、基於聚類:
基於聚類的離群點:一個對象是基於聚類的離群點,如果該對象不強屬於任何簇。離群點對初始聚類的影響:如果通過聚類檢測離群點,則由於離群點影響聚類,存在一個問題:結構是否有效。為了處理該問題,可以使用如下方法:對象聚類,刪除離群點,對象再次聚類(這個不能保證產生最優結果)。
優缺點:1.基於線性和接近線性復雜度(k均值)的聚類技術來發現離群點可能是高度有效的;2.簇的定義通常是離群點的補,因此可能同時發現簇和離群點;3.產生的離群點集和它們的得分可能非常依賴所用的簇的個數和數據中離群點的存在性;4.聚類演算法產生的簇的質量對該演算法產生的離群點的質量影響非常大。
噪音,是被測量變數的隨機誤差或方差。對於噪音的處理,通常有下面的兩種方法:
1、分箱法
分箱方法通過考察數據的「近鄰」(即,周圍的值)來光滑有序數據值。這些有序的值被分布到一些「桶」或箱中。由於分箱方法考察近鄰的值,因此它進行局部光滑。
用箱均值光滑:箱中每一個值被箱中的平均值替換。
用箱中位數平滑:箱中的每一個值被箱中的中位數替換。
用箱邊界平滑:箱中的最大和最小值同樣被視為邊界。箱中的每一個值被最近的邊界值替換。
一般而言,寬度越大,光滑效果越明顯。箱也可以是等寬的,其中每個箱值的區間范圍是個常量。分箱也可以作為一種離散化技術使用.
2、回歸法
可以用一個函數擬合數據來光滑數據。線性回歸涉及找出擬合兩個屬性(或變數)的「最佳」直線,使得一個屬性能夠預測另一個。多線性回歸是線性回歸的擴展,它涉及多於兩個屬性,並且數據擬合到一個多維面。使用回歸,找出適合數據的數學方程式,能夠幫助消除雜訊。
C. 如何用sql語句來清空一個資料庫
類似這樣:
獲取所有表名 ,根據表名來刪除表
--變數@tablename保存表名
declare @tablename nvarchar(100)
--將用戶表全部保存到臨時表#tablename中
SELECT [name] into #tablename FROM sysobjects
WHERE type = 'U';
--當#tablename有數據時
while(select count(1) from #tablename)>0
begin
--從#tablename中取第一條
select top 1 @tablename=[name] from #tablename;
--進行表刪除操作,表名為變數,所以此處用到動態sql
exec('drop table '+@tablename);
--將此表名記錄從#tablename中刪除
delete from #tablename where [name]=@tablename;
end
--最後刪除臨時表#tablename
D. 數據清理利器 SQL數據清洗!
俗話說的好,工欲善其事,必先利其器。很多從事數據統計分析工作的朋友應該會深有感觸,苦於自己80%的時間在做數據清洗,而僅僅只有20%的時間在優化模型、分析統計結果等,今天我們就來介紹下SQL數據清洗。
因此,選擇高效且易用的數據清洗工具,其重要性就不言而喻,今天先簡單介紹下數據清洗中最重要的工具--SQL。
SQL,Structured Query Language, 結構化查詢語言,是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統,堪稱數據清洗界的神器。
SQL具有數據定義、數據操縱和數據控制:
1、SQL數據定義功能:能夠定義資料庫的三級模式結構,即外模式、全局模式和內模式結構。在SQL中,外模式有叫做視圖(View),全局模式簡稱模式( Schema),內模式由系統根據資料庫模式自動實現,一般無需用戶過問。
2、SQL數據操縱功能:包括對基本表和視圖的數據插入、刪除和修改,特別是具有很強的數據查詢功能。
3、SQL的數據控制功能:主要是對用戶的訪問許可權加以控制,以保證系統的安全性。
SQL數據清洗方面特別突出,大家可以多多嘗試。
E. 如何清除SQL資料庫中的數據
單擊開始---->所有程序---->Microsoft SQL Server 2014,選擇SQL Server 2014 Management Studio選項,打開軟體。
(5)用sql做數據清洗擴展閱讀:
SQL是Structured Query Language(結構化查詢語言)的縮寫。SQL是專為資料庫而建立的操作命令集,是一種功能齊全的資料庫語言。在使用它時,只需要發出「做什麼」的命令,「怎麼做」是不用使用者考慮的。SQL功能強大、簡單易學、使用方便,已經成為了資料庫操作的基礎,並且現在幾乎所有的資料庫均支持SQL。
SQL資料庫的數據體系結構基本上是三級結構,但使用術語與傳統關系模型術語不同。在SQL中,關系模式(模式)稱為「基本表」(base table);存儲模式(內模式)稱為「存儲文件」(stored file);子模式(外模式)稱為「視圖」(view);元組稱為「行」(row);屬性稱為「列」(column)。名稱對稱如^00100009a^:
SQL包括了所有對資料庫的操作,主要是由4個部分組成:
數據定義:這一部分又稱為「SQL DDL」,定義資料庫的邏輯結構,包括定義資料庫、基本表、視圖和索引4部分。
數據操縱:這一部分又稱為「SQL DML」,其中包括數據查詢和數據更新兩大類操作,其中數據更新又包括插入、刪除和更新三種操作。
數據控制:對用戶訪問數據的控制有基本表和視圖的授權、完整性規則的描述,事務控制語句等。
嵌入式SQL語言的使用規定:規定SQL語句在宿主語言的程序中使用的規則。
參考資料:IT專家網-微軟SQL
F. 數據挖掘中常用的數據清洗方法有哪些
數據清洗目的主要有:
①解決數據質量問題;
②讓數據更適合做挖掘;
數據清洗是對數據審查過程中發現的明顯錯誤值、缺失值、異常值、可疑數據,選用一定方法進行「清洗」,為後續的數據分析做准備。
數據清洗的方法有:
①數據數值化
對存在各種不同格式的數據形式的原始數據,對其進行標准化操作。對字元串取值,按照ANSI碼值求和得到字元串的值,如果值太大,取一個適當的質數對其求模。
②標准化 normalization
對整體數據進行歸一化工作,利用min-max標准化方法將數據都映射到一個指定的數值區間。
③數據降維
原始數據存在很多維度,使用主成分分析法對數據的相關性分析來降低數據維度。
④數據完整性
數據完整性包括數據缺失補數據和數據去重;
補全數據的方法有:
通過身份證件號碼推算性別、籍貫、出生日期、年齡(包括但不局限)等信息補全;
通過前後數據補全;
實在補不全的,對數據進行剔除。
數據去重的方法有:
用sql或者excel「去除重復記錄」去重;
按規則去重,編寫一系列的規則,對重復情況復雜的數據進行去重。
G. sql資料庫滿了怎麼清理
-- 清空日誌
--壓縮日誌及資料庫文件大小
/*--特別注意
請按步驟進行,未進行前面的步驟,請不要做後面的步驟
否則可能損壞你的資料庫.
--*/
select*fromsysfiles
--1.清空日誌
DUMPTRANSACTIONusernameWITHNO_LOG
--2.截斷事務日誌:
BACKUPLOGusernameWITHNO_LOG
--3.收縮資料庫文件(如果不壓縮,資料庫的文件不會減小
-- 企業管理器--右鍵你要壓縮的資料庫--所有任務--收縮資料庫--收縮文件
--選擇日誌文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了
--選擇數據文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了
-- 也可以用SQL語句來完成
--收縮資料庫
DBCCSHRINKDATABASE(username)
--收縮指定數據文件,1是文件號,可以通過這個語句查詢到:select*fromsysfiles
DBCCSHRINKFILE(2)
--4.為了最大化的縮小日誌文件(如果是sql7.0,這步只能在查詢分析器中進行)
-- a.分離資料庫:
-- 企業管理器--伺服器--資料庫--右鍵--分離資料庫
-- b.在我的電腦中刪除LOG文件
-- c.附加資料庫:
-- 企業管理器--伺服器--資料庫--右鍵--附加資料庫
-- 此法將生成新的LOG,大小隻有500多K
-- 或用代碼:
-- 下面的示例分離username,然後將username中的一個文件附加到當前伺服器。
execsp_dboptionusername,'singleuser',true
a.分離
EXECsp_detach_db@dbname='username'
b.刪除日誌文件
execmaster..xp_cmdshell'delD:\ProgramFiles\SQL\database\username_LOG.ldf'
c.再附加
EXECsp_attach_single_file_db@dbname='username',
@physname='D:\ProgramFiles\SQL\database\username_Data.MDF'
--5.為了以後能自動收縮,做如下設置:
-- 企業管理器--伺服器--右鍵資料庫--屬性--選項--選擇"自動收縮"
--SQL語句設置方式:
EXECsp_dboption'資料庫名','autoshrink','TRUE'
--6.如果想以後不讓它日誌增長得太大
-- 企業管理器--伺服器--右鍵資料庫--屬性--事務日誌
--將文件增長限制為xM(x是你允許的最大數據文件大小)
--SQL語句的設置方式:
alterdatabase資料庫名modifyfile(name=邏輯文件名,maxsize=20)
H. sql資料庫怎麼清理
思路:1,把資料庫文件路徑找到。2,分離資料庫。3,刪除對應資料庫文件的日誌文件.ldf。4,附加對應資料庫文件.mdf。 詳解:先看「jita」
資料庫文件放在什麼地方在D:\Data路徑下。再把「jita」
資料庫分離 然後把日誌.ldf
刪除,再附加數據.mdf 此時sql
server會重新生成一個很小的.ldf
日誌。
I. SQL刪除資料庫中的所有數據
Sql Server中清空所有數據表中的記錄
清空所有數據表中的記錄:
復制代碼 代碼如下:
exec sp_msforeachtable @Command1 ='truncate table ?'
刪除所有數據表:
復制代碼 代碼如下:
exec sp_msforeachtable 'delete N''?'''
清空SQL Server資料庫中所有表數據的方法(有約束的情況)
其實刪除資料庫中數據的方法並不復雜,為什麼我還要多此一舉呢,一是我這里介紹的是刪除資料庫的所有數據,因為數據之間可能形成相互約束關系,刪除操作可能陷入死循環,二是這里使用了微軟未正式公開的sp_MSForEachTable存儲過程。
也許很多讀者朋友都經歷過這樣的事情:要在開發資料庫基礎上清理一個空庫,但由於對資料庫結構缺乏整體了解,在刪除一個表的記錄時,刪除不了,因為可能有外鍵約束,一個常見的資料庫結構是一個主表,一個子表,這種情況下一般都得先刪除子表記錄,再刪除主表記錄。
說道刪除數據記錄,往往馬上會想到的是delete和truncate語句,但在遇到在兩個或多個表之間存在約束的話,這兩個語句可能都會失效,而且最要命的是這兩個命令都只能一次操作一個表。那麼真正遇到要刪除SQL Server資料庫中所有記錄時,該怎麼辦呢?有兩個選擇:
1.按照先後順序逐個刪除,這個方法在表非常多的情況下顯得很不現實,即便是表數量不多,但約束比較多時,你還是要花費大量的時間和精力去研究其間的約束關系,然後找出先刪哪個表,再刪哪個表,最後又刪哪個表。
2.禁用所有約束,刪除所有數據,最後再啟用約束,這樣就不用花時間和精力去研究什麼約束了,只需要編寫一個簡單的存儲過程就可以自動完成這個任務。
復制代碼 代碼如下:
CREATE PROCEDURE sp_DeleteAllData
AS
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'
EXEC sp_MSForEachTable 'DELETE FROM ?'
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'ALTER TABLE ? ENABLE TRIGGER ALL'
EXEC sp_MSFOREACHTABLE 'SELECT * FROM ?'
GO
從這兩個選擇中不難看出第二個選擇是最簡單有效的了,那麼在使用第二個選擇時,具體該怎麼實施呢?
首先得編寫代碼循環檢查所有的表,這里我推薦一個存儲過程sp_MSForEachTable,因為在微軟的官方文檔中沒有對這個存儲過程有描述,很多開發人員也許都還未曾聽說,所以你在互聯網上搜索得到的解決辦法大多很復雜,也許有的人會認為,既然沒有官方文檔,這個存儲過程可能會不穩定,打心理上會排斥它,但事實並非如此。下面來先看一個完整的腳本:
這個腳本創建了一個命名為sp_DeleteAllData的存儲過程,前面兩行語句分別禁用約束和觸發器,第三條語句才是真正地刪除所有數據,接下里的語句分別還原約束和觸發器,最後一條語句是顯示每個表中的記錄,當然這條語句也可以不要,我只是想確認一下是否清空了所有表而已。
你可以在任何資料庫上運行這個存儲過程,當然不要在生成資料庫上運行,可別怪我沒告訴你!不管怎樣,還是先備份一下資料庫,使用備份資料庫還原,然後再運行該存儲過程,呵呵,即使是一個大型資料庫,也要不多長時間,你的資料庫就成一個空庫了
第三種方法:TRUNCATE TABLE
在sql server資料庫中快速刪除記錄,清空表若要刪除表中的所有行,則 TRUNCATE TABLE 語句是一種快速、無日誌記錄的方法。TRUNCATE TABLE 與不含有 WHERE 子句的 DELETE 語句在功能上相同。但是,TRUNCATE TABLE 速度更快,並且使用更少的系統資源和事務日誌資源。
與 DELETE 語句相比,TRUNCATE TABLE 具有以下優點:
所用的事務日誌空間較少。
DELETE 語句每次刪除一行,並在事務日誌中為所刪除的每行記錄一項。TRUNCATE TABLE 通過釋放用於存儲表數據的數據頁來刪除數據,並且在事務日誌中只記錄頁釋放。
使用的鎖通常較少。
當使用行鎖執行 DELETE 語句時,將鎖定表中各行以便刪除。TRUNCATE TABLE 始終鎖定表和頁,而不是鎖定各行。
如無例外,在表中不會留有任何頁。
執行 DELETE 語句後,表仍會包含空頁。例如,必須至少使用一個排他 (LCK_M_X) 表鎖,才能釋放堆中的空表。如果執行刪除操作時沒有使用表鎖,表(堆)中將包含許多空頁。對於索引,刪除操作會留下一些空頁,盡管這些頁會通過後台清除進程迅速釋放。
與 DELETE 語句相同,使用 TRUNCATE TABLE 清空的表的定義與其索引和其他關聯對象一起保留在資料庫中。
J. 如何實現SQL資料庫表定時清理
1、編寫一個存儲過程,用來清楚需要清理的資料庫表,
2、設置任務定時執行上面些的這個存儲過程
呵呵,希望能有幫助,^_^