Python数据分析:Jupyter Notebook 讲解( 二 )


Python数据分析:Jupyter Notebook 讲解文章插图
现在需要通过Python将其读取出来 , 并将指定的字段保存到MongoDB中 , 需要在Anaconda中执行命令conda install pymongo安装pymongo 。
Python代码如下:
import pymongoclass Product:def __init__(self,productId:int ,name, imageUrl, categories, tags):self.productId = productIdself.name = nameself.imageUrl = imageUrlself.categories = categoriesself.tags = tagsdef __str__(self) -> str:return self.productId +'^' + self.name +'^' + self.imageUrl +'^' + self.categories +'^' + self.tagsclass Rating:def __init__(self, userId:int, productId:int, score:float, timestamp:int):self.userId = userIdself.productId = productIdself.score = scoreself.timestamp = timestampdef __str__(self) -> str:return self.userId +'^' + self.productId +'^' + self.score +'^' + self.timestampif __name__ == '__main__':myclient = pymongo.MongoClient("mongodb://127.0.0.1:27017/")mydb = myclient["goods-users"]## val attr = item.split("\\^")## // 转换成Product## Product(attr(0).toInt, attr(1).trim, attr(4).trim, attr(5).trim, attr(6).trim)shopproducts = mydb['shopproducts']with open('shopproducts.csv', 'r',encoding='UTF-8') as f:item = f.readline()while item:attr = item.split('^')product = Product(int(attr[0]), attr[1].strip(), attr[4].strip(), attr[5].strip(), attr[6].strip())shopproducts.insert_one(product.__dict__)## print(product)## print(json.dumps(obj=product.__dict__,ensure_ascii=False))item = f.readline()## val attr = item.split(",")## Rating(attr(0).toInt, attr(1).toInt, attr(2).toDouble, attr(3).toInt)userratings = mydb['userratings']with open('userratings.csv', 'r',encoding='UTF-8') as f:item = f.readline()while item:attr = item.split(',')rating = Rating(int(attr[0]), int(attr[1].strip()), float(attr[2].strip()), int(attr[3].strip()))userratings.insert_one(rating.__dict__)## print(rating)item = f.readline()在启动MongoDB服务后 , 运行Python代码 , 运行完成后 , 再通过Robo 3T查看数据库如下:
Python数据分析:Jupyter Notebook 讲解文章插图
显然 , 保存数据成功 。
使用Jupyter处理商铺数据
待处理的数据是商铺数据 , 如下:
Python数据分析:Jupyter Notebook 讲解文章插图
包括名称、评论数、价格、地址、评分列表等 , 其中评论数、价格和评分均不规则、需要进行数据清洗 。
Jupyter中处理如下:
Python数据分析:Jupyter Notebook 讲解文章插图
可以看到 , 最后得到了经过清洗后的规则数据 。
完整Python代码如下:
## 数据读取f = open('商铺数据.csv', 'r', encoding='utf8')for i in f.readlines()[1:15]:print(i.split(','))## 创建comment、price、commentlist清洗函数def fcomment(s):'''comment清洗函数:用空格分段 , 选取结果list的第一个为点评数 , 并且转化为整型'''if '条' in s:return int(s.split(' ')[0])else:return '缺失数据'def fprice(s):'''price清洗函数:用¥分段 , 选取结果list的最后一个为人均价格 , 并且转化为浮点型'''if '¥' in s:return float(s.split('¥')[-1])else:return '缺失数据'def fcommentl(s):'''commentlist清洗函数:用空格分段 , 分别清洗出质量、环境及服务数据 , 并转化为浮点型'''if ' ' in s:quality = float(s.split('')[0][2:])environment = float(s.split('')[1][2:])service = float(s.split('')[2][2:-1])return [quality, environment, service]else:return '缺失数据'## 数据处理清洗datalist = []## 创建空列表f.seek(0)n = 0## 创建计数变量for i in f.readlines():data = http://kandian.youth.cn/index/i.split(',')## print(data)classify = data[0]## 提取分类name = data[1]## 提取店铺名称comment_count = fcomment(data[2])## 提取评论数量star = data[3]## 提取星级price = fprice(data[4])## 提取人均address = data[5]## 提取地址quality = fcommentl(data[6])[0]## 提取质量评分env = fcommentl(data[6])[1]## 提取环境评分service = fcommentl(data[6])[2]## 提取服务评分if '缺失数据' not in [comment_count, price, quality]:## 用于判断是否有数据缺失n += 1data_re = [['classify', classify],['name', name],['comment_count', comment_count],['star', star],['price', price],['address', address],['quality', quality],['environment', env],['service', service]]datalist.append(dict(data_re))## 字典生成 , 并存入列表datalistprint('成功加载%i条数据' % n)else:continueprint(datalist)print('总共加载%i条数据' % n)f.close()


推荐阅读