Python数据挖掘详细学习指南
第一阶段:基础巩固 (1-2周)
- Python数据科学栈深入学习
NumPy (2-3天)
具体学习内容:
python
# 核心概念
import numpy as np
# 1. 数组创建与操作
arr = np.array([[1,2,3],[4,5,6]])
print(arr.shape) # 形状
print(arr.dtype) # 数据类型
# 2. 数组索引和切片
arr_slice = arr[1:, :2] # 高级切片
# 3. 广播机制
a = np.array([1,2,3])
b = np.array([[1],[2],[3]])
result = a + b # 自动广播
# 4. 通用函数
np.sin(arr) # 数学函数
np.sum(arr, axis=0) # 聚合函数
# 5. 线性代数
np.dot(arr, arr.T) # 矩阵乘法
np.linalg.inv(arr) # 矩阵求逆
学习方法:
· 完成NumPy官方教程的所有练习
· 实现矩阵运算替代Python循环
· 练习数组的reshape、transpose等操作
Pandas (3-4天)
具体学习内容:
python
import pandas as pd
# 1. 数据读取与探索
df = pd.read_csv('data.csv', encoding='utf-8')
print(df.head()) # 前5行
print(df.info()) # 数据信息
print(df.describe()) # 统计描述
# 2. 数据选择与过滤
df[df['age'] > 30] # 布尔索引
df.loc[df['name'] == 'John', ['age', 'salary']] # 标签索引
df.iloc[0:5, 1:3] # 位置索引
# 3. 数据处理
df['new_column'] = df['col1'] + df['col2'] # 新增列
df.fillna({'age': df['age'].mean()}) # 缺失值处理
df.drop_duplicates(subset=['name']) # 去重
# 4. 分组聚合
df.groupby('category')['sales'].agg(['mean', 'sum', 'count'])
df.pivot_table(values='sales', index='region', columns='month')
# 5. 时间序列
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
df.resample('M').mean() # 按月重采样
学习方法:
· 使用真实数据集练习(如Kaggle的Titanic数据集)
· 实现完整的数据清洗流程
· 练习复杂的数据透视表操作
数据可视化 (2天)
python
import matplotlib.pyplot as plt
import seaborn as sns
# 1. 基础绘图
plt.figure(figsize=(10,6))
plt.plot(x, y, 'ro-', label='趋势线')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.title('标题')
plt.legend()
plt.show()
# 2. 多子图
fig, axes = plt.subplots(2, 2, figsize=(12,8))
axes[0,0].hist(df['age'], bins=20)
axes[0,1].scatter(df['x'], df['y'])
axes[1,0].boxplot(df['values'])
# 3. Seaborn高级可视化
sns.heatmap(df.corr(), annot=True) # 相关性热力图
sns.pairplot(df, hue='target') # 特征关系矩阵图
sns.violinplot(x='category', y='value', data=df) # 小提琴图
- 数据处理实战项目
项目:电商用户行为分析
· 数据清洗:处理缺失值、异常值
· 特征工程:创建用户行为特征
· 数据分析:用户购买模式分析
· 可视化:用户行为趋势图表
第二阶段:核心机器学习 (3-4周)
- Scikit-learn系统学习
数据预处理 (1周)
python
from sklearn.preprocessing import StandardScaler, LabelEncoder, OneHotEncoder
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.impute import SimpleImputer
# 1. 数据分割
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y)
# 2. 数值型特征标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 3. 分类特征编码
label_encoder = LabelEncoder()
y_encoded = label_encoder.fit_transform(y)
# 4. 缺失值处理
imputer = SimpleImputer(strategy='median')
X_imputed = imputer.fit_transform(X)
# 5. 管道操作
from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer
preprocessor = ColumnTransformer(
transformers=[
('num', StandardScaler(), numerical_features),
('cat', OneHotEncoder(), categorical_features)
])
监督学习算法 (2周)
分类算法:
python
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
from sklearn.neighbors import KNeighborsClassifier
# 1. 逻辑回归
lr = LogisticRegression()
lr.fit(X_train, y_train)
y_pred = lr.predict(X_test)
# 2. 决策树
dt = DecisionTreeClassifier(max_depth=5, min_samples_split=10)
dt.fit(X_train, y_train)
# 3. 随机森林
rf = RandomForestClassifier(n_estimators=100, max_depth=10)
rf.fit(X_train, y_train)
# 4. 支持向量机
svm = SVC(kernel='rbf', C=1.0, gamma='scale')
svm.fit(X_train_scaled, y_train)
# 5. K近邻
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train_scaled, y_train)
回归算法:
python
from sklearn.linear_model import LinearRegression, Ridge, Lasso
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, r2_score
# 线性回归
lr = LinearRegression()
lr.fit(X_train, y_train)
y_pred = lr.predict(X_test)
# 正则化回归
ridge = Ridge(alpha=1.0)
lasso = Lasso(alpha=0.1)
# 集成回归
rf_reg = RandomForestRegressor(n_estimators=100)
无监督学习 (3-4天)
python
from sklearn.cluster import KMeans, DBSCAN
from sklearn.decomposition import PCA
from sklearn.metrics import silhouette_score
# 1. K-means聚类
kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(X_scaled)
# 2. PCA降维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
# 3. 聚类效果评估
silhouette_avg = silhouette_score(X_scaled, clusters)
模型评估与优化 (3-4天)
python
from sklearn.metrics import classification_report, confusion_matrix, roc_auc_score
from sklearn.model_selection import GridSearchCV, RandomizedSearchCV
# 1. 分类评估
print(classification_report(y_test, y_pred))
cm = confusion_matrix(y_test, y_pred)
# 2. 交叉验证
cv_scores = cross_val_score(model, X, y, cv=5, scoring='accuracy')
# 3. 网格搜索
param_grid = {
'n_estimators': [50, 100, 200],
'max_depth': [3, 5, 7, None],
'min_samples_split': [2, 5, 10]
}
grid_search = GridSearchCV(
RandomForestClassifier(),
param_grid,
cv=5,
scoring='accuracy',
n_jobs=-1
)
grid_search.fit(X_train, y_train)
best_model = grid_search.best_estimator_
- 机器学习项目实战
项目1:信用卡欺诈检测
· 数据:不平衡数据集处理
· 特征:交易行为特征工程
· 模型:异常检测算法比较
· 评估:精确率、召回率、F1分数
项目2:房价预测
· 数据:结构化数据预处理
· 特征:特征选择与组合
· 模型:回归模型比较
· 评估:RMSE、R²评分
第三阶段:专业数据挖掘工具 (2-3周)
- 高级特征工程
python
from sklearn.feature_selection import SelectKBest, RFE, SelectFromModel
from sklearn.decomposition import TruncatedSVD
from sklearn.manifold import TSNE
# 1. 特征选择
selector = SelectKBest(k=10) # 选择最好的10个特征
X_new = selector.fit_transform(X, y)
# 2. 递归特征消除
rfe = RFE(estimator=LogisticRegression(), n_features_to_select=5)
X_rfe = rfe.fit_transform(X, y)
# 3. 基于模型的特征选择
sfm = SelectFromModel(RandomForestClassifier(), threshold='median')
X_sfm = sfm.fit_transform(X, y)
# 4. 高级降维
tsne = TSNE(n_components=2, random_state=42)
X_tsne = tsne.fit_transform(X)
- 时间序列分析
python
import statsmodels.api as sm
from statsmodels.tsa.seasonal import seasonal_decompose
from statsmodels.tsa.stattools import adfuller
# 1. 时间序列分解
decomposition = seasonal_decompose(ts_data, model='additive', period=12)
decomposition.plot()
# 2. 平稳性检验
result = adfuller(ts_data)
print(f'ADF统计量: {result[0]}')
print(f'p值: {result[1]}')
# 3. ARIMA模型
model = sm.tsa.ARIMA(ts_data, order=(1,1,1))
results = model.fit()
forecast = results.forecast(steps=10)
- 文本挖掘专项
python
import nltk
from nltk.tokenize import word_tokenize, sent_tokenize
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer, WordNetLemmatizer
from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer
# 1. 文本预处理
def preprocess_text(text):
# 分词
tokens = word_tokenize(text.lower())
# 去除停用词和标点
stop_words = set(stopwords.words('english'))
tokens = [token for token in tokens if token.isalpha() and token not in stop_words]
# 词形还原
lemmatizer = WordNetLemmatizer()
tokens = [lemmatizer.lemmatize(token) for token in tokens]
return ' '.join(tokens)
# 2. 文本向量化
tfidf = TfidfVectorizer(max_features=1000, ngram_range=(1,2))
X_tfidf = tfidf.fit_transform(texts)
# 3. 主题模型
from sklearn.decomposition import LatentDirichletAllocation
lda = LatentDirichletAllocation(n_components=5, random_state=42)
lda.fit(X_tfidf)
第四阶段:实战项目深度实践
项目模板:完整的数据挖掘流程
python
class DataMiningProject:
def __init__(self):
self.data = None
self.models = {}
def load_data(self, filepath):
"""数据加载"""
self.data = pd.read_csv(filepath)
return self.data
def explore_data(self):
"""数据探索"""
print("数据形状:", self.data.shape)
print("\n数据信息:")
print(self.data.info())
print("\n缺失值统计:")
print(self.data.isnull().sum())
print("\n描述性统计:")
print(self.data.describe())
def preprocess_data(self):
"""数据预处理"""
# 处理缺失值
self.data.fillna(method='ffill', inplace=True)
# 特征工程
self.create_features()
# 数据标准化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
self.X_scaled = scaler.fit_transform(self.X)
def train_models(self):
"""模型训练"""
models = {
'LogisticRegression': LogisticRegression(),
'RandomForest': RandomForestClassifier(),
'SVM': SVC(probability=True)
}
for name, model in models.items():
model.fit(self.X_train, self.y_train)
self.models[name] = model
def evaluate_models(self):
"""模型评估"""
results = {}
for name, model in self.models.items():
y_pred = model.predict(self.X_test)
accuracy = accuracy_score(self.y_test, y_pred)
results[name] = accuracy
return results
推荐实战项目:
- 用户流失预测 - 分类问题
- 商品推荐系统 - 协同过滤
- 新闻分类系统 - 文本分类
- 股票价格预测 - 时间序列
- 客户细分分析 - 聚类分析
第五阶段:进阶技术深度掌握
- 深度学习入门
python
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Conv1D, LSTM
from tensorflow.keras.optimizers import Adam
# 1. 构建神经网络
model = Sequential([
Dense(64, activation='relu', input_shape=(10,)),
Dropout(0.2),
Dense(32, activation='relu'),
Dropout(0.2),
Dense(1, activation='sigmoid')
])
# 2. 编译模型
model.compile(
optimizer=Adam(learning_rate=0.001),
loss='binary_crossentropy',
metrics=['accuracy']
)
# 3. 训练模型
history = model.fit(
X_train, y_train,
epochs=50,
batch_size=32,
validation_split=0.2,
verbose=1
)
- 大数据处理
python
from pyspark.sql import SparkSession
from pyspark.ml.feature import VectorAssembler, StringIndexer
from pyspark.ml.classification import RandomForestClassifier
# 创建Spark会话
spark = SparkSession.builder \
.appName("DataMining") \
.config("spark.sql.adaptive.enabled", "true") \
.getOrCreate()
# 读取大数据
df = spark.read.csv("large_dataset.csv", header=True, inferSchema=True)
# 数据预处理
indexer = StringIndexer(inputCol="category", outputCol="categoryIndex")
assembler = VectorAssembler(
inputCols=["feature1", "feature2", "feature3"],
outputCol="features"
)
# 机器学习管道
from pyspark.ml import Pipeline
pipeline = Pipeline(stages=[indexer, assembler, RandomForestClassifier()])
model = pipeline.fit(df)
学习计划执行建议
每日学习安排:
· 上午 (2小时): 理论学习,阅读文档和教程
· 下午 (3小时): 编码实践,完成练习项目
· 晚上 (1小时): 复习总结,整理学习笔记
每周检查点:
· 周一: 制定本周学习目标
· 周三: 中期检查,调整学习计划
· 周五: 项目实践,应用本周所学
· 周日: 复习总结,准备下周内容
学习资源深度推荐:
- 官方文档: scikit-learn.org, pandas.pydata.org
- 实战书籍: 《Python数据科学手册》、《机器学习实战》
- 视频课程: Coursera的"Applied Data Science with Python"
- 竞赛平台: Kaggle入门竞赛、天池新人赛
- 代码仓库: GitHub上的数据挖掘项目模板
按照这个详细指南,每天坚持学习4-6小时,你将在3个月内建立起扎实的数据挖掘能力,6个月内达到中级数据挖掘工程师水平!