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}")

八、期末复习策略

  1. 基础概念记忆:重点掌握Python基础语法、NumPy数组操作、Pandas数据结构

  2. 代码实操训练:每天至少完成35个数据分析小项目,熟悉常用函数

  3. 错题整理:建立错题本,记录易错点和解题思路

  4. 时间分配建议
    Python基础与NumPy:20%复习时间 - Pandas数据处理:40%复习时间(最重要)
    数据可视化:20%复习时间
    综合应用:20%复习时间

  5. 考试技巧
    先完成选择题和填空题编程题注意代码规范
    综合题按标准流程作答:数据加载→探索→清洗→分析→可视化留出时间检查数据类型的转换和缺失值处理


参考来源

 

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐