本博客起源于博主的大三NoSQL课程设计,采用python+MongoDB结合方式,将数据从txt文件导入MongoDB之中,再将其取出以作图。主要技术是采用python与MongoDB结合存储读取方案,所以本博客截取了课设的部分内容,主要讲解python操作MongoDB方案实现,以给想要学习python+MongoDB编程开发的同学学习练手。

设计思路

1、Python编程语言和MongoDB有驱动包pymongo连接,使用pymongo对MongoDB进行编程开发、数据读取,以及后续的画图分析和数据可视化处理

2、使用的数据文件sample.txt.txt

设计内容

1、先使用dataToMongo.py将文件清洗后导入MongoDB中。

  (1) 创建并连接到MongoDB 中的nosql数据库;

   (2) 创建并连接到nosql数据库的集合sample;

2、对读出的数据进行可视化处理。

  (1) 画图主要使用的Python包为matplotlib.plot。

设计步骤及结果测试

1、先使用dataToMongo.py将文件清洗后导入MongoDB中。

  (1) 采用pymongo连接驱动

  (2) 采用pymongo的MongoClient类连接mongod

  (3) python中使用的mongo常用语法与mongo的JSON语法基本相同。

MongoDB启动:

启动Python脚本dataToMongo.py将数据从文件中读出并存入MongoDB中:

  注意要使用以下命令 (由于前期使用python+Hadoop的方式编写,所以使用了unix输入输出流来读数据):

  # cat sample.txt.txt | ./dataToMongo.py

数据成功存入MongoDB:

dataToMongo.py

#!/usr/bin/python3
# -*- coding:utf-8 -*-
# 这个文件是用来将数据存入MongoDB中数据库nosql的
# collection为 sample (db.sample.find())
# 格式为:"line1": [data1,data2...] from pymongo import MongoClient
import sys # Connect to mongod, use DB: 'nosql', use COLLECTION: 'sample'
conn = MongoClient('127.0.0.1', 27017) #连接mongod
db = conn.nosql #连接'nosql'数据库,没有则自动创建
sample = db.sample #使用sample集合,没有则自动创建 n = 1
data = list()
for line in sys.stdin:
data = line.strip().split()
linenum="line"+str(n) # linenum是line字符串+数字组成的字符串,后面插入数据集时会用到
if n==1:
pass # 第一行数据是没用的,清洗掉
elif n==2:
data = data[4:] # 实测观察数据从第四个数据开始
data[0] = '-3.1415926536' # 原数据是‘Real=-3.1415926536’,所以将数据修改下
for index,item in enumerate(data):
data[index] = float(item) # 将原来是字符串的数据转为float类型
sample.insert({ # 将数据插入(insert)MongoDB中的sample集合
"line":linenum, # 这里我为了后续作图方便,插入了一个{line:linenum}的键值对
"value":data # {value: data}键值对, data是一个list变量哦
})
else:
data = data[2:] # 和第二行的数据不一样,实测观察出的,有时候编程是要一步步观察修改的
for index,item in enumerate(data): # 考验自己的动手能力,怎么观察实现要自己想办法了
data[index] = float(item)
sample.insert({
"line":linenum,
"value":data
})
n+=1

2、对读出的数据进行可视化处理。

画图脚本:main.py

(1) 第一个图:

蓝色的线是在1.0*10^9频率下,phi=0

橙色的线是在1.0*10^9频率下,phi=1.5707963268。

横坐标是Theta(degree),范围从-Pi ~Pi;纵坐标是电场值。

相同频率下,theta角度越大,电场值越小。

main.py

#!/usr/bin/python3
# -*- coding:utf-8 -*-
# file : main.py
# 这个文件是用来读取MongoDB中nosql数据库.sample集合数据
# 读出之后作图 from pymongo import MongoClient
import matplotlib.pyplot as plt # Connect to mongod, use DB: 'nosql', use COLLECTION: 'sample'
conn = MongoClient('127.0.0.1', 27017) #连接mongod
db = conn.nosql #连接'nosql'数据库,没有则自动创建
sample = db.sample #使用sample集合,没有则自动创建 angle_theta_radian=sample.find_one({"line":"line2"})['value'] #使用find_one查找第2行的数据,取其名为‘value’的键值对的值
data_phi0=sample.find_one({"line":"line3"})['value'] #使用find_one查找第3行的数据,取其名为‘value’的键值对的值
data_phi90=sample.find_one({"line":"line48"})['value'] #使用find_one查找第48行的数据,取其名为‘value’的键值对的值 plt1, = plt.plot(angle_theta_radian,data_phi0) #作图1
plt2, = plt.plot(angle_theta_radian,data_phi90) #作图2
plt.legend([plt1,plt2],['Electrial Field1','Electrial Field2'],loc='upper right') #设置图例
plt.xlabel('Theta (degree)') #设置x轴标签
plt.ylabel('Electrical field (V/m)') #设置y轴标签
plt.show() #以上一起显示出来

(2) 第二个图:

蓝色的线是,在1.0*10^9频率下,phi=0;

橙色的线是,在1.02*10^9频率下,phi=0;(第93行: line93)

横坐标是Theta(degree),范围从-Pi ~Pi;纵坐标是电场值。

相同theat角度下,频率越高,电场值绝对值越大。

实现:将main.py脚本文件中的

data_phi90=sample.find_one({"line":"line48"})['value']

修改为:

data_phi90=sample.find_one({"line":"line93"})['value']

即可得出。

数据文件说明:

1、数据文件概述:是测试的电场强度数据文件。

包括多个频率测试的电场强度,每个频率的数据是一个数据块。

在一个频率点测试的数据(每一块数据里面),又包括多行数据(每行是一个theta角度的数据)和多列数据(每一列为一个phi角度的数据)。

2、数据文件含义:

3、实验测试与数据的关系如下

对于文件sample.txt.txt,只有两个频率(109频率和1.2*109频率)。

感谢李老师的数据文件说明,如果有任何侵权问题,博主可以立即删除。

博客好像发不了文件,如果需要数据文件的话请留言邮箱,看到了发给你。

python+MongoDB使用示例的更多相关文章

  1. Python Thrift 简单示例

    本文基于Thrift-0.10,使用Python实现服务器端,使用Java实现客户端,演示了Thrift RPC调用示例.Java客户端提供两个字符串参数,Python服务器端计算这两个字符串的相似度 ...

  2. Python Mongodb接口

    Python Mongodb接口 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. 同时,MongoDB 是一个介于关系 ...

  3. python psutil简单示例

    python psutil简单示例 利用psutil编写简单的检测小脚本 0.安装psutil模块                                                    ...

  4. Python操作SQLServer示例(转)

    转自:http://www.cnblogs.com/lrzy/p/4346781.html 本文主要是Python操作SQLServer示例,包括执行查询及更新操作(写入中文). 需要注意的是:读取数 ...

  5. 转:Python操作SQLServer示例

    注:此文也是转载,2018年1月发现此文阅读量过万,略感不安.当时只是为了自己存档学习,未粘此文的原始连接.如有侵权,通过即删除,敬请谅解! 从网上找的,估计原文是:Python操作SQLServer ...

  6. Websocket - Websocket原理(握手、解密、加密)、基于Python实现简单示例

    一.Websocket原理(握手.解密.加密) WebSocket协议是基于TCP的一种新的协议.WebSocket最初在HTML5规范中被引用为TCP连接,作为基于TCP的套接字API的占位符.它实 ...

  7. Python操作SQLServer示例

    本文主要是Python操作SQLServer示例,包括执行查询及更新操作(写入中文). 需要注意的是:读取数据的时候需要decode('utf-8'),写数据的时候需要encode('utf-8'), ...

  8. Python MongoDB 教程

    基于菜鸟教程实际操作后总结而来 Python MongoDB MongoDB 是目前最流行的 NoSQL 数据库之一,使用的数据类型 BSON(类似 JSON). MongoDB 数据库安装与介绍可以 ...

  9. 吴裕雄--天生自然python学习笔记:Python MongoDB

    MongoDB 是目前最流行的 NoSQL 数据库之一,使用的数据类型 BSON(类似 JSON). PyMongo Python 要连接 MongoDB 需要 MongoDB 驱动,这里我们使用 P ...

随机推荐

  1. PHP面试常用算法(推荐)

    一.冒泡排序 基本思想: 对需要排序的数组从后往前(逆序)进行多遍的扫描,当发现相邻的两个数值的次序与排序要求的规则不一致时,就将这两个数值进行交换.这样比较小(大)的数值就将逐渐从后面向前面移动. ...

  2. [HNOI2006]马步距离

    嘟嘟嘟 这题首先直接bfs可定过不了,因此可以先贪心缩小两个点的距离,直到达到某一个较小的范围(我用的是30),再bfs暴力求解. 首先我们求出这两个点的相对距离x, y,这样就相当于从(x, y) ...

  3. mvc4中viewbag viewdata 和 tempdata的区别

    ViewBag 不再是字典的键值对结构,而是 dynamic 动态类型,它会在程序运行的时候动态解析. eg: ViewBag.NumberObjs = new string[] { "on ...

  4. 基于LNMP的小米电子商务网站平台

    项目参考:http://www.cnblogs.com/along21/p/7822228.html 基于LNMP的小米电子商务网站平台 1.环境 setenforce 0 #关闭selinux sy ...

  5. 404 Note Found 队-课堂实战-项目UML设计

    目录 团队信息 分工选择 课上分工 课下分工 ToDolist alpha版本要做的事情 燃尽图 UML 用例图 状态图 活动图 类图 部署图 实例图 对象图 时序图 包图 通信图 贡献分评定 课上贡 ...

  6. Linux 嵌入式 开发环境 交叉编译安装

    1.安装 Ubuntu 系统 安装完毕,系统 提示 重启,这个时候 请拔掉U盘,进行重启 OK. 2.安装 NFS 服务 3.安装 openssh服务 4.开启openSSH服务 5.就可以使用 Wi ...

  7. eclipse删除的文件如何恢复。

    1.如果不小心删除了单个文件或者文件夹. 鼠标点击上级目录 Ctrl+z就可以恢复了. 如果没有恢复,就右击项目,选择Resore from Local History 然后选择你所删除的文件,选择恢 ...

  8. Oracle 数据库数据结构(包括存储过程,函数,表,触发器等)版本控制器

    原理: 写系统触发器,在修改数据库结构的时候,把DDL写入表中 create sequence A_Ver_Control_seq minvalue nomaxvalue start incremen ...

  9. [Oracle]Oracle良性SQL建议

    (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处 ...

  10. js基础(闭包实例)

    1,常用发送短信的闭包实现: function sms() { var count = 60; return { start: function() { if(count == 0) { count ...