LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

30天学会Python编程:27.Python数据分析与可视化简介

admin
2025年7月17日 21:57 本文热度 13

1. 数据分析简介

1.1 数据分析流程

数据分析是一个系统化过程,遵循以下关键步骤:

  1. 数据采集:从数据库、API、文件或网络获取原始数据
  2. 数据清洗:处理缺失值、异常值、重复数据和不一致格式
  3. 数据分析:应用统计方法和算法提取有价值信息
  4. 数据可视化:使用图表展示数据模式和关系
  5. 报告生成:总结发现并提出行动建议


1.2 Python数据分析工具链

Python生态系统提供了强大的数据分析工具:

工具类别
主要库
核心功能
数值计算
NumPy
高性能多维数组操作
数据处理
Pandas
表格数据操作和分析
可视化
Matplotlib/Seaborn
创建静态、动态和交互式图表
机器学习
scikit-learn
分类、回归、聚类等算法
科学计算
SciPy
高级数学函数和算法

2. NumPy数组操作

2.1 数组创建与操作

NumPy是Python科学计算的基础库,提供高效的N维数组对象。

import numpy as np

# 创建不同类型的数组
arr1 = np.array([123])          # 一维数组
arr2 = np.zeros((33))             # 3x3零矩阵
arr3 = np.random.rand(1004)       # 100x4随机数组
arr4 = np.arange(0100.1)        # 0-10步长0.1的数组

核心要点

  • 使用np.array()从Python列表创建数组
  • np.zeros()和np.ones()创建特定形状的数组
  • np.arange()类似Python的range但支持浮点数
  • np.random模块用于生成随机数据

编程技巧

  • 优先使用NumPy向量化操作而非Python循环
  • 利用广播机制实现不同形状数组间的运算
  • 使用dtype参数控制数组元素的数据类型

注意事项

  • NumPy数组大小固定,修改大小需创建新数组
  • 数组所有元素必须是相同类型
  • 索引从0开始,切片是原数组的视图(非副本)

2.2 数组运算

NumPy的核心优势在于高效的向量化运算:

# 向量化运算示例
a = np.array([123])
b = np.array([456])

# 基本运算
print("加法:", a + b)      # [5 7 9]
print("乘法:", a * b)      # [4 10 18]
print("点积:", np.dot(a, b)) # 32

# 广播机制
matrix = np.ones((33))
print("广播加法:\n", matrix + a)  # 每行加a

# 通用函数
print("平方根:", np.sqrt(a))     # [1. 1.414 1.732]
print("指数:", np.exp(a))       # [2.718 7.389 20.085]

广播规则

  1. 维度较小的数组在左侧补1
  2. 两个数组在任一维度大小相同或其中一个为1
  3. 所有维度大小兼容

3. Pandas数据处理

3.1 DataFrame操作

Pandas的核心数据结构是DataFrame(二维表格)和Series(一维数组)。

import pandas as pd

# 创建DataFrame
data = {
    'Name': ['Alice''Bob''Charlie''David'],
    'Age': [25303528],
    'Salary': [50000700009000062000],
    'Department': ['HR''IT''IT''Marketing']
}
df = pd.DataFrame(data)

# 数据筛选
young_high_earners = df[(df['Age'] < 35) & (df['Salary'] > 60000)]

# 分组聚合
department_stats = df.groupby('Department').agg({
    'Age''mean',
    'Salary': ['min''max''mean']
})

核心功能

  • 数据导入/导出(CSV、Excel、SQL等)
  • 数据清洗与预处理
  • 数据转换与计算
  • 时间序列处理
  • 数据合并与连接

编程技巧

  • 使用df.query()进行复杂条件筛选
  • 利用pd.cut()进行数据分箱
  • 使用df.apply()应用自定义函数
  • 使用pd.pivot_table()创建数据透视表

注意事项

  • 避免链式赋值(如df[df.A>2]['B'] = 5
  • 处理缺失值时明确选择填充或删除策略
  • 注意数据类型转换(如object转category)
  • 使用copy()避免视图与副本混淆

3.2 数据清洗示例

真实数据常包含不完整或不一致信息:

# 处理缺失值
df.loc[1'Age'] = np.nan
df_filled = df.fillna({'Age': df['Age'].median()})

# 重复值处理
df = pd.concat([df, df.iloc[:2]]).drop_duplicates()

# 异常值处理
Q1 = df['Salary'].quantile(0.25)
Q3 = df['Salary'].quantile(0.75)
IQR = Q3 - Q1
df = df[~((df['Salary'] < (Q1 - 1.5 * IQR)) | 
         (df['Salary'] > (Q3 + 1.5 * IQR)))]

# 类型转换
df['Department'] = df['Department'].astype('category')
df['StartDate'] = pd.to_datetime(df['StartDate'])

4. 数据可视化

4.1 Matplotlib基础

Matplotlib是Python最基础的绘图库:

import matplotlib.pyplot as plt

# 创建画布和子图
fig, (ax1, ax2) = plt.subplots(12, figsize=(125))

# 折线图
x = np.linspace(010100)
ax1.plot(x, np.sin(x), label='sin(x)', color='blue', linewidth=2)
ax1.plot(x, np.cos(x), '--', label='cos(x)', color='red')
ax1.set_title('三角函数')
ax1.set_xlabel('X轴')
ax1.set_ylabel('Y轴')
ax1.legend()
ax1.grid(True)

# 柱状图
departments = df['Department'].value_counts()
ax2.bar(departments.index, departments.values, color=['skyblue''lightgreen''salmon'])
ax2.set_title('部门分布')
ax2.set_ylabel('员工数量')

plt.tight_layout()
plt.show()

4.2 Seaborn高级可视化

Seaborn基于Matplotlib,提供更高级的统计图表:

import seaborn as sns

# 设置主题
sns.set_theme(style="whitegrid")

# 创建图表
fig, axes = plt.subplots(22, figsize=(1512))

# 散点图
sns.scatterplot(data=df, x='Age', y='Salary', hue='Department'
                size='Salary', sizes=(50200), ax=axes[00])
axes[00].set_title('年龄与薪资关系')

# 箱线图
sns.boxplot(data=df, x='Department', y='Salary', ax=axes[01])
axes[01].set_title('部门薪资分布')

# 核密度估计图
sns.kdeplot(data=df, x='Salary', hue='Department', fill=True
            common_norm=False, palette='viridis', ax=axes[10])
axes[10].set_title('薪资分布密度')

# 热力图
corr = df.corr(numeric_only=True)
sns.heatmap(corr, annot=True, cmap='coolwarm', fmt=".2f", ax=axes[11])
axes[11].set_title('特征相关性')

plt.tight_layout()
plt.show()

可视化选择指南

数据类型
分析目的
推荐图表
数值-数值
关系趋势
散点图、线图
类别-数值
分布比较
箱线图、柱状图
多变量
复杂关系
热力图、气泡图
时间序列
趋势变化
折线图、面积图

5. SciPy科学计算

5.1 数值积分与优化

SciPy提供高级科学计算功能:

from scipy import integrate, optimize

# 数值积分
result, error = integrate.quad(
    lambda x: np.exp(-x**2),  # 高斯函数
    -np.inf, np.inf           # 从负无穷到正无穷
)
print(f"高斯积分结果: {result:.5f} (±{error:.2e})")

# 函数优化
deff(x):
    return (x - 2)**2 + np.sin(10*x)

# 寻找全局最小值
result = optimize.differential_evolution(f, bounds=[(04)])
print(f"最小值位置: x={result.x[0]:.4f}, f(x)={result.fun:.4f}")

# 线性回归
from scipy import stats
x = np.array([12345])
y = np.array([2.13.86.28.19.9])
slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
print(f"回归方程: y = {slope:.2f}x + {intercept:.2f}")
print(f"相关系数: {r_value:.3f}")

5.2 线性代数应用

SciPy的线性代数模块功能强大:

from scipy import linalg

# 创建矩阵
A = np.array([[12], [34]])
b = np.array([56])

# 解线性方程组
x = linalg.solve(A, b)
print(f"解向量: {x}")

# 特征值和特征向量
eigenvalues, eigenvectors = linalg.eig(A)
print("特征值:", eigenvalues)
print("特征向量:\n", eigenvectors)

# 奇异值分解
U, s, Vh = linalg.svd(A)
print("U矩阵:\n", U)
print("奇异值:", s)
print("Vh矩阵:\n", Vh)

6. 综合应用示例

6.1 销售数据分析

# 生成模拟销售数据
dates = pd.date_range('2023-01-01''2023-06-30')
products = ['A''B''C''D']
sales_data = {
    'date': np.random.choice(dates, 500),
    'product': np.random.choice(products, 500),
    'revenue': np.random.uniform(1001000500),
    'quantity': np.random.randint(120500)
}
sales = pd.DataFrame(sales_data)

# 数据透视表
pivot = pd.pivot_table(
    sales,
    values='revenue',
    index='product',
    columns=pd.Grouper(key='date', freq='M'),
    aggfunc='sum'
)

# 可视化
plt.figure(figsize=(148))

plt.subplot(211)
sns.heatmap(pivot.fillna(0), cmap='YlGnBu', annot=True, fmt='.0f')
plt.title('月度产品销售额热力图')

plt.subplot(212)
monthly = sales.groupby(pd.Grouper(key='date', freq='M'))['revenue'].sum()
monthly.plot(kind='bar', color='skyblue', edgecolor='black')
plt.title('月度销售额趋势')
plt.ylabel('销售额')
plt.xticks(rotation=0)

plt.tight_layout()
plt.show()

6.2 机器学习工作流

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report, confusion_matrix

# 加载数据(示例使用葡萄酒数据集)
from sklearn.datasets import load_wine
wine = load_wine()
data = pd.DataFrame(wine.data, columns=wine.feature_names)
data['target'] = wine.target

# 数据预处理
X = data.drop('target', axis=1)
y = data['target']

# 特征缩放
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(
    X_scaled, y, test_size=0.2, random_state=42
)

# 模型训练
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

# 模型评估
y_pred = model.predict(X_test)
print("分类报告:")
print(classification_report(y_test, y_pred))

# 混淆矩阵
plt.figure(figsize=(86))
sns.heatmap(confusion_matrix(y_test, y_pred), 
            annot=True, fmt='d', cmap='Blues',
            xticklabels=wine.target_names,
            yticklabels=wine.target_names)
plt.title('混淆矩阵')
plt.ylabel('真实标签')
plt.xlabel('预测标签')

# 特征重要性
plt.figure(figsize=(106))
importance = pd.Series(model.feature_importances_, index=wine.feature_names)
importance.sort_values().plot(kind='barh', color='teal')
plt.title('特征重要性')
plt.xlabel('重要性得分')
plt.show()

7. 学习知识图谱


学习路径建议

  1. 掌握NumPy数组基础操作
  2. 熟练使用Pandas进行数据清洗和处理
  3. 学习Matplotlib和Seaborn创建多样化图表
  4. 了解SciPy中的科学计算方法
  5. 实践完整的机器学习项目工作流

8. 学习资源推荐

  • 官方文档:NumPy、Pandas、Matplotlib官方文档
  • 在线课程:Coursera数据科学专项课程、Kaggle学习路径
  • 实践平台:Kaggle竞赛、天池大赛
  • 参考书籍:《利用Python进行数据分析》、《Python数据科学手册》
# 学习进度检查
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

defcheck_skills():
    print("基础技能检查:")
    # 创建数组
    arr = np.random.randint(1100, size=(55))
    print("随机数组:\n", arr)
    
    # 数据处理
    df = pd.DataFrame(arr, columns=list('ABCDE'))
    df['F'] = df['A'] + df['B']
    print("\nDataFrame:\n", df.head())
    
    # 可视化
    plt.figure(figsize=(64))
    df.mean().plot(kind='bar', color='purple')
    plt.title('各列平均值')
    plt.ylabel('值')
    plt.show()
    
    print("\n✅ 已完成基础技能检查!")

check_skills()

掌握Python数据分析与可视化是数据科学领域的核心能力。通过本指南我们可以学习从基础数据处理到高级可视化及机器学习应用的完整流程,建议通过实际项目加深理解。持续练习是掌握这些技能的关键!


阅读原文:原文链接


该文章在 2025/7/18 10:55:03 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved