本博客起源于博主的大三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. Python学习---基于JQuery的Ajax实现[快捷+底层$.ajax]

    快捷API <1>$.get(url, [data], [callback], [type]) <2>$.post(url, [data], [callback], [type ...

  2. 沉淀再出发:用python画各种图表

    沉淀再出发:用python画各种图表 一.前言 最近需要用python来做一些统计和画图,因此做一些笔记. 二.python画各种图表 2.1.使用turtle来画图 import turtle as ...

  3. php测试工具

    如果是测压力有apache的ab如果要看性能则有xdebug和xhprof.还有linux的strace命令来跟踪程序的执行时的系统调用

  4. 51nod 1952 栈

    题目链接戳这 如果只是从尾端插入,那么问题就是基础的:求取栈内最大值的问题,这用单调栈解决即可. 但是前端也能插入,一般的单调栈已经不能满足.那么想象,如果在前端插入一个小值,相当于在栈底多加一个值罢 ...

  5. MySQL面试宝典

    ==============================================# 参数==============================================auto ...

  6. css3动画相关笔记

    1.$(".aa").delay(2500).animate({width:0}); // 延迟 2.setTimeout(function(){ --> css3 anim ...

  7. 使用python 操作liunx的svn,方案二

    在对liunx操作svn的方式,做了改动,使用python的,subprocess进行操作 在第一种方案中,我使用了先拉到本地,然后再创建,在进行上传,实际在svn中可以直接创建文件,并进行文件复制, ...

  8. Save and read double array in a binary file

    ;} 32 bytes read 9.5 -3.4 1 2.1 "

  9. BZOJ4870:[SHOI2017]组合数问题(组合数学,矩阵乘法)

    Description Input 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1 ...

  10. docker-8-本地镜像发布到阿里云

    镜像的生成方法 1.前面的DockerFile   2.从容器创建一个新的镜像 docker commit [OPTIONS] 容器ID [REPOSITORY[:TAG]] 将本地镜像推送到阿里云 ...