大家都用 Python 來做什麼啊?

發現很多人都在學習 Python ,但是沒有明確的說明可以做什麼,主流的功能是什麼?想知道目前利用 Python 開發的都在幹什麼?


首先上一首Python之禪:

Python是一個非常好用的程序語言,開發的速度非常快。我用Python已經一年多了,從Python2.7到現在的Python3.4,也寫了好多的小程序,其中大部分都是爬蟲程序,下面簡單列舉幾個,可憐了我科的各種系統。

0. 製作引文分析利器HistCite的便捷使用版本

怎麼又出現了一個序號為零的啊!沒錯,這個又是我後來加上的,嘻嘻~

對於整天和文獻打交道的研究生來說,HistCite是一款不可多得的效率利器,它可以快速繪製出某個研究領域的發展脈絡,快速鎖定某個研究方向的重要文獻和學術大牛,還可以找到某些具有開創性成果的無指定關鍵詞的論文。但是原生的HistCite已經有4年沒有更新了,現在使用會出現各種bug,於是我就用Python基於HistCite內核開發了一個方便使用的免安裝版本。具體的使用方法和下載鏈接見我的第一篇知乎專欄文章:文獻引文分析利器HistCite使用教程(附精簡易用免安裝Pro版本下載) - Tsing的文章 - 知乎專欄

0.5. 給釣魚網站大量提交垃圾信息

怎麼又出現了一個序號為 0.5 的啊!詳細見我的專欄文章:偶遇一個釣魚網站,於是就簡單玩了一下...

1. 破解觀看中科大網路課堂

中國科學技術大學網路課堂(http://wlkt.ustc.edu.cn/)是一個非常好的平台,上面彙集了很多知名教授的授課視頻,以及最新的講座、報告、表演視頻,內容還是相當豐富的。但是這些視頻只面向校內IP開放。

所以想在校外看到這些視頻必須破解視頻地址,於是利用Python的requests庫結合BeautifulSoup,用了不到10行代碼就可以獲取真實下載地址。

為了方便沒有安裝Python的電腦使用,簡單寫了一個GUI界面,給室友用,都說還是挺好的用的哈。

考慮到視頻版權問題,代碼和程序就不放出來了,請大家見諒。

2. 獲取中科大研究生系統全部學生姓名、學號、選課信息

登錄中國科學技術大學的研究生綜合系統(中國科學技術大學研究生信息平台),可以看到每一門課選課的學生姓名和學號,當時就想能不能做一個這樣的系統,來輸入任何姓名(或者學號)就可以看到他所有的選課信息呢?這是選課首頁:

點擊每門課的已選人數鏈接,可以看到所有的選課學生姓名和學號:

下面就利用requests的模擬登錄功能,先獲取全部課程的鏈接,並保存對於的課程信息,然後挨個獲取了所有課程的選課信息。為了保護學生信息,對程序的關鍵部分進行了模糊處理,希望大家諒解。

這樣就獲取了一個巨大的json文件,裡面全部是學生姓名學號選課信息:

有了這個json文件,我們可以寫入資料庫,也可以直接利用json文件來查詢:

為了方便其他人使用,基於上面的數據我開發了一個線上版本:

輸入姓名或者學號都可以直接查詢別人的選課信息:

這個地址就不放出來了,如果您是科大的研究生,私信我,我把鏈接發給你。

3. 掃描中科大研究生系統上的弱密碼用戶

基於上面獲得的選課學生學號,很容易利用Python依次模擬登錄研究生,密碼就用弱密碼123456,然後可以獲得身份證號碼等重要信息。

這樣就得到了使用123456作為密碼的用戶信息,所以在此提醒大家一定不要使用弱密碼,希望下面的同學早日修改密碼。

4. 模擬登錄中科大圖書館並自動續借

最近,科大圖書館系統升級了,到處都加了驗證碼,所以下面這個方法直接使用肯定是不行了,不過曾經畢竟成功過哈。以前收到借閱圖書到期通知簡訊,就會運行一下這個程序,自動續借了,然後就可以再看一個月了。

運行就是這樣的,自動續借成功,看到的鏈接就是每本書的續借鏈接。

5. 網易雲音樂批量下載

終於來一個正常一點的哈,那麼我就直接放代碼吧,可以下載網易雲音樂各個榜單的全部歌曲,批量下載,速度挺快。請注意提前要創建一個名為 「網易雲音樂」 的文件夾。

# 網易雲音樂批量下載
# By Tsing
# Python3.4.4

import requests
import urllib

# 榜單歌曲批量下載
# r = requests.get("http://music.163.com/api/playlist/detail?id=2884035") # 網易原創歌曲榜
# r = requests.get("http://music.163.com/api/playlist/detail?id=19723756") # 雲音樂飆升榜
# r = requests.get("http://music.163.com/api/playlist/detail?id=3778678") # 雲音樂熱歌榜
r = requests.get("http://music.163.com/api/playlist/detail?id=3779629") # 雲音樂新歌榜

# 歌單歌曲批量下載
# r = requests.get("http://music.163.com/api/playlist/detail?id=123415635") # 雲音樂歌單——【華語】中國風的韻律,中國人的印記
# r = requests.get("http://music.163.com/api/playlist/detail?id=122732380") # 雲音樂歌單——那不是愛,只是寂寞說的謊

arr = r.json()["result"]["tracks"] # 共有100首歌

for i in range(10): # 輸入要下載音樂的數量,1到100。
name = str(i+1) + " " + arr[i]["name"] + ".mp3"
link = arr[i]["mp3Url"]
urllib.request.urlretrieve(link, "網易雲音樂\" + name) # 提前要創建文件夾
print(name + " 下載完成")

於是就可以愉快的聽歌了。

上面這些都是在Python3的環境下完成的,在此之前,用Python2還寫了一些程序,下面也放幾個吧。初期代碼可能顯得有些幼稚,請大神見諒。

6. 批量下載讀者雜誌某一期的全部文章

上次無意中發現讀者雜誌還有一個在線的版本,然後興趣一來就用Python批量下載了上面的大量文章,保存為txt格式。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 保存讀者雜誌某一期的全部文章為TXT
# By Tsing
# Python 2.7.9

import urllib2
import os
from bs4 import BeautifulSoup

def urlBS(url):
response = urllib2.urlopen(url)
html = response.read()
soup = BeautifulSoup(html)
return soup

def main(url):
soup = urlBS(url)
link = soup.select(".booklist a")
path = os.getcwd()+u"/讀者文章保存/"
if not os.path.isdir(path):
os.mkdir(path)
for item in link:
newurl = baseurl + item["href"]
result = urlBS(newurl)
title = result.find("h1").string
writer = result.find(id="pub_date").string.strip()
filename = path + title + ".txt"
print filename.encode("gbk")
new=open(filename,"w")
new.write("&<&<" + title.encode("gbk") + ">&>

")
new.write(writer.encode("gbk")+"

")
text = result.select(".blkContainerSblkCon p")
for p in text:
context = p.text
new.write(context.encode("gbk"))

new.close()

if __name__ == "__main__":
time = "2015_03"
baseurl = "http://www.52duzhe.com/" + time +"/"
firsturl = baseurl + "index.html"
main(firsturl)

7. 獲取城市PM2.5濃度和排名

最近環境問題很受關注,就用Python寫了一個抓取PM2.5的程序玩玩,程序支持多線程,方便擴展。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 獲取城市PM2.5濃度和排名
# By Tsing
# Python 2.7.9

import urllib2
import threading
from time import ctime
from bs4 import BeautifulSoup

def getPM25(cityname):
site = "http://www.pm25.com/" + cityname + ".html"
html = urllib2.urlopen(site)
soup = BeautifulSoup(html)

city = soup.find(class_ = "bi_loaction_city") # 城市名稱
aqi = soup.find("a",{"class","bi_aqiarea_num"}) # AQI指數
quality = soup.select(".bi_aqiarea_right span") # 空氣質量等級
result = soup.find("div",class_ ="bi_aqiarea_bottom") # 空氣質量描述

print city.text + u"AQI指數:" + aqi.text + u"
空氣質量:" + quality[0].text + result.text
print "*"*20 + ctime() + "*"*20

def one_thread(): # 單線程
print "One_thread Start: " + ctime() + "
"
getPM25("hefei")
getPM25("shanghai")

def two_thread(): # 多線程
print "Two_thread Start: " + ctime() + "
"
threads = []
t1 = threading.Thread(target=getPM25,args=("hefei",))
threads.append(t1)
t2 = threading.Thread(target=getPM25,args=("shanghai",))
threads.append(t2)

for t in threads:
# t.setDaemon(True)
t.start()

if __name__ == "__main__":

one_thread()
print "
" * 2
two_thread()

8. 爬取易迅網商品價格信息

當時準備抓取淘寶價格的,發現有點難,後來就沒有嘗試,就把目標選在了易迅網。

#!/usr/bin/env python
#coding:utf-8
# 根據易迅網的商品ID,爬取商品價格信息。
# By Tsing
# Python 2.7.9

import urllib2
from bs4 import BeautifulSoup
def get_yixun(id):
price_origin,price_sale = "0","0"
url = "http://item.yixun.com/item-" + id + ".html"
html = urllib2.urlopen(url).read().decode("utf-8")
soup = BeautifulSoup(html)
title = unicode(soup.title.text.strip().strip(u"【價格_報價_圖片_行情】-易迅網").replace(u"】","")).encode("utf-8").decode("utf-8")
print title
try:
soup_origin = soup.find("dl", { "class" : "xbase_item xprice xprice_origin" })
price_origin = soup_origin.find("span", { "class" : "mod_price xprice_val" }).contents[1].text
print u"原價:" + price_origin
except:
pass
try:
soup_sale= soup.find("dl",{"class":"xbase_item xprice"})
price_sale = soup_sale.find("span", { "class" : "mod_price xprice_val" }).contents[1]
print u"現價:"+ price_sale
except:
pass

print url
return None

if __name__ == "__main__":
get_yixun("2189654")

9. 音悅台MV免積分下載

音悅台上有好多高質量的MV,想要下載卻沒有積分,於是就想到破解下載。當時受一個大神的代碼的啟發,就寫出了下面的代碼,雖然寫的有點亂,但還是可以成功破解的哈。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 音悅台MV免積分下載
# By Tsing
# Python 2.7.9

import urllib2
import urllib
import re

mv_id = "2278607" # 這裡輸入mv的id,即http://v.yinyuetai.com/video/2275893最後的數字

url = "http://www.yinyuetai.com/insite/get-video-info?flex=truevideoId=" + mv_id
timeout = 30
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36",
"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
}

req = urllib2.Request(url, None, headers)
res = urllib2.urlopen(req,None, timeout)
html = res.read()

reg = r"http://w*?.yinyuetai.com/uploads/videos/common/.*?(?=br)"
pattern=re.compile(reg)
findList = re.findall(pattern,html) # 找到mv所有版本的下載鏈接

if len(findList) &>= 3:
mvurl = findList[2] # 含有流暢、高清、超清三個版本時下載超清
else:
mvurl = findList[0] # 版本少時下載流暢視頻

local = "MV.flv"

try:
print "downloading...please wait..."
urllib.urlretrieve(mvurl,local)
print "[:)] Great! The mv has been downloaded.
"
except:
print "[:(] Sorry! The action is failed.
"

10. 其他請參考:能利用爬蟲技術做到哪些很酷很有趣很有用的事情? - Tsing 的回答

結語:Python是一個利器,而我用到的肯定也只是皮毛,寫過的程序多多少少也有點相似,但是我對Python的愛卻是越來越濃的。

補充:看到評論中有好多知友問哪裡可以快速而全面地學習Python編程,我只給大家推薦一個博客,大家認真看就夠了:Python教程 - 廖雪峰的官方網站


科研工作者來展示一下。

首先,我非常同意 @xlzd 的觀點:

不要局限在「學Python」這樣的思維上。要在技術領域立足,僅僅學會了 Python 的語法是不夠的,你需要很多編程語言之外的基礎知識。

Python 是著名的膠水語言,意味著幾乎沒有 Python 做不了的事情。關鍵不在於會不會用 Python 的語法——說實話,Python 的語法在實用層面上學起來實在並不困難(我的意思是,不去深究 Python 底層源碼的實現原理)。關鍵在於,你想用它做什麼事情?你知道該怎麼去做嗎?

我的科研工作大量依賴自己開發的 Python 程序和腳本。

比如,用 Python 和 PyVisa 控制實驗儀器

比如,用 numpy 和 scipy 擬合光譜

比如,用 numpy 和 scipy 做數據後處理,以及後續的——發 paper

比如,做個簡單的 GUI 來比對理論和實驗

可是,這些是學會了 Python 語法就能做出來的嗎?Python 只不過是一個省時省力的實現工具罷了。這些程序背後,可不是多年的量子力學知識和實驗科學的經驗么?


前三個應用的代碼都在我的 github 上,不過你們就不用 fork 了,非業內人事用不到。

我只是想說,學 Python 很多都是從學爬蟲開始。但是 Python 絕不僅僅是爬幾個網頁。


Python 可以做什麼,這是一個有趣的問題。

從入門級選手到專業級選手都在做的——爬蟲
用 Python 寫爬蟲的教程網上一抓一大把,據我所知很多初學 Python 的人都是使用它編寫爬蟲程序。小到抓取一個小黃圖網站,大到一個互聯網公司的商業應用。通過 Python 入門爬蟲比較簡單易學,不需要在一開始掌握太多太基礎太底層的知識就可以很快上手,而且很快可以做出成果,非常適合小白一開始想做出點看得見的東西的成就感。
除了入門,爬蟲也被廣泛應用到一些需要數據的公司、平台和組織,通過抓取互聯網上的公開數據,來實現一些商業價值是非常常見的做法。當然這些選手的爬蟲就要厲害的多了,需要處理包括路由、存儲、分散式計算等很多問題,與小白的抓黃圖小程序,複雜度差了很多倍。

Web 程序
除了爬蟲,Python 也廣泛應用到了 Web 端程序,比如你現在正在使用的知乎,主站後台就是基於 Python 的 tornado 框架,豆瓣的後台也是基於 Python。除了 tornado (Tornado Web Server),Python 常用的 Web 框架還有 Flask(Welcome | Flask (A Python Microframework)),Django (The Web framework for perfectionists with deadlines) 等等。通過上述框架,你可以很方便實現一個 Web 程序,比如我認識的一些朋友,就通過 Python 自己編寫了自己的博客程序,包括之前的 zhihu.photo,我就是通過 Flask 實現的後台(出於版權等原因,我已經停掉了這個網站)。除了上述框架,你也可以嘗試自己實現一個 Web 框架。

桌面程序
Python 也有很多 UI 庫,你可以很方便地完成一個 GUI 程序(話說我最開始接觸編程的時候,就覺得寫 GUI 好炫酷,不過搞了好久才在 VC6 搞出一個小程序,後來又輾轉 Delphi、Java等,最後接觸到 Python 的時候,我對 GUI 已經不感興趣了)。Python 實現 GUI 的實例也不少,包括大名鼎鼎的 Dropbox,就是 Python 實現的伺服器端和客戶端程序。

科學計算
Python 的開發效率很高,性能要求較高的模塊可以用 C 改寫,Python 調用。同時,Python 可以更高層次的抽象問題,所以在科學計算領域也非常熱門。包括 scipy、numpy 等用於科學計算的第三方庫的出現,更是方便了又一定數學基礎,但是計算機基礎一般的朋友。

圖像處理
這方面不熟,列幾個關鍵詞吧,如有錯誤,請斧正。
keywords : OpenCV, Pillow, PIL

小結
時間問題,暫到這裡。基本上可以不負責任地認為,Python 可以做任何事情。
但是,如果你是打算以此為業,我的建議是,不要局限在 「學Python」這樣的思維上。要在技術領域立足,僅僅學會了 Python 的語法是不夠的,你需要很多編程語言之外的基礎知識。


目前在很多行業中都在越來越多的應用Python,這也是很多行業學習Python的原因,Python主要的應用領域有哪些呢?我們來看一看:

目前來學的人群分為以下幾類:

第一類:入行編程新手:大學剛畢業或者其他行業轉崗,想從事編程開發的工作,目前認為Python比較火,想入行;

第二類:Linux系統運維人員:Linux運維以繁雜著稱,對人員系統掌握知識的能力要求非常高,那麼也就需要一個編程語言能解決自動化的問題,Python開發運維工作是首選,Python運維工資的薪資普遍比Linux運維人員的工資高。

第三類:做數據分析或者人工智慧:不管是常見的大數據分析或者一般的金融分析、科學分析都比較大程度的應用了數據分析,人工智慧的一些常見應用也使用了Python的一些技術。

第四類:在職程序員轉Python開發:平常只關注div+css這些頁面技術,很多時候其實需要與後端開發人員進行交互的,現在有很多Java程序在轉到Python語言,他們都被Python代碼的優美和開發效率所折服

第五類:其他:一些工程師以前在做很多SEO優化的時候,苦於不會編程,一些程序上面的問題,得不到解決,只能做做簡單的頁面優化。 現在學會Python之後,可以編寫一些查詢收錄,排名,自動生成網路地圖的程序,解決棘手的SEO問題

——————

作為linux運維的行業,來說一說Python的使用的內容吧,下面為內容詳情。

——————

現階段,掌握一門開發語言已經成為高級運維工程師的必備計能,不會開發,你就不能充分理解你們系統的業務流程,你就不能幫助調試、優化開發人開發的程序, 開發人員有的時候很少關注性能的問題,這些問題就得運維人員來做,一個業務上線了,導致 CPU 使用過高,內存佔用過大,如果你不會開發,你可能只能查到進程級別,也就是哪個進程佔用這麼多,然後呢?然後就交給開發人員處理了,這樣咋體現你的價值?

另外,大一點的公司,伺服器都上幾百,上千,甚至數萬台,這種情況下怎樣做自動化運維?用 SHELL 寫腳本 FOR 循環?呵呵,歇了吧, SHELL 也就適合簡單的系統管理工作。到複雜的自動化任務還得要用專門的開發語言。你可能說了,自動化管理有專門的開源軟體\監控也有,直接拿來用下就好了,但是現有的開源軟體如 puppetsaltstackzabbix
agio 多為通用的軟體,不可能完全適用你公司的所有需求,當你需要做定製、做二次開發的時候,你咋辦?找開發部門?開發部門不懂運維的實際業務邏輯,寫出來的東西爛爛不能用,這活最後還得交給運維開發人員來做。

其次,不會運維開發,你就不能自己寫運維平台\複雜的運維工具,一切要藉助於找一些開源軟體拼拼湊湊,如果是這樣,那就請不要抱怨你的工資低,你的工作不受重視了。

那為什麼是Python?PYTHON 第一是個非常牛 B 的腳本語言, 能滿足絕大部分自動化運維的需求,又能做後端 C/S 架構,又能用 WEB 框架快速開發出高大上的 WEB 界面,只有當你自已有能力做出一套運維自動化系統的時候,你的價值才體現出來,你才有資格跟老闆談重視, 否則,還是老老實實回去裝機器吧。

——————

在Linux工作中日常操作涵蓋了監控,部署,網路配置,日誌分析,安全檢測 等等許許多多的方面,無所不包。

python可以寫很多的腳本,把「操作」這個行為做到極致。

與此同時,python在伺服器管理工具上非常豐富,配置管理(saltstack) 批量執行( fabric, saltstack) 監控(Zenoss, nagios 插件) 虛擬化管理( python-libvirt) 進程管理 (supervisor) 雲計算(openstack) ...... 還有大部分系統C庫都有python綁定。

——————

下面我們來說說主要的幾個在Linux運維中的應用吧:

第一、Python開發的jumpserver跳板機

jumpserver跳板機是一款由Python編寫開源的跳板機(堡壘機)系統,實現了跳板機應有的功能。基於ssh協議來管理,客戶端無需安裝agent。

企業主要用於解決:可視化安全管理

特點:完全開源,GPL授權

Python編寫,容易再次開發

實現了跳板機基本功能:認證、授權、審計 ,集成了Ansible,批量命令等、支持WebTerminal

Bootstrap編寫,界面美觀 ,自動收集硬體信息 ,錄像回放 、命令搜索 、實時監控 、批量上傳下載

第二:Python開發的Magedu分散式監控系統

以自動化運維視角為出發點,自動化功能、監控告警、性能調優,結合saltstack實現自動化配置管理等內容進行了全方位的深入剖析。

企業主要用於解決:自動化監控常用系統服務、應用、網路設備等

監控系統需求討論:

監控常用系統服務、應用、網路設備等?一台主機上可監控多個不同服務、不同服務的監控間隔可不同?同一個服務在不同主機上的監控間隔、報警閾值可不同?告警級別?數據可視化,如何做出簡潔美觀的用戶界面?如何實現單機支持5000+機器監控需求?採取何種通信方式?主動、被動?

第三:Python開發的Magedu的CMDB

cmdb的開發需要包含三部分功能:採集硬體數據、API、頁面管理。

企業主要用於解決:自動化管理筆記本、路由器等常見設備的日常使用

執行服務的過程如下:伺服器的客戶端採集硬體數據,然後將硬體信息發送到API,API負責將獲取到的數據保存到資料庫中,後台管理程序負責對伺服器信息的配置和展示。

第四:Python開發的任務調度系統

Python任務調度系統的multiprocessing模塊不但支持多進程,其中managers子模塊還支持把多進程分布到多台機器上。

企業主要用於解決:自動化把一個服務進程分布到其他多個機器的多個進程中

一個服務進程可以作為調度者,將任務分布到其他多個機器的多個進程中,依靠網路通信。想到這,就在想是不是可以使用此模塊來實現一個簡單的作業調度系統。

第五:Python運維流程系統

使用python語言編寫的調度和監控工作流的平台內部用來創建、監控和調整數據管道。任何工作流都可以在這個使用Python來編寫的平台上運行。

企業主要用於解決:自動化創建、監控和調整數據管道

是一種允許工作流開發人員輕鬆創建、維護和周期性地調度運行工作流(即有向無環圖或成為DAGs)的工具。這些工作流包括了如數據存儲、增長分析、Email發送、A/B測試等等這些跨越多部門的用例。

這個平台擁有和 Hive、Presto、MySQL、HDFS、Postgres和S3交互的能力,並且提供了鉤子使得系統擁有很好地擴展性。除了一個命令行界面,該工具還提供了一個基於Web的用戶界面讓您可以可視化管道的依賴關係、監控進度、觸發任務等。

以上為常見的五種應用,請指點!

——————————

Python自動化主要幫助企業解決日常繁雜的工作事務,數據化、可視化的監控日常的業務運行情況。

歡迎一起交流和補充!


你能想到的事情基本上可以用Python實現。

用Python寫了個簡單爬蟲把網上的教程轉換成PDF方便離線閱讀。Python 爬蟲:把廖雪峰的教程轉換成 PDF 電子書

情人節的時候想到一個好玩的事情,就是把過往發過的微博用詞雲展示成一個「心」型,想給她一個驚喜,結果...,基於微博數據打造一顆「心」 - FooFish

每天逛某個技術論壇,我想統計一下哪些技術是大家討論最多的,我用一次簡單的數據分析 一份來自掘金社區的開發者報告 - FooFish

Python在Web開發、爬蟲、數據挖掘、數據分析、機器學習、人工智慧、量化交易等領域下都是主流語言。


# 負能量預警,這是一個悲傷的故事。

用Python 可以撩妹。

前段時間撩一個妹子,吃飯期間聊起來,妹子正在找暑假的實習,問我有沒有公司推薦。我說,『你想去什麼樣的公司呀?』,妹子說,『聽說最近搞投資的機構好多待遇又好,你知不知道呀?』。開玩笑,我好歹也算VC圈裡打過滾的人,當場拍著胸脯向妹子保證,『交給我吧!回頭髮你一份投資機構的名單!』

然而回去之後一合計,手機里的聯繫人統共加起來沒幾個,這要怎麼向妹子交代?幸好我已經不是曾經那個花了5個小時手動下載幾百張PPT 素材圖片的『分析師』了,什麼Requests, BeautifulSoup, lxml, NumPy, Pandas, 哪個我沒有見過?說干就干,我找了一個收錄了比較齊全的投資機構的網站,哼哧哼哧碼起代碼來。

一眨眼好幾個小時過去了,在被Unicode 編碼折磨了一百零一遍之後,我總算捯飭出了一份投資機構名單。

這是一份非常非常簡陋的名單,因為我懶得再往裡面添東西,畢竟妹子的原話是『在杭州有哪些投資機構啊?』,喏,都在這兒了。

懷著喜悅的心情,我把這份名單發給了妹子。

反應不錯嘛!這幾個小時沒白花!
# 曾經
# 我是一個
# 懵懂的
# 熱血青年
# 直到
# 有一天
# 我收到了
# 一張
# 小小的
# 卡片
## 以上是我創作的俳句
過了一段時間,妹子主動來找我了。哼哼,人生苦短,我用Python。你看,這不,輕輕鬆鬆撩妹成功。


。。
。。。
。。。。
。。。
。。

後來我和妹子成為了好朋友,每周都會聯繫個一次兩次,聊上個一句兩句。

# 正文已經結束,請觀眾有序離場。前方高能預警,請系好安全帶,文明駕駛。

大概這才是Python 的正確用法吧。(遠目


做了很多東西哇,比如:

用來搞機器學習:

Scikit-Learn機器學習實踐--垃圾簡訊識別 - 州的先生zmister.com|個人博客

Python機器學習實戰-使用樸素貝葉斯進行垃圾簡訊識別 - 州的先生zmister.com|個人博客

從數據爬取到機器學習--標題黨,你的標題值幾何 - 州的先生zmister.com|個人博客

用來可視化分析:

加盟創富好項目?簡單可視化分析告訴你78網上到底都有啥! - 州的先生zmister.com|個人博客

運用汽車數據進行Python可視化分析 - 州的先生zmister.com|個人博客

想買低價股?看看利用Python對A股低價股的這些數據分析! - 州的先生zmister.com|個人博客

用來製作詞云:

可能是比Python更方便的詞雲製作了 - 州的先生zmister.com|個人博客

用來寫爬蟲:

Python爬蟲教程 - 州的先生zmister.com|個人博客

用來寫GUI:

Python GUI教程(一):在PyQt5中創建第一個GUI圖形用戶界面

Python GUI教程(二):添加窗口小部件到圖形用戶界面GUI中

Python GUI教程(三):在GUI窗口中進行布局管理

Python GUI教程(四):安裝並使用Qt設計師設計Python GUI

Python GUI教程(五):通過Qt設計師在GUI中添加窗口部件

Python GUI教程(六):使用Qt設計師進行窗口布局

Python GUI教程(七):轉換qt設計師的ui代碼為Python代碼

Python GUI教程(八):在主窗口中調用對話框

Python GUI教程(九):從UI文件中解耦Python代碼

Python GUI教程(十):創建一個複雜的GUI

Python GUI教程(十一):使用多線程保持GUI的響應

用來寫Web:

利用Python打造短鏈服務(一) - 州的先生zmister.com|個人博客

用來進行Web滲透測試:

利用Python進行Web滲透測試(七):用Python編寫一個資源暴力探測工具 - 州的先生zmister.com|個人博客

利用Python進行Web滲透測試(八):改進暴力探測器的顯示結果和新功能 - 州的先生zmister.com|個人博客

利用Python進行Web滲透測試(九):添加滲透測試探測器結果截圖 - 州的先生zmister.com|個人博客


擴展各種自己生活中的工具呀
手把手教你擴展個人微信號(1) - LittleCoder的文章 - 知乎專欄
LocalNote,讓你像使用本地文件一樣使用印象筆記(支持 markdown 格式) - LittleCoder的文章 - 知乎專欄
使用Python配合Evernote完成每周工作安排 - LittleCoder的文章 - 知乎專欄
零基礎二十分鐘搭建SAE微信個人號後台 - LittleCoder的文章 - 知乎專欄


我拿python做數學建模,做數據處理。跟其他做開發的答主相比,我python 水平不值一提,勉強答一下。我做的算是拿python做科學計算這一個分支里的東西。

我主要用pandas,numpy和scipy,sklearn和tensorflow。pandas處理數據,numpy當輔助。sklearn做建模,tf和scipy做建模輔助。

我很喜歡python,覺得這傢伙上得廳堂下得廚房,能開發軟體能數據分析,什麼都能幹,很好用很順手。

稍微總結了一點小小心得。求大神輕拍。

##########

用pandas關鍵是要用的比矩陣運算快,才能體現出pandas的價值。如果在data frame裡面寫循環,那就是浪費pandas了。舉個例子啊。long table變wide table,一百萬行,三列,行位置,列位置,值。寫循環執行要好幾分鐘,pandas裡面有個method叫pivot,0.5秒以內搞定。此外呢,不要直接在data frame裡面變數字,慢。拿個numpy矩陣先算結果,算好了再把這個矩陣存成data frame的格式。多用groupby,merge這些東西,別用loop和if。處理小數據,pandas簡直是神器。

scipy呢,我覺得統計包和優化包做得好。要算個假設檢驗啊,求個p值啦,那就要scipy了。優化包可以提供各種常見的優化演算法。你幫計算機算出梯度函數,他就解得快一點。你不給他函數,他就拿數值計算找梯度,慢。有時候目標函數過於複雜,還是要混合著用。舉個例子啊,有五十二個自變數,當兩個確定了以後,剩下五十個是個凸問題,梯度好求,很好解,解一次0.25秒。剩下兩個參數加上去問題就很複雜。反正我最後是在這兩個參數上隨機搜索,每個sample都用scipy算出來固定這兩個參數只變化其他五十個參數的最優解。然後再找最優。上面這個演算法就是沒有梯度的優化裡面套了個有梯度的優化。混著用。

matiplot是數據可視化包,為了讓圖更漂亮一點,可以加上seaborn。但要說哪家的圖漂亮,我還是覺得r的ggplot是最好的,畫個社交網路示意圖,字雲啦這些還是ggplot靠譜。但我覺得這些都是給客戶展示,做ppt的時候才會用。你想啊,面對大量高維度數據的時候,可能計算維度之間的相關係數,各個維度的數據的percentile才是最有效的辦法吧。我不愛看圖,偶爾看看pairplot,我覺得看錶才是最快的。還是要靠pandas。

sklearn,大大降低了機器學習的入門門檻。也讓很多人覺得機器學習不就是跑包么,調調參數而已。誤會呀。難道這個世界上所有需要用數據分析的問題都是分類,聚類,降維和回歸么?顯然不是。這四個工具包很有用,但不能僅靠著這四個包就把所有問題都解決了。而且有時候sklearn裡面現有的功能不夠了,比如做聚類,有時候除了樣本本身,我們還是有一些先驗知識的,我們也還對結果有一些期待或者是約束。把這些額外的東西加進聚類演算法里,也是需要設計的。很多時候,不能解釋結果的聚類,沒有任何意義。但是,sklearn是機器學習的基礎101,熟悉了裡面的這些工具,才能解決更複雜的問題么,對吧。我很喜歡sklearn,強烈推薦。

我對tensorflow的認知也就是拿過來在我們的數據上跑一跑,調調參數看看效果。我覺得如果不是有大量樣本的圖片或者自然語言,deeplearning的優勢不是很明顯。

還有些其它的像os,re這些的,有需要了我會用。但不是天天用。有時候會用一些自帶函數,比如數據特別大的時候,一百個g,那隻能用open逐行處理了。這種數據沒法子直接讀進單機的內存里,那pandas基本就不能用了。

由於業務範圍的原因,我們沒有什麼項目是真正要拿上10g的數據做建模。一般都是在一個超級大的資料庫里pool出來幾個g,然後用單機精細搞,最後給客戶的東西,可能就十兆。但這十兆,值老鼻子錢了。。。

Hadoop,spark用的少,目前項目我單機都能搞定。

###########

我不以寫程序見長,說的不對請輕拍。


經常用Python寫些小玩意兒,其中最自豪的是下面這個(其實也沒有什麼技術含量啦,在眾多知乎高手面前算上班門弄斧了...)。
本人高中僧,學校教室電腦一般情況下是禁網的,但是我發現,學校網路屏蔽只是屏蔽了DNS協議和http/https協議,只要不使用這兩個協議的程序都可以正常連網。
而我經常想上百科查一些資料,就想著能不能繞過這個限制(反正也不是拿來幹什麼壞事情...)。正好手頭有一台VPS,於是乎,我用Python寫了一個「百度百科搜索器」,包括一個伺服器端程序,一個客戶端程序,客戶端在教室里運行,伺服器端掛在VPS上。客戶端通過TCP協議向伺服器發送需要搜索的關鍵詞,伺服器端接收到關鍵詞後,向百度百科發出http請求,然後把保存的html通過TCP協議返回給客戶端。這樣,就實現了繞過學校網路限制搜索百度百科的目的。
理論上來說,應該不止是百度百科,幾乎所有的網頁內容都是可以通過類似的方法訪問的,但是乖寶寶一心撲在學習上呢!


使用GAN(WGAN / DCGAN)生成不存在的神奇寶貝!

github地址(附訓練數據集) 喜歡的話給個star吧!

圖1:生成示例

先簡單介紹一下GAN

GAN啟發自博弈論中的二人零和博弈,由[Goodfellow et al, NIPS 2014]開創性地提出,包含一個生成模型(generative model G)和一個判別模型(discriminative model D)。生成模型捕捉樣本數據的分布,判別模型是一個二分類器,判別輸入是真實數據還是生成的樣本。這個模型的優化過程是一個「二元極小極大博弈(minimax two-player game)」問題,訓練時固定一方,更新另一個模型的參數,交替迭代,使得對方的錯誤最大化,最終,G 能估測出樣本數據的分布。

圖2:DCGAN生成器結構示意圖

DCGAN:

生成器由對一個隨機雜訊進行reshape和transpose convolution得到fake image。

判別器就是一個卷積神經網路,輸出層經由sigmoid做二分類——真圖片或假圖片。Loss函數使用標準交叉熵:

d_loss1 = tf.reduce_mean(
tf.nn.sigmoid_cross_entropy_with_logits(
logits = real_logits, labels = tf.ones_like(real_logits)))
d_loss2 = tf.reduce_mean(
tf.nn.sigmoid_cross_entropy_with_logits(
logits = fake_logits, labels = tf.zeros_like(fake_logits)))

d_loss = d_loss1 + d_loss2

g_loss = tf.reduce_mean(
tf.nn.sigmoid_cross_entropy_with_logits(
logits = fake_logits, labels = tf.ones_like(fake_logits)))

完整代碼請跳轉github

WGAN:

去掉了判別器輸出層的sigmoid,將分類問題轉化為回歸問題, 具體請見WGAN,作者介紹的非常詳細。

與DCGAN不同的是, WGAN的判別器要儘可能的使得loss接近真圖片與加圖片分布的Wasserstein距離,採用的技巧是每訓練一次生成器的同時,訓練5次判別器。

再附兩張效果圖

可以看到,生成的圖片有好有壞,GAN確實比較難於訓練,尤其WGAN的收斂速度不是一般的慢。。 這方面我也沒設呢經驗,大家有好的建議可以一起討論。

代碼太長就不貼了,感興趣的朋友可以去github地址,有完整版的代碼和訓練數據集。

再啰嗦一句,喜歡的話請給個star~


不是搞科研的,工作用Java開發的,Python一般用來做一些輔助性的運維、分析、自動化工作。

個人生活自動化

  1. win-lockfetch 用Win 10的同學都知道Win10有一套自動更新的鎖屏壁紙。對於桌面壁紙有要求的人來說找壁紙是一件比較頭疼的事情。所以就寫了一個腳本放在開啟啟動,每次開機自動同步下Win 10鎖頻壁紙並且只取寬屏壁紙,到指定目錄下。電腦的壁紙目錄就設置在這個。常常看到自己的壁紙刷新成沒看過的圖片,感覺還是挺好的!
  2. finder 在Windows下工作時有Xshell管理多台伺服器別提多方便了。自從切換到Linux/Mac OS下發現沒有這麼便捷了。每次要登錄一台機器都得去找下密碼埠啥的,然後手動輸入。所以寫了個腳本利用Excel內的信息自動登錄服務。同時集成了MyCli入口,方便直接命令行連接管理資料庫。還是挺方便的,目前在公司推廣開了。
  3. myConnectSQL 這是個非常簡單的腳本,但是卻挺有用的。在線上機器運行一些作業經常出現連接資料庫失敗。十有八九是白名單沒配置。可是配好了想驗證就比較難了,因為這台機器沒安裝mysql客戶端,對於線上機器我們研發又不好安裝什麼。所以用Python + MySQLdb 實現一個非常輕量的MySQL客戶端探測是否可以連接上目標伺服器(無需安裝,拷貝下腳本就可以了,前提是伺服器要有Python + MySQLdb環境)
  4. ForwardingMailRobot 手機有兩張卡但是IPHONE不支持雙卡。每天帶著主力卡吧,流量少話費少,帶著流量卡又各種不方便。所以後來研究了下,拿個破舊Android手機把主力卡設置呼叫轉移,然後下載了一個Tasker APP每次這個Android收到簡訊都會調用一次POST請求把簡訊內容發送給我的伺服器,然後伺服器將內容以郵件的形式發送給我。

工作上的使用

  1. 數據分析,工作主要從事大數據計算,經常遇到一些奇葩的數據,需要寫下腳本進行清洗、分析。Python做這個還是非常方便的,特別配合上IPython。
  2. 資料庫操作,經常要寫些腳本操作資料庫。例如一些數據的遷移,從一種表結構遷移到新的表結構、還有例如一次有一個庫有20000多張表,需要為這些表添加一些列,用Python輕鬆解決。
  3. 系統開發,用Python為公司開發了幾個高效運維的系統,集成如自動打包、數據引流、自動化測試等等。用Python 由於有很多開源的包與gitlab/jenkins等非常輕易結合。由於代碼是公司在內部使用,不方便公開。

總而言之,Python給我帶來了真的很多,很多Java給不了的。一年前,我還在由於要不要學Python。當時身邊很少人會這個東西,一直在猶豫是要把更多的時間投入Java的學習還是學習一下Python。最終證明我的選擇沒錯,Python入手非常快,帶來的收益也是非常可觀的,同樣的時間要想在JAVA上深入或許不能得到這麼豐厚的收入。

還是我之前說過的那句話,JAVA是把大劍,PYTHON是把鋒利的小刀。沒有誰更好,只有誰更適合。大劍可以殺人小刀亦可。小刀可以斬草大劍也可。

只是不同需求,選對東西事半功倍!


作為一個初學者,什麼才能讓你對學習產生濃厚的興趣並且有成就感呢?那就學爬蟲吧!


我是在暑假才開始接觸python,到現在認認真真的學了不到一個月的樣子。今天終於參照曾經一次在知乎上看到過的想法寫了一個程序給女朋友作為禮物。這也是我第一次送女朋友禮物,感覺還是挺有成就感的

我做的東西很簡單,附上成品圖

用正則爬武漢的天氣網,然後把溫度和生活指數爬下來,再爬了520張我愛你的電影截圖,一天附上一張,這樣就可以作為一個郵件發送了~

最後寫了一個crontab的腳本,每天定時運行這個python,反正我mac也不關機~

但是這段感情關機了


新手路過,SPOJ上可以用Python解題


#做網站後台
Python在網站後台這邊有大量的成熟的框架,如django,flask,bottle,tornado,我曾經用過flask和django搭建了的兩個網站已經上線

http://zhaduixueshe.com
http://aljun.me

#寫網路爬蟲
Python寫爬蟲非常簡單,庫很健全

以下是我寫的一些爬蟲教程和心得
http://aljun.me/post/17

http://aljun.me/post/18


#科學計算
Python有三大神器:numpy,scipy,matplotlib,其中numpy很多底層使用C語言實現的,所以速度很快,我曾經用它參加各種數學建模大賽,完全可以替代r語言和MATLAB

以下是我寫的科學計算簡單教程
http://aljun.me/post/16


#數據挖掘,機器學習
Python的機器學習包很多,或者自己可以試著實現機器學習演算法,因為Python的類似偽代碼的語法,很容易快速實現自己的想法,另外主流的機器學習演算法都有成熟的包,加上谷歌開源的TensorFlow,常用的機器學習包:scikit-learn,pattern,jieba,pybrain等等

#數據科學
最近spark,Hadoop都開了Python的介面,所以使用Python做大數據的mapreduce也非常簡單,加上py對資料庫支持都很好,或者類似sqlalchemy的orm也非常強大好用

以及剩下的碼演算法,玩玩樹莓派什麼的我就不多說了,

py的強大其實在於他能迅速的實現想法


基本上大家說的我都干過,寫爬蟲(很多是抓數據的,自己寫cookie ,分析請求,說實話scrapy這些東西在具體需求中不是很好用),做網站後台,科學計算pandas numpy,平時還會幫老闆處理下excel什麼的,然後會操作資料庫更新資料庫什麼的(sqlalchemy),然後做一些機器學習數據分析(sklearn) ,做一些深度學習(tensorflow),其他的亂七八糟的也會做一些策略回測什麼的(掘金2.0有本地api,準備試試),還會寫一點cython什麼的,基本上python是一門會大幅度提高工作效率的語音,但是上面一位答主說的話我還是挺贊同的,python用得好不好主要還是看內功,語法什麼的都很簡單,但是內功的修鍊可不是一朝一夕的,各種協議,各種實現的思想等等都是很重要的。 pyyhon可以方便的把計算機知識投入生產,但是前提是你要有足夠的計算機知識。


用Flask寫了自己的博客;

用Python來處理一堆Excel內容;

用Python來寫一些工具、演算法、程序題;

用Python來處理分析工作。

最後什麼事情就都首先想到用Python來解決,以至於刻意規避Python轉而採用其他語言/工具解決,擔心自己以後只會Python了。


web開發,科學計算,爬蟲,數據挖掘。


爬蟲爬小黃圖。
項目進行中,有興趣的跟蹤我的專欄。
媽呀,卡住啦。
要棄坑啦。


接觸python三個星期,目前做的有:

  1. 學校活動場地申請腳本:身處帝都某211高校,場地資源緊張,如果申請的話需要在網上像搶課那樣搶場地。於是乎寫了拿python寫了一個腳本,包含表單提交和郵件處理,實現了在睡覺的時候也能躺收場地。後來因為搶的太快被封殺 - -
  2. 12306餘票檢測腳本:我想買的票賣沒了,所以寫了個小腳本扔在伺服器上24小時檢測是否有餘票,有的話就給我的微信發個提醒。
  3. 課堂作業:老師留的一些不限語言的簡單小網站的製作,喜歡拿python的flask+jinja2來寫

----
關於微信通知:
申請了個人測試號,通知來的時候會推送到鎖屏
其實更好的方案是利用Slack的Bot來進行推送通知


推薦閱讀:

如何用一段簡單的代碼講述一個悲傷的故事?
如何處理 Python 入門難以進步的現象?
有多少人按@蕭井陌大神給出的Python+Flask路線找到工作了?
初學 Python,有哪些 Pythonic 的源碼推薦閱讀?
Python 有哪些好的學習資料或者博客?

TAG:Python | Python 入門 | Python 開發 |