探索Python數據科學工具鏈NumPyPandas與Scikit-learn

NumPy:數值計算的基石

NumPy是Python中用于科學計算的核心庫,它提供了一個強大的N維數組對象,以及大量的數學函數庫,能夠高效地進行向量和矩陣運算。對于數據科學家而言,掌握NumPy是進行數據處理和算法實現的基礎。

創建與操作數組

在NumPy中,ndarray(N-dimensional array)是其核心數據結構。通過它可以方便地創建多維數組,并進行各種數學運算。例如,創建一個一維數組并執行基本運算:

import numpy as np# 創建一個一維數組
a = np.array([1, 2, 3, 4])# 數組加法
b = a + 1  # 結果: [2, 3, 4, 5]# 數組乘法
c = a * 2  # 結果: [2, 4, 6, 8]
高級索引與切片

NumPy支持多種索引方式,包括布爾索引和整數索引,這使得數據篩選和修改變得非常靈活。例如,使用布爾索引選取大于2的元素:

# 使用布爾索引選取大于2的元素
filtered_a = a[a > 2]  # 結果: [3, 4]
通用函數(ufunc)

NumPy的通用函數能夠對數組中的每個元素執行快速操作,如平方根、對數等。這些函數通常是矢量化的,意味著它們可以同時作用于整個數組,而無需顯式的循環。例如,計算數組中每個元素的平方根:

# 計算平方根
sqrt_a = np.sqrt(a)  # 結果: [1.         1.41421356 1.73205081 2.        ]

Pandas:數據分析的強大工具

Pandas是建立在NumPy之上的一個庫,專為數據預處理、清洗、分析和可視化設計。它引入了兩種主要的數據結構:Series(一維)和DataFrame(二維),極大地提高了數據處理的效率和便捷性。

數據加載與初步處理

Pandas支持從多種數據源加載數據,包括CSV、Excel、SQL數據庫等。加載數據后,通常需要進行一些初步的清洗工作,如處理缺失值、轉換數據類型等。例如,從CSV文件加載數據并查看前幾行:

import pandas as pd# 從CSV文件加載數據
df = pd.read_csv('data.csv')# 查看前五行
print(df.head())
數據選擇與過濾

Pandas提供了豐富的數據選擇機制,允許用戶基于標簽、位置或條件表達式來選取數據。例如,選擇特定列的數據:

# 選擇'age'和'salary'兩列
subset = df[['age', 'salary']]

或者根據條件過濾行:

# 過濾年齡大于30的數據
filtered_df = df[df['age'] > 30]
數據聚合與分組

Pandas的groupby功能是進行數據聚合和分組操作的強大工具。通過groupby,可以輕松計算各組的統計量,如均值、總和等。例如,按部門計算平均薪資:

# 按'department'分組并計算平均薪資
avg_salary = df.groupby('department')['salary'].mean()

Scikit-learn:機器學習的瑞士軍刀

Scikit-learn是一個簡單高效的Python機器學習庫,它建立在NumPy、Pandas和Matplotlib之上,為數據科學家和機器學習從業者提供了豐富的算法實現和工具。無論是分類、回歸、聚類還是降維,Scikit-learn都提供了簡潔易用的接口。

數據集的準備與劃分

在使用Scikit-learn進行模型訓練之前,通常需要將數據集分為訓練集和測試集,以評估模型的性能。Scikit-learn提供了train_test_split函數來簡化這一過程。例如,將數據集按80%訓練,20%測試的比例劃分:

from sklearn.model_selection import train_test_split# 假設X為特征,y為目標變量
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
模型訓練與預測

Scikit-learn擁有眾多預定義的模型,如線性回歸、邏輯回歸、支持向量機等。以下是一個使用邏輯回歸進行二分類的示例:

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score# 初始化模型
model = LogisticRegression()# 訓練模型
model.fit(X_train, y_train)# 進行預測
y_pred = model.predict(X_test)# 評估模型準確率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
超參數調優與交叉驗證

為了找到模型的最佳參數,Scikit-learn提供了網格搜索(GridSearchCV)和隨機搜索(RandomizedSearchCV)等工具。這些工具通過交叉驗證的方式評估不同參數組合的效果,從而選擇出最優的參數配置。例如,使用網格搜索尋找最佳參數:

from sklearn.model_selection import GridSearchCV# 定義參數網格
param_grid = {'C': [0.1, 1, 10], 'penalty': ['l1', 'l2']}# 初始化GridSearchCV
grid_search = GridSearchCV(LogisticRegression(), param_grid, cv=5)# 執行搜索
grid_search.fit(X_train, y_train)# 輸出最佳參數
print(f"Best parameters: {grid_search.best_params_}")

實戰案例:從數據到模型的完整流程

為了更好地理解上述工具鏈的應用,下面通過一個具體的案例來展示如何從原始數據出發,經過處理、分析,最終構建并評估一個機器學習模型。

數據加載與清洗

假設有一個關于員工信息的CSV文件,包含員工的年齡、部門、薪資等信息。需要加載數據并進行初步的清洗工作。

import pandas as pd# 加載數據
df = pd.read_csv('employees.csv')# 查看缺失值情況
print(df.isnull().sum())# 填充缺失值(例如,用中位數填充薪資的缺失值)
df['salary'].fillna(df['salary'].median(), inplace=True)
特征工程與數據準備

接下來,需要對數據進行特征工程,包括轉換分類變量為數值型、標準化特征等,以便模型能夠處理。

from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.compose import ColumnTransformer# 定義預處理步驟:對'department'進行獨熱編碼,對'age'和'salary'進行標準化
preprocessor = ColumnTransformer(transformers=[('dept', OneHotEncoder(), ['department']),('num', StandardScaler(), ['age', 'salary'])])# 應用預處理步驟
X = preprocessor.fit_transform(df)
y = df['left']  # 假設目標變量是員工是否離職(二分類問題)
模型訓練與評估

現在,可以使用Scikit-learn中的模型進行訓練和評估。這里,選擇邏輯回歸作為示例模型。

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.metrics import confusion_matrix, classification_report# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 初始化模型
model = LogisticRegression()# 訓練模型
model.fit(X_train, y_train)# 在測試集上進行預測
y_pred = model.predict(X_test)# 評估模型性能
print("Confusion Matrix:")
print(confusion_matrix(y_test, y_pred))
print("Classification Report:")
print(classification_report(y_test, y_pred))
超參數調優與模型優化

為了進一步提高模型的性能,可以使用網格搜索來調整模型的超參數。

from sklearn.model_selection import GridSearchCV# 定義參數網格
param_grid = {'C': [0.01, 0.1, 1, 10, 100], 'penalty': ['l1', 'l2'], 'solver': ['liblinear']}# 初始化GridSearchCV
grid_search = GridSearchCV(LogisticRegression(), param_grid, cv=5, scoring='accuracy')# 執行搜索
grid_search.fit(X_train, y_train)# 輸出最佳參數和最佳得分
print(f"Best parameters: {grid_search.best_params_}")
print(f"Best cross-validation score: {grid_search.best_score_}")

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

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

相關文章

八股學習(三)---MySQL

一、MySQL中的回表是什么?我的回答:MySQL回表指的是在查詢使用非聚簇索引也就是二級索引時,葉子節點只存儲了索引列的值和主鍵Id,若要查詢其他字段,就要根據主鍵去聚簇索引查詢完整的數據。這個過程就是回表。比如用na…

NeighborGeo:基于鄰居的IP地理定位(一)

NeighborGeo:基于neighbors的IP地理定位 X. Wang, D. Zhao, X. Liu, Z. Zhang, T. Zhao, NeighborGeo: IP geolocation based on neighbors, Comput. Netw. 257 (2025) 110896, Abstract IP地址定位在網絡安全、電子商務、社交媒體等領域至關重要。當前主流的圖神經網絡方法…

MySQL 8.0:窗口函數

一、基礎知識 定義 窗口函數(Window Function)對查詢結果集的子集(“窗口”)進行計算,保留原始行而非聚合為單行,適合復雜分析(如排名、累積和)。 基本語法: 函數名() OV…

AI 深度學習面試題學習

1.神經網絡 1.1各個激活函數的優缺點? 1.2為什么ReLU常用于神經網絡的激活函數? 1.在前向傳播和反向傳播過程中,ReLU相比于Sigmoid等激活函數計算量小; 2.避免梯度消失問題。對于深層網絡,Sigmoid函數反向傳播時,很容易就會出現梯度消失問題(在Sigmoid接近飽和區時,變換…

遇到該問題:kex_exchange_identification: read: Connection reset`的解決辦法

kex_exchange_identification: read: Connection reset 是一個非常常見的 SSH 連接錯誤。它表明在 SSH 客戶端和服務器建立安全連接的初始階段(密鑰交換,Key Exchange),連接就被對方(服務器)強制關閉了。 …

(論文蒸餾)語言模型中的多模態思維鏈推理

(論文總結)語言模型中的多模態思維鏈推理 論文名稱研究背景動機主要貢獻研究細節兩階段框架實驗結果促進收斂性擺脫人工標注錯誤分析與未來前景 論文名稱 Multimodal Chain-of-Thought Reasoning in Language Models http://arxiv.org/abs/2302.00923 …

React Native 接入 eCharts

React Native 圖表接入指南 概述 本文檔詳細介紹了在React Native項目中接入ECharts圖表的完整步驟,包括依賴安裝、組件配置、數據獲取、圖表渲染等各個環節。 目錄 1. 環境準備2. 依賴安裝3. 圖表組件創建4. 數據獲取Hook5. 圖表配置6. 組件集成7. 國際化支持8…

基于C#的OPCServer應用開發,引用WtOPCSvr.dll

操作流程: 1.引入WtOPCSvr.dll文件 2.注冊服務:使用UpdateRegistry方法注冊,注意關閉應用時使用UnregisterServer取消注冊。 3.初始化服務:使用InitWTOPCsvr初始化 4.使用CreateTag方法,創建標簽 5.讀寫參數使用下面三…

Java類加載器getResource行為簡單分析

今天嘗試集成一個第三方SDK,在IDE里運行正常,放到服務器上卻遇到了NPE,反編譯一看,原來在這一行:String path Test.class.getClassLoader().getResource("").getPath(); // Test.class.getClassLoader().ge…

【CodeTop】每日練習 2025.7.4

Leetcode 1143. 最長公共子序列 動態規劃解決,比較當前位置目標和實際字符串的字母,再根據不同情況計算接下來的情形。 class Solution {public int longestCommonSubsequence(String text1, String text2) {char[] t1 text1.toCharArray();char[] t2…

ES6從入門到精通:Promise與異步

Promise 基礎概念Promise 是 JavaScript 中處理異步操作的一種對象,代表一個異步操作的最終完成或失敗及其結果值。它有三種狀態:Pending(進行中)、Fulfilled(已成功)、Rejected(已失敗&#xf…

數據結構:二維數組(2D Arrays)

目錄 什么是二維數組? 二維數組的聲明方式 方式 1:靜態二維數組 方式 2:數組指針數組(數組中存放的是指針) 方式 3:雙指針 二級堆分配 💡 補充建議 如何用“第一性原理”去推導出 C 中…

HAProxy 和 Nginx的區別

HAProxy 和 Nginx 都是優秀的負載均衡工具,但它們在設計目標、適用場景和功能特性上有顯著區別。以下是兩者的詳細對比:1. 核心定位特性HAProxyNginx主要角色專業的負載均衡器/代理Web 服務器 反向代理/負載均衡設計初衷高性能流量分發高并發 HTTP 服務…

基于Java+SpringBoot的健身房管理系統

源碼編號:S586源碼名稱:基于SpringBoot的健身房管理系統用戶類型:多角色,用戶、教練、管理員數據庫表數量:13 張表主要技術:Java、Vue、ElementUl 、SpringBoot、Maven運行環境:Windows/Mac、JD…

【MySQL安裝-yum/手動安裝,卸載,問題排查處理完整文檔(linux)】

一.使用Yum倉庫自動安裝 步驟1:添加MySQL Yum倉庫 sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm步驟2:安裝MySQL服務器 sudo yum install mysql-server -y步驟3:啟動并設置開機自啟 sudo systemctl start mysqld sudo systemct…

自定義線程池-實現任務0丟失的處理策略

設計一個線程池,要求如下:隊列最大容量為10(內存隊列)。當隊列滿了之后,拒絕策略將新的任務寫入數據庫。從隊列中取任務時,若該隊列為空,能夠從數據庫中加載之前被拒絕的任務模擬數據庫 (TaskDa…

【NLP入門系列四】評論文本分類入門案例

🍨 本文為🔗365天深度學習訓練營 中的學習記錄博客🍖 原作者:K同學啊 博主簡介:努力學習的22級本科生一枚 🌟?;探索AI算法,C,go語言的世界;在迷茫中尋找光芒…

Ubuntu安裝ClickHouse

注:本文章的ubuntu的版本為:ubuntu-20.04.6-live-server-amd64。 Ubuntu(在線版) 更新軟件源 sudo apt-get update 安裝apt-transport-https 允許apt工具通過https協議下載軟件包。 sudo apt-get install apt-transport-htt…

C++26 下一代C++標準

C++26 將是繼 C++23 之后的下一個 C++ 標準。這個新標準對 C++ 進行了重大改進,很可能像 C++98、C++11 或 C++20 那樣具有劃時代的意義。 一:C++標準回顧 C++ 已經有 40 多年的歷史了。過去這些年里發生了什么?這里給出一個簡化版的答案,直到即將到來的 C++26。 1. C++9…

【MySQL】十六,MySQL窗口函數

在 MySQL 8.0 及以后版本中,窗口函數(Window Functions)為數據分析和處理提供了強大的工具。窗口函數允許在查詢結果集上執行計算,而不必使用子查詢或連接,這使得某些類型的計算更加高效和簡潔。 語法結構 function_…