Python : 商鋪數據清洗及存儲
來自專欄 Python中文社區
項目主要技能
- 數據拆分 .split()
- 將不完整的數據設定為缺失數據,並將其移除
- 將完整數據清洗成列表字典(json模式)
完成心得
經過一段時間的基礎練習後,這是第一個接手完成的Python項目,畢竟是自學的關係所以容易陷入窘境。然而花了很多時間在複習網易課程視頻、自己的筆記、以及在JupyterNotebook練習敲的代碼中去研究Python邏輯,完成這次項目後很有成就感。繼續努力。
項目題目
1、成功讀取「商鋪數據.csv」文件
2、解析數據,存成列表字典格式:[{var1:value1,var2:value2,var3:values,...},...,{}]
3、數據清洗:
① comment,price兩個欄位清洗成數字
② 清除欄位缺失的數據
③ commentlist拆分成三個欄位,並且清洗成數字
4、結果存為.pkl文件
# 成功讀取「商鋪數據.csv」文件path = /Users/alice/Desktop/商鋪數據.csvf=open(path,r,encoding=UTF-8)for i in f.readlines()[:10]: #給定範圍(幾筆數據) print(i.split(,)[2]) #只print(i)太亂,按照逗號做split
#數據清洗:① comment,price兩個欄位將有完整數據的各關鍵點找出來並清洗成數字,沒有關鍵點的一律成為缺失數據
f.seek(0)def fcm(s): if 條 in s: #comment:沒有『條』即表示缺失數據 return(int(s.split( )[0])) #以提行拆分後選擇索引[0],最後進行數字整型化int() else: return(缺失數據)for i in f.readlines()[:10]: comm_count = fcm(i.split(,)[2]) #以逗號拆分並提出索引2位置的值為評論數的參數 print(comm_count)
def fpr(s): if ¥ in s: #price:沒有『¥』即表示缺失數據 return(int(s.split(¥)[-1])) #以『¥』作為拆分,並提取索引[-1]的值做數字整型化 else: return(缺失數據)for i in f.readlines()[:10]: #給定範圍比較不會太多數據影響效率 price = fpr(i.split(,)[4]) #以逗號拆分數據並且提出索引4位置的值為price的參數 print(price)
#數據清洗:③ commentlist拆分成三個欄位,並且清洗成數字
for i in f.readlines()[40:50]: #給定範圍(幾筆數據) print(i.split(,)[-1].split( )) #以逗號拆分後取最後一個值,並且再以提行拆分成三個欄位。
def fcl(s): if len(s) == 3: quality = float(s[0][2]) #第0個索引(質量)然後提取索引2位置(數字)為質量的值 environment = float(s[1][2]) service = float(s[2][2]) return([quality,environment,service]) else: return(缺失數據) for i in f.readlines()[40:50]: commentlist = fcl(i.split(,)[-1].split( )) print(commentlist)
#數據清洗:② 清除欄位缺失的數據:只將完整數據納入新列表
f.seek(0) #將游標返回到開頭,才能成功讀取。n=0m=[]for i in f.readlines()[1:]: #第一列(索引0)為標頭,所以要從索引1開始讀 data = (i.split(,)) #print(data) #data就是全部的數據 classi = data[0] name = data[1] comm_count = fcm(data[2]) #按照上面的自定義函數表示 star = data[3] price = fpr(data[4]) add = data[5] quali = fcl(data[-1].split( ))[0] #直接從上面複製粘貼,將 (i.split(,))改成data。 envir = fcl(data[-1].split( ))[1] #在最後表示每一個欄位的索引位置 servi = fcl(data[-1].split( ))[2] if 缺失數據 not in [comm_count,price,quali,envir,servi]: n+=1 datalst = [[ Classify, classi ], [ Restaurant, name ], [ 評論數量, comm_count ], [ 星級, star ], [ Price, price ], [ Address, add ], [ Quality, quali ], [ Environment, envir ], [ Service, servi ]] #print(datalst) # 為複合列表,可進行轉化成字典格式 #print(dict(datalst)) m.append(dict(datalst)) # 解析數據,存成列表字典格式:[{var1:value1,var2:value2,var3:values,...},...,{}] print(m[50:55])print(------------------------)print(成功讀取共%i筆完整數據 %n) #將readlines()[]範圍去掉,才可完整讀取。print(------------------------)f.close()print(finished!)
# 結果存為.pkl文件: pickle.dump()
import picklepic_file = open(/Users/alice/Desktop/商鋪數據完整版.pkl,wb)pickle.dump(m, pic_file) #m就是上面的列表字典內容pic_file.close()print(finished!)
finished!
# 讀取.pkl文件: pickle.load()
在之後的Python中都可以任意import pickle並讀取此次.pkl文件的內容
import picklefile2 = open(/Users/alice/Desktop/商鋪數據完整版.pkl,rb)datalst = pickle.load(file2)print(datalst[:10])
項目完成
推薦閱讀:
※朝陽藥店銷售數據分析 python流程圖
※給妹子講python-S02E09Pandas引言與Series簡介
※Kaggle 數據清洗挑戰 Day 2 - 數據縮放及標準化處理
※入門級的數據分析及數據清洗過程
※首篇數據分析報告出爐