一实验目的1掌握Series和DataFrame的创建;2熟悉pandas数据清洗和数据分析的常用操作;3掌握使用matplotlib库画图的基本方法。二实验平台1操作系统:Windows系统;2Python版本:387三实验步骤3 狗狗币的历史价格狗狗币Dogecoin是世界上用户数量仅次于比特币的第二大虚拟货币。给定一个狗狗币2014年9月17日至2021年3月1日的历史价格表DOGE-USD
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/hvlq 著作权归作者所有。请勿转载和采集!