Numpy、Pandas和Matplotlib的基本使用实验

目录

Numpy实验

Pandas实验

数据可视化实验

                                          Numpy实验

  • 实验目的

Numpy库,了解什么是numpy,学习numpy的基础、常用方法及常用统计方法。

  • 实验要求
  1. 使用numpy完成基本的数据创建与处理。
  2. 完成练习,撰写实验报告。
  • 实验内容

使用macrodate.csv文件进行统计

  •  实验代码
import numpy as np

data = np.genfromtxt('../macrodata.csv', delimiter=',', dtype=np.float32, filling_values=0)

print('*'*70)
print('*'*22,'1959年-2009年的经济数据分析','*'*22)
print('*'*70)

# 计算第三至七列的平均值,得到1959年-2009年以下平均值:
mean1 = np.mean(data[:, 2])
print('实际国内生产总值的平均值为:', mean1)
mean2 = np.mean(data[:, 3])
print('实际消费支出的平均值为:', mean2)
mean3 = np.mean(data[:, 4])
print('实际投资支出的平均值为:', mean3)
mean4 = np.mean(data[:, 5])
print('实际政府支出的平均值为:', mean4)
mean5 = np.mean(data[:, 6])
print('实际可支配个人收入的平均值为:', mean5)

print('*'*70)

# 计算第三至七列的标准差,得到1959年-2009年以下标准差:
std1 = np.std(data[:, 2])
print('实际国内生产总值的标准差为:', std1)
std2 = np.std(data[:, 3])
print('实际消费支出的标准差为:', std2)
std3 = np.std(data[:, 4])
print('实际投资支出的标准差为:', std3)
std4 = np.std(data[:, 5])
print('实际政府支出的标准差为:', std4)
std5 = np.std(data[:, 6])
print('实际可支配个人收入的标准差为:', std5)

print('*'*70)

# 计算第三至七列的最大值,得到1959年-2009年以来最大值:
max_value1 = np.max(data[:, 2])
print('实际国内生产总值的最大值为:', max_value1)
max_value2 = np.max(data[:, 3])
print('实际消费支出的最大值为:', max_value2)
max_value3= np.max(data[:, 4])
print('实际投资支出的最大值为:', max_value3)
max_value4 = np.max(data[:, 5])
print('实际政府支出的最大值为:', max_value4)
max_value5 = np.max(data[:, 6])
print('实际可支配个人收入的最大值为:', max_value5)

print('*'*70)

# 计算第三至七列的最小值,得到1959年-2009年以来最小值:
min_value1 = np.min(data[:, 2])
print('实际国内生产总值的最小值为:', min_value1)
min_value2 = np.min(data[:, 3])
print('实际消费支出的最小值为:', min_value2)
min_value3= np.min(data[:, 4])
print('实际投资支出的最小值为:', min_value3)
min_value4 = np.min(data[:, 5])
print('实际政府支出的最小值为:', min_value4)
min_value5 = np.min(data[:, 6])
print('实际可支配个人收入的最小值为:', min_value5)

print('*'*70)

# 计算第三至七列的中位数,得到1959年-2009年以下中位数:
median1 = np.median(data[:, 2])
print('实际国内生产总值的中位数为:', median1)
median2 = np.median(data[:, 3])
print('实际消费支出的中位数为:', median2)
median3 = np.median(data[:, 4])
print('实际投资支出的中位数为:', median3)
median4 = np.median(data[:, 5])
print('实际政府支出的中位数为:', median4)
median5 = np.median(data[:, 6])
print('实际可支配个人收入的中位数为:', median5)

print('*'*70)

# 计算CPI的平均值
cpi_mean = np.mean(data[:, 7])
print('CPI的平均值为:', cpi_mean)

# 计算M1货币供应量的标准差
m1_std = np.std(data[:, 8])
print('M1货币供应量的标准差为:', m1_std)

# 计算国债利率的中位数
tbilrate_median = np.median(data[:, 9])
print('国债利率的中位数为:', tbilrate_median)

# 计算失业率的平均值、标准差和中位数
unemp_mean = np.mean(data[:, 10])
unemp_std = np.std(data[:, 10])
unemp_median = np.median(data[:, 10])
print('失业率的平均值为:', unemp_mean)
print('失业率的标准差为:', unemp_std)
print('失业率的中位数为:', unemp_median)

print('*'*70)

# 计算人口和失业率之间的相关系数
corr = np.corrcoef(data[:, 11], data[:, 10])
print('人口和失业率之间的相关系数为:', corr[0, 1])
  • 运行结果

  • 实验体会

(如:实验遇到的问题及解决办法)

问题:

  1. 数据一开始使用科学计数法显示
  2. 导入数据后文字格里出现nan

解决方案:

  1. 使用:np.set_printoptions(suppress=True)  # 禁用科学计数法  dtype=np.float32修改代码
  2. 使用:filling_values=0填充丢失的数据

Pandas实验

  • 实验目的

Pandas库,了解什么是Pandas,学习pandas的常用数据类型(Series一维、DataFrame二维)等。

  • 实验要求
  1. 使用Series、DataFrame,完成基本的数据创建与处理。
  2. 完成练习,撰写实验报告。
  • 实验内容

使用macrodate.csv文件进行基本操作及统计分析

  • 实验代码
import pandas as pd
import numpy as np
# 读取数据
data = pd.read_csv('../macrodata.csv')
# 填充缺失值
data.fillna(0)

print('*'*20,'索引和切片','*'*20)
# 按标签索引
data2 = data.loc[2]  # 返回第3行的数据
print(data2)
# 按位置索引
data23 = data.iloc[1:3]  # 返回第2行和第3行的数据
print(data23)

print('*'*20,'相关系数、协方差、标准差、方差','*'*20)
# 计算标准差
std = data['cpi'].std()
print('消费者价格指数(CPI)的标准差为:',std)
# 计算方差
var = data['cpi'].var()
print('消费者价格指数(CPI)的方差差为:',var)
# 计算相关系数
corr = data['unemp'].corr(data['pop'])
print('失业率与人口之间的相关系数为:',corr)
# 计算协方差
cov = data['unemp'].cov(data['pop'])
print('失业率与人口之间的协方差为:',cov)
# 判断相关性
if cov > 0:
    print("失业率和人口之间存在正相关")
elif cov < 0:
    print("失业率和人口之间存在负相关")
else:
    print("失业率和人口之间不存在线性关系")


print('*'*20,'查看前5行数据','*'*20)
print(data.head())
print('*'*20,'查看数据基本信息','*'*20)
print(data.info())
print('*'*20,'查看列名','*'*20)
print(data.columns)
print('*'*20,'查看统计摘要信息','*'*20)
print(data.describe())


print('*'*20,'年份信息','*'*20)
col_1 = data['year']  # 获取一列,用一维数据
data_1 = np.array(col_1)
data_1_unique = col_1.drop_duplicates()  # 去重一维数据
print(data_1_unique)

print('*'*20,'年份、季度信息','*'*20)
col_2 = data[['year','quarter']]  # 获取两列,要用二维数据
data_2 = np.array(col_2)
data_2_unique = col_2.drop_duplicates()   # 去重二维数据
print(data_2_unique)

print('*'*20,'条件筛选','*'*20)
data_3 = data[data['realint'] > 2]
print(data_3.head(10))   # 筛选实际利率(realint)列大于2.0的前十行

print('*'*20,'排序','*'*20)
data_4 = data.sort_values(by='cpi')
print(data_4.head(10))   # 按照消费者物价指数(cpi)列进行排序后的DataFrame的前10行数据
  • 运行结果

  • 实验体会

(如:实验遇到的问题及解决办法)

问题: 无

解决方案:无

相对Numpy,Pandas操作比Numpy清晰,简单得多;Pandas在导入数据、处理数据和操作数据方面提供了更为简单和清晰的方法

  1. 导入数据:Pandas提供了read_csv()、read_excel()等函数,可以直接从文件中读取数据,并将其转换为DataFrame对象。这些函数具有灵活的参数设置,可以自动处理各种数据格式和缺失值。
  2. 数据结构:Pandas的核心数据结构是DataFrame,它是一个二维表格,每列可以是不同的数据类型。DataFrame提供了各种操作和方法,使得数据处理更加方便。
  3. 数据选择和过滤:Pandas使用标签索引而不是传统的数字索引,这使得数据选择和过滤更加直观和清晰。可以使用列标签或条件表达式来选择特定的行和列,还可以通过逻辑运算符组合多个条件。
  4. 缺失值处理:Pandas内置了处理缺失值的方法,例如dropna()函数可以删除包含缺失值的行或列,fillna()函数可以用指定的值填充缺失值。
  5. 数据操作:除了基本的数学运算,Pandas还提供了许多用于数据操作和转换的函数,例如排序、合并、分组、聚合等。这些函数易于使用且功能强大,能够帮助我们快速完成常见的数据处理任务。

数据可视化实验

  • 实验目的

掌握基本图像绘制,学会使用python的函数库绘制图像,初步掌握matplotlib的使用。

  • 实验要求

1.使用完成基本的数据图像绘制任务。

2.完成练习,撰写实验报告。

  • 实验内容

使用macrodate.csv文件进行统计分析之后绘画图表

  • 实验代码1
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 读取数据
data = pd.read_csv('../macrodata.csv')
plt.rcParams['axes.unicode_minus'] = False   #解决坐标轴刻度负号乱码
plt.rcParams['font.family'] = 'SimHei'  # 设置中文字体为黑体

# 提取所需的列数据
year = np.array(data['year'].values)
realgdp = np.array(data['realgdp'].values)    # 实际国内生产总值
realcons = np.array(data['realcons'].values)  # 实际个人消费支出
realgovt = np.array(data['realgovt'].values)  # 实际政府支出
realdpi = np.array(data['realdpi'].values)    # 实际可支配个人收入

# 创建包含四个子图的画布
fig, ax = plt.subplots(4, 1, figsize=(10, 8))

# 绘制实际国内生产总值(realgdp)随年份的变化趋势
ax[0].plot(year, realgdp, 'b-', label='实际国内生产总值')
ax[0].set_xlabel('年份(year)')    #添加x轴名称
ax[0].set_ylabel('实际国内生产总值(realgdp)')    #设置y轴名称
ax[0].set_title('实际国内生产总值随年份的变化趋势')    #设置标题
ax[0].legend(loc='upper left')    # 将图例放置在左上角

# 绘制实际个人消费支出(realcons)和实际政府支出(realgovt)随年份的变化趋势
ax[1].plot(year, realcons, 'r-', label='实际个人消费支出')
ax[1].plot(year, realgovt, 'g-', label='实际政府支出')
ax[1].set_xlabel('年份(year)')
ax[1].set_ylabel('金额')
ax[1].set_title('实际个人消费支出和实际政府支出随年份的变化趋势')
ax[1].legend(loc='upper left')
'''
# 初始化一个空字典用于存储每个季度的求和结果
sum_data = {}
# 遍历 data 数据框的每一行
for index, row in data.iterrows():
    quarter = row['quarter']
    realdpi = row['realdpi']
    # 检查季度是否已经存在于 sum_data 字典中,如果不存在,则将季度作为键添加到 sum_data 字典中,并将值设为0
    if quarter not in sum_data:
        sum_data[quarter] = 0
    # 将当前季度的值加到对应位置上
    sum_data[quarter] += realdpi'''

sum_data = {'第一季度': realdpi[::4].sum(),
            '第二季度': realdpi[1::4].sum(),
            '第三季度': realdpi[2::4].sum(),
            '第四季度': realdpi[3::4].sum()}
# 所需的数据
labels = ['第一季度', '第二季度', '第三季度', '第四季度']
sizes = [sum_data[quarter] for quarter in sum_data]
# 绘制柱状图
ax[2].bar(labels, sizes)
ax[2].set_xlabel('季度(quarter)')
ax[2].set_ylabel('实际可支配个人收入')
ax[2].set_title('各季度实际可支配个人总收入')
# 调整子图之间的垂直间距
plt.subplots_adjust(hspace=0.5)

# 求平均值
means = data.iloc[:,2:7].mean()
# 绘制直方图
ax[3].bar(range(5), means)
ax[3].set_xticks(range(5))
ax[3].set_xticklabels(['实际国内生产总值', '实际消费支出', '实际投资支出', '实际政府支出', '实际可支配个人收入'])
ax[3].set_title('各指标的平均值')

# 显示所有图像
plt.tight_layout()  # 自动调整子图之间的间距,避免重叠
plt.show()
  •  运行结果1

 

  •  实验代码2
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

data = pd.read_csv('../macrodata.csv')
plt.rcParams['axes.unicode_minus'] = False   #解决坐标轴刻度负号乱码
plt.rcParams['font.family'] = 'SimHei'

data = data[['cpi', 'm1', 'tbilrate', 'unemp']]
trans_data = np.log(data).diff().dropna()

#绘制散点图并加一条回归线
sns.regplot(x='m1', y='unemp', data=trans_data)
plt.xlabel('货币供应量')
plt.ylabel('失业率')
plt.title('对数变化下 %s 与 %s 的对比变化' % ('货币供应量', '失业率'))

plt.show()
  • 运行结果2

  • 实验体会

(如:实验遇到的问题及解决办法)

问题:

  1. 图像不显示文字,显示一些框框
  2. 布局:刚开始没有注意多个图形的布局,导致运行结果只有一幅图

解决方案:

  1. 使用代码:plt.rcParams['font.family'] = 'SimHei'  # 设置中文字体为黑体
  2. 使用代码:fig, ax = plt.subplots(4, 1, figsize=(10, 8))  # 设置多个子图,将代码:plt.show()  放在最后面,确保所有子图都可以显示出来。

  • 19
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值