Python数据分析核心知识点全解析
·
Python数据分析期末复习核心知识点
## 一、Python基础语法与数据类型
1.1 变量与基本数据类型
变量命名规则:字母、数字、下划线组成,不能以数字开头,区分大小写,不能使用Python关键字。
# 变量赋值与基本数据类型
x = 10 # 整数 int
y = 3.14 # 浮点数 float
name = "数据分析" # 字符串 str
is_valid = True # 布尔值 bool (True=1, False=0)
empty_value = None # 空值 NoneType
# 类型转换与检查
print(type(True)) # <class 'bool'>
print(int(3.14)) # 3
print(float(10)) # 10.0
print(str(100)) # '100'
1.2 运算符与流程控制
# 算术运算符
print(10 // 3) # 3 (整除)
print(10 % 3) # 1 (取余)
print(2 ** 3) # 8 (幂运算)
# 比较与逻辑运算符
a, b = 5, 10
print(a > 3 and b < 15) # True
print(a == 5 or b == 5) # True
print(not False) # True
# 条件语句
score = 85
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B' # 执行此分支
else:
grade = 'C'
# 循环语句
# for循环
for i in range(5): # 0,1,2,3,4
print(i)
# while循环
count = 0
while count < 3:
print(count)
count += 1
1.3 数据结构核心操作| 数据结构 | 创建方式 | 关键特性 | 常用方法 |
|---------|---------|---------|---------|
| 列表 List | [] 或 list() | 可变、有序、可重复 | append(), extend(), insert(), remove(), pop(), sort() |
| 元组 Tuple | () 或 tuple() | 不可变、有序 | count(), index() |
| 字典 Dict | {} 或 dict() | 键值对、键唯一 | keys(), values(), items(), get() |
| 集合 Set | {} 或 set() | 无序、元素唯一 | add(), remove(), union(), intersection() |
# 列表推导式(重点)
squares = [x**2 for x in range(10) if x % 2 == 0]
# 结果:[0, 4, 16, 36, 64]
# 字典操作示例
student = {'name': '张三', 'age': 20, 'score': 85}
print(student.get('age', 0)) # 20
1.4 函数与模块
# 函数定义与参数
def analyze_data(data, method='mean', *args, **kwargs):
"""数据分析函数示例"""
if method == 'mean':
return sum(data) / len(data)
elif method == 'sum':
return sum(data)
else:
return None
# 模块导入
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
二、NumPy数值计算库
2.1 数组创建与操作
import numpy as np
# 数组创建
arr1 = np.array([1, 2, 3, 4, 5]) # 一维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]]) # 二维数组
zeros_arr = np.zeros((3, 4)) # 3×4零矩阵
ones_arr = np.ones((2, 3)) # 2×3单位矩阵
range_arr = np.arange(0, 10, 2) # [0, 2, 4, 6, 8]
random_arr = np.random.randn(3, 3) # 标准正态分布随机数
# 数组索引与切片
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr[0, 1]) # 2 (第0行第1列)
print(arr[:, 1]) # [2, 5, 8] (所有行的第1列)
print(arr[1:3, 0:2]) # [[4,5], [7, 8]] (切片操作)
2.2 数组运算与广播
# 基本运算
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b) # [5, 7, 9] (逐元素相加)
print(a * 2) # [2, 4, 6] (标量广播)
print(np.dot(a, b)) # 32 (点积)
# 矩阵运算
matrix_a = np.array([[1, 2], [3, 4]])
matrix_b = np.array([[5, 6], [7, 8]])
print(matrix_a @ matrix_b) # 矩阵乘法 [[19, 22], [43, 50]]
# 统计函数
data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(np.mean(data)) # 5.5 (均值)
print(np.std(data)) # 2.872 (标准差)
print(np.median(data)) # 5.5 (中位数)
print(np.percentile(data, 25)) # 3.25 (25%分位数)
三、Pandas数据处理库
3.1 Series与DataFrame创建
import pandas as pd
# Series创建
s = pd.Series([1, 3, 5, np.nan, 6, 8],
index=['a', 'b', 'c', 'd', 'e', 'f'])
print(s['c']) # 5.0
# DataFrame创建
data = {
'姓名': ['张三', '李四', '王五'],
'年龄': [20, 21, 19],
'成绩': [85, 92, 78],
'班级': ['A班', 'B班', 'A班']
}
df = pd.DataFrame(data)
print(df.head())
3.2 数据索引与选择
| 方法 | 语法示例 | 返回类型 | 用途 |
|---|---|---|---|
| 列选择 | df['列名'] | Series | 选择单列 |
| 多列选择 | df[['列1', '列2']] | DataFrame | 选择多列 |
| 行选择 | df.loc[行标签] | Series/DataFrame | 按标签选择 |
| 位置选择 | df.iloc[行位置] | Series/DataFrame | 按位置选择 |
| 布尔索引 | df[df['成绩'] > 80] | DataFrame | 条件筛选 |
# 数据选择示例
df = pd.DataFrame({
'A': range(1, 6),
'B': range(10, 15),
'C': ['a', 'b', 'c', 'd', 'e']
})
# 选择单列
col_a = df['A'] # Series类型
# 选择多列
cols_ab = df[['A', 'B']] # DataFrame类型
# 按标签选择
row_2 = df.loc[2] # 选择索引为2的行
# 按位置选择
first_two = df.iloc[0:2] # 选择前两行
# 条件筛选
high_scores = df[df['B'] > 12] # B列大于12的行
3.3 数据清洗与预处理
# 缺失值处理
df = pd.DataFrame({
'A': [1, 2, np.nan, 4],
'B': [5, np.nan, np.nan, 8],
'C': [10, 11, 12, 13]
})
print(df.isnull().sum()) # 统计每列缺失值数量
df_filled = df.fillna({'A': df['A'].mean(), 'B': 0}) # 填充缺失值
df_dropped = df.dropna() # 删除包含缺失值的行# 重复值处理
df_dup = pd.DataFrame({
'A': [1, 2, 2, 3, 3],
'B': ['a', 'b', 'b', 'c', 'c']
})
df_unique = df_dup.drop_duplicates() # 删除重复行
# 数据类型转换
df['A'] = df['A'].astype('float32') # 转换数据类型
3.4 数据分组与聚合
# 分组操作
df = pd.DataFrame({
'部门': ['销售', '技术', '销售', '技术', '人事'],
'员工': ['张三', '李四', '王五', '赵六', '钱七'],
'工资': [5000, 8000, 5500, 8500, 4000],
'奖金': [1000, 2000, 1200, 2200, 800]
})
# 基本分组
grouped = df.groupby('部门')
# 聚合计算
agg_result = grouped.agg({
'工资': ['mean', 'sum', 'count'],
'奖金': ['mean', 'max']
})
print(agg_result)
# 透视表
pivot_table = pd.pivot_table(df, values='工资',
index='部门',
aggfunc=['mean', 'sum', 'count'])
3.5 数据合并与连接
# 数据合并示例
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']},
index=[0, 1, 2])
df2 = pd.DataFrame({'C': ['C0', 'C1', 'C2'],
'D': ['D0', 'D1', 'D2']},
index=[1, 2, 3])
# 合并方式对比
result_inner = pd.merge(df1, df2, left_index=True, right_index=True, how='inner')
result_outer = pd.merge(df1, df2, left_index=True, right_index=True, how='outer')
result_left = pd.merge(df1, df2, left_index=True, right_index=True, how='left')
四、数据可视化
4.1 Matplotlib基础绘图
import matplotlib.pyplot as plt
import numpy as np
# 创建画布和子图
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
# 1. 折线图
x = np.linspace(0, 10, 100)
y = np.sin(x)
axes[0, 0].plot(x, y, 'b-', linewidth=2, label='sin(x)')
axes[0, 0].set_title('折线图示例')
axes[0, 0].set_xlabel('X轴')
axes[0, 0].set_ylabel('Y轴')
axes[0, 0].legend()
axes[0, 0].grid(True)
# 2. 散点图
x_scatter = np.random.randn(50)
y_scatter = np.random.randn(50)
colors = np.random.rand(50)
sizes = 100 * np.random.rand(50)
axes[0, 1].scatter(x_scatter, y_scatter, c=colors, s=sizes, alpha=0.5)
axes[0, 1].set_title('散点图示例')
# 3. 柱状图
categories = ['A', 'B', 'C', 'D']
values = [25, 40, 30, 35]
axes[1, 0].bar(categories, values, color=['red', 'blue', 'green', 'orange'])
axes[1, 0].set_title('柱状图示例')
axes[1, 0].set_ylabel('数值')
# 4. 直方图
data_hist = np.random.randn(1000)
axes[1, 1].hist(data_hist, bins=30, edgecolor='black', alpha=0.7)
axes[1, 1].set_title('直方图示例')
axes[1, 1].set_xlabel('数值')
axes[1, 1].set_ylabel('频数')
plt.tight_layout()
plt.show()
4.2 Seaborn高级可视化
import seaborn as sns
import pandas as pd
# 设置样式
sns.set_style("whitegrid")
# 创建示例数据
tips = sns.load_dataset("tips")
# 1. 分布图
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
# 核密度估计图
sns.kdeplot(data=tips, x='total_bill', ax=axes[0, 0])
axes[0, 0].set_title('总账单分布')
# 箱线图
sns.boxplot(data=tips, x='day', y='total_bill', ax=axes[0, 1])
axes[0, 1].set_title('各天账单分布')
# 小提琴图
sns.violinplot(data=tips, x='day', y='total_bill', hue='sex',
split=True, ax=axes[1, 0])
axes[1, 0].set_title('性别与账单关系')
# 热力图
correlation = tips[['total_bill', 'tip', 'size']].corr()
sns.heatmap(correlation, annot=True, cmap='coolwarm', ax=axes[1, 1])
axes[1, 1].set_title('特征相关性热力图')
plt.tight_layout()
plt.show()
4.3 Pandas内置绘图
# Pandas直接绘图
df = pd.DataFrame({
'月份': ['1月', '2月', '3月', '4月', '5月'],
'销售额': [100, 150, 200, 180, 220],
'利润': [20, 30, 50, 40, 60]
})
ax = df.plot(x='月份', y=['销售额', '利润'], kind='line',
marker='o',
figsize=(10, 6),
title='月度销售趋势')
ax.set_ylabel('金额(万元)')
ax.grid(True)
plt.show()
五、数据文件操作
5.1 常见文件格式读写
import pandas as pd
# CSV文件df_csv = pd.read_csv('data.csv', encoding='utf-8') # 读取
df_csv.to_csv('output.csv', index=False) # 写入
# Excel文件
df_excel = pd.read_excel('data.xlsx', sheet_name='Sheet1') # 读取
df_excel.to_excel('output.xlsx', sheet_name='结果') # 写入
# JSON文件
df_json = pd.read_json('data.json') # 读取
df_json.to_json('output.json', orient='records') # 写入
#文本文件
with open('data.txt', 'r', encoding='utf-8') as f:
content = f.read()
# 使用pickle保存Python对象
import pickle
with open('data.pkl', 'wb') as f:
pickle.dump(df, f) # 保存
with open('data.pkl', 'rb') as f:
df_loaded = pickle.load(f) # 加载
六、数据分析流程与实战
6.1 完整数据分析流程
"""
数据分析标准流程:
1. 数据加载 → 2. 数据探索 → 3. 数据清洗 →
4. 特征工程 → 5. 数据分析 → 6. 结果可视化
"""
# 示例:学生成绩分析
def analyze_student_scores(file_path):
# 1. 数据加载 df = pd.read_csv(file_path)
# 2. 数据探索
print("数据形状:", df.shape)
print("
数据概览:")
print(df.info())
print("
描述性统计:")
print(df.describe())
print("
前5行数据:")
print(df.head())
# 3. 数据清洗
# 处理缺失值 df.fillna({'数学': df['数学'].mean(), '英语': df['英语'].median()}, inplace=True)
# 处理异常值(使用IQR方法)
def remove_outliers(series):
Q1 = series.quantile(0.25)
Q3 = series.quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q11.5 * IQR upper_bound = Q3 + 1.5 * IQR
return series[(series >= lower_bound) & (series <= upper_bound)]
# 4. 特征工程
df['总分'] = df['数学'] + df['英语'] + df['语文']
df['平均分'] = df['总分'] / 3
df['是否及格'] = df['平均分'].apply(lambda x: '是' if x >= 60 else '否')
# 5. 数据分析 analysis_results = {
'平均分统计': df['平均分'].describe(),
'及格率': (df['是否及格'] == '是').mean() * 100,
'各科相关性': df[['数学', '英语', '语文']].corr(),
'班级排名': df.groupby('班级')['平均分'].mean().sort_values(ascending=False)
}
# 6. 结果可视化
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
# 成绩分布直方图 axes[0, 0].hist(df['平均分'], bins=20, edgecolor='black', alpha=0.7)
axes[0, 0].set_title('平均分分布')
axes[0, 0].set_xlabel('平均分')
axes[0, 0].set_ylabel('人数')
# 各科成绩箱线图
df[['数学', '英语', '语文']].boxplot(ax=axes[0, 1])
axes[0, 1].set_title('各科成绩分布')
# 班级平均分柱状图 class_avg = df.groupby('班级')['平均分'].mean()
axes[1, 0].bar(class_avg.index, class_avg.values)
axes[1, 0].set_title('各班平均分对比')
axes[1, 0].set_ylabel('平均分')
# 散点图:数学vs英语
axes[1, 1].scatter(df['数学'], df['英语'], alpha=0.6)
axes[1, 1].set_title('数学与英语成绩关系')
axes[1, 0].set_xlabel('数学成绩')
axes[1, 0].set_ylabel('英语成绩')
plt.tight_layout()
plt.show()
return df, analysis_results
6.2 期末复习重点总结表
| 模块 | 核心知识点 | 必考题型 | 复习建议 |
|---|---|---|---|
| Python基础 | 数据类型、控制结构、函数、列表推导式 | 选择题、编程题 | 掌握基本语法,熟练使用列表推导式 |
| NumPy | 数组创建、索引切片、广播机制、统计函数 | 计算题、应用题 | 理解数组运算,掌握常用统计方法 |
| Pandas核心 | DataFrame操作、数据清洗、分组聚合、合并连接 | 数据分析题、综合题 | 重点掌握数据清洗和分组聚合操作 |
| 数据可视化 | Matplotlib基础图表、Seaborn高级图表、Pandas绘图 | 图表题、分析题 | 掌握各种图表适用场景,能正确解读图表 |
| 文件操作 | CSV/Excel/JSON读写、pickle使用 | 操作题 | 熟悉各种文件格式的读写方法 |
| 实战应用 | 完整数据分析流程、异常值处理、特征工程 | 综合应用题、案例分析 | 按照标准流程分析数据,注意数据清洗步骤 |
6.3 常见考点与解题技巧
# 考点1:数据筛选与排序
df = pd.DataFrame({
'姓名': ['张三', '李四', '王五', '赵六'],
'数学': [85, 92, 78, 88],
'英语': [90, 85, 92, 78],
'班级': ['A班', 'B班', 'A班', 'B班']
})
# 多条件筛选
result = df[(df['数学'] > 80) & (df['英语'] > 85)]
# 排序
sorted_df = df.sort_values(by=['班级', '数学'], ascending=[True, False])
# 考点2:分组统计
group_stats = df.groupby('班级').agg({
'数学': ['mean', 'max', 'min', 'count'],
'英语': 'mean'
}).round(2)
# 考点3:数据透视表
pivot_result = pd.pivot_table(df,
values=['数学', '英语'],
index='班级',
aggfunc={'数学': 'mean', '英语': ['mean', 'count']})
# 考点4:时间序列处理(如果涉及)
dates = pd.date_range('2024-01-01', periods=6, freq='D')
time_series = pd.Series([1, 3, 5, 7, 9, 11], index=dates)
monthly_avg = time_series.resample('M').mean()
七、Scikit-learn机器学习基础
7.1 机器学习流程示例
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
# 1. 数据准备
X = df[['数学', '英语']] # 特征
y = df['总分'] # 目标变量
# 2. 数据分割
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42)
# 3. 特征标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 4. 模型训练
model = LinearRegression()
model.fit(X_train_scaled, y_train)
# 5. 预测与评估
y_pred = model.predict(X_test_scaled)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"均方误差(MSE): {mse:.2f}")
print(f"R²分数: {r2:.2f}")
八、期末复习策略
-
基础概念记忆:重点掌握Python基础语法、NumPy数组操作、Pandas数据结构
-
代码实操训练:每天至少完成35个数据分析小项目,熟悉常用函数
-
错题整理:建立错题本,记录易错点和解题思路
-
时间分配建议:
Python基础与NumPy:20%复习时间 - Pandas数据处理:40%复习时间(最重要)
数据可视化:20%复习时间
综合应用:20%复习时间 -
考试技巧:
先完成选择题和填空题编程题注意代码规范
综合题按标准流程作答:数据加载→探索→清洗→分析→可视化留出时间检查数据类型的转换和缺失值处理
参考来源
- Python数据分析期末复习归纳 - CSDN文库
- Python期末复习:30个核心知识点完全详解_python考点-CSDN博客
- 课程 - 国家高等教育智慧教育平台
- Python期末复习大纲_python程序设计大纲-CSDN博客
- 课程大纲-教务系统
更多推荐


所有评论(0)