Pandas 数据分析实验

一. 实验目的

  1. 掌握 Series 和 DataFrame 的创建;
  2. 熟悉 pandas 数据清洗和数据分析的常用操作;
  3. 掌握使用 matplotlib 库画图的基本方法。

二. 实验平台

  1. 操作系统:Windows 系统;
  2. Python 版本:3.8.7

三. 实验步骤

1. 基础练习

  1. 根据列表 ['Python', 'C', 'Scala', 'Java', 'GO', 'Scala', 'SQL', 'PHP', 'Python'] 创建一个变量名为 language 的 Series;
  2. 创建一个由随机整型组成的 Series,要求长度与 language 相同,变量名为 score;
  3. 根据 language 和 score 创建一个 DataFrame;
  4. 输出该 DataFrame 的前 4 行数据;
  5. 输出该 DataFrame 中 language 字段为 Python 的行;
  6. 将 DataFrame 按照 score 字段的值进行升序排序;
  7. 统计 language 字段中每种编程语言出现的次数。

2. 酒类消费数据

给定一个某段时间内各个国家的酒类消费数据表 drinks.csv,其中包含 6 个字段,表 8-1 给出了该表中的字段信息。

字段名 描述
Country 国家
beer_servings 啤酒消费量
spirit_servings 烈酒消费量
wine_servings 红酒消费量
total_litres_of_pure_alcohol 纯酒精消费总量
Continent 所在的大洲

完成以下的任务:

  1. 用 pandas 将酒类消费数据表中的数据读取为 DataFrame,输出包含缺失值的行;
  2. 在使用 read_csv 函数读取酒类消费数据表时(除文件地址外不添加额外的参数),pandas 将 continent 字段中的 'NA'(代表北美洲,North American)自动识别为 NaN。因此,需要将 continent 字段中的 NaN 全部替换为字符串 NA。如果学有余力,可以自行在网络上调研如何在 read_csv 函数中添加参数使 NA 不被识别为 NaN;
  3. 分别输出各个大洲的平均啤酒、烈酒和红酒的消费量;
  4. 分别输出啤酒、烈酒和红酒消费量最高的国家。

3. 狗狗币的历史价格

狗狗币(Dogecoin)是世界上用户数量仅次于比特币的第二大虚拟货币。给定一个狗狗币 2014 年 9 月 17 日至 2021 年 3 月 1 日的历史价格表 DOGE-USD.csv,里面包含了 6 个字段,表 8-2 给出了该表中的字段信息。

字段名 描述
Date 日期
Open 当天的开盘价格
High 当天的最高价格
Low 当天的最低价格
Close 当天的收盘价格
Volume 当天的成交量

完成以下的任务:

  1. 用 pandas 将历史价格表中的数据读取为 DataFrame,并查看各个列的数据类型。在读取数据时,pandas 是否将表中的日期字段自动读取为日期类型?若否,则将其转换为日期类型;
  2. 该 DataFrame 中是否存在缺失值?若是,则输出数据缺失的日期,并用前一交易日的数据填充缺失值;
  3. 分别输出狗狗币价格的最高值与最低值,并分别输出达到最高值与最低值的日期;
  4. 画出狗狗币每天最高价格的折线图(横轴为日期);
  5. 画出狗狗币成交量的折线图(横轴为日期)。由于成交量字段中的数据数量级变化较大,直接画图无法直观地观察出其变化趋势,尝试画出更直观的成交量折线图(提示:取对数)。

代码示例

1. 基础练习

# 导入必要的库
import pandas as pd
import numpy as np

# 创建 language 和 score 的 Series
language = pd.Series(['Python', 'C', 'Scala', 'Java', 'GO', 'Scala', 'SQL', 'PHP', 'Python'])
score = pd.Series(np.random.randint(0, 101, len(language)))

# 创建 DataFrame
df = pd.DataFrame({'language': language, 'score': score})

# 输出前 4 行数据
print(df.head(4))

# 输出 language 字段为 Python 的行
print(df[df['language'] == 'Python'])

# 对 DataFrame 按照 score 字段进行升序排序
df = df.sort_values(by='score')

# 统计 language 字段中每种编程语言出现的次数
print(df['language'].value_counts())

2. 酒类消费数据

# 导入必要的库
import pandas as pd
import numpy as np

# 读取酒类消费数据表
df = pd.read_csv('drinks.csv')

# 输出包含缺失值的行
print(df[df.isnull().any(axis=1)])

# 将 continent 字段中的 NaN 全部替换为字符串 NA
df['Continent'].fillna('NA', inplace=True)

# 分别输出各个大洲的平均啤酒、烈酒和红酒的消费量
print(df.groupby('Continent').agg({'beer_servings': 'mean', 'spirit_servings': 'mean', 'wine_servings': 'mean'}))

# 分别输出啤酒、烈酒和红酒消费量最高的国家
print(df.loc[df['beer_servings'].idxmax(), 'Country'])
print(df.loc[df['spirit_servings'].idxmax(), 'Country'])
print(df.loc[df['wine_servings'].idxmax(), 'Country'])

3. 狗狗币的历史价格

# 导入必要的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 读取历史价格表
df = pd.read_csv('DOGE-USD.csv')

# 查看各个列的数据类型,将 Date 列转换为日期类型
print(df.dtypes)
df['Date'] = pd.to_datetime(df['Date'])

# 判断是否存在缺失值,输出数据缺失的日期,并用前一交易日的数据填充缺失值
if df.isnull().values.any():
    print(df[df.isnull().any(axis=1)]['Date'])
    df.fillna(method='ffill', inplace=True)

# 分别输出狗狗币价格的最高值与最低值,并分别输出达到最高值与最低值的日期
max_price = df['High'].max()
min_price = df['Low'].min()
max_date = df.loc[df['High'].idxmax(), 'Date']
min_date = df.loc[df['Low'].idxmin(), 'Date']
print('最高价:{},日期:{}'.format(max_price, max_date))
print('最低价:{},日期:{}'.format(min_price, min_date))

# 画出狗狗币每天最高价格的折线图
plt.plot(df['Date'], df['High'])
plt.xlabel('Date')
plt.ylabel('Price')
plt.title('Dogecoin Highest Price')
plt.show()

# 画出狗狗币成交量的折线图(取对数)
plt.plot(df['Date'], np.log(df['Volume']))
plt.xlabel('Date')
plt.ylabel('Volume (log)')
plt.title('Dogecoin Volume')
plt.show()
Pandas 数据分析实验:Series、DataFrame 操作、数据清洗与可视化

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

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