Python大数据分析与挖掘实战--第四章课后习题解题思路及源代码

目录

3. Chapter4

3.1 Question:

3.2 Answer:

3.2.1 分析此类题的模板:

3.2.2 解题分析:

3.2.3 总结:


3. Chapter4

3.1 Question:

1)今有2018年1月1日—15日的猪肉价格和牛肉价格的数据,它们存在于一个Excel表格中,如下表所示。将其读入Python中并用一个数据框变量df保存。

2)分别绘制1月1日—10日的猪肉价格和牛肉价格走势图。

3)在同一个figure界面中,用一个2×1的子图分别绘制2018年1月前半个月的猪肉价格和牛肉价格走势图。

3.2 Answer:

3.2.1 分析此类题的模板:

  1. 可以使用pandas库来读取Excel文件,并创建一个数据框变量来存储数据。以下是一个简单的例子:

import pandas as pd
file_name = 'your_excel_file.xlsx'
df = pd.read_excel(file_name)
print(df)
  1. 可以使用matplotlib库来绘制图形。首先,需要安装必要的库:

pip install matplotlib

然后,可以使用以下代码来绘制图形:

import matplotlib.pyplot as plt
dates = df['Date']
prices_pork = df['Price_Pork']
prices_beef = df['Price_Beef']
plt.plot(dates, prices_pork, label='Price of Pork')
plt.plot(dates, prices_beef, label='Price of Beef')
plt.xlabel('Date')
plt.ylabel('Price')
plt.title('Price Trend')
plt.legend()
plt.show()
  1. 为了在一个图中显示两个子图,可以使用subplots功能。下面是一个示例代码:

import matplotlib.pyplot as plt
dates = df['Date']
prices_pork = df['Price_Pork']
prices_beef = df['Price_Beef']
fig, axs = plt.subplots(2, 1, figsize=(10, 6))
axs[0].plot(dates, prices_pork, label='Price of Pork', color='red')
axs[0].set_title('Price Trend of Pork')
axs[1].plot(dates, prices_beef, label='Price of Beef', color='blue')
axs[1].set_title('Price Trend of Beef')
plt.xlabel('Date')
plt.ylabel('Price')
plt.title('Overall Price Trend')
plt.legend()
plt.show()

3.2.2 解题分析:

需要按照以下步骤操作:

  1. 读取Excel数据:首先,需要读取Excel数据到一个数据框(DataFrame)中。假设文件名为data.xlsx。如果文件名不同,请替换为实际的文件名。

  2. 绘制1月1日至10日的猪肉价格和牛肉价格走势图:使用matplotlib库来绘制这段时间的价格走势图。

  3. 在同一个figure界面中,使用2×1的子图分别绘制2018年1月前半个月的猪肉价格和牛肉价格走势图:在同一个窗口中创建两个子图,一个用于猪肉价格,另一个用于牛肉价格。

按照这些步骤进行操作。首先,将模拟Excel数据并读取到一个数据框中,因为实际Excel文件不可用。然后,绘制所需的图表。

import matplotlib.pyplot as plt  
  
dates = ['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04', '2018-01-05', '2018-01-06', '2018-01-07', '2018-01-08', '2018-01-09', '2018-01-10', '2018-01-11', '2018-01-12', '2018-01-13', '2018-01-14', '2018-01-15']  
prices_chicken = [11, 12, 11.5, 12, 12, 11.2, 13, 12.6, 13.5, 13.9, 13.8, 14, 13.5, 14.5, 14.8]  
prices_beef = [38, 39, 41.3, 40, 43, 44, 47, 43, 42.3, 42, 43.1, 42, 39, 38, 37.5]  
  
plt.figure(figsize=(10, 6))  
plt.plot(dates, prices_chicken, marker='o', label='Chicken Price')  
plt.plot(dates, prices_beef, marker='o', label='Beef Price')  
plt.xlabel('Date')  
plt.ylabel('Price')  
plt.title('Price Trend')  
plt.legend()  
plt.grid(True)  
plt.show()  

执行结果:

在处理子图时犯了一个错误。在子图上,不应该使用ax.xticks(rotation=45)这样的方法,因为这会导致标签重叠。相反,应该在父图上设置X轴标签的旋转角度。因此,将重新绘制图表,这次正确地处理子图。

import matplotlib.pyplot as plt
​
dates = ['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04', '2018-01-05', '2018-01-06', '2018-01-07', '2018-01-08',
         '2018-01-09', '2018-01-10', '2018-01-11', '2018-01-12', '2018-01-13', '2018-01-14', '2018-01-15']
prices_chicken = [11, 12, 11.5, 12, 12, 11.2, 13, 12.6, 13.5, 13.9, 13.8, 14, 13.5, 14.5, 14.8]
prices_beef = [38, 39, 41.3, 40, 43, 44, 47, 43, 42.3, 42, 43.1, 42, 39, 38, 37.5]
​
plt.figure(figsize=(10, 6))
plt.plot(dates, prices_chicken, marker='o', label='Chicken Price')
plt.plot(dates, prices_beef, marker='o', label='Beef Price')
plt.xlabel('Date')
plt.ylabel('Price')
plt.title('Price Trend')
plt.legend()
plt.grid(True)
plt.show()

执行结果:

调试上述错误的同时,更改成中文字符。在Python中,您可以通过设置字体来解决此问题。可以使用matplotlib的matplotlib.rcParams来设置字体,或者在绘制图表时指定字体。以下是一个示例代码,它使用了中文字体:

import matplotlib.pyplot as plt
import matplotlib as mpl
​
# 设置中文字体
mpl.rcParams['font.family'] = ['SimHei']  # 设置中文字体
mpl.rcParams['axes.unicode_minus'] = False  # 解决保存图像时负号'-'显示为方块的问题
​
dates = ['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04', '2018-01-05', '2018-01-06', '2018-01-07', '2018-01-08', '2018-01-09', '2018-01-10', '2018-01-11', '2018-01-12', '2018-01-13', '2018-01-14', '2018-01-15']
pork_prices = [11, 12, 11.5, 12, 12, 11.2, 13, 12.6, 13.5, 13.9, 13.8, 14, 13.5, 14.5, 14.8]
beef_prices = [38, 39, 41.3, 40, 43, 44, 47, 43, 42.3, 42, 43.1, 42, 39, 38, 37.5]
​
plt.figure(figsize=(10,6))
plt.scatter(dates, pork_prices, label='猪肉价格')
plt.scatter(dates, beef_prices, label='牛肉价格', color='grey')
plt.xlabel('日期')
plt.ylabel('价格(元)')
plt.title('猪肉和牛肉价格走势图')
plt.legend()
plt.grid(True)
plt.show()

执行结果:

3.2.3 总结:

源代码:

import matplotlib.pyplot as plt
import matplotlib as mpl
​
# 设置中文字体
mpl.rcParams['font.family'] = ['SimHei']  # 设置中文字体
mpl.rcParams['axes.unicode_minus'] = False  # 解决保存图像时负号'-'显示为方块的问题
​
dates = ['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04', '2018-01-05', '2018-01-06', '2018-01-07', '2018-01-08', '2018-01-09', '2018-01-10', '2018-01-11', '2018-01-12', '2018-01-13', '2018-01-14', '2018-01-15']
pork_prices = [11, 12, 11.5, 12, 12, 11.2, 13, 12.6, 13.5, 13.9, 13.8, 14, 13.5, 14.5, 14.8]
beef_prices = [38, 39, 41.3, 40, 43, 44, 47, 43, 42.3, 42, 43.1, 42, 39, 38, 37.5]
​
plt.figure(figsize=(10,6))
plt.scatter(dates, pork_prices, label='猪肉价格')
plt.scatter(dates, beef_prices, label='牛肉价格', color='grey')
plt.xlabel('日期')
plt.ylabel('价格(元)')
plt.title('猪肉和牛肉价格走势图')
plt.legend()
plt.grid(True)
plt.show()

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1. 数据预处理的目的是什么? 数据预处理的目的是为了减少或消除数据中的噪声、缺失值、异常值等问题,使得数据更加干净、准确、可靠,为后续的数据分析和建模提供良好的数据基础。 2. 数据清洗的主要步骤有哪些? 数据清洗的主要步骤包括数据去重、缺失值处理、异常值处理、数据类型转换和数据标准化等。 3. 数据去重的方法有哪些? 数据去重的方法包括基于列去重、基于行去重和基于列和行的去重。基于列去重是指对某一列中的重复数据进行去重,基于行去重是指对数据表中的重复行进行去重,基于列和行的去重是指同时对某一列和数据表中的重复行进行去重。 4. 缺失值处理的方法有哪些? 缺失值处理的方法包括删除缺失值、插值法、使用相似样本填补缺失值等。删除缺失值是指直接删除包含缺失值的行或列;插值法是指通过对已有数据进行插值估计缺失值;使用相似样本填补缺失值是指利用具有相似特征的样本来填补缺失值。 5. 异常值处理的方法有哪些? 异常值处理的方法包括基于统计学方法、基于聚类方法和基于规则的方法。基于统计学方法是指利用统计学方法对数据进行描述和分析,发现异常值并进行处理;基于聚类方法是指利用聚类算法将数据分成不同的类别,对于不属于任何类别的数据视为异常值并进行处理;基于规则的方法是指利用领域知识或经验规则对数据进行分析和处理。 6. 数据类型转换的方法有哪些? 数据类型转换的方法包括数值型类型转换、字符型类型转换和日期型类型转换等。数值型类型转换是指将数据从字符串类型转换为数值类型,字符型类型转换是指将数据从数值类型转换为字符串类型,日期型类型转换是指将数据从字符串类型转换为日期类型。 7. 数据标准化的方法有哪些? 数据标准化的方法包括最小-最大标准化、z-score标准化和小数定标标准化等。最小-最大标准化是指将数据缩放到[0,1]区间内;z-score标准化是指将数据转换为均值为0,标准差为1的正态分布;小数定标标准化是指将数据除以一个比较大的基数,使得所有数据都在[-1,1]之间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yueqingll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值