更加详细的数据清洗、处理和绘图,会在后续专门的章节进行讲解。
NumPy: 书店销售数据
以书店销售数据为背景,我们将依次介绍numpy的数组创建、操作、四则运算、聚合函数和布尔筛选。这样的结构将有助于清晰地展示每个概念在实际情况中的应用。
数据准备
首先,我们从书店的基本数据开始,即书籍的价格和销售数量。
数组创建
从列表创建一维数组来记录书籍的价格和销售数量:
import numpy as np
# 书籍的单价列表
price_list = [120, 85, 100, 75, 95]
# 将列表转换为numpy数组
prices = np.array(price_list)
# 书籍的销售数量列表
quantity_list = [30, 15, 20, 10, 25]
# 将列表转换为numpy数组
quantities = np.array(quantity_list)
# 书籍名称
book_names = np.array(['微观经济学', '宏观经济学', '金融学', '会计学','Python数据分析'])
print("书籍价格数组:", prices)
print("销售数量数组:", quantities)
书籍价格数组: [120 85 100 75 95]
销售数量数组: [30 15 20 10 25]
索引和切片
展示如何获取数组中的特定元素和子数组:
# 获取第一本书的价格和销售数量
first_book_price = prices[0]
first_book_quantity = quantities[0]
print("第一本书的价格:", first_book_price)
print("第一本书的销售数量:", first_book_quantity)
# 获取前三本书的价格和销售数量
first_three_prices = prices[:3]
first_three_quantities = quantities[:3]
print("前三本书的价格:", first_three_prices)
print("前三本书的销售数量:", first_three_quantities)
第一本书的价格: 120
第一本书的销售数量: 30
前三本书的价格: [120 85 100]
前三本书的销售数量: [30 15 20]
布尔数组和筛选
创建布尔数组并筛选出价格高于90元的书籍:
# 创建一个布尔数组,用于筛选价格高于90元的书籍
high_price_filter = prices > 90
high_price_books = prices[high_price_filter]
print("价格高于90元的书籍:", high_price_books)
数组运算
使用数组运算来计算总销售额和应用折扣。
基本数学运算
计算总销售额(未折扣前):
# 计算每本书未折扣前的总销售额
total_sales = prices * quantities
print("未折扣前的总销售额:", total_sales)
未折扣前的总销售额: [3600 1275 2000 750 2375]
应用折扣
计算折后总价:
# 书籍的折扣比率
discount_rates = np.array([0.1, 0.05, 0.15, 0.05, 0.1]) # 10%, 5%, 15%, 5%, 10%
final_prices = total_sales * (1 - discount_rates)
print("折扣后的销售额:", final_prices)
折扣后的销售额: [3240. 1211.25 1700. 712.5 2137.5 ]
常见函数
使用聚合和其他常见函数:
print("所有书籍的最终总销售额:", final_prices.sum())
print("最低销售额的书籍:", final_prices.min())
print("最高销售额的书籍:", final_prices.max())
print("平均销售额:", final_prices.mean())
所有书籍的最终总销售额: 9001.25
最低销售额的书籍: 712.5
最高销售额的书籍: 3240.0
平均销售额: 1800.25
练习题
题目 1: 价格调整
假设书店决定对所有书籍价格进行统一调整,增加5元。请使用numpy数组操作来更新prices
数组,并打印新的价格数组。
提示: 使用向量化操作来增加数组中的每一个元素。
题目 2: 销售筛选
书店想要了解哪些书籍的销售额在折扣后仍然超过2000元。使用布尔索引来筛选出这些书籍的价格和名称,并打印结果。
提示: 先计算折后总销售额,然后创建一个布尔数组用于筛选。
题目 3: 总结统计
请计算并打印以下统计信息:
- 所有书籍的销售总数。
- 折扣后每本书平均的销售额。
- 折扣率最高的书籍的名称和价格。
提示: 使用sum()
, mean()
函数,以及argmax()
来找到折扣率最高的书籍。
Pandas: 书店数据管理
在这个例子中,我们将使用一个关于书店的数据集,包含书籍的名称、价格、销售数量和评分。通过这个例子,我们将演示如何使用pandas进行数据的创建、操作、排序和文件的读写。
导入pandas库
首先,导入pandas库并为其常用的别名pd
:
创建DataFrame
使用字典来创建一个DataFrame,其中包括书籍的名称、价格、销售数量和评分:
data = {
"Book": ['微观经济学', '宏观经济学', '金融学', '会计学','Python数据分析'],
"Price": [120, 85, 100, 75, 95],
"Quantity": [30, 15, 20, 10, 25],
"Rating": [4.5, 4.0, 4.8, 3.9, 4.1],
}
df = pd.DataFrame(data)
df
0 |
微观经济学 |
120 |
30 |
4.5 |
1 |
宏观经济学 |
85 |
15 |
4.0 |
2 |
金融学 |
100 |
20 |
4.8 |
3 |
会计学 |
75 |
10 |
3.9 |
4 |
Python数据分析 |
95 |
25 |
4.1 |
数据选择与操作
使用.loc
.loc
主要用于基于标签的索引,即选择行或列的名称来访问数据。
选择特定的行
# 选择第一本书的数据
first_book = df.loc[0]
print("第一本书的数据:\n")
first_book
Book 微观经济学
Price 120
Quantity 30
Rating 4.5
Name: 0, dtype: object
选择特定的列
# 选择书籍名称和价格列
books_prices = df.loc[:, ["Book", "Price"]]
print("书籍和价格:\n")
books_prices
0 |
微观经济学 |
120 |
1 |
宏观经济学 |
85 |
2 |
金融学 |
100 |
3 |
会计学 |
75 |
4 |
Python数据分析 |
95 |
也有快速的写法
# 选择书籍名称和价格列
books_prices = df[["Book", "Price"]]
print("书籍和价格:\n")
books_prices
0 |
微观经济学 |
120 |
1 |
宏观经济学 |
85 |
2 |
金融学 |
100 |
3 |
会计学 |
75 |
4 |
Python数据分析 |
95 |
使用.iloc
.iloc
用于基于位置的索引,即选择行或列的数值索引来访问数据。
选择特定的行
# 选择前三本书的数据
first_three_books = df.iloc[:3]
print("前三本书的数据:\n")
first_three_books
0 |
微观经济学 |
120 |
30 |
4.5 |
1 |
宏观经济学 |
85 |
15 |
4.0 |
2 |
金融学 |
100 |
20 |
4.8 |
选择特定的列
# 选择价格和数量列(索引1和2)
price_quantity = df.iloc[:, [1, 2]]
print("价格和数量:\n")
price_quantity
0 |
120 |
30 |
1 |
85 |
15 |
2 |
100 |
20 |
3 |
75 |
10 |
4 |
95 |
25 |
条件筛选
使用条件表达式来筛选满足特定条件的行。
根据条件选择行
# 选择评分高于4.0的书籍
high_rated_books = df[df["Rating"] > 4.0]
print("评分高于4.0的书籍:\n")
high_rated_books
0 |
微观经济学 |
120 |
30 |
4.5 |
2 |
金融学 |
100 |
20 |
4.8 |
4 |
Python数据分析 |
95 |
25 |
4.1 |
使用query
方法 这是一个更动态的方式来选择数据,允许使用字符串表达式来指定条件。
# 使用query方法选择价格小于100的书籍
affordable_books = df.query("Price < 100")
print("价格小于100的书籍:\n")
affordable_books
1 |
宏观经济学 |
85 |
15 |
4.0 |
3 |
会计学 |
75 |
10 |
3.9 |
4 |
Python数据分析 |
95 |
25 |
4.1 |
修改数据列
添加一列“Total Sales”,计算每本书的总销售额:
df["Total Sales"] = df["Price"] * df["Quantity"]
print(df)
Book Price Quantity Rating Total Sales
0 微观经济学 120 30 4.5 3600
1 宏观经济学 85 15 4.0 1275
2 金融学 100 20 4.8 2000
3 会计学 75 10 3.9 750
4 Python数据分析 95 25 4.1 2375
数据排序
根据总销售额对书籍进行降序排序:
df_sorted = df.sort_values(by="Total Sales", ascending=False)
print("按总销售额排序:\n")
df_sorted
0 |
微观经济学 |
120 |
30 |
4.5 |
3600 |
4 |
Python数据分析 |
95 |
25 |
4.1 |
2375 |
2 |
金融学 |
100 |
20 |
4.8 |
2000 |
1 |
宏观经济学 |
85 |
15 |
4.0 |
1275 |
3 |
会计学 |
75 |
10 |
3.9 |
750 |
读取和写入数据
写入CSV文件
将DataFrame写入CSV文件,文件名为bookstore.csv
:
df.to_csv("bookstore.csv", index=False)
print("数据已写入 'bookstore.csv'")
读取CSV文件 读取之前写入的CSV文件,查看内容:
df_loaded = pd.read_csv("bookstore.csv")
print("从CSV文件加载的数据:\n")
df_loaded
0 |
微观经济学 |
120 |
30 |
4.5 |
3600 |
1 |
宏观经济学 |
85 |
15 |
4.0 |
1275 |
2 |
金融学 |
100 |
20 |
4.8 |
2000 |
3 |
会计学 |
75 |
10 |
3.9 |
750 |
4 |
Python数据分析 |
95 |
25 |
4.1 |
2375 |
练习题
题目 1: 计算平均评分
假设你想了解书店中所有书籍的平均评分。使用pandas的函数计算并打印这个数据集中所有书籍的平均评分。
提示: 使用mean()
函数来计算列的平均值。
题目 2: 筛选特定的书籍
书店老板对销售表现不佳的书籍(总销售额低于2000元)进行特价处理。请筛选出这些书籍的名称和当前价格,并打印结果。
提示: 使用条件筛选来实现这一点,你可能需要先计算每本书的总销售额。
题目 3: 新书上架
书店有新书上架,需要更新DataFrame。请将下面的新书信息添加到现有的DataFrame中,并重新打印更新后的DataFrame。
新书信息:
- Book: ‘计量经济学’
- Price: 90
- Quantity: 20
- Rating: 4.3
提示: 使用append()
函数或concat()
函数来添加新行。