A course with python in NISRA
From Python Import FunYunChen@NISRA
View Slide
Who am I?陳允禎 - YunChen輔仁⼤大學資⼯工三⼄乙NISRA 核⼼心幹部趣投資訊Slidenow專案 實習⽣生http://about.met/chenyunchen
你學了它整整⼀一年的時間 :o程式...好玩嗎?
Input →⽼老師眼中認為的程式→ Output演算法資演結構blablabla…是的 這些東⻄西確實重要⼯工作上也會碰到
Input →你認為程式是這樣⼦子→ Output但在那之前就有可能扼殺你對程式的熱情和創意
So...寫程式真的能幫助⼈人嗎?還是只是在IDE上輸⼊入→Magic→輸出→(完)
Why Python?The second best program language in the world- Pycon APAC 2014 Jessica Mckellarsecond寫Web後端? Flask,Tornado,Django…etc處理速度不夠快? Cython,Boost.Python想寫個簡單的⼩小遊戲? PyGame寫想要寫跨平台Native UI? Kivy,Tkinter資料分析更是Python強項 Numpy,Scipy,Pandas
Raspberry Pi = Python
當然...⼊入⾨門是少不了的⼤大家環境準備好了嗎T_T
Windowshttp://www.python.org/getit/先裝2.7.101. 打開系統內容2. 選擇進階系統設定3. 切換到進階分⾴頁4. 按下環境變數5. 在Path中新增c:/python271. 使⽤用桌⾯面上的IDE結束這回合...Linux/OSX 內建1. 加裝pip套件管理Ubuntu: sudo apt-get install python-pipFedora: sudo yum install python-pip
IPython Notebooksudo pip install “ipython[notebook]”
Print & Comments1. 每⾏行code不需要加分號2. 輸出預設會加\n3. 單⾏行註解# ⾮非//4. 多⾏行註解要3個單引號IPython Notebook輸出結果
Dynameic & Data Type宣告不需要型別StringCharacterIntegerList(不⽤用宣告⼤大⼩小)DictionaryWeak Type可以改變型別
StringString([起始index]:[結尾index]:[間格])預設的情況下起始index: 0結尾index: -1間格: 1在程式語⾔言像C或Java字串說穿了就是字元陣列不過這裡你不⽤用考慮最後⼀一格會被偷塞 “\r\n”有些會靠這個判斷是否讀到字串結尾Python有更直覺的⽅方式 Loop會講到
直譯器 ⾮非 編譯器⾺馬上再這寫新的⼀一⾏行即可run不需要整份重新編譯
But…腳本語⾔言的致命傷Dynameic TypeInterpreter效能
Solution將會需要⼤大量運算部分拆出去並確實賦予型別與⼤大⼩小最後將此部分“編譯”不但有了效能還保有Python的彈性此為Cython = C + PythonBut…處理資料分析的資料若⾮非GB級以上 計較這個有點蠢
If,else & Logic Condition1. 以縮排來分邏輯區塊建議2格或4格空⽩白 or Tab但千萬不要混⽤用!!2.is: ==is not: !=and: &&or: ||elif
Looprange(index[default = 0],個數,間格[default = 1])從字串提取⾃自字元從陣列提取元素breakcontinue⼀一樣可以在這使⽤用
Functiondef ⾃自訂⾃自⼰己的function內建也有好⽤用的字串與List的functionLearn Morehttps://docs.python.org/2/tutorial/
MODULE -IMPORTos (系統相關)time (時間相關)re (正規表⽰示式)urllib,urllib2 (讀取網⾴頁的內容)https://docs.python.org/2/library/
結論簡單易讀開發快速⽀支援多個平台開發⼯工具易取得從前⾯面的教學應該就會很容易明⽩白Linux & OSX內建PythonVim裝個Plugin就能到處開發課本上的演算法範例code 幾乎不⽤用改就能work
網⾴頁爬蟲Python內建的Libraryurllib,urllib2,httplib第三⽅方套件requests將內建函式進⾏行包裝讓使⽤用上更加直覺sudo pip install requests
HTML & DOM資訊分類區塊標題想要拿的資料往往都很深
建議攻略⽅方式利⽤用pyquery,beautifulsoup載⼊入DOM結構篩選出你想要的⼦子元素內容針對獲得的內容⽤用Regular Expression去掉不需要的字元輸⼊入想要的結果內建的String處理會讓code更優雅
從學校登⼊入⾴頁⾯面下⼿手吧http://140.136.251.162/StuScore/login.aspx我真的只要單純⽤用程式送出帳號資料就ok了嗎?顯然沒這麼簡單QQ
FoxyProxy + Burpsuite 分析上學期教的還記得嗎?
登⼊入⾴頁⾯面攻略⽅方式利⽤用FoxyProxy + Burpsuite分析送出的封包由封包給予的線索再到原⾴頁⾯面需找答案利⽤用程式模擬使⽤用者送出的封包內容得到我想要結果本校沒有開放API&授權...T_T
Headers的資料少⼀一項就會失敗不斷重覆發送才發現需要5項資料才會過__VIEWSTATE : hash__EVENTVALIDATION : hashctl00$ContentPlaceHolder1$idtb : 我的學號ctl00$ContentPlaceHolder1$pawtb : 我的密碼ctl00$ContentPlaceHolder1$loginButton : “確定”我將這個值Url Decode後...結果是”確定”
VIEWSTATE GET
EVENTVALIDATION GET
ican學習服務平台在校學⽣生⾴頁⾯面成績查詢⾴頁⾯面暫存成績查詢⾴頁⾯面學⽣生信箱重點整理學校服務⾴頁⾯面都⽤用asp寫的這招⾏行得通...其它⾴頁⾯面送的變數都差不多登⼊入成功取得CookiesRequests⾃自動請求帶有Cookies獲得超級通⾏行證所有⾴頁⾯面爬透透取得登⼊入⾴頁⾯面擷取hash連帶hash將所需的資料送出
GET 取得⾴頁⾯面 並擷取兩個HashPOST 偽裝成使⽤用者發送封包
再來你可以怎麼做?把⼀一套網路⼩小說下載下來把整套漫畫圖⽚片URL拉下來再⽤用fs modul存檔寫⼀一個到中央氣象局抓天氣的⼩小⼯工具活⽤用Requests 使⽤用第三⽅方api獵取更多服務爬Devcore⼤大⼤大們的所有動態 做成NISRA⾨門教語錄你要做mei語錄也隨便你啦...
Make like a Human1. 發送速度不要太快2. 隨機的等待時間3. 改變⼀一下Header的資訊登⼊入網站搜尋商品查看商品細節選擇數量放⼊入購物⾞車結帳登⼊入網站結帳XO
headers = {'Host': '140.136.251.162','User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:30.0) Gecko/20100101 Firefox/30.0','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'zh-tw,zh;q=0.8,en-us;q=0.5,en;q=0.3','Accept-Encoding': 'gzip, deflate','Referer': 'http://140.136.251.162/StuScore/login.aspx','Cookie': 'ASP.NET_SessionId=','Connection': 'keep-alive','Content-Type': 'application/x-www-form-urlencoded'}你從哪裡來⽤用⼾戶資訊辨識通⾏行證
PTT爬蟲原理等同當年輔⼤大搶課程式
跟成⼤大借⼀一下帳號^.<Account: NCCUcrawlerPassword: nccu因為PTT的編碼為BIG5 需要處理⼀一下Enter鍵 = ‘\r\n’
按任意鍵進去 所以我們就隨便按個n終於來到了使⽤用者的⾸首⾴頁
利⽤用PTT的快捷鍵s來找個Gossiping(⼋八卦版)
我們已經到了瘟腥的⼋八卦版囉!
再來你可以怎麼做?爬⺫⽬目前最新的前⼗十篇⽂文章爬今天被推爆的⼗十篇⽂文章寫成機器⼈人放在server 回覆每篇⽂文章寫成機器⼈人放在server ⾃自動發廢⽂文去洗版、鬧版⽤用⾃自⼰己創的分⾝身去幹以上的事情 然後不要說是我教的注意要控制好delay太頻繁帳號會被鎖然後帳號就等著進⽔水桶
MUD等等 你知道MUD嗎?古早的⽂文字遊戲Online你可以嘗試寫寫看外掛不過終究⽐比不過那些掛網不曉得幾百年的⼈人了...
Why Pandas?維基百科或網站已經整理好的表格資料我們卻為了讀取”整理好”的東⻄西傷腦筋?sudo pip install pandasimport pandas as pd
API/IOPicklingFlat FileClipboardExcelJSONHTMLHDFStoreSQLGoogle BigQuerySTATAPandas提供⼀一些處理那些政府開源不同、很⻤⿁鬼詭的資料格式txt,excel...
處理資料來源Reality Mining Dataset - MIT 政府資料開放平台 維基百科 ⼀一些提供開放、開源資料的網站http://data.gov.tw/http://realitycommons.media.mit.edu/http://zh.wikipedia.org/
txt檔原始資料若以Python硬幹作法移除每⾏行結尾的newline ‘/n’再將字串取出並除去空⽩白
以表格⽅方式精準呈現以Pandas的⽅方式實作
現在我想知道8/18的蹤跡如果⽤用Python硬幹隨著資料越來越複雜你⼜又想得到特別的結果code就越來越噁⼼心勇者可以嘗試看看再只取蹤跡時間ex: 11-07-17
Solution將index轉成時間序列資料能夠做這些操作到底是什麼資料格式字串? 數字?DataFrame&Series
Series:[List]{Directionary}各縣市⼈人⼝口密度資料http://en.wikipedia.org/wiki/List_of_administrative_divisions_of_Taiwan
中⽂文字顯⽰示Solution載⼊入⼊入Series⼀一樣會幫你處理
台灣⼈人⼝口 縣市⾯面積TWpop.txt TWarea.txt 拿到政府的公開資料格式悲劇就算了想要的部分⼜又在不同的資料我只想要⼈人⼝口我只想要⾯面積先前的⼈人⼝口密度我想要的結果
1. 先⽤用read_table讀現有的表格2. 將該資料只取你要的部分我只要⼈人⼝口縣市當索引值
同理另外⼀一份⾯面積資料也是如此我只要⾯面積縣市當索引值
將先前的三種資料:⼈人⼝口、⾯面積、密度合併注意到了嗎?⼈人⼝口、⾯面積、密度都是Series將各Series資料塞進DataFrameindex值(縣市)⾃自動合併改⼀一下先前沒有的欄位 搞定!
驗證密度是否正確 ⼈人⼝口密度 = ⼈人⼝口/⾯面積可以再將綠⾊色部分取到⼩小數點第⼆二位再利⽤用程式判斷兩值相等做處理
當然Pandas也可以很容易的繪製圖
QML?
Kivy?功能邏輯 圖形介⾯面
Web(static)python -m SimpleHTTPServer
Flask(Server Side)使⽤用者連到哪些Url要做什麼處理是不是可以在這裡加上爬蟲的code 然後回傳結果將結果丟回前端HTML呈現再進度包裝、美化、優化
我該怎麼做出成果從爬蟲開始爬你想要的資料⽤用這些資料做出你想要的功能利⽤用Kivy等圖形介⾯面或網⾴頁的⽅方式來呈現結果做出⼀一個APP或Web出來全程只⽤用Python⼀一氣呵成!!
跟外ㄓㄥˋ系ㄇㄟ聊天誒 你們資⼯工系都在做什麼?C, C++, JAVA, 演算法, 資料結構, 電⼦子學...blablabla喔喔...以前誒 你們資⼯工系都在做什麼?網⾴頁,APP開發、搶課程式、網⾴頁爬蟲、遊戲外掛、駭客 (然後還可以拿出⼿手機來現場DEMO)喔喔!? 真的假的!? 等等這怎麼做的...blablabla現在
跟外ㄓㄥˋ系ㄇㄟ聊天誒 你們資⼯工系都在做什麼?C, C++, JAVA, 演算法, 資料結構, 電⼦子學...blablabla喔喔...以前誒 你們資⼯工系都在做什麼?網⾴頁,APP開發、搶課程式、網⾴頁爬蟲、遊戲外掛 (然後還可以拿出⼿手機來現場DEMO)喔喔!? 真的假的!? 等等這怎麼做的...blablabla現在結論:可以幫我修電腦嗎?你知道怎麼組電腦嗎?哪裡可以載得到免費的Adobe要怎麼學EXCEL? 我想學…..….…...
要從哪發現Python有趣的專案Github 上可以找星星最多⼤大家關注的Twitter也有⼈人整理好最新消息讓你followFacebook Python Taiwan社團Taipei.py或各地的社群聚會每年各⼤大研討會的分享
近況閒談最近開源了哪些東⻄西Meteor Accounts DigitalOceanReact-Loading-GestureReact-File-UploadReact-Infinity React.js 的元件套⽤用在公司專案Infinity算是最⼤大的⼀一筆不過⼀一直懶的寫⽂文件跟包裝還有push回去給原作者囧~學校的畢業專題額外產物⼀一樣懶的寫⽂文件跟正式發佈囧~
近況閒談宅學營 7/14~7/16預定會演講的主題: CSS-Animation效能優化如何讓CSS-Animation的動畫特效維持在60FPS當你的網⾴頁有越來越多動畫如何確保順暢還有哪些⼩小技巧和新技術可以協助處理
Python好難學 怎麼辦?Chicken,Chicken,Chicken學術研究https://isotropic.org/papers/chicken.pdfhttps://goo.gl/OJU6uKYoutube: Chicken Chicken Chicken學術發表
Chicken Chicken Chicken Chicken Chicken ChickenChicken Chicken Chicken Chicken Chicken ChickenChicken Chicken Chicken Chicken Chicken ChickenChicken Chicken Chicken Chicken Chicken ChickenChicken Chicken Chicken Chicken Chicken ChickenChicken Chicken Chicken Chicken Chicken ChickenChicken Chicken Chicken Chicken Chicken ChickenChicken Chicken Chicken Chicken Chicken ChickenChicken Chicken Chicken Chicken Chicken ChickenChicken Chicken Chicken Chicken Chicken ChickenChicken Chicken Chicken Chicken Chicken ChickenChicken Chicken Chicken Chicken Chicken ChickenChicken Chicken Chicken Chicken Chicken ChickenChicken Chicken Chicken Chicken Chicken ChickenQ & A