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. 五大风口产业全景手绘图(新能源汽车、人工智能等)
  2. 【联邦学习】FATE 集群部署 step1
  3. [scala-spark]6. 继承与特质trait
  4. sir跟seir模型有啥区别_H3C B5mini拆机,看一下跟B5有啥区别
  5. 【边缘检测】RCF: Richer Convolutional Features for Edge Detection
  6. 源码阅读 AtomicInteger
  7. 人人开源项目文档_为什么图对于您的开源项目文档至关重要
  8. Java 蓝桥杯 矩阵乘法
  9. 安卓应用安全指南 5.4.2 通过 HTTPS 的通信 规则书
  10. [靠谱原创!] SSH免密登录设置----原理详解+具体操作(全国人民看完都懂了!)
  11. 阶乘的传统流程图 c语言,C语言算法与流程图.ppt
  12. 推荐电影 历年佳片有约电影 1998-2007
  13. iptv直播服务器维护,IPTV机顶盒的智能化配置和维护方案介绍【详解】
  14. 13岁我们在做什么,现在20岁我又在做什么
  15. 文件后缀bat是什么?(批处理文件)
  16. detectron2 学习笔记
  17. 古墓丽影:源起之战影评
  18. 基于51单片机的体脂检测系统设计(51+oled+hx711+us100)
  19. java程序设计实用教程_清华大学出版社-图书详情-《Java程序设计实用教程》
  20. centos7安装OTRS开源工单管理平台

热门文章

  1. .NET Core跨平台:使用.NET Core开发一个初心源商城总括
  2. [转]RxHttp 一条链发送请求,新一代Http请求神器(一)
  3. Android之各个手机版本WiFi热点的创建
  4. C语言之字符数组在if{}里面赋值给char *引发的问题
  5. C语言之在结构体里面放很多函数指针
  6. java和C++之单例类双重检查加锁
  7. Android插件化开发之动态加载的类型
  8. Android之SlidingMenu使用和总结
  9. mysql为什么添加索引_当我添加新索引时,为什么MySQL中索引的基数保持不变?
  10. php post授权编写,php模拟post行为代码总结(POST方式不是绝对安全)