欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

nls函數(shù)python r中nls函數(shù)

oracle中的NLS_INITCAP、NLS_LOWER、NLS_UPPER函數(shù)

SCHINESE_RADICAL_M 按照部首(第一順序)、筆劃(第二順序)排序

成都創(chuàng)新互聯(lián)專注于商都網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供商都營(yíng)銷型網(wǎng)站建設(shè),商都網(wǎng)站制作、商都網(wǎng)頁設(shè)計(jì)、商都網(wǎng)站官網(wǎng)定制、小程序設(shè)計(jì)服務(wù),打造商都網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供商都網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

SCHINESE_STROKE_M 按照筆劃(第一順序)、部首(第二順序)排序

SCHINESE_PINYIN_M 按照拼音排序

排序用

比如select nls_initcap('百度知道', 'nls_sort= SCHINESE_STROKE_M')

from dual;

python怎么設(shè)置環(huán)境變量

os.environ

例如,設(shè)置 oracle 編碼

os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'

python調(diào)用oracle的sql中wm_concat問題:

利用python調(diào)用sqlplus來輸出結(jié)果的例子:

import os

import sys

from subprocess import Popen, PIPE

sql = """

set linesize 400

col owner for a10

col object_name for a30

select owner, object_name

from dba_objects

where rownum=10;

"""

proc = Popen(["sqlplus", "-S", "/", "as", "sysdba"], stdout=PIPE, stdin=PIPE, stderr=PIPE)

proc.stdin.write(sql)

(out, err) = proc.communicate()

if proc.returncode != 0:

print err

sys.exit(proc.returncode)

else:

print out

用Python查詢Oracle,當(dāng)然最好用cx_Oracle庫,但有時(shí)候受到種種限制,不能安裝Python第三方庫,就得利用現(xiàn)有資源,硬著頭皮上了。

用Python調(diào)用SqlPlus查詢Oracle,首先要知道SqlPlus返回結(jié)果是什么樣的:

(這是空行)

Number Name Address

------------ ----------- ------------------

1001 張三 南京路

1002 李四 上海路

第1行是空行,第2行是字段名稱,第3行都是橫杠,有空格隔開,第4行開始是查詢到的結(jié)果。

在查詢結(jié)果規(guī)整的情況下,根據(jù)第3行可以很清晰的看到結(jié)構(gòu),用Python解析起來也比較方便。但是,如果一張表字段特別多,記錄數(shù)也相當(dāng)多,那么默認(rèn)情況下調(diào)用SqlPlus查詢出的結(jié)果會(huì)比較亂,這就需要在調(diào)用查詢之前做一些設(shè)定,比如:

set linesize 32767

set pagesize 9999

set term off verify off feedback off tab off

set numwidth 40

這樣的調(diào)用查詢結(jié)果就比較規(guī)整了。接下來就是用強(qiáng)大的Python來解析查詢結(jié)果。

這里封裝了一個(gè)函數(shù),可以根據(jù)傳入的SQL語句查詢并解析結(jié)果,將每行結(jié)果存到列表中,列表中的每個(gè)元素是一個(gè)字段名稱與值的映射。

#!/usr/bin/python

#coding=UTF-8

'''

@author: 雙子座@開源中國(guó)

@summary: 通過SqlPlus查詢Oracles數(shù)據(jù)庫

'''

import os;

os.environ['NLS_LANG'] = 'AMERICAN_AMERICA.AL32UTF8'

gStrConnection = 'username/password@10.123.5.123:1521/ora11g'

#解析SqlPlus的查詢結(jié)果,返回列表

def parseQueryResult(listQueryResult):

listResult = []

#如果少于4行,說明查詢結(jié)果為空

if len(listQueryResult) 4:

return listResult

#第0行是空行,第1行可以獲取字段名稱,第2行可獲取SQLPlus原始結(jié)果中每列寬度,第3行開始是真正輸出

# 1 解析第2行,取得每列寬度,放在列表中

listStrTmp = listQueryResult[2].split(' ')

listIntWidth = []

for oneStr in listStrTmp:

listIntWidth.append(len(oneStr))

# 2 解析第1行,取得字段名稱放在列表中

listStrFieldName = []

iLastIndex = 0

lineFieldNames = listQueryResult[1]

for iWidth in listIntWidth:

#截取[iLastIndex, iLastIndex+iWidth)之間的字符串

strFieldName = lineFieldNames[iLastIndex:iLastIndex + iWidth]

strFieldName = strFieldName.strip() #去除兩端空白符

listStrFieldName.append(strFieldName)

iLastIndex = iLastIndex + iWidth + 1

# 3 第3行開始,解析結(jié)果,并建立映射,存儲(chǔ)到列表中

for i in range(3, len(listQueryResult)):

oneLiseResult = unicode(listQueryResult[i], 'UTF-8')

fieldMap = {}

iLastIndex = 0

for j in range(len(listIntWidth)):

strFieldValue = oneLiseResult[iLastIndex:iLastIndex + listIntWidth[j]]

strFieldValue = strFieldValue.strip()

fieldMap[listStrFieldName[j]] = strFieldValue

iLastIndex = iLastIndex + listIntWidth[j] + 1

listResult.append(fieldMap)

return listResult

def QueryBySqlPlus(sqlCommand):

global gStrConnection

#構(gòu)造查詢命令

strCommand = 'sqlplus -S %s !\n' % gStrConnection

strCommand = strCommand + 'set linesize 32767\n'

strCommand = strCommand + 'set pagesize 9999\n'

strCommand = strCommand + 'set term off verify off feedback off tab off \n'

strCommand = strCommand + 'set numwidth 40\n'

strCommand = strCommand + sqlCommand + '\n'

#調(diào)用系統(tǒng)命令收集結(jié)果

result = os.popen(strCommand)

list = []

for line in result:

list.append(line)

return parseQueryResult(list)

其中os.environ['NLS_LANG']的值來自

select userenv['language'] from dual;

在調(diào)用的時(shí)候,只要類似:

listResult = QueryBySqlPlus('select * from studentinfo')

然后就可以用循環(huán)打印出結(jié)果了。

r語言lm函數(shù)可以做非線性回歸嗎

模型擬合

對(duì)于人口模型可以采用Logistic增長(zhǎng)函數(shù)形式,它考慮了初期的指數(shù)增長(zhǎng)以及總資源的限制。其函數(shù)形式如下。

首先載入car包以便讀取數(shù)據(jù),然后使用nls函數(shù)進(jìn)行建模,其中theta1、theta2、theta3表示三個(gè)待估計(jì)參數(shù),start設(shè)置了參數(shù)初始值,設(shè)定trace為真以顯示迭代過程。nls函數(shù)默認(rèn)采用Gauss-Newton方法尋找極值,迭代過程中第一列為RSS值,后面三列是各參數(shù)估計(jì)值。然后用summary返回回歸結(jié)果。

library(car)

pop.mod1 - nls(population ~ theta1/(1+exp(-(theta2+theta3*year))),start=list(theta1 = 400, theta2 = -49, theta3 = 0.025), data=USPop, trace=T)

summary(pop.mod)

在上面的回歸過程中我們直接指定參數(shù)初始值,另一種方法是采用搜索策略,首先確定參數(shù)取值范圍,然后利用nls2包的暴力方法來得到最優(yōu)參數(shù)。但這種方法相當(dāng)費(fèi)時(shí)。

還有一種更為簡(jiǎn)便的方法就是采用內(nèi)置自啟動(dòng)模型(self-starting Models),此時(shí)我們只需要指定函數(shù)形式,而不需要指定參數(shù)初始值。本例的logistic函數(shù)所對(duì)應(yīng)的selfstarting函數(shù)名為SSlogis

pop.mod2 - nls(population ~ SSlogis(year,phi1,phi2,phi3),data=USPop)

二、判斷擬合效果

非線性回歸模型建立后需要判斷擬合效果,因?yàn)橛袝r(shí)候參數(shù)最優(yōu)化過程會(huì)捕捉到局部極值點(diǎn)而非全局極值點(diǎn)。最直觀的方法是在原始數(shù)據(jù)點(diǎn)上繪制擬合曲線。

library(ggplot2)

p - ggplot(USPop,aes(year, population))

R語言使用nls擬合,為什么總說循環(huán)次數(shù)大于50

nls的數(shù)據(jù)源必須有誤差。不能精確等于公式返回值(零殘差)。循環(huán)次數(shù)大于50通常是使用 函數(shù)精確返回值 作為數(shù)據(jù)源去擬合函數(shù)。必須給y值加上隨機(jī)誤差。

z=function(x,a,b){a*sin(x)+b*cos(x)}

x=seq(1,10,9/500)

y=z(x,1,1)?#?a=1?b=1?是期望擬合出的結(jié)果。

cor=data.frame(x=x,y=y)

cor$res=runif(length(cor$x),min=-0.005,max=0.005)

cor$yres=cor$y+cor$res

#yres?=y加上隨機(jī)誤差,y是精確返回值

nls(cor$yres~z(cor$x,a,b),data=cor,start=list(a=0.8,b=1.3))

Nonlinear?regression?model

model:?cor$yres?~?z(cor$x,?a,?b)

data:?cor

a??????b?

0.9999?1.0002?

residual?sum-of-squares:?0.004213

Number?of?iterations?to?convergence:?1?

Achieved?convergence?tolerance:?2.554e-07

#使用精確返回值擬合就會(huì)出錯(cuò)。

nls(cor$y~z(cor$x,a,b),data=cor,start=list(a=1,b=1))

Error?in?nls(cor$y?~?z(cor$x,?a,?b),?data?=?cor,?start?=?list(a?=?1,?b?=?1))?:?

循環(huán)次數(shù)超過了50這個(gè)最大值

如何用R語言對(duì)一組樣本數(shù)據(jù)進(jìn)行擬合求出密度函數(shù)?

曲線擬合:(線性回歸方法:lm)

1、x排序

2、求線性回歸方程并賦予一個(gè)新變量

z=lm(y~x+I(x^2)+...)

3、plot(x,y) #做y對(duì)x的散點(diǎn)圖

4、lines(x,fitted(z)) #添加擬合值對(duì)x的散點(diǎn)圖并連線

曲線擬合:(nls)

lm是將曲線直線化再做回歸,nls是直接擬合曲線。

需要三個(gè)條件:曲線方程、數(shù)據(jù)位置、系數(shù)的估計(jì)值。

如果曲線方程比較復(fù)雜,可以先命名一個(gè)自定義函數(shù)。

例:

f=function(x1, x2, a, b) {a+x1+x2^b};

result=nls(x$y~f(x$x1, x$x2, a, b), data=x, start=list(a=1, b=2));

#x可以是數(shù)據(jù)框或列表,但不能是矩陣

#對(duì)系數(shù)的估計(jì)要盡量接近真實(shí)值,如果相差太遠(yuǎn)會(huì)報(bào)錯(cuò):“奇異梯度”

summary(result); #結(jié)果包含對(duì)系數(shù)的估計(jì)和p值

根據(jù)估計(jì)的系數(shù)直接在散點(diǎn)圖上使用lines加曲線即可。

曲線擬合:(局部回歸)

lowess(x, y=NULL, f = 2/3, iter = 3)

#可以只包含x,也可使用x、y兩個(gè)變量

#f為窗寬參數(shù),越大越平滑

#iter為迭代次數(shù),越大計(jì)算越慢

loess(y~x, data, span=0.75, degree=2)

#data為包含x、y的數(shù)據(jù)集;span為窗寬參數(shù)

#degree默認(rèn)為二次回歸

#該方法計(jì)算1000個(gè)數(shù)據(jù)點(diǎn)約占10M內(nèi)存

舉例:

x=seq(0, 10, 0.1); y=sin(x)+rnorm(101) #x的值必須排序

plot(x,y); #做散點(diǎn)圖

lines(lowess(x,y)); #利用lowess做回歸曲線

lines(x,predict(loess(y~x))); #利用loess做回歸曲線,predict是取回歸預(yù)測(cè)值

z=loess(y~x); lines(x, z$fit); #利用loess做回歸曲線的另一種做法

當(dāng)前名稱:nls函數(shù)python r中nls函數(shù)
文章路徑:http://chinadenli.net/article28/hpsijp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、標(biāo)簽優(yōu)化搜索引擎優(yōu)化、App開發(fā)、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

猜你還喜歡下面的內(nèi)容