Upgrade to Pro — share decks privately, control downloads, hide ads and more …

From Python Import Fun

From Python Import Fun

A course with python in NISRA

Yun Chen

May 24, 2015
Tweet

More Decks by Yun Chen

Other Decks in Programming

Transcript

  1. From Python Import Fun
    YunChen@NISRA

    View Slide

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

    View Slide

  3. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  8. 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

    View Slide

  9. Raspberry Pi = Python

    View Slide

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

    View Slide

  11. 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

    View Slide

  12. IPython Notebook
    sudo pip install “ipython[notebook]”

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  24. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  32. VIEWSTATE GET

    View Slide

  33. EVENTVALIDATION GET

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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


    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  48. 處理資料來源
    Reality Mining Dataset - MIT

    政府資料開放平台

    維基百科

    ⼀一些提供開放、開源資料的網站
    http://data.gov.tw/
    http://realitycommons.media.mit.edu/
    http://zh.wikipedia.org/

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  61. QML?

    View Slide

  62. Kivy?
    功能邏輯 圖形介⾯面

    View Slide

  63. Web(static)
    python -m SimpleHTTPServer

    View Slide

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

    View Slide

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

    View Slide

  66. 跟外ㄓㄥˋ系ㄇㄟ聊天
    誒 你們資⼯工系都在做什麼?
    C, C++, JAVA, 演算法, 資料結構, 電⼦子學...blablabla
    喔喔...
    以前
    誒 你們資⼯工系都在做什麼?
    網⾴頁,APP開發、搶課程式、網⾴頁爬蟲、遊戲外掛、駭客

    (然後還可以拿出⼿手機來現場DEMO)
    喔喔!? 真的假的!? 等等這怎麼做的...blablabla
    現在

    View Slide

  67. 跟外ㄓㄥˋ系ㄇㄟ聊天
    誒 你們資⼯工系都在做什麼?
    C, C++, JAVA, 演算法, 資料結構, 電⼦子學...blablabla
    喔喔...
    以前
    誒 你們資⼯工系都在做什麼?
    網⾴頁,APP開發、搶課程式、網⾴頁爬蟲、遊戲外掛

    (然後還可以拿出⼿手機來現場DEMO)
    喔喔!? 真的假的!? 等等這怎麼做的...blablabla
    現在
    結論:
    可以幫我修電腦嗎?
    你知道怎麼組電腦嗎?
    哪裡可以載得到免費的Adobe
    要怎麼學EXCEL? 我想學
    …..
    ….

    ..
    .

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  72. 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

    View Slide