当前位置: 首页 > news >正文

Python中的数值及其计算

文章目录

    • 基本的数值计算示例
      • 整数(`int`)
        • 示例:
      • 浮点数(`float`)
        • 示例:
      • 复数(`complex`)
        • 示例:
      • 数学模块(`math` 和 `cmath`)
        • 示例:
      • 更多数学函数
        • 示例:
      • 数值范围与精度
        • 示例:
      • 使用第三方库进行数值计算
        • NumPy 示例:
      • 处理大数
        • Decimal 示例:
      • 数据类型转换
        • 示例:
      • 格式化输出
        • 示例:
      • 使用 Pandas 进行数据分析
        • 示例:
      • 高级数值计算库
        • SciPy 示例:
        • Matplotlib 示例:
    • 实践案例
      • 实践案例:财务分析工具
        • 准备工作
        • 实现步骤
        • 代码实现
      • 解释
      • 扩展功能
        • 添加数据清洗步骤
        • 改进可视化
        • 添加用户输入
      • 完善代码
        • 数据清洗
        • 改进可视化
        • 用户输入
      • 代码实现
      • 新增功能解释
      • 运行代码
      • 详细报表
        • 代码实现
      • 分类汇总
        • 代码实现
      • 趋势分析
        • 代码实现
      • 导出结果
        • 代码实现
      • 完整代码

基本的数值计算示例

在 Python 中,数值类型是用来存储数值数据的。Python 支持多种数值类型,包括整数(int),浮点数(float),以及复数(complex)。下面对这些类型进行详细介绍,并给出一些基本的数值计算示例。

整数(int

整数是没有小数部分的数字。例如 1, -42, 0 都是整数。整数可以进行加法、减法、乘法、除法等运算。

示例:
a = 5
b = 3
print(a + b)  # 输出 8
print(a - b)  # 输出 2
print(a * b)  # 输出 15
print(a / b)  # 输出 1.6666666666666667 (得到一个浮点数结果)
print(a // b) # 输出 1 (整数除法)
print(a % b)  # 输出 2 (取模运算)

浮点数(float

浮点数是有小数部分的数字。例如 3.14, -0.001, 2.7e-1 都是浮点数。浮点数同样支持上述的数学运算。

示例:
x = 3.14
y = 2.7
print(x + y)    # 输出 5.84
print(x * y)    # 输出 8.477999999999999
print(x ** y)   # 输出 x 的 y 次方, 结果为 5.374121741477298

复数(complex

复数包含实部和虚部,虚部有一个特殊的单位 jJ 表示虚数单位。例如 3+4j, 5j, 2 都是复数。

示例:
c1 = 3 + 4j
c2 = 1 - 2j
print(c1 + c2)  # 输出 (4+2j)
print(c1 * c2)  # 输出 (11-2j)
print(c1.conjugate())  # 输出 (3-4j) 共轭复数

数学模块(mathcmath

Python 提供了 math 模块来处理普通的数学运算,如平方根、指数等。对于复数的高级运算,则使用 cmath 模块。

示例:
import math
import cmath# 使用 math 模块
print(math.sqrt(4))     # 输出 2.0
print(math.exp(2))      # 输出 7.38905609893065
print(math.sin(math.pi)) # 输出 1.2246467991473532e-16 (接近于0)# 使用 cmath 模块处理复数
print(cmath.sqrt(-1))   # 输出 1j
print(cmath.log(1+0j))  # 输出 0j

这些就是 Python 中基本的数值类型及其运算方式的介绍。

Python 中数值计算的更多方面的扩展话题
我们可以进一步探讨 Python 中数值计算的更多方面。除了基本的数学运算之外,Python 还提供了许多用于科学计算的功能,这使得它成为数据分析和科学计算的理想选择之一。以下是一些扩展话题:

更多数学函数

除了 math 模块提供的基本数学函数外,还有更多的函数可用于更复杂的数学运算,如三角函数、对数函数等。

示例:
import mathangle_in_degrees = 45
angle_in_radians = math.radians(angle_in_degrees)print(math.sin(angle_in_radians))  # 输出约 0.7071067811865475
print(math.cos(angle_in_radians))  # 输出约 0.7071067811865476
print(math.tan(angle_in_radians))  # 输出约 1.0000000000000002

数值范围与精度

Python 的整数类型没有固定的大小限制(除了可用内存),而浮点数则遵循IEEE 754标准。需要注意的是,由于二进制表示的限制,浮点数运算可能会引入舍入误差。

示例:
print(0.1 + 0.2 == 0.3)  # 输出 False,因为存在舍入误差

使用第三方库进行数值计算

为了处理更复杂的数值计算,通常会使用像 NumPy 或 SciPy 这样的第三方库。NumPy 提供了一个强大的数组对象和支持向量运算的函数集合,非常适合大规模的数值计算。

NumPy 示例:
import numpy as np# 创建一个数组
array = np.array([1, 2, 3])
print(array)# 数组运算
print(np.sqrt(array))        # 输出 [1. 1.41421356 1.73205081]
print(np.sin(array))         # 输出 [0.84147098 0.90929743 0.14112001]# 创建一个二维数组
matrix = np.array([[1, 2], [3, 4]])
print(matrix)# 矩阵运算
print(np.linalg.det(matrix)) # 输出 -2.0, 计算行列式
print(np.dot(matrix, matrix)) # 输出矩阵乘积

处理大数

对于非常大的数字或者需要更高精度的情况,可以使用 Python 的 decimal 模块或第三方库如 gmpy2 来获得更高的精度或更好的性能。

Decimal 示例:
from decimal import Decimal, getcontextgetcontext().prec = 50  # 设置精度为50位
pi = Decimal('3.1415926535897932384626433832795028841971')
print(pi)

Python 在数值计算方面的还有一些高级用法和技术。除了前面提到的基础知识和常用库之外,我们还可以探讨以下几个方面:

数据类型转换

在进行数值计算时,你可能需要将一种类型的数据转换成另一种类型。Python 提供了几种方法来进行类型转换。

示例:
# 将字符串转换为整数或浮点数
num_str = "123"
num_int = int(num_str)  # 输出 123
num_float = float(num_str)  # 输出 123.0# 将整数或浮点数转换为字符串
num_int = 123
num_float = 123.456
str_int = str(num_int)  # 输出 '123'
str_float = str(num_float)  # 输出 '123.456'# 转换为复数
real_part = 3.0
imaginary_part = 4.0
complex_num = complex(real_part, imaginary_part)  # 输出 (3+4j)

格式化输出

在显示数值时,你可能希望以特定的格式来呈现结果,例如固定小数点后的位数或者科学计数法等。

示例:
value = 123.456789# 固定小数点后两位
formatted_value = f"{value:.2f}"
print(formatted_value)  # 输出 '123.46'# 科学计数法
scientific_notation = f"{value:.2e}"
print(scientific_notation)  # 输出 '1.23e+02'

使用 Pandas 进行数据分析

Pandas 是一个强大的库,用于数据分析和处理表格数据。它基于 NumPy 构建,并提供了 DataFrame 对象,可以方便地处理结构化数据。

示例:
import pandas as pd# 创建一个 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'],'Age': [25, 30, 35],'Salary': [50000.0, 60000.0, 70000.0]
}
df = pd.DataFrame(data)# 显示 DataFrame
print(df)# 对 Salary 列进行操作
average_salary = df['Salary'].mean()
print(f"Average Salary: {average_salary:.2f}")  # 输出 Average Salary: 60000.00

高级数值计算库

除了 NumPy 和 Pandas,还有一些其他的库,如 SciPy、Matplotlib、SymPy 等,它们提供了更广泛的数学函数和绘图功能。

SciPy 示例:
from scipy import stats# 正态分布的概率密度函数
mu, sigma = 0, 0.1  # 均值和标准差
x = np.linspace(mu - 3*sigma, mu + 3*sigma, 100)
pdf = stats.norm.pdf(x, mu, sigma)
plt.plot(x, pdf)
plt.show()  # 显示正态分布的概率密度曲线
Matplotlib 示例:
import matplotlib.pyplot as plt# 绘制一个简单的图表
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.title('Sine Wave')
plt.show()  # 显示图形

实践案例

我们可以创建一个综合性的实践案例,该案例将涵盖 Python 在数值计算、数据分析和可视化方面的应用。我们将创建一个简单的财务分析工具,该工具可以读取交易记录数据,计算总收入、总支出,并绘制收支情况的图表。

实践案例:财务分析工具

准备工作

首先,我们需要准备一个交易记录文件,假设是一个 CSV 文件,其中包含日期、类别(收入/支出)、金额等信息。

假设文件 transactions.csv 的内容如下:

Date,Category,Amount
2024-01-01,Income,5000.00
2024-01-02,Expense,-1000.00
2024-01-03,Income,3000.00
2024-01-04,Expense,-500.00
2024-01-05,Income,2000.00
2024-01-06,Expense,-1500.00
实现步骤
  1. 读取数据:使用 Pandas 从 CSV 文件中读取数据。
  2. 数据预处理:清理和转换数据,使其适合后续分析。
  3. 计算统计信息:计算总收入和总支出。
  4. 数据可视化:使用 Matplotlib 绘制收支情况的条形图。
代码实现
import pandas as pd
import matplotlib.pyplot as plt# Step 1: Read the data
file_path = 'transactions.csv'
df = pd.read_csv(file_path)# Step 2: Data preprocessing
# Convert 'Amount' to numeric and handle any errors
df['Amount'] = pd.to_numeric(df['Amount'], errors='coerce')# Convert 'Date' to datetime format
df['Date'] = pd.to_datetime(df['Date'])# Step 3: Calculate statistics
income_total = df[df['Category'] == 'Income']['Amount'].sum()
expense_total = abs(df[df['Category'] == 'Expense']['Amount'].sum())
net_income = income_total + expense_total# Step 4: Visualization
categories = ['Income', 'Expense']
values = [income_total, expense_total]plt.figure(figsize=(8, 6))
plt.bar(categories, values, color=['green', 'red'])
plt.title('Financial Summary')
plt.ylabel('Amount ($)')
plt.xlabel('Categories')
plt.grid(True)
plt.show()# Print summary
print(f"Total Income: ${income_total:.2f}")
print(f"Total Expense: ${expense_total:.2f}")
print(f"Net Income: ${net_income:.2f}")

解释

  1. 读取数据:使用 Pandas 的 read_csv 函数来加载 CSV 文件。
  2. 数据预处理:确保所有金额都是数字格式,并且日期字段是日期格式。
  3. 计算统计信息:根据类别(收入/支出)对金额进行求和。
  4. 数据可视化:使用 Matplotlib 创建一个条形图来展示总收入和总支出。

这个案例展示了如何结合 Pandas 进行数据处理和分析,以及如何使用 Matplotlib 进行数据可视化。

我们可以在这个财务分析工具的基础上进一步扩展其功能,例如添加更多的数据处理步骤、改进可视化效果,并增加一些交互性。接下来,我们将逐步改进和完善这个案例。

扩展功能

添加数据清洗步骤

在实际应用中,原始数据可能含有错误或缺失值。我们可以增加数据清洗步骤来确保数据的质量。

改进可视化

我们可以改进图表的样式,使其更具可读性,并添加更多的信息。

添加用户输入

为了让工具更加灵活,我们可以让用户通过命令行输入参数,例如指定要分析的时间段。

完善代码

数据清洗
  1. 去除缺失值:删除含有 NaN 的行。
  2. 异常值检测:检查是否有异常的金额记录。
改进可视化
  1. 添加标题和标签:使图表更有意义。
  2. 美化图表样式:调整颜色、字体等。
用户输入
  1. 命令行参数:允许用户指定分析的时间段。

代码实现

import pandas as pd
import matplotlib.pyplot as plt
import argparse# 创建命令行参数解析器
parser = argparse.ArgumentParser(description="Financial Analysis Tool")
parser.add_argument("--start_date", type=str, default="2024-01-01", help="Start date for analysis")
parser.add_argument("--end_date", type=str, default="2024-01-31", help="End date for analysis")# 解析命令行参数
args = parser.parse_args()# Step 1: Read the data
file_path = 'transactions.csv'
df = pd.read_csv(file_path)# Step 2: Data preprocessing
# Convert 'Amount' to numeric and handle any errors
df['Amount'] = pd.to_numeric(df['Amount'], errors='coerce')# Convert 'Date' to datetime format
df['Date'] = pd.to_datetime(df['Date'])# Remove rows with missing values
df.dropna(inplace=True)# Filter data based on user input dates
df = df[(df['Date'] >= args.start_date) & (df['Date'] <= args.end_date)]# Detect outliers (optional)
# df = df[df['Amount'].abs() < 10000]  # 可以根据需要调整阈值# Step 3: Calculate statistics
income_total = df[df['Category'] == 'Income']['Amount'].sum()
expense_total = abs(df[df['Category'] == 'Expense']['Amount'].sum())
net_income = income_total + expense_total# Step 4: Visualization
categories = ['Income', 'Expense']
values = [income_total, expense_total]plt.figure(figsize=(10, 6))
plt.bar(categories, values, color=['#1f77b4', '#ff7f0e'])
plt.title(f'Financial Summary from {args.start_date} to {args.end_date}')
plt.ylabel('Amount ($)')
plt.xlabel('Categories')
plt.xticks(rotation=0)
plt.grid(axis='y', linestyle='--', linewidth=0.5)
plt.tight_layout()# Save the plot to a file (optional)
plt.savefig('financial_summary.png')plt.show()# Print summary
print(f"Total Income: ${income_total:.2f}")
print(f"Total Expense: ${expense_total:.2f}")
print(f"Net Income: ${net_income:.2f}")

新增功能解释

  1. 命令行参数:通过 argparse 库来获取用户输入的时间段,这样可以根据用户需求分析特定时间段内的数据。
  2. 数据清洗:删除含有 NaN 的行,并检查异常值(如果需要的话)。
  3. 美化图表:调整图表的尺寸、颜色、标题和网格线,使其更具可读性。

运行代码

要运行这段代码,你需要在命令行中输入以下命令(假设你的脚本名为 financial_analysis.py):

python financial_analysis.py --start_date 2024-01-01 --end_date 2024-01-31

你可以更改日期参数来分析不同的时间段。这样,我们就有了一个更完善、更灵活的财务分析工具。

接下来,我们可以进一步扩展这个财务分析工具的功能,使其更加实用和多功能。我们可以添加以下功能:

  1. 详细报表:生成详细的报表,列出每个月的收入和支出。
  2. 分类汇总:按类别汇总收入和支出。
  3. 趋势分析:绘制收入和支出的趋势图。
  4. 导出结果:将结果导出到 CSV 文件或其他格式。

详细报表

首先,我们可以生成一个详细的报表,列出每个月的收入和支出。

代码实现
# 生成详细报表
monthly_summary = df.groupby(pd.Grouper(key='Date', freq='M'))['Amount'].sum().reset_index()
monthly_summary['Month'] = monthly_summary['Date'].dt.strftime('%Y-%m')print("Monthly Summary:")
print(monthly_summary[['Month', 'Amount']])

分类汇总

接下来,我们可以按类别汇总收入和支出,并进行可视化。

代码实现
# 按类别汇总
category_summary = df.groupby('Category')['Amount'].sum()
print("\nCategory Summary:")
print(category_summary)# 绘制饼图
plt.figure(figsize=(8, 6))
plt.pie(category_summary.abs(), labels=category_summary.index, autopct='%1.1f%%', startangle=90)
plt.title('Category Distribution')
plt.axis('equal')  # Equal aspect ratio ensures that pie is drawn as a circle.
plt.show()

趋势分析

我们可以绘制每月的收入和支出趋势图,以便更好地理解财务状况的变化。

代码实现
# 绘制趋势图
plt.figure(figsize=(12, 6))
plt.plot(monthly_summary['Month'], monthly_summary['Amount'], marker='o', linestyle='-', color='blue')
plt.title('Monthly Financial Trends')
plt.xlabel('Month')
plt.ylabel('Amount ($)')
plt.grid(True)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

导出结果

最后,我们可以将结果导出到 CSV 文件中,以便进一步分析或存档。

代码实现
# 导出详细报表到 CSV 文件
monthly_summary.to_csv('monthly_financial_summary.csv', index=False)# 导出类别汇总到 CSV 文件
category_summary.to_csv('category_financial_summary.csv')print("\nMonthly and category summaries have been exported to CSV files.")

完整代码

以下是完整的代码,整合了上述所有功能:

import pandas as pd
import matplotlib.pyplot as plt
import argparse# 创建命令行参数解析器
parser = argparse.ArgumentParser(description="Financial Analysis Tool")
parser.add_argument("--start_date", type=str, default="2024-01-01", help="Start date for analysis")
parser.add_argument("--end_date", type=str, default="2024-01-31", help="End date for analysis")# 解析命令行参数
args = parser.parse_args()# Step 1: Read the data
file_path = 'transactions.csv'
df = pd.read_csv(file_path)# Step 2: Data preprocessing
# Convert 'Amount' to numeric and handle any errors
df['Amount'] = pd.to_numeric(df['Amount'], errors='coerce')# Convert 'Date' to datetime format
df['Date'] = pd.to_datetime(df['Date'])# Remove rows with missing values
df.dropna(inplace=True)# Filter data based on user input dates
df = df[(df['Date'] >= args.start_date) & (df['Date'] <= args.end_date)]# Step 3: Calculate statistics
income_total = df[df['Category'] == 'Income']['Amount'].sum()
expense_total = abs(df[df['Category'] == 'Expense']['Amount'].sum())
net_income = income_total + expense_total# Step 4: Visualization
categories = ['Income', 'Expense']
values = [income_total, expense_total]plt.figure(figsize=(10, 6))
plt.bar(categories, values, color=['#1f77b4', '#ff7f0e'])
plt.title(f'Financial Summary from {args.start_date} to {args.end_date}')
plt.ylabel('Amount ($)')
plt.xlabel('Categories')
plt.xticks(rotation=0)
plt.grid(axis='y', linestyle='--', linewidth=0.5)
plt.tight_layout()# Save the plot to a file (optional)
plt.savefig('financial_summary.png')plt.show()# Generate detailed monthly summary
monthly_summary = df.groupby(pd.Grouper(key='Date', freq='M'))['Amount'].sum().reset_index()
monthly_summary['Month'] = monthly_summary['Date'].dt.strftime('%Y-%m')print("Monthly Summary:")
print(monthly_summary[['Month', 'Amount']])# Category summary and pie chart
category_summary = df.groupby('Category')['Amount'].sum()
print("\nCategory Summary:")
print(category_summary)plt.figure(figsize=(8, 6))
plt.pie(category_summary.abs(), labels=category_summary.index, autopct='%1.1f%%', startangle=90)
plt.title('Category Distribution')
plt.axis('equal')  # Equal aspect ratio ensures that pie is drawn as a circle.
plt.show()# Monthly financial trends
plt.figure(figsize=(12, 6))
plt.plot(monthly_summary['Month'], monthly_summary['Amount'], marker='o', linestyle='-', color='blue')
plt.title('Monthly Financial Trends')
plt.xlabel('Month')
plt.ylabel('Amount ($)')
plt.grid(True)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()# Export results to CSV files
monthly_summary.to_csv('monthly_financial_summary.csv', index=False)
category_summary.to_csv('category_financial_summary.csv')print("\nMonthly and category summaries have been exported to CSV files.")# Print summary
print(f"\nTotal Income: ${income_total:.2f}")
print(f"Total Expense: ${expense_total:.2f}")
print(f"Net Income: ${net_income:.2f}")

通过这些扩展功能,我们的财务分析工具现在能够生成详细的月度报表、按类别汇总数据、绘制趋势图,并将结果导出到 CSV 文件中。这样的工具可以帮助用户更好地理解和管理他们的财务状况。

😍😍 海量H5小游戏、微信小游戏、Web casualgame源码😍😍
😍😍试玩地址: https://www.bojiogame.sg😍😍
😍看上哪一款,需要源码的csdn私信我😍

————————————————

​最后我们放松一下眼睛
在这里插入图片描述


http://www.mrgr.cn/news/53874.html

相关文章:

  • 【C语言】文件操作(2)(文件缓冲区和随机读取函数)
  • MySQL 中的外键检查设置:SET FOREIGN_KEY_CHECKS = 1
  • Spring声明式事务管理:深入探索XML配置方式
  • 高等数学 7.5可降阶的高阶微分方程
  • 巧用 API 接口,精准监控商品价格与销量全攻略
  • 【Linux】进程间通信(匿名管道)
  • 学习eNSP对准备华为认证有哪些帮助?
  • 【C++打怪之路Lv11】-- stack、queue和优先级队列
  • MySQL 本地社区版安装(不登录) mysql官网链接
  • HarmonyOS NEXT 应用开发实战(七、知乎日报轮播图的完整实现)
  • 集合论基本概念——紧致性(compact或compactness)
  • 【v5Lite】识别+串口
  • 大厂面试真题-了解云原生吗,简单说一下docker和k8s
  • vue之打包配置环境
  • Qt贪吃蛇-游戏房间窗口(3)
  • 设置了超时时间但是不起作用,浏览器里的setTimeout有 bug?
  • Linux下的进程解析(level 2)
  • 闪迪sd卡如何恢复删除的内容?这3种方法很实用
  • 【数据库系统概论】关系数据库标准语言SQL(一)数据定义【超详细】
  • c++基础知识1
  • MYSQL OPTIMIZE TABLE 命令重建表和索引
  • C++初阶——入门
  • vuex的store应用
  • 枸杞常见病虫害识别数据集(猫脸码客 第220期)
  • 【C++笔试强训】如何成为算法糕手Day11
  • Python编程探索:从基础语法到循环结构实践(下)