news 2026/5/1 17:04:14

Python数据分析实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python数据分析实战

Python数据分析实战

后端转 Rust 的萌新,ID "第一程序员"——名字大,人很菜(暂时)。正在跟所有权和生命周期死磕,日常记录 Rust 学习路上的踩坑经验和"啊哈时刻",代码片段保证能跑。保持学习,保持输出。欢迎大佬们轻喷,也欢迎同好一起进步。

前言

最近在学习数据科学的过程中,我开始接触 Python 数据分析。作为一个从后端转 Rust 的萌新,我认为数据分析是 Python 的一个重要应用领域,它可以帮助我们从数据中提取有价值的信息。

Python 拥有丰富的数据分析库,如 Pandas、NumPy、Matplotlib 等,这些库使得数据分析变得更加简单和高效。今天,我就来分享一下 Python 数据分析的实战经验,希望能帮到和我一样的萌新们。

环境搭建

首先,我们需要搭建 Python 数据分析的环境。推荐使用 Anaconda 来管理 Python 环境,因为它包含了许多常用的数据分析库。

1. 安装 Anaconda

可以从 Anaconda 官网 下载并安装 Anaconda。

2. 创建虚拟环境

使用 Anaconda 创建一个专门用于数据分析的虚拟环境:

conda create -n>pip install pandas numpy matplotlib seaborn scikit-learn jupyter

数据获取

在进行数据分析之前,我们需要获取数据。数据可以来自多个渠道,如 CSV 文件、数据库、API 等。

1. 从 CSV 文件读取数据

import pandas as pd # 读取 CSV 文件 df = pd.read_csv('data.csv') # 查看数据的前几行 print(df.head()) # 查看数据的基本信息 print(df.info()) # 查看数据的统计信息 print(df.describe())

2. 从数据库读取数据

import pandas as pd import sqlite3 # 连接到数据库 conn = sqlite3.connect('database.db') # 读取数据 df = pd.read_sql('SELECT * FROM table', conn) # 关闭连接 conn.close()

3. 从 API 获取数据

import pandas as pd import requests # 发送请求 response = requests.get('https://api.example.com/data') # 解析数据 data = response.json() # 转换为 DataFrame df = pd.DataFrame(data)

数据清洗

数据清洗是数据分析的重要步骤,它可以确保数据的质量和一致性。

1. 处理缺失值

import pandas as pd # 读取数据 df = pd.read_csv('data.csv') # 检查缺失值 print(df.isnull().sum()) # 删除包含缺失值的行 df = df.dropna() # 填充缺失值 df = df.fillna(0) # 用 0 填充 # 用均值填充缺失值 df['column'] = df['column'].fillna(df['column'].mean())

2. 处理重复值

import pandas as pd # 读取数据 df = pd.read_csv('data.csv') # 检查重复值 print(df.duplicated().sum()) # 删除重复值 df = df.drop_duplicates()

3. 处理异常值

import pandas as pd import numpy as np # 读取数据 df = pd.read_csv('data.csv') # 使用 IQR 方法检测异常值 Q1 = df['column'].quantile(0.25) Q3 = df['column'].quantile(0.75) IQR = Q3 - Q1 # 定义异常值的边界 lower_bound = Q1 - 1.5 * IQR upper_bound = Q3 + 1.5 * IQR # 过滤异常值 df = df[(df['column'] >= lower_bound) & (df['column'] <= upper_bound)]

数据探索

数据探索是数据分析的重要步骤,它可以帮助我们了解数据的分布和特征。

1. 基本统计分析

import pandas as pd # 读取数据 df = pd.read_csv('data.csv') # 查看数据的基本统计信息 print(df.describe()) # 查看分类变量的分布 print(df['category'].value_counts()) # 查看相关系数 print(df.corr())

2. 数据可视化

import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # 设置中文显示 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 读取数据 df = pd.read_csv('data.csv') # 直方图 plt.figure(figsize=(10, 6)) sns.histplot(df['value'], bins=30) plt.title('值的分布') plt.xlabel('值') plt.ylabel('频率') plt.show() # 散点图 plt.figure(figsize=(10, 6)) sns.scatterplot(x='x', y='y', data=df) plt.title('x 和 y 的关系') plt.xlabel('x') plt.ylabel('y') plt.show() # 箱线图 plt.figure(figsize=(10, 6)) sns.boxplot(x='category', y='value', data=df) plt.title('不同类别的值分布') plt.xlabel('类别') plt.ylabel('值') plt.show() # 热力图 plt.figure(figsize=(10, 8)) sns.heatmap(df.corr(), annot=True, cmap='coolwarm') plt.title('相关系数热力图') plt.show()

数据处理

数据处理是数据分析的重要步骤,它可以帮助我们转换和整合数据,为后续的分析做准备。

1. 数据转换

import pandas as pd # 读取数据 df = pd.read_csv('data.csv') # 转换数据类型 df['date'] = pd.to_datetime(df['date']) df['value'] = df['value'].astype(float) # 重命名列 df = df.rename(columns={'old_name': 'new_name'}) # 添加新列 df['new_column'] = df['column1'] + df['column2'] # 应用函数 df['new_column'] = df['column'].apply(lambda x: x * 2)

2. 数据分组和聚合

import pandas as pd # 读取数据 df = pd.read_csv('data.csv') # 分组统计 grouped = df.groupby('category') print(grouped['value'].mean()) print(grouped['value'].sum()) print(grouped['value'].count()) # 多维度分组 grouped = df.groupby(['category', 'subcategory']) print(grouped['value'].mean()) # 聚合多个统计量 grouped = df.groupby('category').agg({ 'value': ['mean', 'sum', 'count'], 'other_column': ['max', 'min'] }) print(grouped)

3. 数据合并

import pandas as pd # 读取数据 df1 = pd.read_csv('data1.csv') df2 = pd.read_csv('data2.csv') # 合并数据 merged_df = pd.merge(df1, df2, on='id', how='inner') # 连接数据 concatenated_df = pd.concat([df1, df2])

实战案例:销售数据分析

让我们通过一个实战案例来了解 Python 数据分析的完整流程。我们将分析一家电商平台的销售数据,找出销售趋势和产品表现。

1. 数据获取

import pandas as pd # 读取销售数据 sales_data = pd.read_csv('sales.csv') # 查看数据的基本信息 print(sales_data.info()) print(sales_data.head())

2. 数据清洗

import pandas as pd # 读取销售数据 sales_data = pd.read_csv('sales.csv') # 处理缺失值 sales_data = sales_data.dropna() # 处理重复值 sales_data = sales_data.drop_duplicates() # 转换数据类型 sales_data['order_date'] = pd.to_datetime(sales_data['order_date']) sales_data['sales'] = sales_data['sales'].astype(float) sales_data['quantity'] = sales_data['quantity'].astype(int) # 检查数据 print(sales_data.info())

3. 数据探索

import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # 设置中文显示 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 读取销售数据 sales_data = pd.read_csv('sales.csv') sales_data['order_date'] = pd.to_datetime(sales_data['order_date']) # 销售趋势分析 sales_data['month'] = sales_data['order_date'].dt.to_period('M') monthly_sales = sales_data.groupby('month')['sales'].sum() plt.figure(figsize=(12, 6)) monthly_sales.plot(kind='line') plt.title('月度销售趋势') plt.xlabel('月份') plt.ylabel('销售额') plt.grid(True) plt.show() # 产品销售分析 product_sales = sales_data.groupby('product_id')['sales'].sum().sort_values(ascending=False) plt.figure(figsize=(12, 6)) product_sales.head(10).plot(kind='bar') plt.title('Top 10 产品销售额') plt.xlabel('产品 ID') plt.ylabel('销售额') plt.xticks(rotation=45) plt.show() # 地区销售分析 region_sales = sales_data.groupby('region')['sales'].sum().sort_values(ascending=False) plt.figure(figsize=(12, 6)) region_sales.plot(kind='pie', autopct='%1.1f%%') plt.title('地区销售分布') plt.ylabel('') plt.show() # 客户购买行为分析 customer_sales = sales_data.groupby('customer_id')['sales'].sum().sort_values(ascending=False) plt.figure(figsize=(12, 6)) sns.histplot(customer_sales, bins=50) plt.title('客户购买金额分布') plt.xlabel('购买金额') plt.ylabel('客户数量') plt.show()

4. 数据处理和分析

import pandas as pd # 读取销售数据 sales_data = pd.read_csv('sales.csv') sales_data['order_date'] = pd.to_datetime(sales_data['order_date']) # 计算每个产品的平均单价 sales_data['unit_price'] = sales_data['sales'] / sales_data['quantity'] # 分析每个产品的销售情况 product_analysis = sales_data.groupby('product_id').agg({ 'sales': 'sum', 'quantity': 'sum', 'unit_price': 'mean', 'order_id': 'nunique' }).rename(columns={'order_id': 'order_count'}) # 计算每个产品的销售频率 product_analysis['sales_frequency'] = product_analysis['order_count'] / product_analysis['quantity'] # 分析每个地区的销售情况 region_analysis = sales_data.groupby('region').agg({ 'sales': 'sum', 'quantity': 'sum', 'order_id': 'nunique', 'customer_id': 'nunique' }).rename(columns={'order_id': 'order_count', 'customer_id': 'customer_count'}) # 计算每个地区的平均订单金额 region_analysis['avg_order_value'] = region_analysis['sales'] / region_analysis['order_count'] # 分析每个客户的购买情况 customer_analysis = sales_data.groupby('customer_id').agg({ 'sales': 'sum', 'quantity': 'sum', 'order_id': 'nunique' }).rename(columns={'order_id': 'order_count'}) # 计算每个客户的平均订单金额 customer_analysis['avg_order_value'] = customer_analysis['sales'] / customer_analysis['order_count'] # 查看结果 print(product_analysis.head()) print(region_analysis.head()) print(customer_analysis.head())

5. 结果可视化

import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # 设置中文显示 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 读取销售数据 sales_data = pd.read_csv('sales.csv') sales_data['order_date'] = pd.to_datetime(sales_data['order_date']) # 销售趋势分析 sales_data['month'] = sales_data['order_date'].dt.to_period('M') monthly_sales = sales_data.groupby('month')['sales'].sum() plt.figure(figsize=(12, 6)) monthly_sales.plot(kind='line') plt.title('月度销售趋势') plt.xlabel('月份') plt.ylabel('销售额') plt.grid(True) plt.savefig('monthly_sales.png') plt.show() # 产品销售分析 product_sales = sales_data.groupby('product_id')['sales'].sum().sort_values(ascending=False) plt.figure(figsize=(12, 6)) product_sales.head(10).plot(kind='bar') plt.title('Top 10 产品销售额') plt.xlabel('产品 ID') plt.ylabel('销售额') plt.xticks(rotation=45) plt.savefig('top_10_products.png') plt.show() # 地区销售分析 region_sales = sales_data.groupby('region')['sales'].sum().sort_values(ascending=False) plt.figure(figsize=(12, 6)) region_sales.plot(kind='pie', autopct='%1.1f%%') plt.title('地区销售分布') plt.ylabel('') plt.savefig('region_sales.png') plt.show() # 客户购买行为分析 customer_sales = sales_data.groupby('customer_id')['sales'].sum().sort_values(ascending=False) plt.figure(figsize=(12, 6)) sns.histplot(customer_sales, bins=50) plt.title('客户购买金额分布') plt.xlabel('购买金额') plt.ylabel('客户数量') plt.savefig('customer_sales_distribution.png') plt.show()

最佳实践

1. 代码组织

  • 使用函数:将重复的代码封装成函数,提高代码的可重用性
  • 使用模块化:将代码分成多个模块,提高代码的可维护性
  • 使用注释:添加注释,提高代码的可读性
  • 使用版本控制:使用 Git 等版本控制工具,管理代码的变更

2. 数据处理

  • 使用 Pandas:Pandas 是 Python 中最强大的数据分析库,它提供了丰富的数据处理功能
  • 使用向量化操作:尽量使用 Pandas 和 NumPy 的向量化操作,避免使用循环,提高代码的执行效率
  • 使用缓存:对于计算密集型的操作,使用缓存来避免重复计算
  • 使用并行处理:对于大规模数据,使用并行处理来提高计算速度

3. 数据可视化

  • 选择合适的图表:根据数据的类型和分析的目的,选择合适的图表类型
  • 保持图表简洁:避免在图表中添加过多的元素,保持图表的简洁和清晰
  • 使用颜色:使用合适的颜色来增强图表的可读性
  • 添加标题和标签:添加清晰的标题和标签,使图表更容易理解

4. 性能优化

  • 使用合适的数据类型:选择合适的数据类型,减少内存的使用
  • 使用索引:使用索引来提高数据查询的速度
  • 使用分块处理:对于大规模数据,使用分块处理来避免内存不足
  • 使用惰性计算:对于不需要立即计算的操作,使用惰性计算来提高性能

5. 结果展示

  • 使用 Jupyter Notebook:Jupyter Notebook 是一个很好的工具,它可以将代码、图表和文字结合在一起,便于展示分析结果
  • 使用 Markdown:使用 Markdown 来格式化文字,提高文档的可读性
  • 使用表格:对于结构化的数据,使用表格来展示
  • 使用可视化工具:使用 Tableau、Power BI 等可视化工具来创建交互式的仪表盘

常见问题与解决方案

1. 内存不足

问题:处理大规模数据时出现内存不足的错误。

解决方案

  • 使用分块处理:pd.read_csv('data.csv', chunksize=10000)
  • 使用更高效的数据类型:df['column'] = df['column'].astype('category')
  • 使用内存映射:pd.read_csv('data.csv', memory_map=True)
  • 使用 Dask:Dask 是一个用于并行计算的库,它可以处理大规模数据

2. 代码执行速度慢

问题:代码执行速度慢,特别是处理大规模数据时。

解决方案

  • 使用向量化操作:避免使用循环,使用 Pandas 和 NumPy 的向量化操作
  • 使用 Cython 或 Numba:对于计算密集型的操作,使用 Cython 或 Numba 来提高执行速度
  • 使用并行处理:使用multiprocessingconcurrent.futures来并行处理数据
  • 使用更高效的算法:选择更高效的算法来处理数据

3. 数据质量问题

问题:数据质量差,包含缺失值、重复值、异常值等。

解决方案

  • 数据清洗:处理缺失值、重复值、异常值等
  • 数据验证:在数据获取阶段就进行数据验证,确保数据的质量
  • 数据监控:建立数据监控机制,及时发现和解决数据质量问题
  • 数据治理:建立数据治理体系,确保数据的一致性和准确性

4. 可视化效果差

问题:可视化效果差,图表难以理解。

解决方案

  • 选择合适的图表类型:根据数据的类型和分析的目的,选择合适的图表类型
  • 优化图表设计:调整图表的大小、颜色、字体等,提高图表的可读性
  • 添加注释和标签:添加清晰的注释和标签,使图表更容易理解
  • 使用交互式图表:使用 Plotly、Bokeh 等库创建交互式图表

5. 结果不可重现

问题:分析结果不可重现,每次运行代码得到不同的结果。

解决方案

  • 设置随机种子:对于涉及随机过程的操作,设置随机种子
  • 使用版本控制:使用 Git 等版本控制工具,管理代码和数据的变更
  • 记录环境信息:记录 Python 版本、库版本等环境信息
  • 使用容器:使用 Docker 等容器技术,确保环境的一致性

总结

Python 数据分析是一个强大的工具,它可以帮助我们从数据中提取有价值的信息,为业务决策提供支持。通过本文的学习,我们了解了 Python 数据分析的基本流程、实战案例、最佳实践和常见问题与解决方案。

作为一个从后端转 Rust 的萌新,我认为学习 Python 数据分析是非常有价值的。它不仅可以帮助我们更好地理解数据,还可以为我们的项目提供数据支持。

在进行 Python 数据分析时,我们应该注重数据质量、代码效率、可视化效果和结果的可重现性,确保分析结果的准确性和可靠性。

保持学习,保持输出!今天的 Python 数据分析实战文章就到这里,希望对大家有所帮助。欢迎在评论区分享你的经验和问题,我们一起进步!

参考资料

  • Pandas 官方文档
  • NumPy 官方文档
  • Matplotlib 官方文档
  • Seaborn 官方文档
  • scikit-learn 官方文档
  • Python 数据分析实战

后端转 Rust 的萌新,ID "第一程序员"——名字大,人很菜(暂时)。正在跟所有权和生命周期死磕,日常记录 Rust 学习路上的踩坑经验和"啊哈时刻",代码片段保证能跑。保持学习,保持输出。欢迎大佬们轻喷,也欢迎同好一起进步。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 3:19:41

后端开发进阶:Phi-4-mini-reasoning实现智能API文档生成与校验

后端开发进阶&#xff1a;Phi-4-mini-reasoning实现智能API文档生成与校验 1. 引言&#xff1a;API文档的痛点与机遇 每个后端开发者都经历过这样的场景&#xff1a;项目deadline临近&#xff0c;功能开发已经完成&#xff0c;却还要花大量时间手动编写API文档。更糟的是&…

作者头像 李华
网站建设 2026/4/30 3:23:55

GTE中文向量模型部署教程:Docker容器化封装+端口映射+健康检查完整流程

GTE中文向量模型部署教程&#xff1a;Docker容器化封装端口映射健康检查完整流程 你是不是也遇到过这样的烦恼&#xff1f;好不容易找到一个功能强大的中文向量模型&#xff0c;比如这个支持命名实体识别、关系抽取、情感分析等六合一任务的GTE模型&#xff0c;但部署起来却让…

作者头像 李华
网站建设 2026/4/30 3:19:39

MyBatis SQL 注入利用与 WAF 绕过手册

## 一、MyBatis SQL 注入点类型### 1. ${} 直接拼接 - 最常见注入点 xml <!-- 危险写法 --> <select id"getUser" resultType"User">SELECT * FROM user WHERE name ${name} </select> **利用方式:**name OR 11 name UNION SELECT user…

作者头像 李华