Slide 1

Slide 1 text

From Python Import Fun YunChen@NISRA

Slide 2

Slide 2 text

Who am I? 陳允禎 - YunChen 輔仁⼤大學資⼯工三⼄乙 NISRA 核⼼心幹部 趣投資訊Slidenow專案 實習⽣生 http://about.met/chenyunchen

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

你學了它整整⼀一年的時間 :o 程式...好玩嗎?

Slide 5

Slide 5 text

Input → ⽼老師眼中認為的程式 → Output 演算法 資演結構 blablabla… 是的 這些東⻄西確實重要 ⼯工作上也會碰到

Slide 6

Slide 6 text

Input → 你認為程式是這樣⼦子 → Output 但在那之前就有可能扼殺你對 程式的熱情和創意

Slide 7

Slide 7 text

So...寫程式真的能幫助⼈人嗎? 還是只是在IDE上 輸⼊入→Magic→輸出→(完)

Slide 8

Slide 8 text

Why Python? The second best program language in the world - Pycon APAC 2014 Jessica Mckellar second 寫Web後端? Flask,Tornado,Django…etc 處理速度不夠快? Cython,Boost.Python 想寫個簡單的⼩小遊戲? PyGame 寫想要寫跨平台Native UI? Kivy,Tkinter 資料分析更是Python強項 Numpy,Scipy,Pandas

Slide 9

Slide 9 text

Raspberry Pi = Python

Slide 10

Slide 10 text

當然... ⼊入⾨門是少不了的 ⼤大家環境準備好了嗎T_T

Slide 11

Slide 11 text

Windows http://www.python.org/getit/ 先裝2.7.10 1. 打開系統內容 2. 選擇進階系統設定 3. 切換到進階分⾴頁 4. 按下環境變數 5. 在Path中新增c:/python27 1. 使⽤用桌⾯面上的IDE 結束這回合... Linux/OSX 內建 1. 加裝pip套件管理 Ubuntu: sudo apt-get install python-pip Fedora: sudo yum install python-pip

Slide 12

Slide 12 text

IPython Notebook sudo pip install “ipython[notebook]”

Slide 13

Slide 13 text

Print & Comments 1. 每⾏行code不需要加分號 2. 輸出預設會加\n 3. 單⾏行註解# ⾮非// 4. 多⾏行註解要3個單引號 IPython Notebook輸出結果

Slide 14

Slide 14 text

Dynameic & Data Type 宣告不需要型別 String Character Integer List(不⽤用宣告⼤大⼩小) Dictionary Weak Type 可以改變型別

Slide 15

Slide 15 text

String String([起始index]:[結尾index]:[間格]) 預設的情況下 起始index: 0 結尾index: -1 間格: 1 在程式語⾔言像C或Java 字串說穿了就是字元陣列 不過這裡你不⽤用考慮 最後⼀一格會被偷塞 “\r\n” 有些會靠這個判斷是否讀到字串結尾 Python有更直覺的⽅方式 Loop會講到

Slide 16

Slide 16 text

直譯器 ⾮非 編譯器 ⾺馬上再這寫新的⼀一⾏行即可run 不需要整份重新編譯

Slide 17

Slide 17 text

But… 腳本語⾔言的致命傷 Dynameic Type Interpreter 效能

Slide 18

Slide 18 text

Solution 將會需要⼤大量運算部分拆出去 並確實賦予型別與⼤大⼩小 最後將此部分“編譯” 不但有了效能 還保有Python的彈性 此為Cython = C + Python But… 處理資料分析的資料若⾮非 GB級以上 計較這個有點蠢

Slide 19

Slide 19 text

If,else & Logic Condition 1. 以縮排來分邏輯區塊 建議2格或4格空⽩白 or Tab 但千萬不要混⽤用!! 2. is: == is not: != and: && or: || elif

Slide 20

Slide 20 text

Loop range(index[default = 0],個數,間格[default = 1]) 從字串提取⾃自字元 從陣列提取元素 break continue ⼀一樣可以在這使⽤用

Slide 21

Slide 21 text

Function def ⾃自訂⾃自⼰己的function 內建也有好⽤用的字串與List的function Learn More https://docs.python.org/2/tutorial/

Slide 22

Slide 22 text

MODULE -IMPORT os (系統相關) time (時間相關) re (正規表⽰示式) urllib,urllib2 (讀取網⾴頁的內容) https://docs.python.org/2/library/

Slide 23

Slide 23 text

結論 簡單易讀 開發快速 ⽀支援多個平台 開發⼯工具易取得 從前⾯面的教學應該就會很容易明⽩白 Linux & OSX內建Python Vim裝個Plugin就能到處開發 課本上的演算法範例code 幾乎不⽤用改就能work

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

網⾴頁爬蟲 Python內建的Library urllib,urllib2,httplib 第三⽅方套件 requests 將內建函式進⾏行包裝 讓使⽤用上更加直覺 sudo pip install requests

Slide 26

Slide 26 text

HTML & DOM 資訊分類區塊 標題 想要拿的資料往往都很深

Slide 27

Slide 27 text

建議攻略⽅方式 利⽤用pyquery,beautifulsoup載⼊入DOM結構 篩選出你想要的⼦子元素內容 針對獲得的內容⽤用Regular Expression去掉不需要的字元 輸⼊入想要的結果 內建的String處理 會讓code更優雅

Slide 28

Slide 28 text

從學校登⼊入⾴頁⾯面下⼿手吧 http://140.136.251.162/StuScore/login.aspx 我真的只要單純⽤用程式 送出帳號資料就ok了嗎? 顯然沒這麼簡單 QQ

Slide 29

Slide 29 text

FoxyProxy + Burpsuite 分析 上學期教的還記得嗎?

Slide 30

Slide 30 text

登⼊入⾴頁⾯面攻略⽅方式 利⽤用FoxyProxy + Burpsuite分析送出的封包 由封包給予的線索再到原⾴頁⾯面需找答案 利⽤用程式模擬使⽤用者送出的封包內容 得到我想要結果 本校沒有開放API&授權...T_T

Slide 31

Slide 31 text

Headers的資料少⼀一項就會失敗 不斷重覆發送才發現需要5項資料才會過 __VIEWSTATE : hash __EVENTVALIDATION : hash ctl00$ContentPlaceHolder1$idtb : 我的學號 ctl00$ContentPlaceHolder1$pawtb : 我的密碼 ctl00$ContentPlaceHolder1$loginButton : “確定” 我將這個值Url Decode後...結果是”確定”

Slide 32

Slide 32 text

VIEWSTATE GET

Slide 33

Slide 33 text

EVENTVALIDATION GET

Slide 34

Slide 34 text

ican學習服務平台 在校學⽣生⾴頁⾯面 成績查詢⾴頁⾯面 暫存成績查詢⾴頁⾯面 學⽣生信箱 重點整理 學校服務⾴頁⾯面都⽤用asp寫的 這招⾏行得通...其它⾴頁⾯面送的變數都差不多 登⼊入成功取得Cookies Requests⾃自動請求帶有Cookies 獲得超級通⾏行證 所有⾴頁⾯面爬透透 取得登⼊入⾴頁⾯面擷取hash 連帶hash將所需的資料送出

Slide 35

Slide 35 text

GET 取得⾴頁⾯面 並擷取兩個Hash POST 偽裝成使⽤用者發送封包

Slide 36

Slide 36 text

再來你可以怎麼做? 把⼀一套網路⼩小說下載下來 把整套漫畫圖⽚片URL拉下來再⽤用fs modul存檔 寫⼀一個到中央氣象局抓天氣的⼩小⼯工具 活⽤用Requests 使⽤用第三⽅方api獵取更多服務 爬Devcore⼤大⼤大們的所有動態 做成NISRA⾨門教語錄 你要做mei語錄也隨便你啦...

Slide 37

Slide 37 text

Make like a Human 1. 發送速度不要太快 2. 隨機的等待時間 3. 改變⼀一下Header的資訊 登⼊入網站 搜尋商品 查看商品細節 選擇數量 放⼊入購物⾞車 結帳 登⼊入網站 結帳 X O

Slide 38

Slide 38 text

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' } 你從哪裡來 ⽤用⼾戶資訊辨識 通⾏行證

Slide 39

Slide 39 text

PTT爬蟲 原理等同當年輔⼤大搶課程式

Slide 40

Slide 40 text

跟成⼤大借⼀一下帳號^.< Account: NCCUcrawler Password: nccu 因為PTT的編碼為BIG5 需要處理⼀一下 Enter鍵 = ‘\r\n’

Slide 41

Slide 41 text

按任意鍵進去 所以我們就隨便按個n 終於來到了使⽤用者的⾸首⾴頁

Slide 42

Slide 42 text

利⽤用PTT的快捷鍵s來找個Gossiping(⼋八卦版)

Slide 43

Slide 43 text

我們已經到了瘟腥的⼋八卦版囉!

Slide 44

Slide 44 text

再來你可以怎麼做? 爬⺫⽬目前最新的前⼗十篇⽂文章 爬今天被推爆的⼗十篇⽂文章 寫成機器⼈人放在server 回覆每篇⽂文章 寫成機器⼈人放在server ⾃自動發廢⽂文去洗版、鬧版 ⽤用⾃自⼰己創的分⾝身去幹以上的事情 然後不要說是我教的 注意要控制好delay 太頻繁帳號會被鎖 然後帳號就等著進⽔水桶

Slide 45

Slide 45 text

MUD 等等 你知道MUD嗎? 古早的⽂文字遊戲Online 你可以嘗試寫寫看外掛 不過終究⽐比不過那些掛網不曉得 幾百年的⼈人了...

Slide 46

Slide 46 text

Why Pandas? 維基百科或網站 已經整理好的表格資料 我們卻為了讀取”整理好”的東⻄西傷腦筋? sudo pip install pandas import pandas as pd

Slide 47

Slide 47 text

API/IO Pickling Flat File Clipboard Excel JSON HTML HDFStore SQL Google BigQuery STATA Pandas提供⼀一些處理那些政府開源 不同、很⻤⿁鬼詭的資料格式txt,excel...

Slide 48

Slide 48 text

處理資料來源 Reality Mining Dataset - MIT
 政府資料開放平台
 維基百科
 ⼀一些提供開放、開源資料的網站 http://data.gov.tw/ http://realitycommons.media.mit.edu/ http://zh.wikipedia.org/

Slide 49

Slide 49 text

txt檔 原始資料 若以Python硬幹作法 移除每⾏行結尾的newline ‘/n’ 再將字串取出並除去空⽩白

Slide 50

Slide 50 text

以表格⽅方式精準呈現 以Pandas的⽅方式實作

Slide 51

Slide 51 text

現在我想知道8/18的蹤跡 如果⽤用Python硬幹 隨著資料越來越複雜 你⼜又想得到特別的結果 code就越來越噁⼼心 勇者可以嘗試看看 再只取蹤跡時間 ex: 11-07-17

Slide 52

Slide 52 text

Solution 將index轉成時間序列資料 能夠做這些操作 到底是什麼資料格式 字串? 數字? DataFrame&Series

Slide 53

Slide 53 text

Series:[List]{Directionary} 各縣市⼈人⼝口密度資料 http://en.wikipedia.org/wiki/List_of_administrative_divisions_of_Taiwan

Slide 54

Slide 54 text

中⽂文字顯⽰示Solution 載⼊入⼊入Series ⼀一樣會幫你處理

Slide 55

Slide 55 text

台灣⼈人⼝口 縣市⾯面積 TWpop.txt TWarea.txt 拿到政府的公開資料 格式悲劇就算了 想要的部分⼜又在不同的資料 我只想要⼈人⼝口 我只想要⾯面積 先前的⼈人⼝口密度 我想要的結果

Slide 56

Slide 56 text

1. 先⽤用read_table讀現有的表格 2. 將該資料只取你要的部分 我只要⼈人⼝口 縣市當索引值

Slide 57

Slide 57 text

同理另外⼀一份⾯面積資料也是如此 我只要⾯面積 縣市當索引值

Slide 58

Slide 58 text

將先前的三種資料:⼈人⼝口、⾯面積、密度合併 注意到了嗎? ⼈人⼝口、⾯面積、密度都是Series 將各Series資料塞進DataFrame index值(縣市)⾃自動合併 改⼀一下先前沒有的欄位 搞定!

Slide 59

Slide 59 text

驗證密度是否正確 ⼈人⼝口密度 = ⼈人⼝口/⾯面積 可以再將綠⾊色部分 取到⼩小數點第⼆二位 再利⽤用程式判斷 兩值相等做處理

Slide 60

Slide 60 text

當然Pandas也可以很容易的繪製圖

Slide 61

Slide 61 text

QML?

Slide 62

Slide 62 text

Kivy? 功能邏輯 圖形介⾯面

Slide 63

Slide 63 text

Web(static) python -m SimpleHTTPServer

Slide 64

Slide 64 text

Flask(Server Side) 使⽤用者連到哪些Url 要做什麼處理 是不是可以在這裡 加上爬蟲的code 然後回傳結果 將結果丟回前端HTML呈現 再進度包裝、美化、優化

Slide 65

Slide 65 text

我該怎麼做出成果 從爬蟲開始爬你想要的資料 ⽤用這些資料做出你想要的功能 利⽤用Kivy等圖形介⾯面或網⾴頁的⽅方式來呈現結果 做出⼀一個APP或Web出來 全程只⽤用Python ⼀一氣呵成!!

Slide 66

Slide 66 text

跟外ㄓㄥˋ系ㄇㄟ聊天 誒 你們資⼯工系都在做什麼? C, C++, JAVA, 演算法, 資料結構, 電⼦子學...blablabla 喔喔... 以前 誒 你們資⼯工系都在做什麼? 網⾴頁,APP開發、搶課程式、網⾴頁爬蟲、遊戲外掛、駭客
 (然後還可以拿出⼿手機來現場DEMO) 喔喔!? 真的假的!? 等等這怎麼做的...blablabla 現在

Slide 67

Slide 67 text

跟外ㄓㄥˋ系ㄇㄟ聊天 誒 你們資⼯工系都在做什麼? C, C++, JAVA, 演算法, 資料結構, 電⼦子學...blablabla 喔喔... 以前 誒 你們資⼯工系都在做什麼? 網⾴頁,APP開發、搶課程式、網⾴頁爬蟲、遊戲外掛
 (然後還可以拿出⼿手機來現場DEMO) 喔喔!? 真的假的!? 等等這怎麼做的...blablabla 現在 結論: 可以幫我修電腦嗎? 你知道怎麼組電腦嗎? 哪裡可以載得到免費的Adobe 要怎麼學EXCEL? 我想學 ….. …. … .. .

Slide 68

Slide 68 text

要從哪發現Python有趣的專案 Github 上可以找星星最多⼤大家關注的 Twitter也有⼈人整理好最新消息讓你follow Facebook Python Taiwan社團 Taipei.py或各地的社群聚會 每年各⼤大研討會的分享

Slide 69

Slide 69 text

近況閒談 最近開源了哪些東⻄西 Meteor Accounts DigitalOcean React-Loading-Gesture React-File-Upload React-Infinity React.js 的元件 套⽤用在公司專案 Infinity算是最⼤大的⼀一筆 不過⼀一直懶的寫⽂文件跟包裝 還有push回去給原作者囧~ 學校的畢業專題額外產物 ⼀一樣懶的寫⽂文件跟正式發佈囧~

Slide 70

Slide 70 text

近況閒談 宅學營 7/14~7/16 預定會演講的主題: CSS-Animation效能優化 如何讓CSS-Animation的動畫特效維持在60FPS 當你的網⾴頁有越來越多動畫如何確保順暢 還有哪些⼩小技巧和新技術可以協助處理

Slide 71

Slide 71 text

Python好難學 怎麼辦? Chicken,Chicken,Chicken學術研究 https://isotropic.org/papers/chicken.pdf https://goo.gl/OJU6uK Youtube: Chicken Chicken Chicken學術發表

Slide 72

Slide 72 text

Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Chicken Q & A