Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
From Python Import Fun
Search
Yun Chen
May 24, 2015
Programming
0
400
From Python Import Fun
A course with python in NISRA
Yun Chen
May 24, 2015
Tweet
Share
More Decks by Yun Chen
See All by Yun Chen
How we build microservices with Kubernetes & Kafka
chenyunchen
3
380
Redis Lua Script With Red Envelope & Message Queue
chenyunchen
0
600
Kubernetes Library with client-go
chenyunchen
0
410
[Graduate Project] Drupal Upgrade & Docker Deploy
chenyunchen
0
140
WECO Porject
chenyunchen
0
84
Docker
chenyunchen
2
190
NISRA fun with burp suite
chenyunchen
1
200
Vim
chenyunchen
0
160
Fun with programming
chenyunchen
0
150
Other Decks in Programming
See All in Programming
Java ジェネリクス入門 2024
nagise
0
610
破壊せよ!データ破壊駆動で考えるドメインモデリング / data-destroy-driven
minodriven
16
4.1k
qmuntal/stateless のススメ
sgash708
0
120
PHP でアセンブリ言語のように書く技術
memory1994
PRO
1
150
飲食業界向けマルチプロダクトを実現させる開発体制とリアルな現状
hiroya0601
1
400
Realtime API 入門
riofujimon
0
110
Vitest Browser Mode への期待 / Vitest Browser Mode
odanado
PRO
2
1.7k
CSC305 Lecture 13
javiergs
PRO
0
130
What’s New in Compose Multiplatform - A Live Tour (droidcon London 2024)
zsmb
1
350
macOS でできる リアルタイム動画像処理
biacco42
7
1.9k
Progressive Web Apps für Desktop und Mobile mit Angular (Hands-on)
christianliebel
PRO
0
110
のびしろを広げる巻き込まれ力:偶然を活かすキャリアの作り方/oso2024
takahashiikki
1
410
Featured
See All Featured
For a Future-Friendly Web
brad_frost
175
9.4k
Build The Right Thing And Hit Your Dates
maggiecrowley
32
2.4k
Facilitating Awesome Meetings
lara
49
6k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Learning to Love Humans: Emotional Interface Design
aarron
272
40k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.2k
KATA
mclloyd
29
13k
Unsuck your backbone
ammeep
668
57k
10 Git Anti Patterns You Should be Aware of
lemiorhan
654
59k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
231
17k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.6k
Transcript
From Python Import Fun YunChen@NISRA
Who am I? 陳允禎 - YunChen 輔仁⼤大學資⼯工三⼄乙 NISRA 核⼼心幹部 趣投資訊Slidenow專案
實習⽣生 http://about.met/chenyunchen
None
你學了它整整⼀一年的時間 :o 程式...好玩嗎?
Input → ⽼老師眼中認為的程式 → Output 演算法 資演結構 blablabla… 是的 這些東⻄西確實重要
⼯工作上也會碰到
Input → 你認為程式是這樣⼦子 → Output 但在那之前就有可能扼殺你對 程式的熱情和創意
So...寫程式真的能幫助⼈人嗎? 還是只是在IDE上 輸⼊入→Magic→輸出→(完)
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
Raspberry Pi = Python
當然... ⼊入⾨門是少不了的 ⼤大家環境準備好了嗎T_T
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
IPython Notebook sudo pip install “ipython[notebook]”
Print & Comments 1. 每⾏行code不需要加分號 2. 輸出預設會加\n 3. 單⾏行註解# ⾮非//
4. 多⾏行註解要3個單引號 IPython Notebook輸出結果
Dynameic & Data Type 宣告不需要型別 String Character Integer List(不⽤用宣告⼤大⼩小) Dictionary
Weak Type 可以改變型別
String String([起始index]:[結尾index]:[間格]) 預設的情況下 起始index: 0 結尾index: -1 間格: 1 在程式語⾔言像C或Java
字串說穿了就是字元陣列 不過這裡你不⽤用考慮 最後⼀一格會被偷塞 “\r\n” 有些會靠這個判斷是否讀到字串結尾 Python有更直覺的⽅方式 Loop會講到
直譯器 ⾮非 編譯器 ⾺馬上再這寫新的⼀一⾏行即可run 不需要整份重新編譯
But… 腳本語⾔言的致命傷 Dynameic Type Interpreter 效能
Solution 將會需要⼤大量運算部分拆出去 並確實賦予型別與⼤大⼩小 最後將此部分“編譯” 不但有了效能 還保有Python的彈性 此為Cython = C +
Python But… 處理資料分析的資料若⾮非 GB級以上 計較這個有點蠢
If,else & Logic Condition 1. 以縮排來分邏輯區塊 建議2格或4格空⽩白 or Tab 但千萬不要混⽤用!!
2. is: == is not: != and: && or: || elif
Loop range(index[default = 0],個數,間格[default = 1]) 從字串提取⾃自字元 從陣列提取元素 break continue
⼀一樣可以在這使⽤用
Function def ⾃自訂⾃自⼰己的function 內建也有好⽤用的字串與List的function Learn More https://docs.python.org/2/tutorial/
MODULE -IMPORT os (系統相關) time (時間相關) re (正規表⽰示式) urllib,urllib2 (讀取網⾴頁的內容)
https://docs.python.org/2/library/
結論 簡單易讀 開發快速 ⽀支援多個平台 開發⼯工具易取得 從前⾯面的教學應該就會很容易明⽩白 Linux & OSX內建Python Vim裝個Plugin就能到處開發
課本上的演算法範例code 幾乎不⽤用改就能work
None
網⾴頁爬蟲 Python內建的Library urllib,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 : hash ctl00$ContentPlaceHolder1$idtb :
我的學號 ctl00$ContentPlaceHolder1$pawtb : 我的密碼 ctl00$ContentPlaceHolder1$loginButton : “確定” 我將這個值Url Decode後...結果是”確定”
VIEWSTATE GET
EVENTVALIDATION GET
ican學習服務平台 在校學⽣生⾴頁⾯面 成績查詢⾴頁⾯面 暫存成績查詢⾴頁⾯面 學⽣生信箱 重點整理 學校服務⾴頁⾯面都⽤用asp寫的 這招⾏行得通...其它⾴頁⾯面送的變數都差不多 登⼊入成功取得Cookies Requests⾃自動請求帶有Cookies
獲得超級通⾏行證 所有⾴頁⾯面爬透透 取得登⼊入⾴頁⾯面擷取hash 連帶hash將所需的資料送出
GET 取得⾴頁⾯面 並擷取兩個Hash POST 偽裝成使⽤用者發送封包
再來你可以怎麼做? 把⼀一套網路⼩小說下載下來 把整套漫畫圖⽚片URL拉下來再⽤用fs modul存檔 寫⼀一個到中央氣象局抓天氣的⼩小⼯工具 活⽤用Requests 使⽤用第三⽅方api獵取更多服務 爬Devcore⼤大⼤大們的所有動態 做成NISRA⾨門教語錄 你要做mei語錄也隨便你啦...
Make like a Human 1. 發送速度不要太快 2. 隨機的等待時間 3. 改變⼀一下Header的資訊
登⼊入網站 搜尋商品 查看商品細節 選擇數量 放⼊入購物⾞車 結帳 登⼊入網站 結帳 X O
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: NCCUcrawler Password: nccu 因為PTT的編碼為BIG5 需要處理⼀一下 Enter鍵 = ‘\r\n’
按任意鍵進去 所以我們就隨便按個n 終於來到了使⽤用者的⾸首⾴頁
利⽤用PTT的快捷鍵s來找個Gossiping(⼋八卦版)
我們已經到了瘟腥的⼋八卦版囉!
再來你可以怎麼做? 爬⺫⽬目前最新的前⼗十篇⽂文章 爬今天被推爆的⼗十篇⽂文章 寫成機器⼈人放在server 回覆每篇⽂文章 寫成機器⼈人放在server ⾃自動發廢⽂文去洗版、鬧版 ⽤用⾃自⼰己創的分⾝身去幹以上的事情 然後不要說是我教的 注意要控制好delay
太頻繁帳號會被鎖 然後帳號就等著進⽔水桶
MUD 等等 你知道MUD嗎? 古早的⽂文字遊戲Online 你可以嘗試寫寫看外掛 不過終究⽐比不過那些掛網不曉得 幾百年的⼈人了...
Why Pandas? 維基百科或網站 已經整理好的表格資料 我們卻為了讀取”整理好”的東⻄西傷腦筋? sudo pip install pandas import
pandas as pd
API/IO Pickling Flat File Clipboard Excel JSON HTML HDFStore SQL
Google BigQuery STATA Pandas提供⼀一些處理那些政府開源 不同、很⻤⿁鬼詭的資料格式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資料塞進DataFrame index值(縣市)⾃自動合併 改⼀一下先前沒有的欄位 搞定!
驗證密度是否正確 ⼈人⼝口密度 = ⼈人⼝口/⾯面積 可以再將綠⾊色部分 取到⼩小數點第⼆二位 再利⽤用程式判斷 兩值相等做處理
當然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也有⼈人整理好最新消息讓你follow Facebook Python Taiwan社團 Taipei.py或各地的社群聚會 每年各⼤大研討會的分享
近況閒談 最近開源了哪些東⻄西 Meteor Accounts DigitalOcean React-Loading-Gesture React-File-Upload React-Infinity React.js 的元件
套⽤用在公司專案 Infinity算是最⼤大的⼀一筆 不過⼀一直懶的寫⽂文件跟包裝 還有push回去給原作者囧~ 學校的畢業專題額外產物 ⼀一樣懶的寫⽂文件跟正式發佈囧~
近況閒談 宅學營 7/14~7/16 預定會演講的主題: CSS-Animation效能優化 如何讓CSS-Animation的動畫特效維持在60FPS 當你的網⾴頁有越來越多動畫如何確保順暢 還有哪些⼩小技巧和新技術可以協助處理
Python好難學 怎麼辦? Chicken,Chicken,Chicken學術研究 https://isotropic.org/papers/chicken.pdf https://goo.gl/OJU6uK Youtube: 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 Chicken Chicken Chicken Q & A