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']}))