Pandas与Matplotlib数据分析实战:狗狗币历史价格分析
一. 实验目的
(1) 掌握Series和DataFrame的创建; (2) 熟悉pandas数据清洗和数据分析的常用操作; (3) 掌握使用matplotlib库画图的基本方法。
二. 实验平台
(1) 操作系统:Windows系统; (2) Python版本:3.8.7
三. 狗狗币的历史价格
狗狗币(Dogecoin)是世界上用户数量仅次于比特币的第二大虚拟货币。给定一个狗狗币2014年9月17日至2021年3月1日的历史价格表DOGE-USD.csv,里面包含了6个字段,表8-2给出了该表中的字段信息。
表6-2 历史价格表的字段信息
| Date | 日期 | |---|---| | Open | 当天的开盘价格 | | High | 当天的最高价格 | | Low | 当天的最低价格 | | Close | 当天的收盘价格 | | Volume | 当天的成交量 |
四. 实验步骤
(1) 读取数据并查看各个列的数据类型
首先,我们需要导入pandas库并读取数据:
import pandas as pd
df = pd.read_csv('DOGE-USD.csv')
print(df.dtypes)
输出结果如下:
Date object
Open float64
High float64
Low float64
Close float64
Volume float64
dtype: object
可以看到,除了日期(Date)以外,其他字段的数据类型都是浮点型。而日期字段被自动读取为了字符串类型(object)。
接下来,我们需要将日期字段转换为日期类型。可以使用pandas的to_datetime函数来实现:
df['Date'] = pd.to_datetime(df['Date'])
print(df.dtypes)
输出结果如下:
Date datetime64[ns]
Open float64
High float64
Low float64
Close float64
Volume float64
dtype: object
可以看到,日期字段已经被成功转换为了日期类型。
(2) 处理缺失值
接下来,我们需要检查是否存在缺失值并进行处理。可以使用pandas的isnull函数来检查缺失值:
print(df.isnull().sum())
输出结果如下:
Date 0
Open 1
High 1
Low 1
Close 1
Volume 1
dtype: int64
可以看到,除了日期(Date)以外,其他字段中都存在一个缺失值。接下来,我们将使用前一交易日的数据填充这些缺失值。可以使用pandas的fillna函数来实现:
df = df.fillna(method='ffill')
print(df.isnull().sum())
输出结果如下:
Date 0
Open 0
High 0
Low 0
Close 0
Volume 0
dtype: int64
可以看到,所有的缺失值都已经被填充。
(3) 输出最高值与最低值及其日期
接下来,我们需要分别输出狗狗币价格的最高值与最低值,并分别输出达到最高值与最低值的日期。可以使用pandas的max和min函数来实现:
max_price = df['High'].max()
min_price = df['Low'].min()
max_date = df.loc[df['High'] == max_price, 'Date'].iloc[0]
min_date = df.loc[df['Low'] == min_price, 'Date'].iloc[0]
print('最高价:', max_price, ',日期:', max_date)
print('最低价:', min_price, ',日期:', min_date)
输出结果如下:
最高价: 0.087935 ,日期: 2021-02-08 00:00:00
最低价: 0.000086 ,日期: 2015-05-06 00:00:00
(4) 画出每天最高价格的折线图
接下来,我们需要画出狗狗币每天最高价格的折线图。可以使用matplotlib库来实现:
import matplotlib.pyplot as plt
plt.plot(df['Date'], df['High'])
plt.xlabel('日期')
plt.ylabel('最高价')
plt.title('狗狗币历史最高价折线图')
plt.show()
输出结果如下:

(5) 画出成交量的折线图(取对数)
最后,我们需要画出狗狗币成交量的折线图,并使用对数坐标轴来展示数据。
import numpy as np
plt.plot(df['Date'], np.log10(df['Volume']))
plt.xlabel('日期')
plt.ylabel('对数成交量')
plt.title('狗狗币历史成交量折线图')
plt.show()
输出结果如下:

可以看到,通过取对数后,我们可以更直观地观察到成交量的变化趋势。
原文地址: https://www.cveoy.top/t/topic/oXcc 著作权归作者所有。请勿转载和采集!