本博客起源于博主的大三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. Azure 负载内部均衡器概述

    Azure 内部负载均衡器 (ILB) 仅将流量定向到云服务内的资源,或使用 VPN 来访问 Azure 基础结构. 在这一点上,ILB 与面向 Internet 的负载均衡器不同. Azure 基础 ...

  2. December 25th 2016 Week 53rd Sunday

    Patience is bitter, but its fruit is sweet. 忍耐是痛苦的,但它的果实是甜蜜的. What can we do if there is no fruit of ...

  3. Android Studio 动态调试 apk 反编译出的 smali 代码

    在信安大赛的准备过程中,主要通过 Android Studio 动态调试 apk 反编译出来的 smali 代码的方式来对我们分析的执行流程进行验证.该技巧的主要流程在此记录.以下过程使用 Andro ...

  4. UVa 1639 - Candy(数学期望 + 精度处理)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  5. Java反序列化之Jackson-databind

    这个洞的cve编号:CVE-2017-17485,漏洞环境就如第一个链接那样,jdk需要在jdk 1.8以上. 先看一下Jackson-databind的用法,说白了就是将json转换成对象. tes ...

  6. 使用Azcopy在Azure上进行HBase的冷热备份还原

    场景 HBase表TaskLog中有20.55G数据(20553078551Byte),目前存放在热存储中,现在要移至冷热储,并进行还原. HBase目录:hbase/data/default 冷目录 ...

  7. (转)ci

    1  从代码管理器签出源文件 2  修改代码 3  编译代码 4  遇到错误,转到2继续修改直到达到预期 5  运行单元测试,期望所有的测试绿色(通过) 6  单元测试出错,转入2 7  重构代码,按 ...

  8. Selenium封装

    import os from selenium import webdriver from selenium.webdriver.common.by import By from selenium.w ...

  9. PAT——1033. 旧键盘打字

    旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及坏掉的那些键,打出的结果文字会是怎样? 输入格式: 输入在2行中分别给出坏掉的那些键.以及应该输入的文 ...

  10. datatable的excel导入,其中有关于datatables的很多参数设置

    datatable的excel导入,其中有关于datatables的很多参数设置 http://www.cnblogs.com/liyuhuan/p/5633095.html