機器學習:數據處理基操

在處理完數據之后,選擇好模型,就可以用訓練集訓練模型,用測試集輸入模型 然后輸出需要預測的結果啦~

一、模塊導入

import numpy as np
import pandas as pd #讀入數據

二、pandas數據

一、dataframe基礎

一、dataframe的創建

  • 通過字典來創建DataFrame

字典的鍵值表示列號,value用列表格式,表示該列的行數據。

外層key做列索引,內層key做行索引

persons = {'name': ['小睿', '小麗', '小明', '小紅'],'age': [19, 18, 18, 17],'sex': ['男', '男', '女', '男'],
}
# 字典的key作為列索引
data_frame1 =pd.DataFrame(persons)

b9ddbe3b48a64ec4bf319e262a4a4863.png

二、從csv中讀入

pd.read_csv()有很多參數

raw_data=pd.read_csv(path,names=names,header=None,delim_whitespace=True)

path指定文件路徑,names指定列名,header指明csv文件中是否有列名,delim_whitespace、sep可以用來將同一列的數據分割成多列,usecols?可以選擇數據中的列放入dataframe

names=['CRIM','ZN','INDUS','CHAS','NOX','RM','AGE','DIS',
'RAD','TAX','PRTATIO','B','LSTAT','MEDV']
path='E:\Python項目程序\人工智能企業實訓\housing.csv'
raw_data=pd.read_csv(path,names=names,header=None,delim_whitespace=True)
print(raw_df.head(3))#head用于讀取多少行print(raw_df.describe())#按一列的來算
print(raw_df.info())#查看數據類型,如果有obj需要編碼,最好用32類型的;也可以看是否存在空值

三、數據探索

我們可以查看數據是否有空值,數據的均值方差等來查看數據的特征,如果數據存在空值,我們可能需要進行缺失值處理。查看數據特征和異常值還可以通過畫圖來觀察到。

使用dataframe的數據基本信息

方法:

  • head()
  • describe()
  • info()52565033a4b94668accf9838bbb59bb1.png1c93cb3a5cb54551b460c8e431ee4e20.png

由于數據集在同一列中,并且沒有列名,因此我們需要使用sep將一列中的多個數據拆開,由于沒有列名,需要使用header=None:

import pandas as pd
names=['CRIM','ZN','INDUS','CHAS','NOX','RM','AGE','DIS','RAD','TAX','PRTATIO','B','LSTAT','MEDV']
df=pd.read_csv('./dataset.csv',names=names,header=None,delim_whitespace=True)#默認是當前路徑下的文件,如果沒有names=names,則列名默認從0開始編號
print(df.head())

注意:接下來的df全是這里用pd.read_csv()得到的。

一、head方法(查看前n行)

  • 輸出dataframe中的前n行,標識出列名和行號
print(df.head())#默認輸出數據前五行

ab6f88fbaa8f4f438f4488d32023fc9b.png

print(df.head(10))#輸出數據前10行

ec6fd369528f4e9580750ff29cb54a01.png

二、describe方法(查看列的數學統計)

  • 輸出dataframe中每一列的數學統計值。
print(df.describe())

b547414f92474565a9a8a5c27f06a036.png

它將打印每一列特征的個數,平均數,方差,最小值,最大值,以及箱型圖中的25%、50%、75%。

三、info方法(查看空值和數據類型)

  • 輸出每一列是否存在空值,以及類型
print(df.info())

5490df666b954918a0bc83834a3913c0.png

None被認為是空值

四、isnull方法(轉換數據為是否為空)

  • 對每一個數據判斷是否為空,不為空值為False(和notnull()方法相反)
  • 搭配sum()方法可以直接找到空值個數
  • df.isnull().sum()?每一列空值個數
  • df.isnull().sum().sum()數據中存在空值的個數
print(df.isnull())

05bc8edbfb454fcfa96a059e6a0920f1.png

print(df.isnull().sum())

4fec587b4f494bd0b9993fa14113999b.png

sum()方法類似于數據庫中的聚集函數,對每一列求總和,輸出出來,返回的是一個Series類型。還可以再使用一次sum(),求出series中元素的總和。

print(df.isnull().sum().sum())

c1e9ff79410e4fba9412e8895dcaaa4c.png

五、查看是否有空值

path='./data.csv'
df=pd.read_csv(path)print(df.isnull().sum())#輸入每一列的空值個數
print(df.isnull().sum().sum())#輸入總共的空值個數

四、數據預處理

我們要將需要預測的數據,和訓練數據合并之后再進行一起處理,因為輸入模型的數據格式要相同。之前在查看空值時,也應該合并。

train_data = pd.read_csv( "./data./train.csv")
test_data = pd.read_csv( "./data./test.csv")
# 合并train, test
data = pd.concat([train_data, test_data], axis=0)#因為要對列進行統一處理
'''axis=0是指在y軸上合并,即按行合并'''

一、缺失值處理

3cc57ac5e87e4511acc17c3e4262a022.png

缺失值處理有很多種方式,這里只寫兩個。將這些方法當做類調用即可,不需要關注實現。調用之后直接使用被填充后的數據。

IterativeImputer多變量缺失值填補

2336c04d719d4a6c87d8cbaf3aa44977.png

#df是df=pd.read_csv(path),從csv中讀取到的文件,Dataframe格式
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputerimp_mean = IterativeImputer(random_state=0)#random_state是隨機種子
imp_mean.fit(df)
filled_data =imp_mean.transform(df)
'''filled_data和df的區別就是 filled_data是數據已經被填充了的,并且filled_data不是Dataframe類型'''save_df=pd.DataFrame(filled_data)#保存填充后的文件
csv_path='./IterativeImputer.csv'
save_df.to_csv(csv_path,index=False)

②KNNImputer?K近鄰缺失值填補

該方法是借助?包含缺失值數據附近的 其他特征和它最像的 n_neighbors個數據的 該特征值的平均值來填補缺失值的。

from sklearn.impute import KNNImputerimputer=KNNImputer(n_neighbors=2)
df=pd.Dataframe(imputer.fit_transform(df))

解釋:

'''使用具有缺失值的樣本的兩個最近鄰居的平均特征值替換編碼為np.nan的缺失值:'''
from sklearn.impute import KNNImputer
data = [[2, 4, 8], [3, np.nan, 7], [5, 8, 3], [4, 3, 8]]
imputer = KNNImputer(n_neighbors=1)
imputer.fit_transform(data)
'''可以看到,因為第二個樣本的第一列特征3和第三列特征7,與第一行樣本的第一列特征2和第三列特征8的歐氏距離最近,所以缺失值按照第一個樣本來填充,填充值為4。那么n_neighbors=2呢?'''
imputer = KNNImputer(n_neighbors=2)
imputer.fit_transform(data)
'''此時根據歐氏距離算出最近相鄰的是第一行樣本與第四行樣本,此時的填充值就是這兩個樣本第二列特征4和3的均值:3.5。'''

二、數據標準化

一、最大最小值縮放

from sklearn.preprocessing import MinMaxScaler
scaler=MinMaxScaler(feature_range=(0,1))
X1=scaler.fit_transform(df)

二、正態化數據

from sklearn.preprocessing import StandardScaler
scaler=StandardScaler().fit(df)
X1=scaler.transform(df)

三、標準化數據(歸一化)

Normalize Data 處理是將每一行數據的距離處理成1的數據,又叫歸一化 適合處理稀疏數據(有很多0), 歸一處理的數據對使用權重輸入的神經網絡和使用距離的K近鄰準確度有顯著提升

from sklearn.preprocessing import Normalizer
scaler=Normalizer().fit(df)
X1=transformer.transform(df)

三、數據編碼、異常值處理

部分處理方式。日期需要特殊處理,對于一些值也可能需要進行數據清洗。

一、one-hot編碼

data=data[['Survived','Pclass','Sex','Age','Fare','Embarked','Title','TicketGroup']]
#上面
data=pd.get_dummies(data)#ont-hot編碼

?二、標簽編碼

from sklearn.preprocessing import LabelEncoder
cat_columns = data.select_dtypes(include='O').columns
for col in cat_columns:le = LabelEncoder()data[col] = le.fit_transform(data[col])
'''對非數值特征進行標簽編碼,即非數值編碼成0,1,2,3,4'''
'''A,B,C變成0,1,2這種'''
'''one-hot編碼需要大量存儲空間'''

data.drop(['id'], axis=1, inplace=True)
train = data[data['label'].notnull()]
test = data[data['label'].isnull()].drop(['label'], axis=1)

五、特征選擇

PCA主成分分析法、遞歸特征消除RFE、多維標度法MDS等等。

一、隨機森林重要性得分(有很多種方式)

from sklearn.ensemble import ExtraTreesClassifier
model=ExtraTreesClassifier()
fit=model.fit(X,y) #X是從train中抽出的特征,y是標簽
print(fit.feature_importances_)

二、遞歸特征消除RFE

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
model=LogisticRegression()
rfe=RFE(model,3)
fit=rfe.fit(X,y)
print('被選定的特征',fit.support_)
print('特征排名:',fit.ranking_)

六、劃分訓練測試集

正確做法:先劃分數據集,再分別進行同樣的特征選擇,防止數據泄露。

????????因為測試集對于模型來說應該是“看不見”的,而對于計算特征得分,或者主成分分析,遞歸下降法等特征選擇算法都需要對整個數據集進行考慮,因此為了使得測試集對于模型而言是完全未知的,就需要我們先將訓練集和測試集分離之后,再分別用同樣的方式進行特征選擇。

? ? ? ? 注意這樣即使是使用降維的特征選擇也是不會有問題的。因為我們在劃分出測試集時,是進行隨機抽取的,換句話說,由于隨機性,測試集也具有數據的代表性。

from sklearn.model_selection import train_test_split'''-----------------選出特征和標簽------------------------'''
#X選擇特征列(一般不包含id號), Y選擇標簽列
X=raw_data.iloc[:,0:13]#dataframe 可以用iloc[行范圍,列范圍]選擇特征列
Y=raw_data.iloc[:,13]#選擇標簽列'''----------劃分訓練集和測試集(如果沒有可以測試模型得分的測試集時)------------'''
x_train,x_test,y_train,y_test=train_test_split(X,Y,test_size=0.1,random_state=11)
#按照test:train=0.1進行隨機劃分訓練集和測試集 ,這里隨機種子=11
#x_train -- y_train  ; x_test -- y_test
#將訓練集進一步劃分成訓練集和驗證集
x_train,x_val,y_train,y_val=train_test_split(x_train,y_train,test_size=0.1,random_state=11)#x_train 和 y_train作為輸入用來進行模型訓練。

七、繪圖常用模塊

import matplotlib.pyplot as plt
import seaborn as sns

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/717261.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717261.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717261.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

github新手使用詳解及環境搭建案例

對于 GitHub 的新手使用以及環境搭建,以下是詳細的步驟和案例: 一、GitHub 新手使用詳解 注冊 GitHub 賬號:首先,你需要在 GitHub 官網上注冊一個賬號。填寫必要的個人信息,如用戶名、郵箱和密碼等。注冊完成后&…

【代碼】Android|判斷asserts下的文件存在與否,以及普通文件存在與否

作者版本:Android 11及以上 主要是發現網上沒有完整的、能跑的代碼,不知道怎么回事,GPT給我重寫的。我只能保證這個代碼尊嘟能跑,不像其他的缺胳膊少腿的。 asserts 貼一下結果: boolean isAssertFileExists(String …

Nginx配置php起WoWSimpleRegistration服務

WoWSimpleRegistration服務的git地址: GitHub - TrinityCore/WoWSimpleRegistration: Simple Registration page for TrinityCore/AzerothCore/AshamaneCore/CMangos 下載WoWSimpleRegistration 首先git下載: git clone https://github.com/TrinityC…

kafka消費者接收不到消息

背景: 對kafka消息進行監聽,生產者發了消息,但是消費端沒有接到消息,監聽代碼 消費端,kafka配置 spring.kafka.bootstrap-serverskafka.cestc.dmp:9591 spring.kafka.properties.sasl.jaas.configorg.apache.kafka.…

29.HarmonyOS App(JAVA)通知

普通通知: 通知渠道,彈出消息后,自動消失 長文本通知 //多行文本通知 //圖片通知 //社交通知 //媒體通知--經測試,圖片無法顯示,文字不顯示 場景介紹 HarmonyOS提供了通知功能,即在一個應用的UI界面之外顯示的消息,主…

C++之結構體以及通訊錄管理系統

1,結構體基本概念 結構體屬于自定義的數據概念,允許用戶存儲不同的數據類型 2,結構體的定義和使用 語法:struct 結構體名{ 結構體成員列表}; 通過結構體創建變量的方式有三種: 1,struct …

【簡說八股】面試官:你知道什么是AOP么?

回答 AOP(Aspect-Oriented Programming),即面向切面編程,是一種編程范式,它的主要思想是將應用程序中的橫切關注點(如日志記錄、性能統計、安全控制等)從業務邏輯中剝離出來,然后通過特殊的方式將這些橫切…

設計模式學習筆記 - 設計原則 - 8.迪米特法則(LOD)

前言 迪米特法則,是一個非常實用的原則。利用這個原則,可以幫我們實現代碼的 “高內聚、松耦合”。 圍繞下面幾個問題,來學習迪米特原則。 什么是 “高內聚、松耦合”?如何利用迪米特法則來實現 高內聚、松耦合?哪些…

程序員求職

程序員的金三銀四求職寶典 隨著春天的腳步漸近,對于許多程序員來說,一年中最繁忙、最重要的面試季節也隨之而來。金三銀四,即三月和四月,被廣大程序員視為求職的黃金時期。在這兩個月里,各大公司紛紛開放招聘&#xf…

技術實踐|百度安全「大模型內容安全」高級攻擊風險評測

1、引子 2023年10月16日,OWASP發布了《OWASP Top 10 for LLM Applications》,這對于新興的大語言模型安全領域,可謂一份綱領性的重要報告。 OWASP是開放式Web應用程序安全項目(Open Web Application Security Project&#xff0…

【Linux網絡命令系列】ping curl telnet三劍客

💝💝💝歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內容和知識,也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

【C++】vector的使用和模擬實現(超級詳解!!!!)

文章目錄 前言1.vector的介紹及使用1.1 vector的介紹1.2 vector的使用1.2.1 vector的定義1.2.2 vector iterator 的使用1.2.3 vector 空間增長問題1.2.3 vector 增刪查改1.2.4 vector 迭代器失效問題。(重點!!!!!!)1.2.5 vector 在OJ中有關的練習題 2.ve…

C++入門和基礎

目錄 文章目錄 前言 一、C關鍵字 二、命名空間 2.1 命名空間的定義 2.2 命名空間的使用 2.3 標準命名空間 三、C輸入&輸出 四、缺省參數 4.1 缺省參數的概念 4.2 缺省參數的分類 五、函數重載 5.1 函數重載的簡介 5.2 函數重載的分類 六、引用 6.1 引用的…

搭建個人IC_EDA服務器(物理機)一:安裝Centos7

1.準備 大于8G的U盤;待裝的電腦,我使用淘汰的在大學時候使用的筆記本;U盤啟動器制作工具:UltralSo;官網下載的在沒有付費的情況下,即使試用期,安裝的時候會有莫名的問題,建議使用這…

【接口測試】常見HTTP面試題

目錄 HTTP GET 和 POST 的區別 GET 和 POST 方法都是安全和冪等的嗎 接口冪等實現方式 說說 post 請求的幾種參數格式是什么樣的? HTTP特性 HTTP(1.1) 的優點有哪些? HTTP(1.1) 的缺點有哪些&#x…

全量知識系統問題及SmartChat給出的答復 之14 解析器+DDD+文法型 之2

Q36. 知識系統中設計的三種文法解析器和設計模式之間的關系 進一步,我想將 知識系統中設計的三種語言(形式語言、人工語言和自然)的文法解析器和DDD中的三種程序類型(領域模型、領域實體和領域服務) 形式語言文法 我…

動態代理總結

Java 代理模式 使用代理對象來代替對真實對象(real object)的訪問,這樣就可以在不修改原目標對象的前提下,提供額外的功能操作,擴展目標對象的功能 靜態代理 靜態代理在編譯時就將接口、實現類、代理類這些都變成了一個個實際的 class 文件…

MQ如何防止消息被重復消費?

被詢問如何防止MQ消息被重復消費時,其實是在考察候選人對消息隊列、分布式系統設計以及容錯機制的理解,通過這些問題,可以全面了解候選人在處理MQ消息重復消費問題時的思考方式、技術能力和實踐經驗,從而評估其是否適合擔任相關崗…

Puzzles

題目鏈接:Submit - Codeforces?????? 解題思路: 題目大概意思就是在一個數組里找n個數里的最大值減最小值的最小值,先排序,然后將第i n - 1項減去第i項與最小值作比較,輸出最小值即可,注意循環結束…

NTP網絡校時服務器(GPS北斗衛星校時系統)應用場景

NTP網絡校時服務器(GPS北斗衛星校時系統)應用場景 NTP網絡校時服務器(GPS北斗衛星校時系統)應用場景 隨著大數據、云計算時代的到來,各行業信息化建設的不斷提升,信息化下的各個系統不再單獨處理各自業務,而是趨于協同工作,因此,各…