NumPy数值计算基础

实验数据:
链接:https://pan.baidu.com/s/1-E2ShVTdI0X5lwDtMLFFsQ
提取码:0929

代码实现:

之前不会的地方:

1.读取文件
使用numpy内置的loadtxt()函数以及这个函数的参数frame:要读取的文件,dtype读取后的数据类型,delimiter:读取文件中的数据分隔符

 #参数列表:fname要读取的文件,dtype读取后的数据类型,delimiter读取文件中数据的分隔符self.data=np.loadtxt(fname=path,dtype=str,delimiter=',')

2.数据的切分索引

self.data=self.data[1:,:]#去掉第一行(标签行)
self.colindex=self.data[0,:]#得到标签行

3.将数据中的年份季度带小数的浮点数转化为不带浮点数的整数使用了numpy中的np.char.replace()函数

 #需要将数据中的年份和季度中的小数部分去掉
self.data[:,:2]=np.char.replace(self.data[:,:2],'.0','')
#data[:,:2]是数据中的前两列

4.查找满足条件的行索引

 index = np.where((self.data[:, 0] == year) & (self.data[:, 1] == quarter))  # 使用where方法返回符合给定年份和季度的行索引

5.实现变量的展平

import numpy as npfp='./macrodata.csv'#要读取的文件
op='./test.csv'#输出文件class processdata:colmap = {'year': 0, 'quarter': 1, 'gdp': 2, 'realcons': 3, 'realinv': 4, 'realgovt': 5, 'realdpi': 6, 'cpi': 7, \'m1': 8, 'tbilrate': 9, 'unemp': 10, 'pop': 11, 'infl': 12, 'realint': 13}  # 定义一个字典,用来转换字符串列名与列索引def __init__(self,path):#定义构造函数#参数列表:fname要读取的文件,dtype读取后的数据类型,delimiter读取文件中数据的分隔符self.data=np.loadtxt(fname=path,dtype=str,delimiter=',')self.data=self.data[1:,:]#去掉第一行(标签行)self.colindex=self.data[0,:]#得到标签行#需要将数据中的年份和季度中的小数部分去掉self.data[:,:2]=np.char.replace(self.data[:,:2],'.0','')#data[:,:2]是数据中的前两列def lookupdata(self,year,quarter,col):#查看任意时间点的GDP或者人口信息 col传入gdp或popyear = str(int(year))quarter = str(int(quarter))index = np.where((self.data[:, 0] == year) & (self.data[:, 1] == quarter))  # 使用where方法返回符合给定年份和季度的行索引index = np.array(index)result = 'The ' + col + ' in quarter ' + str(quarter) + ', year ' + str(year) + ' is 'if index.size == 0:  # 若没有查找到符合条件的行tmp = np.where(self.data[:, 0] == year)tmp = np.array(tmp)if tmp.size == 0:  # 若没有找到该年份的行error = 'The given year ' + str(year) + ' is out of range...'else:  # 找到年份但没找到对应的季度error = 'The given quarter ' + str(quarter) + ' is not found for the given year ' + str(year) + '...'print(error)return errorelse:  # 找到了符合条件的结果print(result + str(self.data[index[0][0]][processdata.colmap[col]]) + '...')return self.data[index[0][0]][processdata.colmap[col]]def calPerCapitaGDP(self, year, quarter):  # 计算人均GDPyear = str(int(year))quarter = str(int(quarter))index = np.where((self.data[:, 0] == year) & (self.data[:, 1] == quarter))  # 使用where方法返回符合给定年份和季度的行索引index = np.array(index)result = 'The Per Capita GDP in quarter ' + str(quarter) + ', year ' + str(year) + ' is 'if index.size == 0:  # 若没有查找到符合条件的行tmp = np.where(self.data[:, 0] == year)tmp = np.array(tmp)if tmp.size == 0:  # 若没有找到该年份的行error = 'The given year ' + str(year) + ' is out of range...'else:  # 找到年份但没找到对应的季度error = 'The given quarter ' + str(quarter) + ' is not found for the given year ' + str(year) + '...'print(error)return errorprint(result + str(float(self.data[index[0][0]][2]) / float(self.data[index[0][0]][11])) + '...')  # 第二列数据/第11列数据return float(self.data[index[0][0]][2]) / float(self.data[index[0][0]][11])def flattendata(self, col=['gdp', 'pop']):  # 展平方法collist = [processdata.colmap[i] for i in col]  # 将要展平的列的列名转换成对应的数值索引data = self.data[:, collist]  # 提取这些列的数据colarr = np.zeros((self.data.shape[0], 1), dtype=np.float)indexdata = self.data[:, [0, 1]]  # 提取年份和季度信息indexdata = indexdata.repeat(len(col), axis=0)  # 对年份和季度两列进行纵向重复,重复的次数为要展平的列数,repeat是对所有行整个进行重复newdata = data.flatten().reshape(-1, 1)  # 使用flatten方法将要展平的列展平,并转为列向量newcol = collist * self.data.shape[0]  # 将要展平的列的列号整个进行横向重复(与repeat重复方式对应),重复次数为原始数据的行数newcol = np.array(newcol).reshape(-1, 1)tmp = np.hstack((indexdata, newdata))  # 将重复后的日期季度列与展平后的列向量进行横向合并tmp = np.hstack((tmp, newcol))  # 再与其原数据所在列号生成的列进行横向合并newcolindex = np.array(['year', 'quarter', 'values', 'columns number'])tmp = np.vstack((newcolindex, tmp))  # 添加新的列名return tmpdef printdata(self):data1 = np.vstack((self.data[:, 2].reshape(-1, 1), self.data[:, 11].reshape(-1, 1)))print(data1.shape)prdata=processdata(fp)#定义了一个类对象来实现这些方法
print('(a):')
prdata.lookupdata(2000,1,'gdp')
print('(b):')
prdata.lookupdata(2000,1,'pop')
print('(c):')
prdata.lookupdata(2020,1,'gdp')
print('(d):')
prdata.lookupdata(2000,6,'pop')
print('(e):')
prdata.calPerCapitaGDP(2000,1)
print('(f):')
flatdata=prdata.flattendata()np.savetxt(op,flatdata,delimiter=',',fmt='%s')#保存展平后的结果print('End!')
input('按回车键结束')

数据科学与python语言实验——NumPy数值计算基础相关推荐

  1. 数据科学导论python语言实现_数据科学导论:Python语言实现(原书第2版)

    数据科学导论:Python语言实现(原书第2版) 作者:(意)阿尔贝托·博斯凯蒂(Alberto Boschetti);(意)卢卡·马萨罗(Luca Massaron) 著 出版日期:2018年01月 ...

  2. 数据科学与python语言——Pandas统计分析基础(时间转换+聚合)

    Pandas统计分析基础(时间转换+聚合) 实验要求一 实验二要求 全部代码 实验要求一 #M表的时间戳类型转为datetime data_Mete['TIMESTAMP']=pd.to_dateti ...

  3. 数据科学与python语言——Matplotlib数据可视化基础

    Matplotlib数据可视化基础 一.读取数据与数据处理阶段 1.提取指定行中的数据 2.得到>指定数值的数据 3.得到=指定值得数据 4.整体的数据处理: 二.画图函数 1.plt.subp ...

  4. 《数据科学:R语言实现》——2.7 爬取网络数据

    本节书摘来自华章计算机<数据科学:R语言实现>一书中的第2章,第2.7节,作者 丘祐玮(David Chiu),更多章节内容可以访问云栖社区"华章计算机"公众号查看. ...

  5. Python数据分析——NumPy数值计算基础(二)

    Python数据分析--NumPy数值计算基础(二) 思维导图: 数据的csv文件存取 csv(Comma-Separated Value,逗号分隔值)文件:是一种常见的文件格式,用来存储批量数据. ...

  6. 《数据科学:R语言实现》——3.9 排列数据

    本节书摘来自华章计算机<数据科学:R语言实现>一书中的第3章,第3.9节,作者 丘祐玮(David Chiu),更多章节内容可以访问云栖社区"华章计算机"公众号查看. ...

  7. 《数据科学:R语言实现》——3.12 估计缺失数据

    本节书摘来自华章出版社<数据科学:R语言实现>一 书中的第3章,第3.12节,作者:R for Data Science Cookbook 丘祐玮(David Chiu),更多章节内容可以 ...

  8. 《数据科学:R语言实现》——2.5 使用Excel文件

    本节书摘来自华章计算机<数据科学:R语言实现>一书中的第2章,第2.5节,作者 丘祐玮(David Chiu),更多章节内容可以访问云栖社区"华章计算机"公众号查看. ...

  9. 《数据科学:R语言实现》——第1章 R中的函数

    本节书摘来自华章出版社<数据科学:R语言实现>一 书中的第1章,第1.1节,作者:R for Data Science Cookbook 丘祐玮(David Chiu),更多章节内容可以访 ...

最新文章

  1. Android移动开发之【Android实战项目】DAY10-App端耗流量场景问题及减少消耗办法
  2. 取代C语言的标准输入输出:cin 和 cout【C++标准输入输出】
  3. SAP UI5 binding syntax - model name + + attribute name
  4. 图像标注技巧_保护互联网上图像的一个简单技巧
  5. Neo4j fails creating index,创建索引失败
  6. Codeforces Round #207 (Div. 1) B. Xenia and Hamming(gcd的运用)
  7. read .off file in matlab
  8. html view设置全屏,uni-app 如何设置web-view 不全屏,不自动铺满,动态控制web-view的高度...
  9. Mac下安装atari_py报错Exception: ROM is missing for pong
  10. win 10 使用技巧总结
  11. Java计算加权平均成绩
  12. ASPF与NAT ALG的工作原理与应用
  13. app内录屏开发 ios_iOS端屏幕录制Replaykit项目实践
  14. WordPress使用SQL语句批量替换失效的蓝奏云下载地址
  15. NVIDIA GEFORCE 2080 / 2080 SUPER / 2080 Ti + CUDA Toolkit 8.0 深度学习模型加载速度慢
  16. 2012年宝兰德软件技术服务有限公司三句半节目台词
  17. CSDN高手速成宝典(高手:zjcxc)
  18. 暗影精灵8安装ubuntu18.04双系统后wifi适配器(没有wifi图标)缺少
  19. 计算机专业集齐七龙珠,集齐七颗龙珠 为你召唤一台飞行堡垒8
  20. 最受欢迎的 Linux 怎么是它,Ubuntu 排第六

热门文章

  1. 第二章 指南(4.3)添加 View
  2. php 随机指定位数,php生成一个可选位数的随机码
  3. 【ArcGIS风暴】ArcGIS生成GlobeLand30土地利用数据集中国区域行列号shp格式对照图(附shp下载)
  4. Android Studio开发基础之Service
  5. Windows 7旗舰版安装Visual Studio 2013 Ultimate的系统必备及注意事项
  6. Android之检查跳转的Activity是否存在
  7. linux之在当前目录下删除不包含aa的文件
  8. [python opencv 计算机视觉零基础到实战] 十八、用鼠标进行画画
  9. php基础教程 第十步 阶段性知识补充
  10. 【C语言简单说】三:整数变量和输出扩展(1)