離散化及其在 Pandas 中的實現方法

目錄

1.什么是離散化?

2.離散化類型

3.示例代碼

3.1連續變量離散化

3.2定性變量離散化

4.運行結果

4.1連續變量離散化

4.2定性變量離散化


1.什么是離散化?

????????離散化是將連續數據或分類數據轉換為離散類別的過程,方便后續的數據分析和機器學習建模。

2.離散化類型

  1. 連續變量離散化:
    • 定義:將連續的數值數據(例如年齡、收入、溫度等)轉換為離散的區間或類別。
    • 方法:使用區間劃分,將連續的數據分割成幾個區間,并賦予每個區間一個標簽或編碼。
    • 示例:將年齡數據分為“年輕”(18-29歲)、“中年”(30-40歲)、“老年”(41-50歲)。
  2. 定性變量離散化(分類編碼):
    • 定義:將定性(分類)變量(例如性別、顏色、品牌等)轉換為數值型或二進制型變量。
    • 方法:將每個類別轉換為一個唯一的數值標簽(數值編碼)或多個二進制變量(獨熱編碼)。
    • 示例:將水果名稱轉換為數值編碼(apple = 0, banana = 1, cherry = 2)或獨熱編碼(apple = [1, 0, 0], banana = [0, 1, 0], cherry = [0, 0, 1])。

3.示例代碼

3.1連續變量離散化

????????等寬分箱(Equal-width binning)是一種將連續變量離散化的方法。它將數據范圍分成寬度相等的區間(也稱為“”)。每個區間包含的數據點數量可能不同,但每個區間的寬度是相同的。

將年齡數據劃分為幾個年齡段:

import pandas as pd# 創建 DataFrame
data = {'age': [22, 25, 47, 35, 46, 50, 18, 21, 30, 19]}
df = pd.DataFrame(data)
print("原始數據:")
print(df)# 等寬分箱
df['age_bins'] = pd.cut(df['age'], bins=3, labels=["Young", "Middle-aged", "Old"])
print("\n離散化結果(等寬分箱):")
print(df)
"""pd.cut:Pandas 的 cut 函數用于將連續變量(數值數據)分割成離散的區間。這個函數可以創建等寬區間或自定義區間。df['age']:選擇 DataFrame 中的 age 列作為需要離散化的數據。bins=3:將 age 列的數據分成三個等寬的區間。labels=["Young", "Middle-aged", "Old"]:為每個區間分配標簽。三個區間將分別被標記為“Young”(年輕),“Middle-aged”(中年)和“Old”(老年)。
"""

3.2定性變量離散化

????????獨熱編碼(One-Hot Encoding)是一種將分類變量(定性變量)轉換為二進制向量的編碼方法。每個分類變量的值將被轉換為一個二進制向量,該向量在某個位置上為1,其余位置為0。這樣可以避免分類變量在數值運算中引入大小關系。

定性變量(qualitative variable)又名分類變量,是統計學中的概念。當觀測的個體只能歸屬于幾種互不相容的類別中的一種時,一般用非數字來表達其類別,這樣的觀測數據稱為定性變量。

將水果名稱轉換為數值編碼和獨熱編碼:

import pandas as pd# 創建 DataFrame
data = {'fruit': ['apple', 'banana', 'cherry', 'date', 'apple', 'banana', 'cherry']}
df = pd.DataFrame(data)
print("原始數據:")
print(df)# 數值編碼
df['fruit_code'] = df['fruit'].astype('category').cat.codes
print("\n數值編碼結果:")
print(df)
"""在這里,fruit_code 列中的數據代表 fruit 列中水果名稱的數值編碼。具體解釋如下:apple 被編碼為 0banana 被編碼為 1cherry 被編碼為 2date 被編碼為 3df['fruit']:選擇 DataFrame 中的 fruit 列。astype('category'):將 fruit 列的數據類型轉換為 Pandas 的分類數據類型(category)。分類數據類型是 Pandas 用于處理有限的離散值的一種類型,通常用于表示字符串分類變量。cat.codes:獲取分類數據的編碼。每個唯一的分類值(例如 'apple', 'banana', 'cherry' 等)都會被映射為一個唯一的整數代碼。這些整數代碼存儲在 cat.codes 屬性中。
"""# 獨熱編碼
df_dummies = pd.get_dummies(df['fruit'], prefix='fruit')
print("\n獨熱編碼結果:")
print(df_dummies)
"""pd.get_dummies:Pandas 的 get_dummies 函數用于執行獨熱編碼(One-Hot Encoding)。獨熱編碼是將分類變量轉換為多個二進制(0 或 1)變量的過程。df['fruit']:選擇 DataFrame 中的 fruit 列。prefix='fruit':為生成的虛擬變量添加前綴。在生成的虛擬變量的列名中會添加這個前綴,以便識別這些列屬于哪個原始變量。
"""# 合并結果
df = pd.concat([df, df_dummies], axis=1)
print("\n合并后的結果:")
print(df)
"""pd.concat:Pandas 的 concat 函數用于連接兩個或多個 DataFrame。[df, df_dummies]:將原始 DataFrame df 和獨熱編碼后的 DataFrame df_dummies 作為列表傳遞給 concat 函數。這里我們將這兩個 DataFrame 水平地連接在一起(即按列連接)。axis=1:指定連接操作沿著列軸(軸=1)進行。這意味著新 DataFrame 的列數會增加,而行數保持不變。
"""

4.運行結果

4.1連續變量離散化

原始數據:age
0   22
1   25
2   47
3   35
4   46
5   50
6   18
7   21
8   30
9   19離散化結果(等寬分箱):age      age_bins
0   22         Young
1   25         Young
2   47           Old
3   35  Middle-aged
4   46           Old
5   50           Old
6   18         Young
7   21         Young
8   30  Middle-aged
9   19         Young

4.2定性變量離散化

原始數據:fruit
0    apple
1   banana
2   cherry
3     date
4    apple
5   banana
6   cherry數值編碼結果:fruit  fruit_code
0    apple           0
1   banana           1
2   cherry           2
3     date           3
4    apple           0
5   banana           1
6   cherry           2獨熱編碼結果:fruit_apple  fruit_banana  fruit_cherry  fruit_date
0            1             0             0           0
1            0             1             0           0
2            0             0             1           0
3            0             0             0           1
4            1             0             0           0
5            0             1             0           0
6            0             0             1           0合并后的結果:fruit  fruit_code  fruit_apple  fruit_banana  fruit_cherry  fruit_date
0    apple           0            1             0             0           0
1   banana           1            0             1             0           0
2   cherry           2            0             0             1           0
3     date           3            0             0             0           1
4    apple           0            1             0             0           0
5   banana           1            0             1             0           0
6   cherry           2            0             0             1           0

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

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

相關文章

static的理論學習

在說到static之前,需要先明確變量類型: 而在聊到變量類型之前我們可以將變量的兩個屬性好好學一學 變量的兩個屬性 作用域(scope): 從內存的角度來看,就是變量存放在棧(stack)中&…

在 JavaScript 中,??(雙問號運算符)和 ?.(可選鏈運算符)區別

在 JavaScript 中,??(雙問號運算符)和 ?.(可選鏈運算符)是兩種不同的運算符,用于處理不同的情況: 雙問號運算符 (??): ?? 運算符是空值合并運算符(Nullish Coalescing Oper…

Android C++系列:Linux進程(一)

1. 進程概念 我們知道,每個進程在內核中都有一個進程控制塊(PCB)來維護進程相關的信 息,Linux內核的進程控制塊是task_struct結構體。現在我們全面了解一下其中都有哪 些信息。 進程id。系統中每個進程有唯一的id,在C語言中用pid_t類型表示,其實就是一個非 負整數。進程的…

TypeError: Cannot read properties of null (reading ‘nextSibling‘)

做項目用的Vue3Vite, 在畫靜態頁面時,點擊菜單跳轉之后總是出現如下報錯,百思不得其解。看了網上很多回答,也沒有解決問題,然后試了很多方法,最后竟然發現是template里邊沒有結構的原因。。。 原來我的index.vue是這樣…

android.bp 編譯 順序

在Android平臺上,.bp 文件是用來定義Android編譯系統中的編譯規則的。Android編譯系統是基于Blueprint的,.bp 文件中定義的規則決定了如何編譯和打包應用程序。 在Android編譯系統中,.bp 文件中的規則通常是按照它們在文件中的順序來執行的。…

ELK+Filebeat+Kafka+Zookeeper

本實驗基于ELFK已經搭好的情況下 ELK日志分析 架構解析 第一層、數據采集層 數據采集層位于最左邊的業務服務器集群上,在每個業務服務器上面安裝了filebeat做日志收集,然后把采集到的原始日志發送到Kafkazookeeper集群上。第二層、消息隊列層 原始日志發…

conda和pip

1.眾所周知,pip的確是python官方(PyPA)推薦的Python軟件包安裝管理工具,在安裝Python軟件包時,第一反應應該是pip。正是由于pip是Python官方推薦的“正統”工具,所以pip只專注于Python軟件包之間的依賴&…

Matlab手搓線性回歸-非正規方程法

原理:wxb,x是輸入,求得的結果與真實值y求均方誤差。 采用鏈式法則求導 參數更新,梯度下降法(批量梯度下降) 隨機生成數據: m100;生成100個數據,并添加隨機噪聲 clear; …

基于flask的貓狗圖像預測案例

📚博客主頁:knighthood2001 ?公眾號:認知up吧 (目前正在帶領大家一起提升認知,感興趣可以來圍觀一下) 🎃知識星球:【認知up吧|成長|副業】介紹 ??如遇文章付費,可先看…

二次元轉向SLG,B站游戲的破圈之困

文 | 螳螂觀察 作者 | 夏至 2023年是B站游戲的滑鐵盧,盡管這年B站的游戲營收還有40多億,但相比去年大幅下降了20%,整整少了10億,這是過去5年來的最大跌幅,也是陳睿接管B站游戲業務一年以來,在鼻子上碰的第…

鴻蒙語言基礎類庫:【@ohos.process (獲取進程相關的信息)】

獲取進程相關的信息 說明: 本模塊首批接口從API version 7開始支持。后續版本的新增接口,采用上角標單獨標記接口的起始版本。開發前請熟悉鴻蒙開發指導文檔:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md點擊或者復制轉到。…

昇思13天

ResNet50遷移學習 ResNet50遷移學習總結 背景介紹 在實際應用場景中,由于訓練數據集不足,很少有人會從頭開始訓練整個網絡。普遍做法是使用在大數據集上預訓練得到的模型,然后將該模型的權重參數用于特定任務中。本章使用遷移學習方法對Im…

放棄華為OD,選擇最合適而不是最難得

時間不知不覺邁入了七月,五月嘗試去重新找一份工作,但釋放出來的崗位太少了,難得有進華為OD的機會,還是比較核心的部門,但思來想起,還是放棄了。 如果想去,是很有機會的,一路過關斬…

imx6ull/linux應用編程學習(13) CMAKE

什么是cmake? cmake 工具通過解析 CMakeLists.txt 自動幫我們生成 Makefile,可以實現跨平臺的編譯。cmake 就是用來產生 Makefile 的工具,解析 CMakeLists.txt 自動生成 Makefile: cmake 的使用方法 cmake 就是一個工具命令&am…

怎么將aac文件弄成mp3格式?把aac改成MP3格式的四種方法

怎么將aac文件弄成mp3格式?手頭有一些aac格式的音頻文件,但由于某些設備或軟件不支持這種格式,你希望將它們轉換成更為通用的MP3格式。而且音頻格式的轉換在現在已經是一個常見且必要的操作。aac是一種相對較新的音頻編碼格式,通常…

大模型增量預訓練新技巧-解決災難性遺忘

大模型增量預訓練新技巧-解決災難性遺忘 機器學習算法與自然語言處理 2024年03月21日 00:02 吉林 以下文章來源于NLP工作站 ,作者劉聰NLP NLP工作站. AIGC前沿知識分享&落地經驗總結 轉載自 | NLP工作站 作者 | 劉聰NLP 目前不少開源模型在通用領域具有不錯…

G1 和 CMS

1、CMS CMS(Concurrent Mark Sweep,并發標記清除,是為了解決早期垃圾收集器在執行垃圾回收時導致應用程序暫停時間過長的問題而設計的。 CMS的工作流程主要包括以下幾個階段: 初始標記(Initial Mark)&…

一體化運維監控平臺:賦能各行業用戶運維升級

在當今數字化轉型的大潮中,企業IT系統的復雜性和規模不斷攀升,對運維團隊提出了前所未有的挑戰。如何高效、精準地監控和管理IT基礎設施,確保業務連續性和穩定性,成為所有企業關注的焦點。美信,自2007年成立以來&#…

el-scrollbar實現自動滾動到底部(AI聊天)

目錄 項目背景 實現步驟 實現代碼 完整示例代碼 項目背景 chatGPT聊天消息展示滾動面板,每次用戶輸入提問內容或者ai進行流式回答時需要不斷的滾動到底部確保展示最新的消息。 實現步驟 采用element ui 的el-scrollbar作為聊天消息展示組件。 通過操作dom來實…

端、邊、云三級算力網絡

目錄 端、邊、云三級算力網絡 NPU Arm架構 OpenStack kubernetes k3s輕量級Kubernetes kubernetes和docker區別 DCI(Data Center Interconnect) SD/WAN TF 端、邊、云三級算力網絡 算力網絡從傳統云網融合的角度出發,結合 邊緣計算、網絡云化以及智能控制的優勢,通…