python+MongoDB使用樣本

來源:互聯網
上載者:User

標籤:enum   ...   合數   heat   角度   1.5   field   檔案的   讀取   

  本部落格起源於博主的大三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 MongoClientimport sys# Connect to mongod, use DB: ‘nosql‘, use COLLECTION: ‘sample‘conn = MongoClient(‘127.0.0.1‘, 27017)  #串連mongoddb = conn.nosql                         #串連‘nosql‘資料庫,沒有則自動建立sample = db.sample                      #使用sample集合,沒有則自動建立n = 1data = 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 MongoClientimport matplotlib.pyplot as plt# Connect to mongod, use DB: ‘nosql‘, use COLLECTION: ‘sample‘conn = MongoClient(‘127.0.0.1‘, 27017)                             #串連mongoddb = 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)                     #作圖1plt2, = plt.plot(angle_theta_radian,data_phi90)                    #作圖2plt.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使用樣本

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.