用matlab編程小游戲,可以用Python編程語言做哪些神奇好玩的事情?
Python作為一種應用極為廣泛的語言,幾乎在任何領(lǐng)域都能派上用場。想做Web有Flask/Django/Tornado;想做分布式有Celery;想做手機App有Kivy;想做數(shù)據(jù)分析有Pandas;想做可視化有Matplotlib/Seaborn/Plotly/Bokeh;想做機器學習有Tensorflow/PyTorch/MxNet……
夸張一點說,幾乎沒有什么做不了的東西(筆芯)。小慕今天分享兩個可以用Python做的非常好玩的事情,大家都可以試試看~一、面部識別得益于大量前人的工作,如今利用Python做一些簡單的計算機視覺工作已經(jīng)變得非常非常簡單了。像人臉識別、面部特征提取之類的工作,就可以直接拿來用,極少需要自己實現(xiàn)繁瑣的算法。
DLib就是一個這樣的C++庫,而同時它也提供了Python接口。
想必大家都有過在辦公室遭遇boss探視的經(jīng)歷,而此時此刻你卻在毫無自知地逛著淘寶/知乎/豆瓣,場面一度十分尷尬……
那我們就來嘗試一下,用Python通過攝像頭探測人臉。如果有人進入了攝像頭范圍,則讓Python提出一個通知,告訴你——趕緊把不相關(guān)的東西關(guān)掉!
整個代碼很短,無非幾十行,為了能夠使用,我們還需要安裝一些包和庫。這里需要用到的包括OpenCV和DLib。由于dlib需要boost-python,因此還需要安裝boost和boost-python。(注意:boost-python默認情況下只編譯python2依賴的庫,如果使用python3,需要加編譯開關(guān);而dlib里是沒有探測python版本的,所以可能還需要做一些小hack或者是直接改boost-python庫里的文件名)
至于代碼,可以簡單地放出來:
import cv2import dlibfrom subprocess import callfrom time import timeFREQ = 5FACE_DETECTOR = dlib.get_frontal_face_detector()# macOS下可以使用AppleScript發(fā)送通知def notify(text, title):cmd = r'display notification "%s" with title "%s"'%(text, title)call(["osascript", "-e", cmd])if __name__ == '__main__':# 初始化攝像頭cap = cv2.VideoCapture(0)# 創(chuàng)建繪圖窗口# cv2.namedWindow('face')notify_time = 0while True:# 獲取一幀ret, frame = cap.read()# 不需要太精細的圖片frame = cv2.resize(frame, (320, 240))# 探測人臉,可能有多個faces = FACE_DETECTOR(frame, 1)for face in faces:# 提取人臉部分 畫個方框# fimg = frame[face.top():face.bottom(), face.left():face.right()] # cv2.rectangle(frame, (face.left(), face.top()), (face.right(), face.bottom()), (255, 0, 0), 3) # 不超過FREQ秒一次的發(fā)提醒if time() - notify_time > FREQ:notify(u'檢測到人臉', u'注意')notify_time = time()# 畫到窗口里# cv2.imshow('face', frame)# 按Q退出if cv2.waitKey(500) & 0xff == ord('q'): break# 清理窗口 釋放攝像頭# cv2.destroyAllWindows()cap.release()代碼的原理很簡單:通過opencv捕獲攝像頭獲取的圖像,然后交由dlib的face detector進行檢測。如果檢測到臉部,則通過AppleScript發(fā)出系統(tǒng)提醒(notify函數(shù)即通過process執(zhí)行AppleScript發(fā)出提醒,如果你使用的是Windows,也可以替換成別的內(nèi)容,例如Win下使用VBScript發(fā)出彈窗提醒)。
當然,既然檢測到人臉,那就不僅僅只是能做簡單提醒了。還可以做的事情包括多張照片的臉部變形合成——比如,找出你和你女朋友的照片來做個夫妻相合成什么的……
或者,提取所有的標志性點,給人臉合成出意外的表情或者哈哈鏡效果。
甚至可以借助其它的深度學習網(wǎng)絡進行人臉識別。這算是超級弱化版的臉部識別,比不上FaceID但也挺好玩,不過計算量就不容樂觀了。
順便說一句,什么人臉識別關(guān)掉不該看的東西,對小慕來說不存在的,人家上班刷知乎可是經(jīng)過老板點頭的!(驕傲臉叉腰)
二、數(shù)據(jù)分析來分析下Marvel 今年的最后一部戲:「雷神3:諸神的黃昏」。前一段時間滿天飛的預告片,神秘博士的客串,綠巨人的出演,看得人十分興奮!來張大圖:
大家對于這部電影的評價是怎么樣的呢?小慕爬取了2w條豆瓣影評,做一個簡單分析。
先來看看豆瓣的短評:
這里只抓取了前2w條評論,說一個小技巧,喜歡寫爬蟲的小伙伴們注意了:爬取的網(wǎng)頁一定要緩存到本地!這可以減少解析網(wǎng)頁時出錯,避免需要重新再爬一遍的「尷尬」!另外這能給服務器減少負載,人家網(wǎng)站管理員看你的請求還算守規(guī)矩,也就不會封你賬號/ip啦!
代碼大概是這樣的:
下面是緩存下來的網(wǎng)頁文件:
既然有2w多條數(shù)據(jù),怎么能直接寫sql,那會累死的……于是要來封裝一下操作數(shù)據(jù)庫的邏輯:
來看看效果,除去部分出錯的,還剩下19672條:
具體的數(shù)據(jù)是長這樣的:
另外,贊同數(shù)量排名第一 卷耳 君的影評實在是太有意思了:
第一部:《爸爸,再愛我一次》
第二部:《哥哥,再愛我一次》
第三部:《姐姐,再愛我一次》
ps:托爾終于從錘神變成了雷神
錘子之神這個梗小慕表示能玩一年(手動微笑臉)。
光有數(shù)據(jù)還不足以說明什么,深入分析一波:細心的小伙伴一定發(fā)現(xiàn)了,雷神明明是11月3號才上映,為啥10月份就有影評了?小慕猜測,這肯定是漫威鐵桿粉跑國外看了,一查發(fā)現(xiàn),果然人家洛杉磯10月10號就上映了:
既然關(guān)心到日期,可以來統(tǒng)計一下周一到周日哪天去看電影的人比較多:
整體數(shù)據(jù)顯示:果然還是周末去看電影的人更多……周一數(shù)據(jù)高于二、三、四的原因,不知道是不是沒有周末的朋友調(diào)休去看的?
PS: 數(shù)據(jù)庫里的日期是2017-10-25格式的:怎么快速讓他顯示成周X呢? 這里只要寫個小函數(shù)就行:
從數(shù)據(jù)庫里讀數(shù)據(jù)和統(tǒng)計的方式在這:(后面的統(tǒng)計方式也都類似,就不每次都把代碼放出來啦)
說了這么多還是沒提到電影的受歡迎程度,直接放圖:
總體上看還是推薦的人比較多耶,這應該挺符合大家的預期,畢竟是漫威出品,光忠實粉絲就不計其數(shù)。更何況這個片子里出現(xiàn)了很多超級火爆的場面戲,還有各種超級英雄助陣,這樣的統(tǒng)計結(jié)果也就不足為奇了。
最后將排名前100的評論內(nèi)容做了一下分詞,做成詞云:
至于補充提問中提到的這為什么適合用Python做,其實說到底就是用Python來抓取和處理各種數(shù)據(jù)都非常「順手」。
據(jù)小慕所知,目前的數(shù)據(jù)工作中,數(shù)據(jù)科學家使用最多的工具語言就是Python,排在第二的工具語言是R語言。但這里有一個有趣的現(xiàn)象,那就是同時使用Python或者R語言的人,推薦別人使用Python的卻遠高于R語言。Why?
答案是:1. Python簡單易學,極其容易上手,語法簡單,處理速度會比R語言要快,而且無需把數(shù)據(jù)庫切割。
2. 市場前景好,是目前的趨勢,就業(yè)也會更容易。
3. 標準庫非常龐大,特別的“功能齊全”,可以處理各種工作,其中就包含抓取和處理數(shù)據(jù)。
所以,有一種說法是:python語言在工程方便比較實用,R語言則更受學術(shù)界歡迎。具體是否贊同這種說法,還要看大家自己的理解咯~其實除了小慕舉例說的這兩種有趣的事情,Python能做的還有很多,在此不一一列舉,如果感覺get到了新姿勢,記得回來點贊啦~
程序員學習交流請?zhí)砑幽秸n網(wǎng)官方客服微信:mukewang666回復暗號“前端面試”可進前端交流群回復暗號“Java”可進Java交流群回復暗號“專欄”可進程序員交流群有人試過編寫個程序來炒股嗎?
我應該是少數(shù)自己親自做過的人了,實盤+編程+A股。自認為是韭菜水平,寫這個也并不是為了分享經(jīng)驗,但鑒于大多數(shù)人其實沒有親自做過,就當是寫寫自己的一點感受給有興趣的人看看了。
實現(xiàn)全自動交易的途徑實盤量化交易看似容易,但也沒見多少個人投資者自己做。因為這里有三個門檻:
專業(yè)技能渠道資金專業(yè)技能好理解,基本的編程+投研+一定的數(shù)學基礎(chǔ),這樣才能想出策略并實現(xiàn)策略。渠道就是指如何實現(xiàn)實盤交易,模擬編程炒股很多人試過,但要實盤,需要通過券商,這樣你的策略才能向你的實盤賬戶發(fā)送買賣指令。至于資金,也就是真舍得拿真金白銀去試水,同時具有一定的抗風險能力。
要真正實現(xiàn)全自動交易,有三種途徑,分別從簡單到復雜。
利用一些和券商有合作的量化平臺實現(xiàn)利用如vnpy等開源框架,自己修改后實現(xiàn)從底層寫起,比如C++,自建完整交易系統(tǒng)一般個人單干的話,選擇途徑1或者2;而如果是正規(guī)量化機構(gòu)的話,選擇途徑2或者3。我作為正宗韭菜,自然是選擇途徑1,找了一個可以實盤的量化平臺。為了避免打廣告之嫌,就不透露名字了。
交易策略與系統(tǒng)既然是選擇了傻瓜式的平臺,絕大多數(shù)交易系統(tǒng)的技術(shù)問題已經(jīng)不用擔心,別人幫你解決好了,自己只用專心于策略。策略自己怎么設計都行:
但策略也并不是純粹的只用把股票篩出來即可,仍然需要自己寫買、賣、撤單、查詢成交情況等命令,這樣才可以實現(xiàn)模擬回測。比如一個簡化但完整的流程可以是:
模型隨時接收實時行情的數(shù)據(jù)——某時刻產(chǎn)生了交易信號——將股票代碼和目標買賣股數(shù)發(fā)至實盤賬號——不斷查詢成交情況——完全成交或者需要撤單重新調(diào)整價格——完成一次交易
有了這個,策略就可以完成回測,看看歷史收益如何,進而如果你決定要實盤,則可以把策略提交到量化平臺的實盤服務器中,與自己的實盤賬號綁定并啟動策略。這樣,一個全自動實盤交易就算開始了。如果是日內(nèi)策略,交易起來具體日志可能是這樣:
策略收益大家最關(guān)心的就是這一塊吧,因為我策略寫好了也沒怎么去優(yōu)化,所以表現(xiàn)也就是韭菜水平,甚至可能跑不過大盤。搞了不止一個策略,表現(xiàn)不一。
如果是專業(yè)的機構(gòu),那肯定得每天隨時維護,并迭代新的策略。至于我自己搞,在策略上線了我很少打開來看,就讓它自己運行了,畢竟不是主業(yè),連副業(yè)都算不上,純粹個人興趣愛好。
潛在風險最大的風險就是策略被別人偷走,因為你的策略是放在平臺上的,雖然平臺再三聲稱策略絕對安全,不會被盜,但如今個人數(shù)據(jù)泄露已經(jīng)不是新聞了,自然仍然存在策略被盜的風險,甚至是一些人利用權(quán)限,直接查看那些收益好的策略也說不準。不過我的策略并不擔心這點,因為足夠爛,可能這就是光腳的不怕穿鞋的吧。
另外在交易上也存在一些風險,可能策略出bug了讓實盤賬戶產(chǎn)生錯誤交易,進而導致虧損。或者交易延遲太大,導致錯過買賣點等。
在合規(guī)上,也需要認真鑒別該量化平臺是否與正規(guī)券商合作,否則本金都可能給搞沒。
以上內(nèi)容純粹是個人感想,不構(gòu)成建議。這條路上要趟的坑太多,鐮刀太多,單兵作戰(zhàn)唯一的優(yōu)勢就是,自己是自己的老板,不存在來自客戶的業(yè)績壓力。
如何自學matlab編程或者python編程?
作為小白,在學習Python的時候,必然會走一定的彎路,有人在彎路上走丟了,有人走出了彎路。在此分享我的Python學習之路:
基礎(chǔ)部分:
(1)初始Python:
1. Python 簡介和發(fā)展歷史2. Python 優(yōu)缺點3. Python 能做什么4. Python 環(huán)境搭建,命令行打印“Python 課程開始了!”5. PyCharm 安裝及使用6. 輸入、輸出7. 注釋(2)數(shù)據(jù)類型
1. 變量是什么、變量命名方式2. 標識符有哪些3. 數(shù)據(jù)類型概述,Python有中哪些數(shù)據(jù)類型4. 數(shù)值類型5. 算數(shù)運算符、比較運算符、邏輯運算符、運算符優(yōu)先級6. 數(shù)據(jù)類型轉(zhuǎn)換(3)邏輯控制
1. 布爾類型2. if、if...else 、if...elif 、嵌套結(jié)構(gòu)3. 猜拳游戲4. 字符串與切片5. 字符串常用函數(shù)6. while循環(huán)(4)復雜類型和循環(huán)結(jié)構(gòu)和算法
1. for和for ... else2. break 、continue3. 元組3. 列表概念及操作4. 集合5. 算法:冒泡排序6. 字典(5)函數(shù)應用和遞歸算法
1. 文件操作概念2. 文件打開和關(guān)閉3. 文件讀寫4. 文件定位讀寫5. 文件重命名、文件刪除6. 文件夾操作7. 遞歸打印目錄8. 在指定目標中文件中追加內(nèi)容(包含目錄、文件是否存在判斷)(6)文件操作
1. 模塊簡介2. 使用標準庫中的模塊3. 自定義模塊4. _name_屬性5. 包6. 安裝及使用第三方模塊7. 異常概念8. 捕獲異常9. 異常的傳遞10. 自定義異常(7)面向?qū)ο?/p>1. 面向?qū)ο蟾拍罱榻B2. 類和對象概念3. 類的定義和實例化對象4. 對象初始化狀態(tài)5. 魔方方法7. self8. 析構(gòu)函數(shù)9. 訪問權(quán)限控制10. 面向?qū)ο缶毩曋睾现菩∮螒?p>(8)繼承和多態(tài)
1. 單繼承2. 多繼承3. 重寫父類方法和調(diào)用父類方法4. 類屬性和實例屬性5. 靜態(tài)方法和類方法6. 動態(tài)給實例添加屬性與方法并使用__slots(9)設計模式
1. 設計模式簡介2. 單例設計模式3. new()3. 簡單工廠4. 抽象工廠進階部分:
(1)函數(shù)高級特性
1. 函數(shù)變量2. 生成器2. 閉包3. 裝飾器6. 匿名函數(shù)8. 偏函數(shù)9. 對象比較10. 深拷貝和淺拷貝11. 私有屬性12. 屬性property(2)進程
1. 進程簡介2. 單任務,啟動進程實現(xiàn)多任務3. 封裝進程為進程池4. 進程間通信(Queue)5. fork創(chuàng)建進程6. multiprocessing創(chuàng)建進程(3)線程和協(xié)程
1. 線程簡介2. 啟動一個線程3. 線程間共享數(shù)據(jù)4. 生產(chǎn)者與消費者5. 協(xié)程簡介6. 協(xié)程原理7. threading模塊創(chuàng)建線程8. 線程間通信9. threadLocal變量WEB前端技術(shù)
(1)HTML
1. HTML簡介2. HTML總體結(jié)構(gòu)3. HTML 5 和HTML 4的對比4. HTML 基本語法5. 常用標簽6. 練習案例:簡單登錄。客戶端向服務器端傳遞數(shù)據(jù)(2)
1. CSS 3.0 簡介,盒子模型2. 引入CSS的三種方式3. 引入方式優(yōu)先級4. CSS 選擇器5. CSS 各種屬性6. CSS 偽選擇器7. 練習案例:完善頁面效果。注冊信息發(fā)送給客戶端(3)
1. JavaScript簡介2. JavaScript執(zhí)行原理3. JavaScript 組成(三部分)4. ECMAScript核心語法:基本語法、數(shù)據(jù)類型、判斷語句、循環(huán)、類型轉(zhuǎn)換、數(shù)值類型判斷5. 內(nèi)置對象6. 字符串常用函數(shù)(4)
1. DOM對象:獲取元素的幾種方式2. BOM對象:彈出框、定時器、計時器(5)
1. jQuery 簡介2. jQuery和JavaScript的聯(lián)系3. jQuery命名規(guī)則4. jQuery對象和DOM對象轉(zhuǎn)換5. 全部選擇器6. 動畫(6)
1. jQuery中DOM操作2. 事件3. 循環(huán)遍歷4. 正則和表單驗證(大量練習)Linux基礎(chǔ)
(1)Linux系統(tǒng)
1. Linux 發(fā)展歷史介紹2. 虛擬機安裝(快速演示)3. Cent OS 6.X 安裝(快速演示)4. 虛擬機快照和管理5. 常用命令6. 虛擬網(wǎng)卡概述,靜態(tài)IP設置7. 配置Python環(huán)境8. 安裝MySQL(解壓版或yum)(2)Redis單機版操作
1. NoSQL是什么,出現(xiàn)目的2. Redis 簡介3. Linux中JDK 安裝4. Linux中Redis 單機版安裝配置5. Redis 數(shù)據(jù)類型6. Redis 不同數(shù)據(jù)的命令操作演示7. Redis 的windows客戶端工具8. Python 連接Redis(3)Redis集群操作
1. 分布式概念2. 集群概念3. 什么場景適用集群4. 集群搭建5. Python連接Redis集群6. 案例:緩存首頁菜單內(nèi)容
數(shù)據(jù)庫基礎(chǔ)及性能優(yōu)化
(1)MySQL與Python交互
1. MySQL 初識2. MySQL 安裝(不占用課時)3. MySQL 命令行工具簡單實用4. MySQL 客戶端工具Navicat使用5. MySQL 命令執(zhí)行原理6. 創(chuàng)建、刪除數(shù)據(jù)庫命令(帶編碼字符集)7. 列類型8. 創(chuàng)建、刪除表命令9. 約束:主鍵約束、唯一約束、非空約束10. 單條數(shù)據(jù)CRUD11. 練習案例:Python連接MySQL實現(xiàn)單表CRUD(2)MySQL查詢
1. 分組查詢2. 聚合函數(shù)3. 內(nèi)置函數(shù)4. 分頁查詢5. 排序6. 視圖7. 索引(3)MySQL 多表查詢
1. 主外鍵約束2. 關(guān)聯(lián)查詢(內(nèi)連接、外鏈接)3. 自關(guān)聯(lián)4. 子查詢5. 事務(4)MySQL高級應用
1. MySQL慢查日志的開啟方式和存儲方式2. MySQL慢查日志分析工具之mysqldumpslow3. MySQL慢查日志分析工具之pt=query-digest4. 如何通過慢查日志發(fā)現(xiàn)有問題的SQL5. 通過explain查詢和分析SQL的執(zhí)行計劃6. SQL優(yōu)化:Count()和Max()的優(yōu)化、子查詢的優(yōu)化、group by 的優(yōu)化、Limit查詢的優(yōu)化、索引優(yōu)化
Python Web框架Django
(1)Django入門
1. Django簡介2. Django環(huán)境搭建3. Django-Hello World4. 顯示登錄頁面5. Get方式登錄功能6. Post方式登錄功能7. 注冊功能8. 顯示注冊頁面9. 處理注冊功能(2)Django數(shù)據(jù)庫連接與分頁
1. admin后臺管理類操作數(shù)據(jù)庫2. 查詢所有信息3. 登錄功能(連接MySQL)4. 影片展示5. 影片展示(原生分頁)6. Django分頁7. 頁碼翻頁功能(3)ORM
1. 單表查詢CRUD2. 創(chuàng)建數(shù)據(jù)庫表3. 一對一的關(guān)系4. 一對多的關(guān)系5. 多對多的關(guān)系6. 學生注冊功能(4)多表操作
1. 查詢班級信息_學生詳情2. 自定義Manager1(查詢)3. 邏輯刪除_單個對象刪除_多個對象刪除4. 自定義Manager3(create)5. 分析Manager.create執(zhí)行過程6. 多表插入(重寫save)(5)高級查詢
1. 聚合函數(shù)_分組聚合查詢2. 原生查詢3. Q查詢_F查詢4. Django事務_查詢兩個特性5. 配置URL6. 請求和響應對象(6)上傳與下載
1. 文件上傳2. 文件下載3. 重定向_錯誤訂制頁面4. Cookie語法5. 三天免登錄(7)Session
1. Session語法2. Session應用(顯示個人信息)3. jsonpickle序列化隱藏字段4. 讀取靜態(tài)文件5. django引入靜態(tài)文件(8)模版使用
1. 模板渲染底層原理2. 模板標簽語法3. 過濾器4. 自定義過濾器5. 全局上下文(9)CSRF
1. 模板繼承_CSRF原理2. 畫圖分析CSRF原理3. 自定義中間件4. 分析CSRF源碼5. 修改Admin后臺頁面布局(10)Ajax
1. 表單類2. 表單校驗(表單類)3. 表單校驗(JS原生校驗)4. AJAX語法5. 用戶名唯一校驗(ajax)最后學習, pythonWeb另外兩大框架: Flask、Tornado。
以上就是關(guān)于用matlab編程小游戲和可以用Python編程語言做哪些神奇好玩的事情的相關(guān)問題解答,希望對你有所幫助。