目录
[一、 环境准备与安装](#一、 环境准备与安装)
[1.1 确认Python环境](#1.1 确认Python环境)
[1.2 使用pip一键安装](#1.2 使用pip一键安装)
[1.3 验证安装是否成功](#1.3 验证安装是否成功)
[二、 NumPy:数组计算的基石](#二、 NumPy:数组计算的基石)
[2.1 什么是NumPy?](#2.1 什么是NumPy?)
[2.2 创建数组的四种方式](#2.2 创建数组的四种方式)
[2.3 数组的常用操作](#2.3 数组的常用操作)
[2.3.1 形状操作](#2.3.1 形状操作)
[2.3.2 数学运算](#2.3.2 数学运算)
[2.3.3 索引与切片](#2.3.3 索引与切片)
[2.4 NumPy小练习:统计考试成绩](#2.4 NumPy小练习:统计考试成绩)
[3.1 Pandas核心数据结构](#3.1 Pandas核心数据结构)
[3.2 创建DataFrame](#3.2 创建DataFrame)
[3.3 数据查看与基本信息](#3.3 数据查看与基本信息)
[3.4 添加/修改列](#3.4 添加/修改列)
[3.5 缺失值处理](#3.5 缺失值处理)
[3.6 分组与聚合(类似SQL的GROUP BY)](#3.6 分组与聚合(类似SQL的GROUP BY))
[3.7 读取与保存文件(CSV/Excel)](#3.7 读取与保存文件(CSV/Excel))
[四、 Matplotlib:数据可视化利器](#四、 Matplotlib:数据可视化利器)
[4.1 快速上手:第一个折线图](#4.1 快速上手:第一个折线图)
[4.2 四种常用图表类型及代码](#4.2 四种常用图表类型及代码)
[4.2.1 柱状图(Bar Chart)](#4.2.1 柱状图(Bar Chart))
[4.2.2 直方图(Histogram)](#4.2.2 直方图(Histogram))
[4.2.3 散点图(Scatter Plot)](#4.2.3 散点图(Scatter Plot))
[4.2.4 饼图(Pie Chart)](#4.2.4 饼图(Pie Chart))
[4.3 子图布局:一图多画](#4.3 子图布局:一图多画)
[4.4 中文字体显示问题(解决方案)](#4.4 中文字体显示问题(解决方案))
[五、 完整的数据分析案例](#五、 完整的数据分析案例)
[5.1 生成模拟数据](#5.1 生成模拟数据)
[5.2 数据清洗与整理](#5.2 数据清洗与整理)
[5.3 数据聚合分析](#5.3 数据聚合分析)
[5.4 可视化展示](#5.4 可视化展示)
[5.5 输出](#5.5 输出)
一、 环境准备与安装
1.1 确认Python环境
在安装三件套之前,请确保你的电脑已经安装了Python(推荐3.8及以上版本)。打开命令行(Windows用cmd或PowerShell,Mac/Linux用终端),输入:
bash
python --version
如果显示版本号,说明Python已安装;如果没有,去Python官网下载安装即可。------https://www.python.org/downloads/
1.2 使用pip一键安装
最常用的方法是使用pip包管理器。由于三个库经常一起使用,我们可以一次性安装:
bash
pip install numpy pandas matplotlib
小提示:如果下载速度慢,可以换成国内镜像源,例如清华源:
bash
pip install numpy pandas matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
1.3 验证安装是否成功
安装完成后,进入Python交互环境(输入python回车),依次导入三个库,不报错即为成功:
python
python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
print("安装成功!")
如果输出了`安装成功!`,恭喜你,环境已经搭建好了!
二、 NumPy:数组计算的基石
2.1 什么是NumPy?
NumPy(Numerical Python)是Python科学计算的核心库。它提供了高性能的多维数组对象ndarray,以及大量的数学函数。简单说:Python原生列表能做100件事,NumPy数组能做10000件事,而且快10倍以上。
2.2 创建数组的四种方式
python
python
import numpy as np
# 方法1:从列表创建
a = np.array([1, 2, 3, 4, 5])
print("一维数组:", a)
# 方法2:全0数组
b = np.zeros((2, 3)) # 2行3列
print("全0数组:\n", b)
# 方法3:全1数组
c = np.ones((2, 2))
print("全1数组:\n", c)
# 方法4:范围数组(类似range)
d = np.arange(0, 10, 2) # 0到10步长2
print("arange:", d)
2.3 数组的常用操作
2.3.1 形状操作
python
python
arr = np.array([[1,2,3], [4,5,6]])
print("原数组形状:", arr.shape) # (2, 3)
# 改变形状(reshape)
arr_2d = arr.reshape(3, 2)
print("reshape后:\n", arr_2d)
# 展平为一维
arr_flat = arr.flatten()
print("展平后:", arr_flat)
2.3.2 数学运算
python
python
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
# 逐元素运算
print("加法:", x + y) # [5 7 9]
print("乘法:", x * y) # [4 10 18]
print("平方:", x ** 2) # [1 4 9]
# 通用函数(ufunc)
print("开方:", np.sqrt(x)) # [1. 1.414 1.732]
print("求和:", np.sum(x)) # 6
print("均值:", np.mean(x)) # 2.0
2.3.3 索引与切片
python
python
arr = np.array([[1,2,3], [4,5,6], [7,8,9]])
# 取第一行
print(arr[0, :]) # [1 2 3]
# 取第二列
print(arr[:, 1]) # [2 5 8]
# 切片:前两行,后两列
print(arr[:2, 1:3]) # [[2 3] [5 6]]
2.4 NumPy小练习:统计考试成绩
python
python
# 假设5位学生的数学成绩
scores = np.array([85, 92, 78, 90, 88])
print(f"最高分: {np.max(scores)}")
print(f"最低分: {np.min(scores)}")
print(f"平均分: {np.mean(scores):.2f}")
print(f"标准差: {np.std(scores):.2f}") # 衡量离散程度
# 输出:
最高分: 92
最低分: 78
平均分: 86.60
标准差: 4.71
NumPy的速度优势来自底层C语言实现,当你需要处理大量数值计算时,一定要优先使用NumPy而不是Python循环。
三、Pandas:数据分析的灵魂
3.1 Pandas核心数据结构
Pandas基于NumPy构建,提供了两个超级好用的数据结构:
- Series:带标签的一维数组(类似带行索引的列)
- DataFrame:带标签的二维表格(像Excel工作表)
3.2 创建DataFrame
python
python
import pandas as pd
# 从字典创建
data = {
'姓名': ['张三', '李四', '王五', '赵六'],
'年龄': [23, 25, 22, 24],
'城市': ['北京', '上海', '广州', '深圳'],
'工资': [8000, 9500, 7200, 8800]
}
df = pd.DataFrame(data)
print(df)
# 输出:
姓名 年龄 城市 工资
0 张三 23 北京 8000
1 李四 25 上海 9500
2 王五 22 广州 7200
3 赵六 24 深圳 8800
3.3 数据查看与基本信息
python
python
# 工资大于8500的人
high_salary = df[df['工资'] > 8500]
print(high_salary)
# 年龄小于24且工资大于7500
filtered = df[(df['年龄'] < 24) & (df['工资'] > 7500)]
print(filtered)
3.4 添加/修改列
python
python
# 添加年终奖列(工资的1.5倍)
df['年终奖'] = df['工资'] * 1.5
# 修改城市:北京 -> 首都
df.loc[df['城市'] == '北京', '城市'] = '首都'
print(df)
3.5 缺失值处理
现实数据经常有缺失值,Pandas提供了强大的处理工具:
python
python
import numpy as np
# 构造带缺失值的数据
df_missing = pd.DataFrame({
'A': [1, 2, np.nan, 4],
'B': [5, np.nan, np.nan, 8],
'C': [9, 10, 11, 12]
})
print("原始数据:\n", df_missing)
# 检测缺失值
print("缺失值统计:\n", df_missing.isnull().sum())
# 方法1:删除缺失行
df_drop = df_missing.dropna()
print("删除缺失行后:\n", df_drop)
# 方法2:填充缺失值(用列均值填充)
df_fill = df_missing.fillna(df_missing.mean())
print("用均值填充后:\n", df_fill)
3.6 分组与聚合(类似SQL的GROUP BY)
python
python
# 创建示例数据
df_sales = pd.DataFrame({
'部门': ['销售', '技术', '销售', '技术', '市场'],
'员工': ['A', 'B', 'C', 'D', 'E'],
'销售额': [100, 200, 150, 300, 250]
})
# 按部门分组,计算总销售额
grouped = df_sales.groupby('部门')['销售额'].sum()
print(grouped)
# 输出:
部门
市场 250
技术 500
销售 250
Name: 销售额, dtype: int64
3.7 读取与保存文件(CSV/Excel)
python
python
# 读取CSV文件
df = pd.read_csv('data.csv')
# 读取Excel文件(需要安装openpyxl或xlrd)
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# 保存为CSV
df.to_csv('output.csv', index=False)
# 保存为Excel
df.to_excel('output.xlsx', index=False)
Pandas还能处理时间序列、合并连接(merge/concat)、数据透视表(pivot_table)等高级功能,本文只介绍最常用的,后续再单独介绍!
四、 Matplotlib:数据可视化利器
4.1 快速上手:第一个折线图
python
python
import matplotlib.pyplot as plt
# 数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
# 创建图形
plt.plot(x, y, marker='o', linestyle='-', color='b', label='y=2x')
# 添加标签和标题
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.title('简单折线图示例')
plt.legend()
# 显示图形
plt.show()
4.2 四种常用图表类型及代码
4.2.1 柱状图(Bar Chart)
适合比较不同类别的数值。
python
python
categories = ['苹果', '香蕉', '橙子', '葡萄']
values = [30, 45, 38, 52]
plt.bar(categories, values, color=['red', 'orange', 'orange', 'purple'])
plt.title('水果销量统计')
plt.xlabel('水果')
plt.ylabel('销量(kg)')
plt.show()
4.2.2 直方图(Histogram)
适合查看数值分布(如年龄分布、分数分布)。
python
python
import numpy as np
# 生成1000个服从正态分布的随机数
data = np.random.randn(1000)
plt.hist(data, bins=30, edgecolor='black', alpha=0.7)
plt.title('正态分布直方图')
plt.xlabel('数值')
plt.ylabel('频数')
plt.show()
4.2.3 散点图(Scatter Plot)
适合观察两个变量之间的关系。
python
python
# 身高(cm) vs 体重(kg)
height = [158, 162, 170, 175, 180, 165, 169, 172]
weight = [52, 55, 63, 70, 78, 58, 62, 68]
plt.scatter(height, weight, s=100, c='red', marker='o')
plt.title('身高体重散点图')
plt.xlabel('身高(cm)')
plt.ylabel('体重(kg)')
plt.grid(True)
plt.show()
4.2.4 饼图(Pie Chart)
适合展示占比。
python
python
sizes = [25, 35, 20, 20]
labels = ['Python', 'Java', 'C++', 'JavaScript']
explode = (0.05, 0, 0, 0) # 突出第一块
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', startangle=90)
plt.title('编程语言使用比例')
plt.axis('equal') # 保证饼图是正圆
plt.show()
4.3 子图布局:一图多画
python
python
# 创建2行2列的子图
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
# 子图1:折线图
axes[0,0].plot([1,2,3], [1,4,9])
axes[0,0].set_title('折线图')
# 子图2:柱状图
axes[0,1].bar(['A','B','C'], [3,7,5])
axes[0,1].set_title('柱状图')
# 子图3:散点图
axes[1,0].scatter([1,2,3], [5,6,7])
axes[1,0].set_title('散点图')
# 子图4:直方图
axes[1,1].hist(np.random.randn(100), bins=20)
axes[1,1].set_title('直方图')
plt.tight_layout() # 自动调整间距
plt.show()
4.4 中文字体显示问题(解决方案)
Matplotlib默认字体不支持中文,会显示成小方块。解决方法:
python
python
# 方法一:全局设置(推荐)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 黑体
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
# 方法二:临时指定(用于单个标签)
plt.xlabel('年龄', fontproperties='SimHei')
如果SimHei不行,可以换成['Microsoft YaHei']`或`['KaiTi'],也可以使用系统可用字体:
python
python
import matplotlib.font_manager as fm
# 查看所有可用字体
fonts = [f.name for f in fm.fontManager.ttflist]
print(fonts)
五、 完整的数据分析案例
场景:某公司销售数据,分析不同地区的销售额情况,并可视化。
5.1 生成模拟数据
python
python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
# 生成100条销售记录
np.random.seed(42) # 固定随机种子,保证结果可重复
regions = ['华北', '华东', '华南', '西南', '西北']
products = ['产品A', '产品B', '产品C']
data = {
'日期': pd.date_range('2024-01-01', periods=100, freq='D'),
'地区': np.random.choice(regions, 100),
'产品': np.random.choice(products, 100),
'销售额': np.random.randint(500, 5000, 100),
'客户数': np.random.randint(5, 100, 100)
}
df = pd.DataFrame(data)
print(df.head())
5.2 数据清洗与整理
python
python
# 检查缺失值
print("缺失值情况:\n", df.isnull().sum())
# 假设销售额有2个异常值(大于4500),我们将其替换为均值
mean_sales = df['销售额'].mean()
df.loc[df['销售额'] > 4500, '销售额'] = mean_sales
# 新增列客单价 = 销售额 / 客户数
df['客单价'] = df['销售额'] / df['客户数']
5.3 数据聚合分析
python
python
# 按地区统计总销售额和平均客单价
region_stats = df.groupby('地区').agg({
'销售额': 'sum',
'客单价': 'mean',
'客户数': 'sum'
}).round(2).reset_index()
print(region_stats)
# 输出(示例):
| 地区 | 销售额 | 客单价 | 客户数 |
|------|--------|--------|--------|
| 华东 | 148230 | 68.23 | 2450 |
| 华南 | 132110 | 72.15 | 1980 |
| 华北 | 112300 | 55.67 | 2100 |
| 西北 | 98500 | 45.89 | 1700 |
| 西南 | 107660 | 60.44 | 1880 |
5.4 可视化展示
python
python
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# 各地区销售额柱状图
axes[0].bar(region_stats['地区'], region_stats['销售额'], color='skyblue')
axes[0].set_title('各地区总销售额对比')
axes[0].set_xlabel('地区')
axes[0].set_ylabel('销售额(元)')
for i, v in enumerate(region_stats['销售额']):
axes[0].text(i, v+2000, str(int(v)), ha='center')
# 各地区平均客单价折线图
axes[1].plot(region_stats['地区'], region_stats['客单价'], marker='o', linewidth=2, markersize=8)
axes[1].set_title('各地区平均客单价')
axes[1].set_xlabel('地区')
axes[1].set_ylabel('客单价(元)')
axes[1].grid(True, linestyle='--', alpha=0.6)
plt.tight_layout()
plt.show()
5.5 输出
python
python
best_region = region_stats.loc[region_stats['销售额'].idxmax(), '地区']
print(f"销售额最高的地区是:{best_region}")
high_customer = region_stats.loc[region_stats['客单价'].idxmax(), '地区']
print(f"客单价最高的地区是:{high_customer}")
`
这样一个从数据生成、清洗、分析到可视化的完整流程就完成了!是不是很有成就感?
如果这篇文章du对你有帮助,欢迎点赞、收藏、关注哦!