欢迎光临
我们一直在努力

Python 数据科学高级应用指南

Python 数据科学高级应用指南

1. 数据科学基础

Python 的数据科学主要通过 NumPy、Pandas 和 scikit-learn 等库实现。

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris

# 加载数据集
iris = load_iris()
data = pd.DataFrame(data=iris.data, columns=iris.feature_names)
data['target'] = iris.target

# 查看数据
t print(data.head())
print(data.describe())

2. NumPy 高级应用

2.1 数组操作

import numpy as np

# 创建数组
arr = np.array([1, 2, 3, 4, 5])
print(f"Original array: {arr}")

# 数组运算
print(f"Array + 1: {arr + 1}")
print(f"Array * 2: {arr * 2}")
print(f"Array sum: {arr.sum()}")
print(f"Array mean: {arr.mean()}")
print(f"Array max: {arr.max()}")
print(f"Array min: {arr.min()}")

# 多维数组
arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(f"2D array:\\n{arr_2d}")
print(f"2D array shape: {arr_2d.shape}")
print(f"2D array sum: {arr_2d.sum()}")
print(f"2D array sum axis 0: {arr_2d.sum(axis=0)}")
print(f"2D array sum axis 1: {arr_2d.sum(axis=1)}")

2.2 矩阵运算

import numpy as np

# 创建矩阵
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

print(f"Matrix A:\\n{A}")
print(f"Matrix B:\\n{B}")

# 矩阵加法
print(f"A + B:\\n{A + B}")

# 矩阵乘法
print(f"A @ B:\\n{A @ B}")

# 矩阵转置
print(f"A transpose:\\n{A.T}")

# 矩阵逆
print(f"A inverse:\\n{np.linalg.inv(A)}")

# 矩阵行列式
print(f"A determinant: {np.linalg.det(A)}")

2.3 广播

import numpy as np

# 广播
arr = np.array([1, 2, 3])
scalar = 2
print(f"Array: {arr}")
print(f"Scalar: {scalar}")
print(f"Array * scalar: {arr * scalar}")

# 广播规则
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([10, 20, 30])
print(f"Array 1:\\n{arr1}")
print(f"Array 2: {arr2}")
print(f"Array 1 + Array 2:\\n{arr1 + arr2}")

3. Pandas 高级应用

3.1 数据清洗

import pandas as pd
import numpy as np

# 创建数据
data = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'age': [25, 30, np.nan, 40, 45],
'salary': [50000, 60000, 70000, np.nan, 90000],
'department': ['IT', 'HR', 'IT', 'Finance', 'HR']
})

print(f"Original data:\\n{data}")

# 处理缺失值
print(f"Missing values:\\n{data.isnull().sum()}")
data['age'].fillna(data['age'].mean(), inplace=True)
data['salary'].fillna(data['salary'].median(), inplace=True)
print(f"Data after filling missing values:\\n{data}")

# 数据转换
data['salary'] = data['salary'].astype(int)
print(f"Data after type conversion:\\n{data}")

# 数据过滤
it_department = data[data['department'] == 'IT']
print(f"IT department employees:\\n{it_department}")

# 数据排序
data_sorted = data.sort_values('salary', ascending=False)
print(f"Data sorted by salary:\\n{data_sorted}")

3.2 数据聚合

import pandas as pd
import numpy as np

# 创建数据
data = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank'],
'age': [25, 30, 35, 40, 45, 50],
'salary': [50000, 60000, 70000, 80000, 90000, 100000],
'department': ['IT', 'HR', 'IT', 'Finance', 'HR', 'IT']
})

# 按部门聚合
department_stats = data.groupby('department').agg({
'age': ['mean', 'min', 'max'],
'salary': ['mean', 'sum', 'count']
})
print(f"Department stats:\\n{department_stats}")

# 透视表
pivot_table = pd.pivot_table(data, values='salary', index='department', aggfunc=np.mean)
print(f"Pivot table:\\n{pivot_table}")

3.3 时间序列分析

import pandas as pd
import numpy as np

# 创建时间序列数据
dates = pd.date_range('2023-01-01', '2023-12-31', freq='D')
data = pd.DataFrame({
'date': dates,
'value': np.random.randn(365) * 100 + 1000
})

print(f"Original data:\\n{data.head()}")

# 设置日期索引
data.set_index('date', inplace=True)
print(f"Data with date index:\\n{data.head()}")

# 时间序列操作
print(f"Monthly mean:\\n{data.resample('M').mean()}")
print(f"Quarterly sum:\\n{data.resample('Q').sum()}")

# 移动平均
data['MA7'] = data['value'].rolling(window=7).mean()
data['MA30'] = data['value'].rolling(window=30).mean()
print(f"Data with moving averages:\\n{data.head(10)}")

4. scikit-learn 高级应用

4.1 分类

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target

# 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 数据标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 模型训练
model = LogisticRegression()
model.fit(X_train_scaled, y_train)

# 模型预测
y_pred = model.predict(X_test_scaled)

# 模型评估
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")
print(f"Confusion Matrix:\\n{confusion_matrix(y_test, y_pred)}")
print(f"Classification Report:\\n{classification_report(y_test, y_pred)}")

4.2 回归

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# 加载数据集
boston = load_boston()
X = boston.data
y = boston.target

# 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 数据标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 模型训练
model = LinearRegression()
model.fit(X_train_scaled, y_train)

# 模型预测
y_pred = model.predict(X_test_scaled)

# 模型评估
print(f"Mean Squared Error: {mean_squared_error(y_test, y_pred)}")
print(f"R2 Score: {r2_score(y_test, y_pred)}")

4.3 聚类

from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 生成数据
X, y = make_blobs(n_samples=300, centers=4, random_state=42)

# 可视化数据
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.title("Original Data")
plt.show()

# 模型训练
kmeans = KMeans(n_clusters=4, random_state=42)
y_pred = kmeans.fit_predict(X)

# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=100, c='red')
plt.title("K-Means Clustering")
plt.show()

5. 实际应用场景

5.1 房价预测

import pandas as pd
import numpy as np
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, r2_score

# 加载数据集
boston = load_boston()
data = pd.DataFrame(data=boston.data, columns=boston.feature_names)
data['PRICE'] = boston.target

# 特征和目标变量
X = data.drop('PRICE', axis=1)
y = data['PRICE']

# 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 数据标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 模型训练和调参
param_grid = {
'n_estimators': [100, 200, 300],
'max_depth': [3, 5, 7],
'min_samples_split': [2, 4, 6]
}

grid_search = GridSearchCV(RandomForestRegressor(), param_grid, cv=5, scoring='r2')
grid_search.fit(X_train_scaled, y_train)

# 最佳模型
best_model = grid_search.best_estimator_
print(f"Best parameters: {grid_search.best_params_}")

# 模型预测
y_pred = best_model.predict(X_test_scaled)

# 模型评估
print(f"Mean Squared Error: {mean_squared_error(y_test, y_pred)}")
print(f"R2 Score: {r2_score(y_test, y_pred)}")

# 特征重要性
feature_importance = pd.DataFrame({
'feature': boston.feature_names,
'importance': best_model.feature_importances_
})
feature_importance.sort_values('importance', ascending=False, inplace=True)
print(f"Feature Importance:\\n{feature_importance}")

5.2 客户分类

import pandas as pd
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

# 生成数据
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)

# 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 数据标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 模型训练
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train_scaled, y_train)

# 模型预测
y_pred = model.predict(X_test_scaled)

# 模型评估
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")
print(f"Confusion Matrix:\\n{confusion_matrix(y_test, y_pred)}")
print(f"Classification Report:\\n{classification_report(y_test, y_pred)}")

5.3 异常检测

import pandas as pd
import numpy as np
from sklearn.datasets import make_blobs
from sklearn.ensemble import IsolationForest
import matplotlib.pyplot as plt

# 生成数据
X, _ = make_blobs(n_samples=1000, centers=1, n_features=2, random_state=42)

# 添加异常值
outliers = np.random.uniform(low=-10, high=10, size=(20, 2))
X = np.vstack([X, outliers])

# 模型训练
model = IsolationForest(contamination=0.02, random_state=42)
y_pred = model.fit_predict(X)

# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.title("Isolation Forest Anomaly Detection")
plt.show()

6. 最佳实践

  • 数据预处理:在建模之前对数据进行清洗、转换和标准化。
  • 特征工程:根据领域知识和数据特点创建有意义的特征。
  • 模型选择:根据问题类型选择合适的模型。
  • 模型调参:使用交叉验证和网格搜索优化模型参数。
  • 模型评估:使用合适的评估指标评估模型性能。
  • 模型部署:将训练好的模型部署到生产环境。
  • 持续监控:监控模型在生产环境中的性能,及时更新模型。
  • 7. 总结

    Python 的数据科学库提供了丰富的功能,从数据处理和分析到机器学习建模。通过掌握这些高级应用,我们可以更有效地解决实际问题。

    在实际应用中,数据科学可以用于房价预测、客户分类、异常检测等多种场景,帮助我们做出更明智的决策。

    希望本文对你理解和应用 Python 数据科学有所帮助!

    赞(0)
    未经允许不得转载:171主机测评 » Python 数据科学高级应用指南
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址