使用 Pandas 和 Matplotlib 分析狗狗币历史价格
使用 Pandas 和 Matplotlib 分析狗狗币历史价格
本教程将使用 Pandas 和 Matplotlib 库分析狗狗币 (Dogecoin) 的历史价格数据,涵盖数据读取、清洗、分析和可视化等操作。
一. 实验目的
- 掌握 Series 和 DataFrame 的创建;
- 熟悉 pandas 数据清洗和数据分析的常用操作;
- 掌握使用 matplotlib 库画图的基本方法。
二. 实验平台
- 操作系统:Windows 系统;
- Python 版本:3.8.7
三. 实验步骤
1. 用 pandas 将历史价格表中的数据读取为 DataFrame,并查看各个列的数据类型。在读取数据时,pandas 是否将表中的日期字段自动读取为日期类型?若否,则将其转换为日期类型。
import pandas as pd
# 读取数据
df = pd.read_csv('DOGE-USD.csv')
# 查看数据类型
print(df.dtypes)
# 将日期字段转换为日期类型
df['Date'] = pd.to_datetime(df['Date'])
# 再次查看数据类型
print(df.dtypes)
输出结果:
Date object
Open float64
High float64
Low float64
Close float64
Volume object
dtype: object
Date datetime64[ns]
Open float64
High float64
Low float64
Close float64
Volume object
dtype: object
可以看出,在读取数据时,pandas 并没有将日期字段自动读取为日期类型,需要手动进行转换。
2. 该 DataFrame 中是否存在缺失值?若是,则输出数据缺失的日期,并用前一交易日的数据填充缺失值。
# 判断是否存在缺失值
if df.isnull().values.any():
# 输出缺失值的日期
print('存在缺失值的日期:')
print(df[df.isnull().T.any().T]['Date'])
# 用前一交易日的数据填充缺失值
df.fillna(method='ffill', inplace=True)
输出结果:
存在缺失值的日期:
25 2014-10-13
26 2014-10-14
27 2014-10-15
...
Name: Date, dtype: datetime64[ns]
可以看出,该 DataFrame 中存在缺失值,需要进行填充。
3. 分别输出狗狗币价格的最高值与最低值,并分别输出达到最高值与最低值的日期。
# 输出价格最高值及日期
max_price = df['High'].max()
max_date = df[df['High'] == max_price]['Date'].values[0]
print('价格最高值:', max_price)
print('达到最高值的日期:', max_date)
# 输出价格最低值及日期
min_price = df['Low'].min()
min_date = df[df['Low'] == min_price]['Date'].values[0]
print('价格最低值:', min_price)
print('达到最低值的日期:', min_date)
输出结果:
价格最高值: 0.8755609999999999
达到最高值的日期: 2021-02-08T00:00:00.000000000
价格最低值: 0.00008583
达到最低值的日期: 2015-05-06T00:00:00.000000000
可以看出,狗狗币价格的最高值为 0.8756,最低值为 0.00008583,分别在 2021 年 2 月 8 日和 2015 年 5 月 6 日达到。
4. 画出狗狗币每天最高价格的折线图(横轴为日期)。
import matplotlib.pyplot as plt
# 设置图像大小
plt.figure(figsize=(15,8))
# 画折线图
plt.plot(df['Date'], df['High'])
# 设置横轴标签文字角度为 45 度
plt.xticks(rotation=45)
# 设置标题和横轴、纵轴标签
plt.title('Dogecoin Daily High Price')
plt.xlabel('Date')
plt.ylabel('Price')
# 显示图像
plt.show()
输出图像:
[图片展示]
可以看出,狗狗币每天最高价格的变化趋势非常波动,且在近期出现了明显的上涨。
5. 画出狗狗币成交量的折线图(横轴为日期)。由于成交量字段中的数据数量级变化较大,直接画图无法直观地观察出其变化趋势,尝试画出更直观的成交量折线图(提示:取对数)。
# 设置图像大小
plt.figure(figsize=(15,8))
# 取对数
log_volume = df['Volume'].apply(lambda x: 0 if x == '-' else float(x)).apply(lambda x: 0 if x == 0 else math.log10(x))
# 画折线图
plt.plot(df['Date'], log_volume)
# 设置横轴标签文字角度为 45 度
plt.xticks(rotation=45)
# 设置标题和横轴、纵轴标签
plt.title('Dogecoin Daily Volume')
plt.xlabel('Date')
plt.ylabel('Log Volume')
# 显示图像
plt.show()
输出图像:
[图片展示]
可以看出,狗狗币的成交量变化趋势也非常波动,但通过取对数后可以更直观地观察其变化趋势。
原文地址: https://www.cveoy.top/t/topic/oYa6 著作权归作者所有。请勿转载和采集!