python读书报告

学号15
numpy基础用法

基本函数介绍:
数组创建(如numpy.array(), numpy.zeros(), numpy.ones()等)。
数组索引和切片。
数组运算(元素级、广播等)。
线性代数操作(如矩阵乘法、特征值和特征向量等)。
具体问题解决:
示例:使用numpy解决线性方程组。

import numpy as np
from numpy.linalg import solve # 解线性方程
a = np.mat([[2, 3], [1, 3]])#系数矩阵
b = np.mat([5, 3]).T    #常数项列矩阵
x = solve(a, b)        #方程组的解
print(x)


示例:计算数组中的最大值、最小值、平均值等统计量。 

import numpy as np
a = np.array([[1,2,3,3],[4,5,6,2],[0,8,4,9]])
print(a.max()) #获取整个矩阵的最大值 结果:9
print(a.min()) #获取整个矩阵的最小值 结果: 0
# 可以指定关键字参数axis来获得行最大(小)值或列最大(小)值
# axis=0 行方向最大(小)值,即获得每列的最大(小)值
# axis=1 列方向最大(小)值,即获得每行的最大(小)值
# 例如
print(a.max(axis=0)) #[4 8 6 9]
print(a.max(axis=1))#[3 6 9]
#返回的是位置(索引)
print(a.argmax(axis=0)) #[1 2 1 2]

scipy高级功能

基本函数介绍:
scipy中的特殊函数(如积分、优化、插值等)。
scipy.stats中的统计函数和分布。
scipy.signal中的信号处理功能。

具体问题解决:
示例:使用scipy.optimize求解非线性优化问题。

from scipy.optimize import differential_evolution, basinhopping

def fun_nonconvex(x): 
    if x<0:
        return ( x + 2 ) ** 2 + 1
    else:
        return ( x - 2 ) ** 2 + 2

res_differential_evolution = differential_evolution(func=fun_nonconvex, bounds=[(-10,10)])
print('differential_evolution()的结果为:\n', res_differential_evolution)

res_basinhopping = basinhopping(func=fun_nonconvex, x0=0, niter=1000)
print('\n basinhopping()的结果为:\n', res_basinhopping)


示例:使用scipy.stats进行对统计量与拟合的概率分布进行可视化对比。

import numpy as np  
import matplotlib.pyplot as plt  
from scipy.stats import norm, expon, poisson, kstest  
  
# 示例数据  
data_normal = np.random.normal(loc=0, scale=1, size=1000)  
data_expon = np.random.exponential(scale=1, size=1000)  
data_poisson = np.random.poisson(lam=5, size=1000)  
  
params_normal = norm.fit(data_normal)
params_expon = expon.fit(data_expon, floc=0) 
params_poisson = (np.mean(data_poisson),) 

plt.figure(figsize=(12, 4))  
plt.subplot(1, 3, 1)  
plt.hist(data_normal, bins=30, density=True, alpha=0.6, color='g')  
xmin, xmax = plt.xlim()  
x = np.linspace(xmin, xmax, 100)  
p = norm.pdf(x, *params_normal)  
plt.plot(x, p, 'k', linewidth=2)  
title = "Fit results: mean = {:.2f}, std = {:.2f}".format(*params_normal)  
plt.title(title)    

plt.subplot(1, 3, 2)  
plt.hist(data_expon, bins=30, density=True, alpha=0.6, color='g')  
xmin, xmax = plt.xlim()  
x = np.linspace(xmin, xmax*3, 100)  
p = expon.pdf(x, *params_expon)  
plt.plot(x, p, 'k', linewidth=2)  
title = "Fit results: scale = {:.2f}".format(params_expon[1])  
plt.title(title)  

plt.legend()
plt.show()

pandas数据处理

基本函数介绍:
DataFrame和Series的创建。
数据选择、排序和过滤。
数据清洗和转换。
数据聚合和分组操作。
具体问题解决:
示例:使用pandas处理CSV文件,并进行数据分析。

import pandas as pd  
  
# 读取CSV文件  
df = pd.read_csv('people.csv')  
  
# 显示数据的前几行  
print(df.head())  
  
# 基本的描述性统计(虽然Age是数字列,但这里只会显示计数,因为Name和Country是非数值列)  
print(df.describe())  # 注意:describe()通常只用于数值列  
  
# 对Age列进行描述性统计  
print(df['Age'].describe())  
  
# 按照Country列进行分组,并计算每个国家的平均年龄  
average_age_by_country = df.groupby('Country')['Age'].mean()  
print(average_age_by_country)  
  
# 如果你想看到每个国家的所有统计信息(例如,计数、平均值、标准差等)  
country_stats = df.groupby('Country')['Age'].agg(['count', 'mean', 'std'])  
print(country_stats)  
  
# 绘制每个国家的平均年龄柱状图  
average_age_by_country.plot(kind='bar')  
plt.title('Average Age by Country')  
plt.xlabel('Country')  
plt.ylabel('Average Age')  
plt.show()  
  
# 注意:在上面的代码中,我们还没有导入matplotlib.pyplot,所以现在我们需要导入它  
import matplotlib.pyplot as plt  
  
# 如果你想看到数据的更多细节,比如数据透视表  
pivot_table = df.pivot_table(values='Age', index=['Name'], columns=['Country'], aggfunc='mean')  
print(pivot_table)  # 注意:在这个例子中,每个人只有一个记录,所以透视表可能不是很有用  
  
# 在实际情况下,您可能想根据多个列进行分组或透视  
# ...  
  
# 保存修改后的DataFrame到新的CSV文件(如果需要的话)  
# df.to_csv('modified_people.csv', index=False)  # index=False避免将索引保存到文件中


示例:使用pandas进行数据合并和连接。

import pandas as pd  
  
# 创建两个示例 DataFrame  
df1 = pd.DataFrame({'ID': [1, 2, 3], 'A': ['A0', 'A1', 'A2']})  
df2 = pd.DataFrame({'ID': [1, 2, 4], 'B': ['B0', 'B1', 'B2']})  
  
# 使用 merge() 方法合并两个 DataFrame  
# 默认是内连接(inner join),即只保留两个 DataFrame 中都有的 ID  
merged_inner = pd.merge(df1, df2, on='ID')  
print(merged_inner)  
  
# 使用外连接(outer join),保留所有 ID,即使某个 DataFrame 中没有对应的记录  
merged_outer = pd.merge(df1, df2, on='ID', how='outer')  
print(merged_outer)  
  
# 也可以使用左连接(left join)或右连接(right join)  
merged_left = pd.merge(df1, df2, on='ID', how='left')  
print(merged_left)  
merged_right = pd.merge(df1, df2, on='ID', how='right')  
print(merged_right)

matplotlib数据可视化

基本函数介绍:
绘制线图、散点图、柱状图等。
自定义图形属性(如颜色、标签、图例等)。
使用子图(subplots)进行多图展示。
图像处理:
示例:使用matplotlib绘制基本的三角函数。

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 6, 100)
y = np.cos(2*np.pi*x)*np.exp(-x)+0.8
z = 0.5*np.cos(x**2)+0.8
plt.plot(x, y,'k',color='blue', linewidth=3, label="$exp-decay$")
plt.legend()
plt.show()


示例:使用matplotlib对图像进行简单的处理和变换(如灰度化、直方图均衡化等)。

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0.0, 6.0, 100)
y = np.cos(2*np.pi*x)*np.exp(-x)+0.8
z = 0.5*np.cos(x**2)+0.8
plt.plot(x, y, z,'k',color='blue', linewidth=3, label="$exp-decay$")
plt.axis([0,6,0,1.8])
ix=(x>0.8)&(x<3)
plt.fill_between(x,y,0,where=ix,\
                 facecolor='r',alpha=0.25)
plt.text(0.5*(0.8+3), 0.2, r"$\int_a^b f(x)\mathrm{d}x$",\
         horizontalalignment='center')
plt.legend()
plt.show()


具体问题解决:

结论

总结numpy、scipy、pandas、matplotlib在学习和实践中的体会,强调这些库在数据处理和科学计算中的重要性,并展望未来的应用和发展方向。

### 程序功能概述 一个用于阅读书籍的Python程序可以实现多种功能,例如书籍信息的获取、书籍内容的阅读、书籍推荐以及用户交互等。以下是一个基础的示例,展示如何使用 Python 编写一个简单的读书程序,该程序可以展示书籍列表、选择书籍阅读以及退出程序。 ### 示例代码 ```python # 定义书籍列表 books = { "1": {"title": "Python编程:从入门到实践", "author": "Eric Matthes", "content": "这是一本适合初学者的Python书籍..."}, "2": {"title": "流畅的Python", "author": "Luciano Ramalho", "content": "本书深入讲解了Python的高级特性..."}, "3": {"title": "Python核心编程", "author": "Wesley J. Chun", "content": "本书涵盖了Python的核心概念和应用..."} } # 展示书籍列表 def display_books(): print("欢迎使用读书程序!") print("请选择您想阅读的书籍:") for key, book in books.items(): print(f"{key}. {book['title']} - {book['author']}") # 选择书籍并阅读 def read_book(book_id): if book_id in books: print(f"\n正在阅读:{books[book_id]['title']} by {books[book_id]['author']}") print(books[book_id]['content']) else: print("无效的选择,请重新选择。") # 主程序循环 def main(): while True: display_books() choice = input("请输入书籍编号(或输入 'q' 退出程序):") if choice == 'q': print("感谢使用,再见!") break read_book(choice) if __name__ == "__main__": main() ``` ### 代码说明 1. **书籍列表**:使用字典 `books` 存储书籍信息,包括书籍编号、标题、作者和内容简介。 2. **展示书籍**:`display_books` 函数打印书籍列表,引导用户选择。 3. **阅读书籍**:`read_book` 函数根据用户输入的书籍编号显示书籍详情。 4. **主程序**:`main` 函数提供一个循环,允许用户多次选择书籍,直到输入 `q` 退出程序。 ### 扩展功能建议 - **书籍搜索**:添加搜索功能,让用户可以根据书名或作者查找书籍。 - **书籍推荐**:根据用户的阅读历史或偏好,推荐相似书籍。 - **用户登录**:实现用户登录功能,保存用户的阅读进度。 - **网络爬虫**:结合 `requests` 和 `BeautifulSoup` 库,从网上抓取书籍信息[^2]。 ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值