esproc vs python 2 簡單計算

1.添加Age、Fullname字段

esproc:python

image.png

A4:咱們用T表示序表。T.derive()表示增長字段。這裏用age(日期)計算出年齡,做爲Age字段。用NAME,SURNAME獲得Fullname。dom

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

python:url

import time.net

import pandas as pd3d

import datetimeblog

s = time.time()字符串

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

today = datetime.datetime.today().yearpandas

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字段的值(日期)距今天的年數,做爲年齡字段。用NAME+SURNAME做爲Fullname字段

結果

esproc:

python:

image.png

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

esproc:

image.png

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開始計數的)。

結果:

esproc:

python:

image.png

3.篩選符合條件的記錄

esproc:

image.png

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"的記錄

結果:

esproc:

python:

image.png

4.計算字段的經常使用值

image.png

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

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

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

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

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

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()分別計算最小值,最大值,平均數,總和,中位數,方差。

結果

image.png

5.統計各部門員工的男女人數

esproc:

image.png

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

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()函數獲得以DEPT的分組。最後用size()函數獲得結果。

結果:

esproc:   

python:

image.png

6.統計男女員工的平均年齡

esproc:

image.png

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

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()函數以GENDER分組,最後經過mean()函數獲得平均值。

結果:

esproc:

python:

image.png

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

esproc:

image.png

A4:if(condition,x1,x2)表示若是條件成立,if語句的值爲x1,不然值爲x2,在這兒計算若是SALARY比前一個員工薪水高的話a=a+1。從而獲得A3.(a),其中a隨着if語句不斷的變化。最後獲得一個序列,max()函數獲得最大值。

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)表示當前記錄,df.shift(n)表示前面第n條記錄,data['SALARY'].shift(0)>data['SALARY'].shift(1) 獲得pandas的series結構。循環若是爲假(False)表示當前記錄小於或等於上一條記錄,把a置0,若是爲真則加1。m的做用:當m<a時,把a賦值給m,不然m不變,最終獲得a的最大值。

結果:

image.png

8.每一個字段隨機設置5-10個缺失值

esproc:

image.png

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

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

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)

循環全部的字段,隨機循環5~10次,將字段的某個隨機值設置成np.nan

結果:

image.png

9.丟棄缺失值

esproc:

image.png

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()函數獲得不包含np.nan的記錄

結果:

image.png

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

esproc:

image.png

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

B5:篩選字段爲null的記錄

B6:差集,獲得不爲null的記錄

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

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()生成。

循環全部字段。df[col][pd.isna(df)]獲得df中包含nan的值。~表示非。nonan_list表示當前列不包含nan的全部值組成的list。fill_list表示隨機生成的要填充nan的值的list。

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

結果:

esproc:

python

image.png

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

esproc:

image.png

上例中,B5,B6的運算會致使把序列遍歷兩遍,這裏進行了改進

B5:A.group(xi) 將序列/排列按照一個或多個字段/表達式進行等值分組,結果爲組集構成的序列。這裏是將序表分紅兩組,第一組爲該字段不包含null的,第二組爲包含null的。

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

B7:這裏須要特別注意一下field()函數,r.field(F)取得記錄的第F個字段的字段值或者字符串參數F的值。r.field(F,X) 修改記錄r中第F個字段的字段值或者字符串參數F的值爲x。r.run(xi,…),針對記錄r計算表達式x,最後返回記錄r。此函數一般用於修改r的字段值

B9:和B7的原理同樣,利用field()函數修改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()生成。

循環全部字段第一到倒數第二個字段。df[col][pd.isna(df)]獲得df中包含nan的值。~表示非。nonan_list表示當前列不包含nan的全部值組成的list。fill_list表示隨機生成的要填充nan的值的list。

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

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

結果:

esproc:

python

image.png

小結:本節咱們用11個例子對數據進行簡單的計算,esproc和python都用到了比較多的函數,還用到了一些相對複雜的組合應用,這就不得不說esproc現階段的一個缺點了,查閱資料和使用案例相對於python太少了,緣由就是使用者太少。可是在描述效率和執行效率方面,esproc的優點太明顯了,所以咱們要多使用esproc提升工做效率,同時也能夠完善esproc的缺點。esproc中的函數功能很強大,須要不斷的使用,來充分理解函數的用法,達到熟能生巧最終精通的地步。 

EMPLOYEE.txt
EMPLOYEE_nan.txt

相關文章
相關標籤/搜索