姓名:徐嬌 ? ?學號:17011210547
轉自?http://mp.weixin.qq.com/s/3xj8NDunL_OjjiqfyRAa-g
【嵌牛導讀】時常我們會看到我們的朋友圈中好友各種曬:曬自拍、曬娃、曬美食、秀恩愛。而程序員在曬什么?程序員在加班。但是如何表白那個你心儀的那個ta呢?作為程序員,教你準備一份特別的禮物,用你心儀的ta以往發的微博數據打造一顆“愛心”,想必ta看到一定會感動哭的
【嵌牛鼻子】微博數據、Python
【嵌牛提問】怎樣基于微博數據用 Python 打造一顆“心”?
【嵌牛正文】
? ??????準備工作
????????有了想法之后就開始行動了,自然最先想到的就是用 Python 了,大體思路就是把微博數據爬下來,數據經過清洗加工后再進行分詞處理,處理后的數據交給詞云工具,配合科學計算工具和繪圖工具制作成圖像出來,涉及到的工具包有:
????????requests 用于網絡請求爬取微博數據,結巴分詞進行中文分詞處理,詞云處理庫 wordcloud,圖片處理庫 Pillow,科學計算工具 NumPy ,類似于 MATLAB 的 2D 繪圖庫 Matplotlib
? ??????工具安裝
????????安裝這些工具包時,不同系統平臺有可能出現不一樣的錯誤,wordcloud,requests,jieba 都可以通過普通的 pip 方式在線安裝。
????????pip install wordcloud
????????pip install requests
????????pip install jieba
????????在Windows 平臺安裝 Pillow,NumPy,Matplotlib 直接用 pip 在線安裝會出現各種問題,推薦的一種方式是在一個叫 Python Extension Packages for Windows?1?的第三方平臺下載 相應的 .whl 文件安裝。可以根據自己的系統環境選擇下載安裝 cp27 對應 python2.7,amd64 對應 64 位系統。下載到本地后進行安裝
????????pip install Pillow-4.0.0-cp27-cp27m-win_amd64.whl
????????pip install scipy-0.18.0-cp27-cp27m-win_amd64.whl
????????pip install numpy-1.11.3+mkl-cp27-cp27m-win_amd64.whl
????????pip install matplotlib-1.5.3-cp27-cp27m-win_amd64.whl
????????其他平臺可根據錯誤提示 Google 解決。或者直接基于 Anaconda 開發,它是 Python 的一個分支,內置了大量科學計算、機器學習的模塊 。
? ??????獲取數據
????????新浪微博官方提供的 API 是個渣渣,只能獲取用戶最新發布的5條數據,退而求其次,使用爬蟲去抓取數據,抓取前先評估難度,看看是否有人寫好了,在GitHub逛了一圈,基本沒有滿足需求的。倒是給我提供了一些思路,于是決定自己寫爬蟲。使用?http://m.weibo.cn/?移動端網址去爬取數據。發現接口?http://m.weibo.cn/index/my?format=cards&page=1?可以分頁獲取微博數據,而且返回的數據是 json 格式,這樣就省事很多了,不過該接口需要登錄后的 cookies 信息,登錄自己的帳號就可以通過 Chrome 瀏覽器 找到 Cookies 信息。
????????實現代碼:
????????查看微博的總頁數是101,考慮到一次性返回一個列表對象太費內存,函數用 yield 返回一個生成器,此外還要對文本進行數據清洗,例如去除標點符號,HTML 標簽,“轉發微博”這樣的字樣。
? ??????保存數據
????????數據獲取之后,我們要把它離線保存起來,方便下次重復使用,避免重復地去爬取。使用 csv 格式保存到 weibo.csv 文件中,以便下一步使用。數據保存到 csv 文件中打開的時候可能為亂碼,沒關系,用 notepad++查看不是亂碼。
? ??????分詞處理
????????從 weibo.csv 文件中讀出來的每一條微博進行分詞處理后再交給 wordcloud 生成詞云。結巴分詞適用于大部分中文使用場景,使用停止詞庫 stopwords.txt 把無用的信息(比如:的,那么,因為等)過濾掉。
? ??????生成圖片
????????數據分詞處理后,就可以給 wordcloud 處理了,wordcloud 根據數據里面的各個詞出現的頻率、權重按比列顯示關鍵字的字體大小。生成方形的圖像,如圖:
????????是的,生成的圖片毫無美感,畢竟是要送人的也要拿得出手才好炫耀對吧,那么我們找一張富有藝術感的圖片作為模版,臨摹出一張漂亮的圖出來。我在網上搜到一張“心”型圖:
????????生成圖片代碼:
????????需要注意的是處理時,需要給 matplotlib 指定中文字體,否則會顯示亂碼,找到字體文件夾:C:\Windows\Fonts\Microsoft YaHei UI復制該字體,拷貝到 matplotlib 安裝目錄:C:\Python27\Lib\site-packages\matplotlib\mpl-data\fonts\ttf 下
????????差不多就這樣。
????????當我自豪地把這張圖發給她的時候,出現了這樣的對話:
????????這是什么?
????????我:愛心啊,親手做的
????????這么專業,好感動啊,你的眼里只有 python ,沒有我 (哭笑)
????????我:明明是“心”中有 python 啊。。。。。。。。。。。