Save 37% off PRO during our Black Friday Sale! »

From Python Import Fun

From Python Import Fun

A course with python in NISRA

Cf6d8219ae9edc7620396d0f8ae7bc38?s=128

Yun Chen

May 24, 2015
Tweet

Transcript

  1. From Python Import Fun YunChen@NISRA

  2. Who am I? 陳允禎 - YunChen 輔仁⼤大學資⼯工三⼄乙 NISRA 核⼼心幹部 趣投資訊Slidenow專案

    實習⽣生 http://about.met/chenyunchen
  3. None
  4. 你學了它整整⼀一年的時間 :o 程式...好玩嗎?

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

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

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

  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
  9. Raspberry Pi = Python

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

  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
  12. IPython Notebook sudo pip install “ipython[notebook]”

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

    4. 多⾏行註解要3個單引號 IPython Notebook輸出結果
  14. Dynameic & Data Type 宣告不需要型別 String Character Integer List(不⽤用宣告⼤大⼩小) Dictionary

    Weak Type 可以改變型別
  15. String String([起始index]:[結尾index]:[間格]) 預設的情況下 起始index: 0 結尾index: -1 間格: 1 在程式語⾔言像C或Java

    字串說穿了就是字元陣列 不過這裡你不⽤用考慮 最後⼀一格會被偷塞 “\r\n” 有些會靠這個判斷是否讀到字串結尾 Python有更直覺的⽅方式 Loop會講到
  16. 直譯器 ⾮非 編譯器 ⾺馬上再這寫新的⼀一⾏行即可run 不需要整份重新編譯

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

  18. Solution 將會需要⼤大量運算部分拆出去 並確實賦予型別與⼤大⼩小 最後將此部分“編譯” 不但有了效能 還保有Python的彈性 此為Cython = C +

    Python But… 處理資料分析的資料若⾮非 GB級以上 計較這個有點蠢
  19. If,else & Logic Condition 1. 以縮排來分邏輯區塊 建議2格或4格空⽩白 or Tab 但千萬不要混⽤用!!

    2. is: == is not: != and: && or: || elif
  20. Loop range(index[default = 0],個數,間格[default = 1]) 從字串提取⾃自字元 從陣列提取元素 break continue

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

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

    https://docs.python.org/2/library/
  23. 結論 簡單易讀 開發快速 ⽀支援多個平台 開發⼯工具易取得 從前⾯面的教學應該就會很容易明⽩白 Linux & OSX內建Python Vim裝個Plugin就能到處開發

    課本上的演算法範例code 幾乎不⽤用改就能work
  24. None
  25. 網⾴頁爬蟲 Python內建的Library urllib,urllib2,httplib 第三⽅方套件 requests 將內建函式進⾏行包裝 讓使⽤用上更加直覺 sudo pip install

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

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

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

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

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

  31. Headers的資料少⼀一項就會失敗 不斷重覆發送才發現需要5項資料才會過 __VIEWSTATE : hash __EVENTVALIDATION : hash ctl00$ContentPlaceHolder1$idtb :

    我的學號 ctl00$ContentPlaceHolder1$pawtb : 我的密碼 ctl00$ContentPlaceHolder1$loginButton : “確定” 我將這個值Url Decode後...結果是”確定”
  32. VIEWSTATE GET

  33. EVENTVALIDATION GET

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

    獲得超級通⾏行證 所有⾴頁⾯面爬透透 取得登⼊入⾴頁⾯面擷取hash 連帶hash將所需的資料送出
  35. GET 取得⾴頁⾯面 並擷取兩個Hash POST 偽裝成使⽤用者發送封包

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

  37. Make like a Human 1. 發送速度不要太快 2. 隨機的等待時間 3. 改變⼀一下Header的資訊

    登⼊入網站 搜尋商品 查看商品細節 選擇數量 放⼊入購物⾞車 結帳 登⼊入網站 結帳 X O
  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' } 你從哪裡來 ⽤用⼾戶資訊辨識 通⾏行證
  39. PTT爬蟲 原理等同當年輔⼤大搶課程式

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

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

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

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

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

    太頻繁帳號會被鎖 然後帳號就等著進⽔水桶
  45. MUD 等等 你知道MUD嗎? 古早的⽂文字遊戲Online 你可以嘗試寫寫看外掛 不過終究⽐比不過那些掛網不曉得 幾百年的⼈人了...

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

    pandas as pd
  47. API/IO Pickling Flat File Clipboard Excel JSON HTML HDFStore SQL

    Google BigQuery STATA Pandas提供⼀一些處理那些政府開源 不同、很⻤⿁鬼詭的資料格式txt,excel...
  48. 處理資料來源 Reality Mining Dataset - MIT
 政府資料開放平台
 維基百科
 ⼀一些提供開放、開源資料的網站 http://data.gov.tw/

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

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

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

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

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

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

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

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

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

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

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

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

  61. QML?

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

  63. Web(static) python -m SimpleHTTPServer

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

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

  66. 跟外ㄓㄥˋ系ㄇㄟ聊天 誒 你們資⼯工系都在做什麼? C, C++, JAVA, 演算法, 資料結構, 電⼦子學...blablabla 喔喔...

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

    以前 誒 你們資⼯工系都在做什麼? 網⾴頁,APP開發、搶課程式、網⾴頁爬蟲、遊戲外掛
 (然後還可以拿出⼿手機來現場DEMO) 喔喔!? 真的假的!? 等等這怎麼做的...blablabla 現在 結論: 可以幫我修電腦嗎? 你知道怎麼組電腦嗎? 哪裡可以載得到免費的Adobe 要怎麼學EXCEL? 我想學 ….. …. … .. .
  68. 要從哪發現Python有趣的專案 Github 上可以找星星最多⼤大家關注的 Twitter也有⼈人整理好最新消息讓你follow Facebook Python Taiwan社團 Taipei.py或各地的社群聚會 每年各⼤大研討會的分享

  69. 近況閒談 最近開源了哪些東⻄西 Meteor Accounts DigitalOcean React-Loading-Gesture React-File-Upload React-Infinity React.js 的元件

    套⽤用在公司專案 Infinity算是最⼤大的⼀一筆 不過⼀一直懶的寫⽂文件跟包裝 還有push回去給原作者囧~ 學校的畢業專題額外產物 ⼀一樣懶的寫⽂文件跟正式發佈囧~
  70. 近況閒談 宅學營 7/14~7/16 預定會演講的主題: CSS-Animation效能優化 如何讓CSS-Animation的動畫特效維持在60FPS 當你的網⾴頁有越來越多動畫如何確保順暢 還有哪些⼩小技巧和新技術可以協助處理

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

  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