使用 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()

输出图像:

[图片展示]

可以看出,狗狗币的成交量变化趋势也非常波动,但通过取对数后可以更直观地观察其变化趋势。

使用 Pandas 和 Matplotlib 分析狗狗币历史价格

原文地址: https://www.cveoy.top/t/topic/oYa6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录