基於Python腳本的R語言的函數

2020-12-11 電子發燒友

本文介紹了採用創建一個Python腳本,用該腳本模仿R風格的函數的方法來方便地進行統計。

是用R語言還是用Python語言?這是一個曠日持久的爭論。在此,我們可以嘗試採用折中路線:創建一個Python腳本,用該腳本模仿R風格的函數,來方便地進行統計!

簡介
用R語言還是用Python語言?這是數據科學和機器學習的一場大的爭論。毫無疑問,這兩種語言在最近幾年都取得了巨大的進展,成為數據科學、預測分析和機器學習的首選程式語言。事實上,在IEEE新近的一篇文章中,Python取代C++成為2018年的頂級程式語言,R已經牢牢地保住了它在前10名中的位置。

然而,這兩種程式語言之間存在著一些本質的差異。R主要是為數據分析問題的統計分析和快速原型化而開發的工具。另一方面,Python作為一種通用的現代面向對象語言,與C或Java相似,它具有更簡單的學習曲線和更為靈活的行為方式。因此,R在統計學家、定量生物學家、物理學家和經濟學家中仍然非常受歡迎,而Python逐漸成為日常腳本、自動化、後端web開發、分析和通用機器學習框架的首選語言,Python語言的技術支持基礎比較廣泛,同時還有許多開源社區。

如何在Python環境中模仿函數式編程?
R語言的函數編程特性為用戶提供了非常簡單有效地界面,用於快速計算概率,並為數據分析問題提供必要的描述性/推理統計。例如,僅僅使用一個緊緻函數調用就能回答下面的問題,這是不是很神奇?

  • 如何計算數據向量的平均/中值/模型?
  • 如何計算服從正態分布的某一事件的累積概率?如果該分布是泊松分布,則如何計算?
  • 如何計算一系列數據點的四分位數間距?
  • 如何根據學生的t分布生成少量隨機數?

在R語言編程環境中,這些您都能實現。

另一方面,Python腳本編寫能使分析人員在各種分析管線中創造性地使用這些統計數據。

為了結合這兩種語言的優勢,需要設計一個簡單的基於Python的包裝類庫,它包含最常用的函數,這些函數涉及以R風格定義的概率分布和描述性統計信息,用戶可以快速地調用這些函數,而無需調用Python統計庫,並弄明白所有方法和參數。

最為便捷的R-函數的Python包裝類腳本
我用Python編寫了一個腳本,用來定義在簡單統計分析中最為便捷和最被廣泛使用的R函數。導入這個腳本之後,您將能夠像在R編程環境中一樣自然地使用那些R-函數。

這個腳本的目標是利用簡單的Python子程序,來模仿R風格的統計函數,從而快速計算密度/點估計、累積分布、分位數,並為各種重要的概率分布生成隨機變量。為了保持R的風格,沒有使用類分層結構,只在該文件中定義了一些原始函數,這樣用戶便可以方便地導入這個Python腳本,並在需要時使用所有函數,而僅僅只需做一個名稱的調用。

注意,在此使用了「模仿」這個詞。我並沒有聲稱要模仿R真正的功能編程範式:那些由深層次的環境設置和這些環境與對象之間組成的複雜的相互關係。這個腳本只允許我(同時也希望有無數其他Python用戶)能夠快速啟動Python程序或Jupyter筆記本(一種交互式筆記本,支持運行 40 多種程式語言)導入腳本,並在短時間內開始進行簡單的描述性統計。這就是目標,僅此而已。

或者,你可能已經會用R語言編碼,剛開始學習和使用Python進行數據分析。你可以高興地看到和使用Jupyter筆記本裡的一些眾所周知的函數,這些都和你使用的R語言環境中的方法類似。

簡單實例
例如,如果需要計算數據點向量的TuKEY五數綜合。你只需調用一個簡單函數FiVunm並傳遞給向量,它便在一個Numpy數組中返回五數綜合(最小值;第1四分位數(Q1);中位數(Q2);第3四分位數(Q3);最大值。)。
lst=[20,12,16,32,27,65,44,45,22,18]
fivenum(lst)
> array([12. , 18.5, 24.5, 41. , 65. ])

或者,你想知道以下問題的答案:
假設一臺機器平均每小時輸出10件成品,標準差為2,輸出模式服從近似正態分布。在接下來的一小時內,機器輸出至少7臺但不超過12臺的概率是多少?

答案基本上是這樣,

利用pNorm…,只需要一行代碼就可以得到答案。
pnorm(12,10,2)-pnorm(7,10,2)
> 0.7745375447996848

或者,對於如下問題:
假設你有一枚硬幣,每次拋硬幣的時候,都有60%的轉動概率,玩的是10次拋擲的遊戲。如何用這枚硬幣計算出所有可能的贏球數(從0到10)?

只需使用一個dbinom…函數和幾行代碼就可以獲得一個很好的條形圖。
probs=[]
import matplotlib.pyplot as plt
for i in range(11):
probs.append(dbinom(i,10,0.6))
plt.bar(range(11),height=probs)
plt.grid(True)
plt.show()

目前已經實現的函數
目前,已經實現了的、可以用於快速調用的R風格函數在以下腳本中實現。

  • 均值、中值、方差、標準差
  • TuKEY五數綜合、矩陣的IQR
  • 矩陣的協方差或兩個向量之間的協方差
  • 密度、累積概率、分位函數和隨機變量生成,用於下列分布:正態分布,均勻分布,二項分布,泊松分布,F分布,Student’s-t分布,卡方分布,Beta分布,和Gamma分布

後續工作
這項工作還正在進行之中,我計劃在腳本中添加一些更為便捷的R-函數。例如,在R單行命令中,lm可以得到一個最小二乘擬合模型,該模型具有所有必要的推斷統計量(P值、標準誤差等)。這將是多麼的簡短和緊湊!另一方面,Python中的標準線性回歸問題通常是使用Scikit-Learning來解決,需要用到更多的腳本來實現它。我計劃使用Python的statsmodel後端結合這個單一函數線性模型來實現。

相關焦點

  • rPython:在R語言中調用python命令
    目錄      rPython簡介      rPython安裝介紹      rPython使用介紹rPython簡介rPython包用於在R語言環境中調用Python命令。通過使用rPython,可以實現將數據傳輸給Python,從Python中獲取數據,也可以調用Python的函數及命令,實現R與python互通。對於R語言來說,Python中存在很多優秀的模塊,而開發者們也想將這些功能在R語言中實現時,則可以利用rpython函數調用python模塊,從而時R語言的到更好的擴展。
  • Maya藝術家的Python腳本
    >基於原文:https://www.chadvernon.com/python-scripting-for-maya-artists/ 翻譯而來有做些改動,下面是正文。://www.liaoxuefeng.com/wiki/1016959663602400或者去b站搜索python,有很多入門教程計算機圖形學行業中的Python 一些支持Python的CG軟體:XSI (這個autodesk已經不在更新了softimage)Photoshop(原文有ps,不過ps本身支持的腳本語言是JavaScript
  • 利用Python進行遊戲腳本編程,不愧是最強的腳本語言!
    使用已有的腳本語言可以節省開發新型自定義語言的時間和開銷,並且這些語言通常要比自己創造的語言更加的強大。當然小編這裡有一份Python學習資料,加小編QQ群:696541369即可免費領取!連結過程:C++ 模塊(在編譯時或加載時)連結在一起,因此在運行時,無需進行的函數地址的解析。這提高了運行時的性能,但是卻使 編輯/測試 周期變長了。缺乏自省能力 [TR2: introspection]:C++ 有自己的方式知道一個類中包含哪些成員,但是這種方式需要編寫過多的加載和存儲對象的代碼,而在一些腳本語言中這只需調用一個內建函數就可以完成。
  • Python語言——VASP後處理神器
    現在很多人依然還在用C和Fortran寫的後處理腳本,不過建議大家用Python,Python作為腳本語言有很多優勢,例如有一些特有的數據結構和函數
  • 基於NLTK的Python自然語言處理-字符串的操作(切分)
    上篇文檔已經介紹了做自然語言處理中我們使用比較的python語言,以及使用的python集成開發環境(IDE,Integrated Development Environment )。從本篇文章將陸續介紹如何使用python進行自然語言處理。
  • 用R也可以跑Python了
    但如果你還想來搞點深度學習,整個自然語言處理,那你可還真得用Python。如果你處於交叉領域,很可能就需要兩種語言切換。後果是,寫個for loop還出bug真的是家常便飯。報警!在R中導入一個python模塊您可以使用函數import()來導入特定的包或模塊。
  • 為什麼 Python 沒有 main 函數?
    一些程式語言將main函數作為程序的執行入口,比如C/C++、C#、Java、Go、Rust等等,這個函數具有特定的含義:為什麼必須強制main函數作為入口?這些語言都是編譯語言,需要將代碼編譯成可執行的二進位文件。為了讓作業系統/引導程序找到程序的開頭,需要定義這樣一個函數。簡而言之,需要在大量可執行的代碼中定義一個至關重要的的開頭。
  • Linux 平臺下 Python 腳本編程入門(一)
    眾所周知,系統管理員需要精通一門腳本語言,而且招聘機構列出的職位需求上也會這麼寫。
  • 將PHP作為Shell腳本語言使用
    但是只有很少數的人意識到PHP也可以很好的作為編寫Shell腳本的語言,當PHP作為編寫Shell腳本的語言時,他並沒有Perl或者Bash那麼強大,但是他卻有著很好的優勢,特別是對於我這種熟悉PHP但是不怎麼熟悉Perl的人。
  • 特徵工程總結:R與python的比較實現
    ,來對比兩種語言的差異。)))R:new = rep(NA, 4)iris.data <- rbind(new, iris.data)library(Hmisc)impute(iris.data, mean)4.2.7數據變換    常見的數據變換有基於多項式的、基於指數函數的、基於對數函數等.
  • 用R也可以跑Python了
    但如果你還想來搞點深度學習,整個自然語言處理,那你可還真得用Python。如果你處於交叉領域,很可能就需要兩種語言切換。後果是,寫個for loop還出bug真的是家常便飯。報警!面對這種困境的絕不止你一個人!最近的KDnuggets Analytics的軟體調查中,Python和R位居數據科學和機器學習軟體的前兩名。
  • MATLAB腳本和函數文件
    用M語言編寫的程序,稱為M文件,M文件根據調用方式的不同分為兩類,命令文件和函數文件,所謂腳本文件也就是命令文件,是由一系列的MATLAB指令組成的純文本格式的M文件。考慮到這種情況,MATLAB為用戶提供了腳本文件的編寫平臺——M文件編輯器。用M語言編寫的程序,稱為M文件,M文件根據調用方式的不同分為兩類,命令文件和函數文件,所謂腳本文件也就是命令文件,是由一系列的MATLAB指令組成的純文本格式的M文件,在執行腳本時,文件中的指令按照在腳本文件中出現的順序依次執行。
  • Python之函數學習(八)
    python語言,即可以進行函數式的編程的語言,又是可以進行面向對象編程的語言,所謂函數,簡單的理解就是將一些語句集合到一起,這樣可以在程序中多次的調用
  • 一日一技:向Python中添加延遲函數time.sleep()
    在Python腳本中添加延遲有哪些不同的方法?示例:在Python中使用sleep()函數請按照以下給出的步驟在您的python腳本中添加sleep()。u99使用(Python 3.4或更高版本)提供的asyncio.sleep函數我們可以在python 3.4及更高版本中使用asyncio.sleep
  • Python 中的 main 函數
    在開始正題之前,先要來回答這兩個問題:所謂的 「main 函數」是指什麼?為什麼有些程式語言需要強制寫一個 main 函數?某些程式語言以 main 函數作為程序的執行入口,例如 C/C++、C#、 Java、Go 和 Rust 等,它們具有特定的含義:這些語言是編譯型語言,需要把代碼編譯成可執行的二進位文件,為了讓作業系統/啟動器找到程序的起點,所以要約定這一個函數。
  • Python和Java語言,新手應該先學哪個
    至於python語言,現在火得不行,全宇宙都知道的程式語言,吸引了不少人的眼球,各大培訓機構的標語都是大數據+python+人工智慧了,這些趁熱點的標語你看看就行了,別當真,當真你就輸了。python是個腳本語言,極其靈活,極其好學,既然這麼好,為啥不學呢?其實在編程界裡,語言的靈活,其潛臺詞就是失控。
  • Python基礎教程(一) - 快速入門
    從今天開始學習python,會將學習到的相關知識整理到這裡。今後的所有內容都基於Ubuntu系統中進行的,和其他語言一樣,讓我們先來"Hello World!"吧。Hello world!#!/usr/bin/python為Linux系統下Python解釋器的路徑,通常python解釋器的路徑安裝在/usr/local/bin或/usr/bin目錄下。
  • 一次使用 Go 語言編寫腳本的經歷
    通常認為,Python 和 Bash 是熱門的腳本語言,而 C、C++ 和 Java 完全不能被用作腳本編程,有一些語言卻夾在其中。Go 語言試用場景很多,從編寫 Web 伺服器到流程管理,甚至有些人用作系統程式語言。在後文中,我將論證,除了上述這些場景外,Go 語言還可以簡單地用於編寫腳本。
  • Python 為什麼沒有 main 函數?為什麼我不推薦寫 main 函數?
    某些程式語言以 main 函數作為程序的執行入口,例如 C/C++、C#、 Java、Go 和 Rust 等,它們具有特定的含義:main 函數名是強制的,也就是要求必須有一個 main 函數main 函數最多只能有一個,也就是說程序的入口是唯一的這些語言是編譯型語言,需要把代碼編譯成可執行的二進位文件,為了讓作業系統/啟動器找到程序的起點,所以要約定這一個函數。
  • 在Python中定義Main函數(第三部分)
    許多語言,如C,C++,Java以及其他的一些語言,都會定義一個叫做main()的函數,當編譯程序時,作業系統會自動調用該函數。此函數通常被稱為入口點(entry point),因為它是程序進入執行的起始位置。相比之下,Python沒有一個特殊的函數作為腳本的入口點。實際上在Python中可以將入口點定義成任何名稱。