esprocvspython2簡單計算

1.添加Age、Fullname字段

esproc:

成都創(chuàng)新互聯(lián)公司基于分布式IDC數(shù)據(jù)中心構(gòu)建的平臺為眾多戶提供達(dá)州主機托管 四川大帶寬租用 成都機柜租用 成都服務(wù)器租用。


A
1=now()
2=file("C:\\Users\\Sean\\Desktop\\esproc_vs_python\\EMPLOYEE.txt")
3=A2.import@t()
4=A3.derive(age(BIRTHDAY):Age,NAME+""+SURNAME:Fullname)
5=interval@ms(A1,now())

A4:我們用T表示序表。T.derive()表示增加字段。這里用age(日期)計算出年齡,作為Age字段。用NAME,SURNAME得到Fullname。

A5:計算運算時間(interval:計算時間間隔。@ms表示以毫秒為單位)

python:

import time

import pandas as pd

import datetime

s = time.time()

data = pd.read_csv("C:/Users/Sean/Desktop/esproc_vs_python/EMPLOYEE.txt",sep="\t")

today = datetime.datetime.today().year

data["Age"] = today-pd.to_datetime(data["BIRTHDAY"]).dt.year

data["Fullname"]=data["NAME"]+data["SURNAME"]

print(data)

e = time.time()

print(e-s)

計算出BIETHDAY字段的值(日期)距今天的年數(shù),作為年齡字段。用NAME+SURNAME作為Fullname字段

結(jié)果

esproc:

esproc vs python 2 簡單計算

python:

esproc vs python 2 簡單計算

 


耗時
esproc0.008
python0.020

 

 

2.提取需要的記錄或者字段(前3個字段,第3~10條記錄)

esproc:


A
1=now()
2=file("C:\\Users\\Sean\\Desktop\\esproc_vs_python\\EMPLOYEE.txt")
3=A2.import@t()
4=A3.new(#1,#2,#3).to(3:10)
5=interval@ms(A1,now())

A4:T.new()表示新建序表。這里以第1,2,3個字段作為新表的字段。T.A,表示取出序列中包含的行號。

python:

import time

import pandas as pd

import datetime

s = time.time()

data = pd.read_csv("C:/Users/Sean/Desktop/esproc_vs_python/EMPLOYEE.txt",sep="\t")

data = data.iloc[2:10,:3]

print(data)

e = time.time()

print(e-s)

使用df.iloc[]切片獲得3~10條記錄,前三個字段(dataframe的字段號和記錄號都是從0開始計數(shù)的)。

結(jié)果:

esproc:

esproc vs python 2 簡單計算

python:

esproc vs python 2 簡單計算


耗時
esproc0.008
python0.010

 

3.篩選符合條件的記錄

esproc:


A
1=now()
2=file("C:\\Users\\Sean\\Desktop\\esproc_vs_python\\EMPLOYEE.txt")
3=A2.import@t()
4=A3.select(STATE=="California")
5=interval@ms(A1,now())

A4:T.select()篩選符合條件的記錄。這里是篩選STATE=="California"為真的記錄

python:

import time

import pandas as pd

import datetime

s = time.time()

data = pd.read_csv("C:/Users/Sean/Desktop/esproc_vs_python/EMPLOYEE.txt",sep="\t")

data = data[data['STATE']=="California"]

print(data)

e = time.time()

print(e-s)

取出data['STATE']=="California"的記錄

結(jié)果:

esproc:

esproc vs python 2 簡單計算

python:

esproc vs python 2 簡單計算


耗時
esproc0.007
python0.028

 

4.計算字段的常用值


A
1=now()
2=file("C:\\Users\\Sean\\Desktop\\esproc_vs_python\\EMPLOYEE.txt")
3=A2.import@t()
4=A3.min(SALARY)
5=A3.max(SALARY)
6=A3.avg(SALARY)
7=A3.sum(SALARY)
8=A3.(SALARY).median()
9=A3.(float(SALARY)).variance()
10=interval@ms(A1,now())

A4:T.min()計算字段最小值

A5:T.max()計算字段最大值

A6:T.avg()計算字段平均值

A7:T.sum()計算字段總和

A8:計算字段中位數(shù)。A.median(k:n)函數(shù),參數(shù)全省略時,如果序列長度是奇數(shù)返回中間位置值;如果序列長度是偶數(shù)返回中間兩個值的平均值。

A9:T.variance()計算字段方差。

python

s = time.time()

data = pd.read_csv("C:/Users/Sean/Desktop/esproc_vs_python/EMPLOYEE.txt",sep="\t")

min = data["SALARY"].min()

max = data["SALARY"].max()

avg = data["SALARY"].mean()

sum = data["SALARY"].sum()

median = data["SALARY"].median()

var = data["SALARY"].var()

print(min,max,avg,sum,median,var)

e = time.time()

print(e-s)

df[字段名]表示取得字段。min(),max(),mean(),sum(),median(),var()分別計算最小值,最大值,平均數(shù),總和,中位數(shù),方差。

結(jié)果

常用計算esprocpython說明
最小值30003000
最大值1600016000
平均值73957395.0
總和36975003697500
中位數(shù)7000.07000.0
方差53244755335145.29總體方差和樣本方差的區(qū)別
耗時0.0040.007

 

5.統(tǒng)計各部門員工的男女人數(shù)

esproc:


A
1=now()
2=file("C:\\Users\\Sean\\Desktop\\esproc_vs_python\\EMPLOYEE.txt")
3=A2.import@t()
4=A3.groups(DEPT:Dept;count(GENDER=="M"):Mcount,   count(GENDER=="F"):Fcount)
5=interval@ms(A1,now())

A4:T.groups()表示以DEPT分組,計算GENDER==“M”或GENDER==“F”的值,得到各部門男女員工的數(shù)量。

python

s = time.time()

data = pd.read_csv("C:/Users/Sean/Desktop/esproc_vs_python/EMPLOYEE.txt",sep="\t")

group = data.groupby(['DEPT','GENDER']).size()

print(group)

e = time.time()

print(e-s)

截取GENDER==‘M’或者GENDER==‘F’的切片以DEPT通過goupby()函數(shù)得到以DEPT的分組。最后用size()函數(shù)得到結(jié)果。

結(jié)果:

esproc:   

esproc vs python 2 簡單計算

python:

esproc vs python 2 簡單計算


耗時
esproc0.004
python0.008

 

6.統(tǒng)計男女員工的平均年齡

esproc:


A
1=now()
2=file("C:\\Users\\Sean\\Desktop\\esproc_vs_python\\EMPLOYEE.txt")
3=A2.import@t()
4=A3.groups(GENDER;avg(age(BIRTHDAY)):Age)
5=interval@ms(A1,now())

A4:T.groups()用來分組,avg()計算平均值,age()根據(jù)日期計算時間間隔。

python

s = time.time()

data = pd.read_csv("C:/Users/Sean/Desktop/esproc_vs_python/EMPLOYEE.txt",sep="\t")

data["Age"] = today-pd.to_datetime(data["BIRTHDAY"]).dt.year

avg_age = data.groupby('GENDER')['Age'].mean()

print(avg_age)

e = time.time()

print(e-s)

計算得到Age字段。然后用groupby()函數(shù)以GENDER分組,最后通過mean()函數(shù)得到平均值。

結(jié)果:

esproc:

esproc vs python 2 簡單計算

python:

esproc vs python 2 簡單計算


耗時
esproc0.005
python0.008

 

7.計算員工薪酬比前一名員工高的最大人數(shù)

esproc:


A
1=now()
2=file("C:\\Users\\Sean\\Desktop\\esproc_vs_python\\EMPLOYEE.txt")
3=A2.import@t()
4=a=0,A3.max(a=if(SALARY>SALARY[-1],a+1,0))
5=interval@ms(A1,now())

A4:if(condition,x1,x2)表示如果條件成立,if語句的值為x1,否則值為x2,在這兒計算如果SALARY比前一個員工薪水高的話a=a+1。從而得到A3.(a),其中a隨著if語句不斷的變化。最后得到一個序列,max()函數(shù)得到最大值。

python

s = time.time()

data = pd.read_csv("C:/Users/Sean/Desktop/esproc_vs_python/EMPLOYEE.txt",sep="\t")

a=0 ; m=0

for i in data['SALARY'].shift(0)>data['SALARY'].shift(1):

    a=0 if i==False else a+1

    m = a if m < a else m

print(m)

e = time.time()

print(e-s)

df.shift(0)表示當(dāng)前記錄,df.shift(n)表示前面第n條記錄,data['SALARY'].shift(0)>data['SALARY'].shift(1) 得到pandas的series結(jié)構(gòu)。循環(huán)如果為假(False)表示當(dāng)前記錄小于或等于上一條記錄,把a置0,如果為真則加1。m的作用:當(dāng)m<a時,把a賦值給m,否則m不變,最終得到a的最大值。

結(jié)果:


最大人數(shù)耗時
esproc40.005
python40.008

 

8.每個字段隨機設(shè)置5-10個缺失值

esproc:


AB
1=now()                   
2=file("C:\\Users\\Sean\\Desktop\\esproc_vs_python\\EMPLOYEE_nan.txt")
3=A2.import@t()
4for A3.fno()>A3.sort(rand()).to(5+rand(6)).field(A4,null)
5=interval@ms(A1,now())

A4:T.fno()得到序表的字段數(shù)量。

B4:T.field(f,x)將x序列中的成員依次賦值給A中第F個字段的字段值或者字符串參數(shù)F的值。F<0時從后往前排。F越界和不存時不執(zhí)行

python:

s = time.time()

data = pd.read_csv("C:/Users/Sean/Desktop/esproc_vs_python/EMPLOYEE.txt",sep="\t")

for i in data.columns:

    for j in range(random.randint(5,10)):

        data[i][random.randint(0,500)]=np.nan

print(data)

e = time.time()

print(e-s)

循環(huán)所有的字段,隨機循環(huán)5~10次,將字段的某個隨機值設(shè)置成np.nan

結(jié)果:


耗時
esproc0.008
python0.710

 

9.丟棄缺失值

esproc:


A
1=now()
2=file("C:\\Users\\Sean\\Desktop\\esproc_vs_python\\EMPLOYEE_nan.txt")
3=A2.import@t()
4=A3.select(!~.array().pos(null))
5=interval@ms(A1,now())

A4:篩選null所在位置為空的記錄,即不包含null的記錄。用r表示記錄,r.array()表示把r中的字段值返回成序列。A.pos()獲得序列成員序號。

python:

s = time.time()

data = pd.read_csv("C:/Users/Sean/Desktop/esproc_vs_python/EMPLOYEE_nan.txt",sep="\t")

data = data.dropna()

print(data)

e = time.time()

print(e-s)

使用dropna()函數(shù)得到不包含np.nan的記錄

結(jié)果:

esproc vs python 2 簡單計算

esproc vs python 2 簡單計算


耗時
esproc0.003
python0.033

 

10.第一列用序列直接替換,其他列的缺失值使用其中的一個隨機值填補

esproc:


AB
1=now()
2=file("C:\\Users\\Sean\\Desktop\\esproc_vs_python\\EMPLOYEE_nan.txt")
3=A2.import@t()
4>A3.field("EID",to(A3.len()))
5for 2,A3.fno()=A3.select(!~.field(A5)   )
6
=A3\B5
7
>B5.run(~.field(A5,B6(rand(B6.len())+1).field(A5)))
8=interval@ms(A1,now())

A4:T.field(F,A) 將A序列中的成員依次賦值給T中第F個字段的字段值或者字符串參數(shù)F的值。

B5:篩選字段為null的記錄

B6:差集,得到不為null的記錄

B7:這里需要特別注意一下field()函數(shù),r.field(F)取得記錄的第F個字段的字段值或者字符串參數(shù)F的值。r.field(F,X) 修改記錄r中第F個字段的字段值或者字符串參數(shù)F的值為x。A3.select(#${A5}==null)取出A3中某個字段為null的記錄序列,用run()函數(shù)循環(huán)修改該序列中的每條記錄。

python:

s = time.time()

data = pd.read_csv("C:/Users/Sean/Desktop/esproc_vs_python/EMPLOYEE_nan.txt",sep="\t")

data['EID']=pd.Series([i for i in range(1,len(data)+1)])

for col in data.columns:

    nonan_list = list(data[col][~pd.isna(data[col])])

    fill_list = [nonan_list[random.randint(0,len(nonan_list))] for i in range(len(data[col][pd.isna(data[col])]))]

    data[col][pd.isna(data[col])]=fill_list

e = time.time()

print(e-s)

將字段名為EID的值修改為遞增的序列。這里用pd.Series()生成。

循環(huán)所有字段。df[col][pd.isna(df)]得到df中包含nan的值。~表示非。nonan_list表示當(dāng)前列不包含nan的所有值組成的list。fill_list表示隨機生成的要填充nan的值的list。

將fill_list中的值賦值給包含nan的記錄。

結(jié)果:

esproc:

esproc vs python 2 簡單計算

python

esproc vs python 2 簡單計算


耗時
esproc0.008
python0.144

 

11.EID字段用序列直接替換,SALARY字段用均值填補缺失值,其他字段的缺失值使用其中的一個隨機值填補

esproc:


AB
1=now()
2=file("C:\\Users\\Sean\\Desktop\\esproc_vs_python\\EMPLOYEE_nan.txt")
3=A2.import@t()
4>A3.field("EID",to(1,A3.len()))
5for 2,A3.fno()-1=A3.group(!~.field(A5))
6
=B5(1).(~.field(A5))
7
>B5(2).run(~.field(A5,B6(rand(B6.len())+1)))
8=A3.avg(SALARY)
9=A3.select(!SALARY).run(~.field("SALARY",A8))
10=interval@ms(A1,now())

上例中,B5,B6的運算會導(dǎo)致把序列遍歷兩遍,這里進(jìn)行了改進(jìn)

B5:A.group(xi) 將序列/排列按照一個或多個字段/表達(dá)式進(jìn)行等值分組,結(jié)果為組集構(gòu)成的序列。這里是將序表分成兩組,第一組為該字段不包含null的,第二組為包含null的。

B6:取得該字段去重后的字段值

B7:這里需要特別注意一下field()函數(shù),r.field(F)取得記錄的第F個字段的字段值或者字符串參數(shù)F的值。r.field(F,X) 修改記錄r中第F個字段的字段值或者字符串參數(shù)F的值為x。r.run(xi,…),針對記錄r計算表達(dá)式x,最后返回記錄r。此函數(shù)通常用于修改r的字段值

B9:和B7的原理一樣,利用field()函數(shù)修改SALARY的字段值為A8中計算出來的平均值。

python:

s = time.time()

data = pd.read_csv("C:/Users/Sean/Desktop/esproc_vs_python/EMPLOYEE_nan.txt",sep="\t")

data['EID']=pd.Series([i for i in range(1,len(data)+1)])

 

for col in list(data.columns)[1:-1]:

    nonan_list = list(data[col][~pd.isna(data[col])])

    fill_list = [nonan_list[random.randint(0,len(nonan_list))] for i in range(len(data[col][pd.isna(data[col])]))]

    data[col][pd.isna(data[col])]=fill_list

data['SALARY'].fillna(data['SALARY'].mean(),inplace=True)

print(data.loc[180:190])

print(e-s)

將字段名為EID的值修改為遞增的序列。這里用pd.Series()生成。

循環(huán)所有字段第一到倒數(shù)第二個字段。df[col][pd.isna(df)]得到df中包含nan的值。~表示非。nonan_list表示當(dāng)前列不包含nan的所有值組成的list。fill_list表示隨機生成的要填充nan的值的list。

將fill_list中的值賦值給包含nan的記錄。

df.fillna(df[s].mean())表示用字段s的平均值填充缺失值。

結(jié)果:

esproc:

esproc vs python 2 簡單計算

python

esproc vs python 2 簡單計算


耗時
esproc0.006
python0.165

 

 

小結(jié):本節(jié)我們用11個例子對數(shù)據(jù)進(jìn)行簡單的計算,esproc和python都用到了比較多的函數(shù),還用到了一些相對復(fù)雜的組合應(yīng)用,這就不得不說esproc現(xiàn)階段的一個缺點了,查閱資料和使用案例相對于python太少了,原因就是使用者太少。但是在描述效率和執(zhí)行效率方面,esproc的優(yōu)勢太明顯了,因此我們要多使用esproc提高工作效率,同時也可以完善esproc的缺點。esproc中的函數(shù)功能很強大,需要不斷的使用,來充分理解函數(shù)的用法,達(dá)到熟能生巧最終精通的地步。

 

EMPLOYEE.txt
EMPLOYEE_nan.txt

文章標(biāo)題:esprocvspython2簡單計算
URL地址:http://bm7419.com/article22/igecjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、網(wǎng)站改版、服務(wù)器托管、網(wǎng)站營銷、靜態(tài)網(wǎng)站、網(wǎng)站制作

廣告

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

小程序開發(fā)