日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【数学建模】python建模专用数据清洗代码(本人实践)

發布時間:2023/12/31 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数学建模】python建模专用数据清洗代码(本人实践) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? 剛入坑的小白可以看一下,大佬勿噴,我也是小白,白的不能再白的那種,所以吧,我把我入坑時候大量搜索的代碼,沒日沒夜調試的代碼,能用的以及自己寫的代碼,給各位匯總,會以每篇文章的形式進行更新,所以各位記得點贊,關注,收藏!(要不然就找不到我了!)

問題一:什么是數據預處理?

答:數據預處理就是將大量的數據進行整齊話,對數據進行清洗,把沒用的,或者是異常的(就是壞的)剔除掉,剔除掉呢就是刪掉他就行了,然后空白值什么的進行刪除就行了,就這么簡單(在我建模的歷程中沒遇到過空白值,哈哈哈哈,看個人吧)

問題二:如何進行數據預處理?

答:數據預處理的方法主要包括去除唯一屬性、處理缺失值、屬性編碼、數據標準化正則化、特征選擇、主成分分析等。

一、去除唯一屬性

就是簡單的id屬性,這些屬性并不能刻畫樣本自身的分布規律,所以簡單地刪除就行了。

二、缺失值處理

(一)缺失值的分類

完全隨機缺失:指的是數據的缺失是完全隨機的;
隨機缺失:指的是數據的缺失不是完全隨機的,和完全變量有關;
完全不隨機缺失:指的是數據的缺失與不完全變量自身的取值相關; 缺失值會使得系統丟失了大量的有用信息,系統所表現出來的不確定性更加顯著,系統中蘊含的確定性成分更難把握,包含空值的不完全變量會使得挖掘過程陷入混亂。

(二)缺失值處理的三種方法

直接使用含有缺失值的特征;刪除含有缺失值的特征(該方法在包含缺失值的屬性含有大量缺失值而僅僅包含極少量有效值時是有效的);缺失值補全。
刪除含有缺失值的特征:若變量的缺失率較高(大于80%),覆蓋率較低,且重要性較低,可以直接將變量刪除。
(1)均值插補。數據的屬性分為定距型和非定距型。如果缺失值是定距型的,就以該屬性存在值的平均值來插補缺失的值;如果缺失值是非定距型的,就根據統計學中的眾數原理,用該屬性的眾數(即出現頻率最高的值)來補齊缺失的值。
Ps : 定距型數據--數據的中間級,用數字表示個體在某個有序狀態中所處的位置,不能做四則運算。例如,“受教育程度”,文盲半文盲=1,小學=2,初中=3,高中=4,大學=5,碩士研究生=6,博士及其以上=7。
(2)利用同類均值插補。同均值插補的方法都屬于單值插補,不同的是,它用層次聚類模型預測缺失變量的類型,再以該類型的均值插補。假設X=(X1,X2…Xp)為信息完全的變量,Y為存在缺失值的變量,那么首先對X或其子集行聚類,然后按缺失個案所屬類來插補不同類的均值。如果在以后統計分析中還需以引入的解釋變量和Y做分析,那么這種插補方法將在模型中引入自相關,給分析造成障礙。
(3)極大似然估計(Max Likelihood ,ML)。在缺失類型為隨機缺失的條件下,假設模型對于完整的樣本是正確的,那么通過觀測數據的邊際分布可以對未知參數進行極大似然估計(Little and Rubin)。這種方法也被稱為忽略缺失值的極大似然估計,對于極大似然的參數估計實際中常采用的計算方法是期望值最大化(Expectation Maximization,EM)。該方法比刪除個案和單值插補更有吸引力,它一個重要前提:適用于大樣本。有效樣本的數量足夠以保證ML估計值是漸近無偏的并服從正態分布。但是這種方法可能會陷入局部極值,收斂速度也不是很快,并且計算很復雜。
(4)多重插補(Multiple Imputation,MI)。多值插補的思想來源于貝葉斯估計,認為待插補的值是隨機的,它的值來自于已觀測到的值。具體實踐上通常是估計出待插補的值,然后再加上不同的噪聲,形成多組可選插補值。根據某種選擇依據,選取最合適的插補值。
多重插補方法分為三個步驟:①為每個空值產生一套可能的插補值,這些值反映了無響應模型的不確定性;每個值都可以被用來插補數據集中的缺失值,產生若干個完整數據集合。②每個插補數據集合都用針對完整數據集的統計方法進行統計分析。③對來自各個插補數據集的結果,根據評分函數進行選擇,產生最終的插補值。
假設一組數據,包括三個變量Y1,Y2,Y3,它們的聯合分布為正態分布,將這組數據處理成三組,A組保持原始數據,B組僅缺失Y3,C組缺失Y1和Y2。在多值插補時,對A組將不進行任何處理,對B組產生Y3的一組估計值(作Y3關于Y1,Y2的回歸),對C組作產生Y1和Y2的一組成對估計值(作Y1,Y2關于Y3的回歸)。
當用多值插補時,對A組將不進行處理,對B、C組將完整的樣本隨機抽取形成為m組(m為可選擇的m組插補值),每組個案數只要能夠有效估計參數就可以了。對存在缺失值的屬性的分布作出估計,然后基于這m組觀測值,對于這m組樣本分別產生關于參數的m組估計值,給出相應的預測即,這時采用的估計方法為極大似然法,在計算機中具體的實現算法為期望最大化法(EM)。對B組估計出一組Y3的值,對C將利用 Y1,Y2,Y3它們的聯合分布為正態分布這一前提,估計出一組(Y1,Y2)。
上例中假定了Y1,Y2,Y3的聯合分布為正態分布。這個假設是人為的,但是已經通過驗證(Graham和Schafer于1999),非正態聯合分布的變量,在這個假定下仍然可以估計到很接近真實值的結果。
多重插補和貝葉斯估計的思想是一致的,但是多重插補彌補了貝葉斯估計的幾個不足。
1)貝葉斯估計以極大似然的方法估計,極大似然的方法要求模型的形式必須準確,如果參數形式不正確,將得到錯誤得結論,即先驗分布將影響后驗分布的準確性。而多重插補所依據的是大樣本漸近完整的數據的理論,在數據挖掘中的數據量都很大,先驗分布將極小的影響結果,所以先驗分布的對結果的影響不大。
2)貝葉斯估計僅要求知道未知參數的先驗分布,沒有利用與參數的關系。而多重插補對參數的聯合分布作出了估計,利用了參數間的相互關系。
以上四種插補方法,對于缺失值的類型為隨機缺失的插補有很好的效果。兩種均值插補方法是最容易實現的,也是以前人們經常使用的,但是它對樣本存在極大的干擾,尤其是當插補后的值作為解釋變量進行回歸時,參數的估計值與真實值的偏差很大。相比較而言,極大似然估計和多重插補是兩種比較好的插補方法,與多重插補對比,極大似然缺少不確定成分,所以越來越多的人傾向于使用多值插補方法。

(5)插值法填充

包括隨機插值,多重差補法,熱平臺插補,拉格朗日插值,牛頓插值等

(6)模型填充

使用回歸、貝葉斯、隨機森林、決策樹等模型對缺失數據進行預測。

上述內容參考知乎[酒仙美嘉雪]的《數據分析中缺失值的處理方法》,數據分析中缺失值的處理方法 - 知乎,以及CSDN[marsjhao]的《機器學習算法筆記之6:數據預處理》,https://blog.csdn.net/marsjhao/

上面部分節選的是機器學習(三):數據預處理--數據預處理的基本方法 - 知乎 (zhihu.com)

其實主要就是

  • 缺失值查找
  • 缺失值刪除
  • 缺失值填充

就這三步驟

下面我們就要開始在我們python中進行了!我們先導入我們的庫!?

import pandas as pd import numpy as np

這個呢就是pandas庫的調用來讀取我們的excel表格,?numpy庫呢就是對數組進行處理的,所以一般都是先調用到這兩個庫,as的意思就是類似于一個簡寫讓后面調用庫的時候簡單話

好了我們來導入我們的數據

df =pd.read_excel(r'C:\Users\14927\Desktop\數據.xls',sheet_name = 'Sheet1') #讀取數據 #如果是cvs文件 read_cvs

這個sheet_name也可以不寫他就是用來定位你的工作表單的如果你想定位在第二個表單?那就改預先相對應的名字就可以了,默認不寫就是第一個表單,看下面的圖吧

?是吧很詳細了吧,好啦,我們導入數據之后,我們先對空值進行檢索,就是數據查找空值

df.info()

就這一行代碼就可以了?,你也不用去理解他的原理,你就輸入進去,運行就是了

如何跑出來結果

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 22 entries, 0 to 21
Data columns (total 2 columns):
?# ? Column ?Non-Null Count ?Dtype ?
--- ?------ ?-------------- ?----- ?
?0 ? x ? ? ? 22 non-null ? ? int64 ?
?1 ? y ? ? ? 21 non-null ? ? float64
dtypes: float64(1), int64(1)
memory usage: 480.0 bytes

?我把數據做成了這樣大家看一下就可以了,好啦我們現在對我們的空值進行定位

df.isnull()

?然后輸入的結果

? ? x ? ? ?y
0 ? False ?False
1 ? False ?False
2 ? False ?False
3 ? False ?False
4 ? False ?False
5 ? False ?False
6 ? False ?False
7 ? False ?False
8 ? False ?False
9 ? False ?False
10 ?False ?False
11 ?False ? True
12 ?False ?False
..........

后面我就不寫了太長了,各位看到true就是我們的空值

對于這種值我們一般直接刪除就行了,對數據影響不大

# 使用dropna(0)函數刪除所有含Nan空值的行 df.dropna()

對于缺失的我們也可以用平均值等進行填充

#使用fillna函數填充空值 df.fillna(0)

?這樣填進去的就是0了

?

?然后我們可以指定位置進行填充

#指定列用指定值填充 df.fillna({'y':'2022'})

?這樣就可以了

三、重復值的處理

?一樣重復上面的操作進行導入數據

然后

df.drop_duplicates() #沒有設置默認全列重復行的刪除,有重復列需要進行設置

?這里我就不上數據圖了,各位有不懂的評論回復留言我吧,

然后我們根據定位列去除重復值

df.drop_duplicates(subset='你的列的索引')

四、異常值得檢測與處理?

就是不正常的數據嘍,解決方法

  • 刪除;
  • 用正常值替換;(replace函數)
  • 研究數據異常的原因;

?replace函數

df1=df["列的索引"].replace("目標","替換內容")

這樣基本就完成了哦!

然后總結運行,下面就是我們的總結代碼啦!各位拿到數據可以直接運行就可以了!

交論文時候別交我這個哈,切記,切記,切記!?

import pandas as pd#調用庫df =pd.read_excel(r'C:\Users\14927\Desktop\數據.xls) #讀取數據 #如果是cvs文件 read_cvsprint(df.head(5)) #得到數據的前五行 進行判斷print(df.info()) #得到數據整體的格式print(df.duplicated()) #查詢重復值 此數據沒有重復值print(df.isnull()) #查缺失值 此數據沒有缺失值#此代碼是建模前期數據預處理的代碼 #有一些自己加一下吧,懂得都懂哈,哈哈哈哈哈,想要的留言評論我私發

總結

以上是生活随笔為你收集整理的【数学建模】python建模专用数据清洗代码(本人实践)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。