python+MongoDB使用示例

来源:https://www.cnblogs.com/fa-learning/archive/2018/05/23/9074897.html
-Advertisement-
Play Games

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


  本博客起源於博主的大三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) 採用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

 

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頻率)。

 感謝李老師的數據文件說明,如果有任何侵權問題,博主可以立即刪除。

 

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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • select下拉框選中的值,用jquery大家應該都會獲取, 如果select是多選的,也這麼獲取的話,則只能獲取到第一個選項的value值,但是有一個神奇的發現,如果是: 獲取text,則可以直接列印出選中的兩個選項的文本值的相連字元串,而不是只是第一個的text......... 獲取多選框的v ...
  • 1. vue-cli 簡介 Vue-cli 是 vue的設計者,為提升開發效率而提供的一個腳手架工具,可通過vue-cli快速構造項目結構 2. vue-cli 安裝步驟 安裝npm 或 cnpm 安裝webpack、webpack-cli 建議全局安裝一次: 建議全局安裝一次: 本地安裝一次: 本 ...
  • 下午學習了設計模式里的策略模式,寫個筆記,做個總結 策略模式的UML圖為: 舉個例子: 我們每個人都想走向人生巔峰,但是怎麼走向人生巔峰呢??有三個方法:1、當總經理;2、出任CEO;3、娶白富美。正好我身邊有三個小伙伴,他們就想通過這三種策略來走向人生巔峰。。。 首先是走向人生巔峰的策略介面 然後 ...
  • Django運算表達式與Q對象/F對象 1 模型查詢 概述: 1 查詢集:表示從資料庫中獲取的對象的集合 2 查詢集可以有多個過濾器,通過 邏輯運算符連接 3 過濾器就是一個函數,基於所給的參數限制查詢的結果,類似MySQL模糊查詢中where語句 4 查詢集等同select語句 2 查詢集 特點: ...
  • Python里的變數 門牌 Python在使用變數之前無須定義它的類型,但是必須聲明以及初始化該變數。 Python中給變數賦值就是聲明,初始化變數(也就是創建一個相應數據類型的對象,而那些數據類型就是類),變數的類型是取決於其儲存的數據。(下麵代碼中的a變數,其類型類型隨著賦值的類型不同而改變) ...
  • 1、網頁打開檢查器,到達該路徑,再刷新網頁,點擊第一個“Attractions”文件,出現headers(重要)、response、cookies等信息 2、定位元素位置方法,找唯一特征: 用滑鼠右鍵定位該元素的標簽位置,找出這類信息的唯一性屬性,最後用“標簽+屬性”的方式定位該欄位信息。如定點陣圖片 ...
  • 我在之前的隨筆中介紹了function如何保存參數,如何實現調用相關知識。對於一個函數對象或者函數指針來說,應該很容易理解。不過對於如何在function中保存類的成員函數,這個還是值得一說的。 還是按照之前的方式,通過boost的type_index,我們可以比較容易的知道function的父類是 ...
  • 二.安裝hibernate插件 打開eclipse,點擊help-->eclipse marketplace,如圖輸入:Hibernate Tools,再點擊Goa按鈕,找到JBoss Tools 點擊install安裝 如圖選擇Hibernate Tools,點擊Confrm安裝。安裝完成後重啟e ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...