標籤: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使用樣本