自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

早下班系列 | 比python更稱手的兵器

企業(yè)動(dòng)態(tài)
看了這篇文章里寫的信誓旦旦的:《為什么你經(jīng)常加班,卻干不過那些準(zhǔn)點(diǎn)開溜的同事?》,再加之久仰Python的鼎鼎大名,且看過的Python的教材的前言中提到許許多多強(qiáng)調(diào)Python的優(yōu)點(diǎn):語(yǔ)法簡(jiǎn)單、容易上手、世間最后的正義等等,我也不禁懷疑了:要做得比Python還爽,需要做到什么地步?

[[217563]]

有人覺得這標(biāo)題有點(diǎn)兒像王婆賣瓜?其實(shí)要說我一開始也不是很自信。畢竟看了這篇文章里寫的信誓旦旦的:《為什么你經(jīng)常加班,卻干不過那些準(zhǔn)點(diǎn)開溜的同事?》,再加之久仰Python的鼎鼎大名,且看過的Python的教材的前言中提到許許多多強(qiáng)調(diào)Python的優(yōu)點(diǎn):語(yǔ)法簡(jiǎn)單、容易上手、世間***的正義等等(對(duì)比的當(dāng)然是著名的反人類C++和潛在的反人類JAVA),我也不禁懷疑了:要做得比Python還爽,需要做到什么地步?

先看看環(huán)境實(shí)現(xiàn)、代碼編寫的效率

鑒于我是一個(gè)愛折騰的碼農(nóng),又自負(fù)有那么點(diǎn)Python的基礎(chǔ),借著害死貓的好奇心驅(qū)使,便打算試試手:看看這Python到底有多簡(jiǎn)便。

要搞Python,***步當(dāng)然是安裝Python解釋器,那么問題來了:選Python2還是Python3?雖然看起來只是版本升級(jí),但其實(shí)卻是連語(yǔ)法都換代(不是升級(jí)的意思,Python3不能完全兼容Python2語(yǔ)法)。雖然有Python牛人說“語(yǔ)言不是問題,重點(diǎn)在于思想巴拉巴拉……”,但對(duì)于瑟瑟發(fā)抖的新人們來說,我想大多還是不希望看到:因?yàn)槿眰€(gè)括號(hào),就連print都出不來Hello World了……這樣的鬧心事吧?對(duì)比了種種網(wǎng)上意見,***還是決定支持先進(jìn):選Python3。這樣就算過幾年再出個(gè)語(yǔ)法換代的Python4、Python5啥的,至少我的Python3能比別人的Python2多活個(gè)幾年。

安裝完解釋器,再選一個(gè)寫代碼的編輯器。因?yàn)樽罱?xí)慣用eclipse——開源、跨平臺(tái)、免安裝,且支持多種插件——所以我決定在eclipse上安裝個(gè)pydev來實(shí)現(xiàn)支持python編程的功能。百度上找了一個(gè)最簡(jiǎn)便的方法:網(wǎng)上在線安裝。結(jié)果安好之后發(fā)現(xiàn)找不著pydev?再百度找問題,發(fā)現(xiàn)竟是pydev的版本太新了。只好先卸了再對(duì)照eclipse和jdk版本找了一個(gè)恰到好處的,一邊百度一邊實(shí)驗(yàn),一個(gè)小時(shí)總算搞定。速度很慢?要知道網(wǎng)上可是有人自述弄了整整一個(gè)下午。所以對(duì)這一點(diǎn)我還是蠻佩服自己的。

安完編程環(huán)境后,總該爽一下了吧?先print個(gè)Hello World?***!再找之前的文章copy一下代碼……嗯?***行import pandas報(bào)錯(cuò)?缺少pandas的庫(kù)?這么重要的科學(xué)計(jì)算常用庫(kù)為啥這python安裝時(shí)就不自帶一下???還是自己安吧……

上網(wǎng)繼續(xù)百度……發(fā)現(xiàn)有說安一個(gè)anaconda……但那樣我之前安的python和pydev不是都白費(fèi)了?且anaconda自帶的編輯器spyder編寫復(fù)雜工程不夠強(qiáng)大又容易崩潰,還有有很多anaconda沒有的庫(kù)你自己再添加又不知有沒有什么兼容之類巴拉巴拉的問題……否決。直接安裝個(gè)pandas庫(kù)呢?也不行,還有一大堆pandas需要的亂七八糟的其他庫(kù)等著你呢(linux一族的通?。?。用pip工具安裝?沒有外網(wǎng)不行,不過還好我有。但前提是得先安pip工具本身。怎么安裝?源碼編譯……萬(wàn)幸!大學(xué)英語(yǔ)沒忘光,摸著英文線索一路搞到了pip的源碼文件,瑟瑟發(fā)抖的編譯通過后(此處需要使用之前的python環(huán)境),再?gòu)陌俣壬险乙粋€(gè)用pip安裝pandas庫(kù)的詳細(xì)教程,附帶pip pandas所有必須支持庫(kù)的網(wǎng)址,一頓pip下來后(此處需要命令行),再回eclipse中繼續(xù)試驗(yàn)import pandas……居然還不行?。?!什么情況?抱著死馬當(dāng)活馬醫(yī)的心理,打開了python的命令行工具:python shell,試試在python shell中import pandas行不行?竟然又行了!再回eclipse里繼續(xù)測(cè)試,也正常了!個(gè)中原因太過玄幻,還是找一位python界的大神來解釋吧……

到這一步,總算可以開始最早提到的那篇文章中的python編程了。回到之前提到的《為什么你經(jīng)常加班,卻干不過那些準(zhǔn)點(diǎn)開溜的同事?》這篇文章,原文中竟然是用程序代碼中的字符串做表數(shù)據(jù)源……將數(shù)據(jù)寫到程序里感覺也太山寨了點(diǎn),這樣改數(shù)據(jù)難道還得改程序不成?而且如果數(shù)據(jù)過大,導(dǎo)致內(nèi)存裝不下怎么辦?又或者數(shù)據(jù)想跨程序使用又該怎么辦?所以咱至少寫個(gè)文本文件之類的外存文件做數(shù)據(jù)源。

接下來就是編程了,除了加了***步的讀文件操作之外,其他都跟原文一樣 

  1. import pandas 
  2.  
  3. f = open(‘D:/data.txt’, ‘r‘) 
  4.  
  5. try: 
  6.  
  7. a = f.read( ) 
  8.  
  9. finally: 
  10.  
  11. f.close( ) 
  12.  
  13. b = [] 
  14.  
  15. for i in a.split(“\n”): 
  16.  
  17. b.append(i.split(” “)) 
  18.  
  19. for i in range(1, len(b)): 
  20.  
  21. b[i][4] = b[i][4].replace(“$”,‘ ‘) 
  22.  
  23. b[i][4] = b[i][4].replace(“,”,‘ ‘) 
  24.  
  25. for i in range(1, len(b)): 
  26.  
  27. for j in [1, 2, 3, 4]: 
  28.  
  29. b[i][j] = eval(b[i][j]) 
  30.  
  31. data = pandas.DataFrame(b[1:],columns=b[0]) 
  32.  
  33. out = data.groupby([‘STYLE’,‘BEDROOMS’]).mean() 
  34.  
  35. print(out) 

運(yùn)算結(jié)果也一致

簡(jiǎn)單嗎?照比C++,那是簡(jiǎn)單得很,但如果對(duì)比集算器呢?

集算器的安裝咱就不說了,非得要問?那你一定是在逗我……

先上集算器的程序:真不是欺負(fù)你,就三行代碼,而且連一個(gè)循環(huán)都用不著寫!實(shí)際上,如果不是***一列字段的數(shù)據(jù)有點(diǎn)特殊需要處理一下,兩行就可以搞定

  A
1 =file(“D:/data.txt”).cursor@t(#1,#2:int,#3:int,#4:float,#5;,” “)
2 =A2.run(int(replace(replace(#5,”$”,””),”,”,””)):PRICE)
3 =A3.groups(STYLE,BEDROOMS;avg(SQFEET):SQFEET,avg(BATHS):BATHS,avg(PRICE):PRICE)

再看看計(jì)算的結(jié)果:與python完全一致 

 

如果你還是有些猶豫的話,那么不妨再透露一個(gè)重要的內(nèi)幕:集算器的這種使用處理方法(游標(biāo)),是可以支持大數(shù)據(jù)處理的,而且只要再加個(gè)選項(xiàng)還可以支持多線程并行計(jì)算。而上面的python算法要支持大量數(shù)據(jù),那改起來可就不是一句兩句能完事的了,再上個(gè)多線程并行計(jì)算?我感覺您可能需要的是一位有多年python編程經(jīng)驗(yàn)的老鳥…… 

再看看代碼運(yùn)算的效率 

***,不妨加入計(jì)時(shí)代碼,看看運(yùn)行程序消耗的時(shí)間。 

先加python的計(jì)時(shí)代碼(友情提示:計(jì)時(shí)單位是秒)  

  1. import pandas 
  2.  
  3. import time 
  4.  
  5. start = time.clock() 
  6.  
  7. f = open(‘D:/data2.txt‘, ‘r’) 
  8.  
  9. try: 
  10.  
  11. a = f.read( ) 
  12.  
  13. finally: 
  14.  
  15. f.close( ) 
  16.  
  17. b = [] 
  18.  
  19. for i in a.split(“\n”): 
  20.  
  21. b.append(i.split(” “)) 
  22.  
  23. for i in range(1, len(b)): 
  24.  
  25. b[i][4] = b[i][4].replace(“$”,‘ ‘) 
  26.  
  27. b[i][4] = b[i][4].replace(“,”,‘ ‘) 
  28.  
  29. for i in range(1, len(b)): 
  30.  
  31. for j in [1, 2, 3, 4]: 
  32.  
  33. b[i][j] = eval(b[i][j]) 
  34.  
  35. data = pandas.DataFrame(b[1:],columns=b[0]) 
  36.  
  37. out = data.groupby([‘STYLE’,‘BEDROOMS’]).mean() 
  38.  
  39. elapsed = (time.clock() – start) 
  40.  
  41. print(elapsed)  

鑒于原有數(shù)據(jù)文件太小,體驗(yàn)不出什么差距,不如干脆做大一些,能更有對(duì)比價(jià)值。就做個(gè)22.3M的文本文件(就是把原有數(shù)據(jù)不斷復(fù)制粘貼來把文件撐大一點(diǎn)) 

 

先測(cè)試Python: 

為了不讓eclipse影響運(yùn)行速度,這里干脆拿到命令行里執(zhí)行(elicpse:俺不背鍋?。?nbsp; 

 

再次友情提示:python這里計(jì)時(shí)使用的單位是秒……嗯,處理22.3M的數(shù)據(jù)30多秒……還好我一直堅(jiān)持等下去,沒誤以為已經(jīng)卡死,給他來個(gè)Ctrl+C…… 

然后再看看集算器,也加入計(jì)時(shí)代碼(友情提示:使用@ms選項(xiàng)后計(jì)時(shí)單位是毫秒) 

  A
1 =now()
2 =file(“D:/data.txt”).cursor@t(#1,#2:int,#3:int,#4:float,#5;,” “)
3 =A2.run(int(replace(replace(#5,”$”,””),”,”,””)):PRICE)
4 =A3.groups(STYLE,BEDROOMS;avg(SQFEET):SQFEET,avg(BATHS):BATHS,avg(PRICE):PRICE)
5 =interval@ms(A1,now())

然后再看看耗時(shí)(點(diǎn)擊A5格就會(huì)在右側(cè)顯示計(jì)算出來的計(jì)時(shí)數(shù)值)

 

1391毫秒約等于1.4秒(請(qǐng)注意此處有個(gè)小數(shù)點(diǎn)……) 

看到這樣的對(duì)比結(jié)果,我覺得啥也不用說了,請(qǐng)大家自己用心去體會(huì)(我也就不得寸進(jìn)尺地說:其實(shí)集算器好多加速方法還沒用上呢……畢竟太欺負(fù)人了不好……) 

責(zé)任編輯:龐桂玉 來源: 潤(rùn)乾
相關(guān)推薦

2018-03-15 14:53:24

潤(rùn)乾python

2018-03-15 14:07:17

潤(rùn)乾Excel行列轉(zhuǎn)換

2021-02-07 22:27:27

UI工具網(wǎng)站

2022-11-13 08:06:05

ArthasEverythingMaven help

2024-02-05 22:51:49

AGIRustPython

2009-09-17 10:00:15

Linux虛擬化Windows

2012-12-28 14:02:47

2021-11-30 11:56:52

Pixel 6iPhone 12安全

2015-07-31 16:29:15

DockerJavaLinux

2014-12-01 09:52:57

開發(fā)

2013-03-25 11:27:13

Windows Blu

2019-04-24 08:00:00

HTTPSHTTP前端

2021-12-27 07:10:26

ClassmethodStaticmetho函數(shù)

2023-12-14 15:32:17

2021-02-15 12:09:17

虛擬機(jī)Docker Linux

2018-06-08 11:17:11

2017-11-15 10:29:13

戴爾

2022-03-11 13:13:15

LinuxWindows

2022-07-25 07:57:19

工具代碼調(diào)試

2015-01-07 10:24:46

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)