掌握数据清洗、探索性分析、可视化与建模,用 Python 解锁数据背后的价值
import pandas as pd import numpy as np # 读取 CSV 数据 df = pd.read_csv('students.csv') # 查看基本信息 print(df.shape) # (行数, 列数) print(df.dtypes) # 每列数据类型 print(df.head(5)) # 前5行 # 统计摘要 print(df.describe()) # 检查缺失值 print(df.isnull().sum()) # 各科均值 avg = df[['数学', '英语', '语文']].mean() print(avg)
| 方法 | 作用 |
|---|---|
read_csv() | 读取 CSV 文件 |
df.shape | 返回 (行, 列) 元组 |
df.describe() | 数值列统计摘要 |
df.isnull() | 检测缺失值 |
df.dtypes | 每列数据类型 |
df.head(n) | 查看前 n 行 |
# 填充缺失值 df['成绩'].fillna(df['成绩'].mean(), inplace=True) # 删除含缺失值的行 df.dropna(subset=['姓名', '班级'], inplace=True) # 删除重复行 df.drop_duplicates(inplace=True) # 数据类型转换 df['成绩'] = df['成绩'].astype(float) df['日期'] = pd.to_datetime(df['日期']) # 过滤异常值(Z-score法) z = (df['成绩'] - df['成绩'].mean()) / df['成绩'].std() df = df[z.abs() <= 3] # 重命名列 df.rename(columns={'score': '成绩'}, inplace=True)
import matplotlib.pyplot as plt import seaborn as sns # 设置中文字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 1. 折线图(趋势) plt.plot(df['月份'], df['销售额'], marker='o', color='#3b82f6') plt.title('月度销售趋势') # 2. 热力图(相关性) corr = df.corr() sns.heatmap(corr, annot=True, cmap='coolwarm', center=0) # 3. 箱线图(分布) sns.boxplot(x='班级', y='成绩', data=df, palette='Set2') # 4. 散点回归图 sns.regplot(x='学习时长', y='成绩', data=df, scatter_kws={'alpha':0.5}) plt.tight_layout() plt.savefig('analysis.png', dpi=150)
| 数据目的 | 推荐图表 | 函数 |
|---|---|---|
| 时间趋势 | 折线图 | plt.plot() |
| 类别比较 | 柱状图 | plt.bar() |
| 分布形状 | 直方图 | plt.hist() |
| 相关关系 | 散点图 | plt.scatter() |
| 变量相关 | 热力图 | sns.heatmap() |
| 离群值 | 箱线图 | sns.boxplot() |
| 占比构成 | 饼图 | plt.pie() |
plt.bar()plt.plot()sns.regplot()sns.heatmap(df.corr())from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LinearRegression from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score, r2_score # ① 准备特征和标签 X = df[['学习时长', '出勤率', '作业完成率']] y = df['是否优秀'] # ② 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42) # ③ 特征标准化 scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) # ④ 训练模型 model = RandomForestClassifier(n_estimators=100) model.fit(X_train, y_train) # ⑤ 预测与评估 y_pred = model.predict(X_test) print(accuracy_score(y_test, y_pred)) # 0.92
变量与数据类型、列表/字典/元组、函数与类、文件读写、异常处理。推荐资源:《Python编程:从入门到实践》
数组操作、DataFrame 增删改查、数据合并(merge/concat)、分组聚合(groupby)、时间序列处理。
Matplotlib 基础绘图、Seaborn 统计图表、图表美化技巧、交互式图表(Plotly/Pyecharts)。
描述统计、概率分布、假设检验、相关分析、方差分析。工具:SciPy、Statsmodels。
Scikit-learn 工作流、线性模型/树模型/集成模型、特征工程、模型选择与调参。推荐:Kaggle 入门竞赛练习。
完成 2-3 个端到端项目(销售分析、用户画像、预测模型),整理到 GitHub,参加 Kaggle 竞赛。
| 操作类型 | 代码示例 | 说明 |
|---|---|---|
| 读取数据 | pd.read_csv('f.csv', encoding='utf-8') | 读取 CSV,指定编码 |
| 选择列 | df[['A','B']] | 选取多列 |
| 条件过滤 | df[df['成绩'] > 80] | 按条件筛选行 |
| 新增列 | df['总分'] = df['数学'] + df['语文'] | 通过计算新增列 |
| 分组聚合 | df.groupby('班级')['成绩'].mean() | 按班级求均值 |
| 数据合并 | pd.merge(df1, df2, on='学号') | 按学号内连接 |
| 透视表 | df.pivot_table(values='成绩', index='班级', columns='科目', aggfunc='mean') | 多维聚合 |
| 排序 | df.sort_values('成绩', ascending=False) | 按成绩降序 |
| 应用函数 | df['等级'] = df['成绩'].apply(lambda x: '优' if x>=90 else '良') | 自定义映射 |
| 导出数据 | df.to_excel('result.xlsx', index=False) | 导出 Excel |