python科学计算4

1. 从“国民经济核算季度数据.npz”文件中读取2000年第一季度到2017年第一季度的所有数据并存储在ndarray对象中。

(1) 创建一个DataFrame对象,其数值数组不包含原ndarray对象的第0列和最后一行数据(即不包含“序号”那一列数据和“2017年第一季度”那一行数据);其列索引为:['时间', 'GDP', '一产', '二产', '三产', '农业', '工业', '建筑', '批发', '交通',  '餐饮', '金融', '房地产', '其他'];

(2) 按“年份”分组(需提取“时间”那一列数据中包含的“年份”信息)。在此基础上,计算每年总的GDP,三个产业以及各行业的全年GDP;(“年份”的跨度为:2000~2016年。或许在这一步,你能用上df.astype()函数呦!)

(3) 在每个年份上,计算三个产业的全年GDP之和以及各行业的全年GDP之和;并分别以“产业GDP之和”和“行业GDP之和”为列索引名将计算结果添加到对应的DataFrame对象中。

(4) 在每个年份上,分别计算“产业GDP之和”之于年“GDP”(年“GDP”就是第(2)小题所说的每年总的GDP,也就是每年4个季度的GDP之和)以及“行业GDP之和”之于年“GDP”的相对误差,计算公式为(以“产业……”为例):

(“产业GDP之和”-“GDP”)/“GDP”

然后,分别以“产业之和的误差”和“行业之和的误差”为列索引名将计算结果添加到对应的DataFrame对象中;

(5) 抽取并输出“GDP”,“产业GDP之和”,“产业之和的误差”,“行业GDP之和”,“行业之和的误差”这几列数据,其部分显示结果如下所示:

GDP        产业GDP之和   产业之和的误差   行业GDP之和   行业之和的误差

2000      100280.1      100280.0      -9.972068e-07    100280.0      -9.972068e-07

2001      110863.1      110863.1      0.000000e+00     110863.1      0.000000e+00

2002      121717.4      121717.4      -1.195549e-16    121717.5      8.215752e-07

……     ……      ……         ……        ……        ……

2015      689052.0      689052.2      2.902539e-07      689051.9      -1.451269e-07

2016      744127.2      744127.3      1.343856e-07      744127.2      0.000000e+00

仔细看看是不是所有误差都在万分之一以内,并以此来判定“国民经济核算季度数据.npz”文件中的数据是不是“有效”的;

(6) 如果数据是有效的,将第(2)小题分组计算所得的DataFrame对象的行索引命名为“年份”。然后再将该数据(包括行索引和列索引)存储在“GDP年度数据.csv”文件中。

import numpy as np
import pandas as pd

loaded_data = np.load(r"D:\A学习\python科学计算\实验\4\data\国民经济核算季度数据.npz", allow_pickle=True)
kfeature_names, kdata = loaded_data.keys()
data = loaded_data[kdata]

df = pd.DataFrame(data[:-1, 1:],
                  columns=['时间', 'GDP', '一产', '二产', '三产', '农业', '工业', '建筑', '批发', '交通', '餐饮', '金融', '房地产', '其他'])

mark = []
for i in df['时间']:
    mark.append(int(i[:4]))

df1 = df.groupby(mark).agg('sum')
df1['时间'] = df1.index
group1 = pd.DataFrame.copy(df1, deep=True)

df1['产业GDP之和'] = df1.iloc[:, 2:5].sum(axis=1)
df1['行业GDP之和'] = df1.iloc[:, 5:].sum(axis=1)
df1['产业之和的误差'] = (df1['产业GDP之和'] - df1['GDP']) / df1['GDP']
df1['行业之和的误差'] = (df1['行业GDP之和'] - df1['GDP']) / df1['GDP']
print(df1.loc[:, ['GDP', '产业GDP之和', '产业之和的误差', '行业GDP之和', '行业之和的误差']])
group1.to_csv(r"D:\\A学习\\python科学计算\\实验\\4\\GDP年度数据.csv", encoding="utf-8")

2. “mtcars.csv”文件中存储了某些汽车型号的特征数据,包括name(汽车型号),cyl(汽缸数),carb(化油器),mpg(油耗),hp(马力)等特征。

(1) 使用pandas读取mtcars数据集,输出数据集的大小(shape);

(2) 抽取并输出5个数值型特征的描述性统计信息,自行解释这些数据的含义;

(3) 按cyl和carb进行分组,计算并输出hp列每个分组所包含的有效数据的个数、每个分组的最大马力、每个分组的最小马力以及mpg列每个分组所包含的有效数据的个数、每个分组的平均油耗。

import numpy as np
import pandas as pd

df = pd.read_csv(r"D:\A学习\python科学计算\实验\4\mtcars.csv")
print(df.shape)
print(df)
print(df.describe())
print(df.groupby(['cyl', 'carb']).agg({'hp': ['count', 'max', 'min'], 'mpg': ['count', 'mean']}))

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值