python mongodb_python+MongoDB使用示例

本博客起源于博主的大三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 importMongoClientimportsys#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= 1data=list()for line insys.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 inenumerate(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 importMongoClientimportmatplotlib.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频率)。

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值