Pandas 数据分析实验:Series、DataFrame 操作、数据清洗与可视化
Pandas 数据分析实验
一. 实验目的
- 掌握 Series 和 DataFrame 的创建;
- 熟悉 pandas 数据清洗和数据分析的常用操作;
- 掌握使用 matplotlib 库画图的基本方法。
二. 实验平台
- 操作系统:Windows 系统;
- Python 版本:3.8.7
三. 实验步骤
1. 基础练习
- 根据列表 ['Python', 'C', 'Scala', 'Java', 'GO', 'Scala', 'SQL', 'PHP', 'Python'] 创建一个变量名为 language 的 Series;
- 创建一个由随机整型组成的 Series,要求长度与 language 相同,变量名为 score;
- 根据 language 和 score 创建一个 DataFrame;
- 输出该 DataFrame 的前 4 行数据;
- 输出该 DataFrame 中 language 字段为 Python 的行;
- 将 DataFrame 按照 score 字段的值进行升序排序;
- 统计 language 字段中每种编程语言出现的次数。
2. 酒类消费数据
给定一个某段时间内各个国家的酒类消费数据表 drinks.csv,其中包含 6 个字段,表 8-1 给出了该表中的字段信息。
| 字段名 | 描述 |
|---|---|
| Country | 国家 |
| beer_servings | 啤酒消费量 |
| spirit_servings | 烈酒消费量 |
| wine_servings | 红酒消费量 |
| total_litres_of_pure_alcohol | 纯酒精消费总量 |
| Continent | 所在的大洲 |
完成以下的任务:
- 用 pandas 将酒类消费数据表中的数据读取为 DataFrame,输出包含缺失值的行;
- 在使用 read_csv 函数读取酒类消费数据表时(除文件地址外不添加额外的参数),pandas 将 continent 字段中的 'NA'(代表北美洲,North American)自动识别为 NaN。因此,需要将 continent 字段中的 NaN 全部替换为字符串 NA。如果学有余力,可以自行在网络上调研如何在 read_csv 函数中添加参数使 NA 不被识别为 NaN;
- 分别输出各个大洲的平均啤酒、烈酒和红酒的消费量;
- 分别输出啤酒、烈酒和红酒消费量最高的国家。
3. 狗狗币的历史价格
狗狗币(Dogecoin)是世界上用户数量仅次于比特币的第二大虚拟货币。给定一个狗狗币 2014 年 9 月 17 日至 2021 年 3 月 1 日的历史价格表 DOGE-USD.csv,里面包含了 6 个字段,表 8-2 给出了该表中的字段信息。
| 字段名 | 描述 |
|---|---|
| Date | 日期 |
| Open | 当天的开盘价格 |
| High | 当天的最高价格 |
| Low | 当天的最低价格 |
| Close | 当天的收盘价格 |
| Volume | 当天的成交量 |
完成以下的任务:
- 用 pandas 将历史价格表中的数据读取为 DataFrame,并查看各个列的数据类型。在读取数据时,pandas 是否将表中的日期字段自动读取为日期类型?若否,则将其转换为日期类型;
- 该 DataFrame 中是否存在缺失值?若是,则输出数据缺失的日期,并用前一交易日的数据填充缺失值;
- 分别输出狗狗币价格的最高值与最低值,并分别输出达到最高值与最低值的日期;
- 画出狗狗币每天最高价格的折线图(横轴为日期);
- 画出狗狗币成交量的折线图(横轴为日期)。由于成交量字段中的数据数量级变化较大,直接画图无法直观地观察出其变化趋势,尝试画出更直观的成交量折线图(提示:取对数)。
代码示例
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()
原文地址: https://www.cveoy.top/t/topic/oW53 著作权归作者所有。请勿转载和采集!