Python : 商鋪數據清洗及存儲

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

在商鋪數據中讀取給定範圍的數據,這裡是只讀取索引2位置(點評數量)的數據

#數據清洗:① 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)

Comment: 將有關鍵字『條』的數據,其索引0位置的值設定為數字(原來為字元串),其餘設定為缺失數據

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)

Price: 將有關鍵字『¥』的數據,其索引-1位置的值設定為數字(原來為字元串),其餘設定為缺失數據

#數據清洗:③ commentlist拆分成三個欄位,並且清洗成數字

for i in f.readlines()[40:50]: #給定範圍(幾筆數據) print(i.split(,)[-1].split( )) #以逗號拆分後取最後一個值,並且再以提行拆分成三個欄位。

由列表得知,長度沒有等於3的即表示缺失數據

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)

三個欄位各自提取數字部分並且數字浮點hua化,其餘長度不為3的即為缺失數據

#數據清洗:② 清除欄位缺失的數據:只將完整數據納入新列表

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!)

將複合列錶轉化成字典模式後,再做成列表字典(json模式)

# 結果存為.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])

通過open語句將文件路徑放入pickle.load()的函數里,即可print出內容。

項目完成


推薦閱讀:

朝陽藥店銷售數據分析 python流程圖
給妹子講python-S02E09Pandas引言與Series簡介
Kaggle 數據清洗挑戰 Day 2 - 數據縮放及標準化處理
入門級的數據分析及數據清洗過程
首篇數據分析報告出爐

TAG:Python入門 | 數據清洗 | 數據分析 |