實戰:從Python分析17-18賽季NBA勝率超70%球隊資料開始…
Casey 豈安業務風險分析師
主要負責豈安科技RED.Q的資料分析和運營工作。
就在昨天,12月19日,科比再次站在斯臺普斯中心球館中央,見證自己的兩件球衣高懸於球館上空。作為一個正奮戰在 Python 之路上的球迷,開始了一次資料分析實戰,於是,以分析球賽資料為起點的操作開始了......
前言
python 作為一個功能強大的程式語言,如今在資料分析、機器學習、人工智慧等方面如日中天。如果想做資料分析,那麼 python 則為一把利器。
初入職場,除了使用 python 中列表、元組、字典等常用資料型別外,經常會接觸到一些如
csv 檔案、json 格式的資料、或者直接要和資料庫打交道。
本文,通過幾個小例子簡述 python 對 csv、json、mysql 的簡單操作。
資料分析實戰
1已知 nba-season_17_18.csv 檔案(見下圖)存放截至目前17-18賽季 NBA 常規賽聯盟全部球隊的資料。
現在需要將勝率超過 70% 並且場均得分在 110 分的球隊資訊寫入到 result.csv 中。
上述對 csv 檔案的操作可通過 python 中的 csv 模組輕鬆實現,csv 模組分別通過 reader() 和 writer() 實現對 csv 檔案的讀寫,這兩種方法都需要傳入檔案物件。
因此,首先需要使用 open 方法開啟 nba-season_17_18.csv,並
注意:
-
需要先將檔案第一行要寫入 result.csv,其餘行要依次通過if語句判斷勝率和場均得分再選擇是否寫入。
-
判斷時要注意 reader 中的 row[3] 和 row[10] 是字串型別,需要轉換成 float 型別。
實現的程式碼如下:
最終result.csv如下:
2
json 作為一種輕量級的文字資料交換格式,因為在網路傳輸過程中具有節省流量、加快速度等優點,使其成為理想的資料交換語言。
python 對 json 的操作主要通過 json 模組中的 dumps() 函式和 loads() 函式。前者將
python 物件編碼 json 字串,而後者則是將已經編碼的 json 字串解碼為 python 物件。
-
程式碼中 dumps() 函式將列表data編碼為 json,其中引數 separators 預設是", "或": "(逗號和冒號後邊分別有一個空格)。
-
第三行程式碼表示去掉逗號和冒號後邊的空格,引數 indent 設定 json 檢驗後的縮排位數。
-
程式碼中 loads() 函式將第三行輸出的 json 解碼為原來的列表格式。
如果上述 json 字串和 python 物件儲存在檔案中,也不用擔心,json 模組中的 dump() 和 load() 正是為此而生的。見第8行程式碼。
輸出結果如下:
3
方便高效的操作資料庫可以節省分析師大量的時間,python 中 pymysql 模組正好滿足。
該模組操作資料庫的過程可分為以下幾步:
其中,建立 connection 物件需要傳入以下引數:host(MySQL伺服器地址)、port(mysql伺服器埠號,預設3306)、user(使用者名稱)、passwd(密碼)、db(資料庫名)等。
使用 cursor.execute() 執行的 sql 語句,可以是 select 查詢語句,也可以是 insert、update、delete 等操作語句。
cursor 獲取資料的方法有:
☞fecthone() 獲取結果集中的下一條資料
☞fecthmany(n) 獲取結果集中的下 n 條資料
☞fetchall() 獲取結果集中的剩下所有資料
下圖是獲取並列印本地資料庫中資料的一個例子:
值得注意的是, connection 物件除了 cursor() 方法外,還為支援事務提供兩個重要的方法:
commit() 和 rollback()
這兩個方法分別是提交所有操作,和回滾當前遊標的所有操作。例如,在上例中,Tom借了Lucy10元錢,那麼此時需要先將Lucy的壓歲錢減掉10,然後將Tom的壓歲錢增加10。此時使用事務來保證資料庫的完整性,即要麼兩步都執行,要麼都不執行。
結果如下:
結語
本文用 python 對 csv、json、mysql 進行了簡單操作。當然要做好資料分析,這些還遠遠不夠。python 知識體系龐大,有大量高效且優秀的庫,不得不提的是:
-
科學計算領域的 NumPy 和 SciPy
-
資料分析領域的 Pandas
-
機器學習領域的 scikit-learn。
總之,python 的知識點眾多,學好不是一朝一夕的事情。但是,初入職場的小白覺得,學習其中任何一個知識點,除了看書、聽課、參加講座等方式外,更重要的是實際操作能力和思考總結能力。
當然我也一直在學習中。文中有不當之處,敬請批評指正。如果您有關於資料分析的想法,特別歡迎一起交流、共同進步。謝謝。