- 輕松學大數據挖掘:算法、場景與數據產品
- 汪榕
- 1085字
- 2019-12-04 19:10:05
2.4.3 開發流程
(1)梳理業務邏輯,在集群環境中編寫Hive腳本,定時加工數據,再同步到MySQL中。
(2)運行IPython Notebook,利用Python關聯MySQL數據庫,調取需求數據。
In[1]:import select_data
這樣數據就存儲在alldata中了,直接調用alldata即可。其中函數方法如下。
def select_data(): try: conn=MySQLdb.connect(host='', user='', passwd='', db='', charset= 'utf8') except Exception, e: print e sys.exit() cursor=conn.cursor() x =raw_input("輸入sql的查詢語句") sql=x.decode('gbk') cursor.execute(sql) alldata=cursor.fetchall() conn.commit() cursor.close() conn.close() return alldata
(3)循環導入數據,利用pandas庫進行分析。
In[2]:df = pd.DataFrame( [[ij for ij in i] for i in alldata] )
(4)更新數據屬性、更新列名,IPython Notebook顯示結果如圖2-28所示。

圖2-28 IPython Notebook顯示結果
In[3]:df.rename(columns = {0:'',1:'',2:'',3:''}, inplace=True)
(5)進行數據分析(用Python做Excel和SPSS做的事)。
對于數據的分析,主要有以下幾種方式。
① 排序(升序和降序),如圖2-29所示。

圖2-29 排序(升序和降序)
注:ascending=(0)為降序;ascending=(1)為升序。
② 查看前TopN、后TopN的數據,如圖2-30所示為取前兩名數據。

圖2-30 取前兩名數據
注:df.tail(10)取后十個數。
③ 一些基本功能的使用。
· 選擇某列數據(類似SQL中的Select功能),如圖2-31所示。

圖2-31 選擇某列數據
· 進行條件判斷(類似SQL中的Where功能),如圖2-32所示。

圖2-32 進行條件判斷
注:以上介紹的功能就像SQL里面的and和or的功能。
· 查詢某列缺失值,如圖2-33所示。

圖2-33 查詢某列缺失值
· 分組計數功能(可以看作是Excel中的數據透視圖),如圖2-34所示。

圖2-34 分組計數功能
注意:這里為什么不使用count()函數呢?因為count()函數適用于每列的計數,同時是針對非空的數值進行統計,如圖2-35所示。

圖2-35 和使用count()函數的差異性
· 高級些的分組計數,如圖2-36和圖2-37所示。

圖2-36 分組計數(1)

圖2-37 分組計數(2)
④ 類似數據庫的一些操作。進行關聯處理,類似SQL中的join功能。
所以學習Python的數據分析,一方面可以熟悉SQL的使用,另一方面也可以提前學習Spark的一些DataFrame命令。
內連接,如圖2-38所示。

圖2-38 內連接
df1和df2為兩個數據集,關聯鍵為key。
左連接,如圖2-39所示。同理,對于右連接類似,修改right就可以了。全連接,如圖2-40所示。

圖2-39 左連接

圖2-40 全連接
同樣需要理解SQL中的全連接。union會剔除重復的,如圖2-41所示;union all不會剔除重復的,如圖2-42所示。

圖2-41 union會剔除重復的

圖2-42 union all不會剔除重復的
注:要理解union all和union的使用區別,因為在HQL中也會經常用到。
(6)將清洗后的數據生成附件,這里可以采取to_csv來生成,不過這樣就容易導致生成的CSV文件通過Excel打開時會顯示為亂碼(需要設置Excel的編碼格式)。所以最好采取to_excel來生成。
如果出現下面問題:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
利用如下代碼解決。
import sys reload(sys) sys.setdefaultencoding('utf8')
(7)通過郵箱發送附件數據。
def send_email(): email=raw_input("input email: ") subject=raw_input("input subject: ") msg = MIMEMultipart() att1 = MIMEText(open(' 附件地址 ', 'rb').read(), 'base64', 'gb2312') att1["Content-Type"] = 'application/octet-stream' att1["Content-Disposition"] = 'attachment; filename="文件名稱"' msg.attach(att1) msg['to'] = email msg['from'] = ’發送郵箱地址’ msg['subject'] = subject try: server = smtplib.SMTP() server.connect(’設置端口’) server.login(’發送郵箱地址’, ’密碼’) server.sendmail(msg['from'], msg['to'], msg.as_string()) server.quit() print u’發送成功’ except Exception, e: print str(e)
總結:學習Python時,涉及數據分析的知識大概就是這些內容。要多動手才能跟上節奏,快速進步。
- 在你身邊為你設計Ⅲ:騰訊服務設計思維與實戰
- Greenplum:從大數據戰略到實現
- App+軟件+游戲+網站界面設計教程
- 企業大數據系統構建實戰:技術、架構、實施與應用
- Oracle RAC 11g實戰指南
- 醫療大數據挖掘與可視化
- 區塊鏈通俗讀本
- Dependency Injection with AngularJS
- Sybase數據庫在UNIX、Windows上的實施和管理
- Hadoop大數據開發案例教程與項目實戰(在線實驗+在線自測)
- TextMate How-to
- 探索新型智庫發展之路:藍迪國際智庫報告·2015(下冊)
- 大數據分析:數據倉庫項目實戰
- Unity 2018 By Example(Second Edition)
- 基于數據發布的隱私保護模型研究