python+MongoDB使用示例

  本博客起源於博主的大三NoSQL課程設計,採用python+MongoDB結合方式,將數據從txt文件導入MongoDB之中,再將其取出以做圖。主要技術是採用python與MongoDB結合存儲讀取方案,因此本博客截取了課設的部份內容,主要講解python操做MongoDB方案實現,以給想要學習python+MongoDB編程開發的同窗學習練手。python

 

設計思路sql

一、Python編程語言和MongoDB有驅動包pymongo鏈接,使用pymongo對MongoDB進行編程開發、數據讀取,以及後續的畫圖分析和數據可視化處理數據庫

二、使用的數據文件sample.txt.txt編程

 

設計內容nosql

 一、先使用dataToMongo.py將文件清洗後導入MongoDB中。編程語言

   (1) 建立並鏈接到MongoDB 中的nosql數據庫;oop

   (2) 建立並鏈接到nosql數據庫的集合sample;學習

 2、對讀出的數據進行可視化處理測試

   (1) 畫圖主要使用的Python包爲matplotlib.plotspa

 

設計步驟及結果測試

一、先使用dataToMongo.py將文件清洗後導入MongoDB中。

  (1) 採用pymongo鏈接驅動

  (2) 採用pymongoMongoClient類鏈接mongod

  (3) python中使用的mongo經常使用語法與mongoJSON語法基本相同。

 

 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

 

二、對讀出的數據進行可視化處理。

畫圖腳本: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']

便可得出。

 

 

 

數據文件說明:

一、數據文件概述:是測試的電場強度數據文件。

包括多個頻率測試的電場強度,每一個頻率的數據是一個數據塊。

在一個頻率點測試的數據(每一塊數據裏面),又包括多行數據(每行是一個theta角度的數據)和多列數據(每一列爲一個phi角度的數據)。

 

二、數據文件含義:

 

三、實驗測試與數據的關係以下

 

對於文件sample.txt.txt,只有兩個頻率(109頻率和1.2*109頻率)。

 感謝李老師的數據文件說明,若是有任何侵權問題,博主能夠當即刪除。

 

 博客好像發不了文件,若是須要數據文件的話請留言郵箱,看到了發給你。

相關文章
相關標籤/搜索