一. 实验目的

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

输出结果如下:

image-20210702172155810

(5) 画出成交量的折线图(取对数)

最后,我们需要画出狗狗币成交量的折线图,并使用对数坐标轴来展示数据。

import numpy as np

plt.plot(df['Date'], np.log10(df['Volume']))
plt.xlabel('日期')
plt.ylabel('对数成交量')
plt.title('狗狗币历史成交量折线图')
plt.show()

输出结果如下:

image-20210702172300492

可以看到,通过取对数后,我们可以更直观地观察到成交量的变化趋势。

Pandas与Matplotlib数据分析实战:狗狗币历史价格分析

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

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