
DeepSeek毕业设计:基于Python的商品数据可视化分析和推荐系统 Flask框架 京东商品爬虫 手机数据 (建议收藏)✅
DeepSeek毕业设计:基于Python的商品数据可视化分析和推荐系统 Flask框架 京东商品爬虫 手机数据 (建议收藏)✅
博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅
1、毕业设计:2025年计算机专业毕业设计选题汇总(建议收藏)✅
2、大数据毕业设计:2025年选题大全 深度学习 python语言 JAVA语言 hadoop和spark(建议收藏)✅
1、项目介绍
技术栈:
python语言、Flask框架、pyecharts可视化、requests爬虫技术、京东数据
功能模块:
各厂商手机销售分布
手机品牌市场占有率
各品牌手机价格分析
各品牌好评率分析
智能推荐
市场占比率预测
本项目旨在通过Python技术栈对京东平台上的手机数据进行抓取、分析并构建一个简单的手机推荐系统。
利用网络爬虫技术从京东采集手机的价格、销量、评论等数据,经过数据清洗后存入数据库,
并实现手机厂商手机销售、市场占有率、价格区间等多维度的可视化统计分析,并基于多属性的品牌手机的推荐。
系统采用 Flask 框架构建后端分析服务,前端采用 Bootstrap + Echarts 实现可视化渲染。
主要功能包括:
(1)网络爬虫:从京东获取手机数据;
(2)数据分析:统计各厂商手机销售分布、市场占有率、价格区间和好评率;
(3)可视化展示:使用ECharts进行数据可视化;
(4)推荐功能:根据分析结果为用户推荐手机。 基于自定义的参数推荐手机。
2、项目界面
(1)注册登录界面
(2)各品牌手机价格分析
(3)手机品牌市场占有率分析
(4)各厂商手机销售分布分析
(5)各品牌好评率分析
(6)智能推荐
(7)后台管理
3、项目说明
功能模块:
各厂商手机销售分布
手机品牌市场占有率
各品牌手机价格分析
各品牌好评率分析
智能推荐
市场占比率预测
本项目旨在通过Python技术栈对京东平台上的手机数据进行抓取、分析并构建一个简单的手机推荐系统。
利用网络爬虫技术从京东采集手机的价格、销量、评论等数据,经过数据清洗后存入数据库,
并实现手机厂商手机销售、市场占有率、价格区间等多维度的可视化统计分析,并基于多属性的品牌手机的推荐。
系统采用 Flask 框架构建后端分析服务,前端采用 Bootstrap + Echarts 实现可视化渲染。
主要功能包括:
(1)网络爬虫:从京东获取手机数据;
(2)数据分析:统计各厂商手机销售分布、市场占有率、价格区间和好评率;
(3)可视化展示:使用ECharts进行数据可视化;
(4)推荐功能:根据分析结果为用户推荐手机。 基于自定义的参数推荐手机。
4、核心代码
def phone_sell_count():
"""计算各品牌手机的销量"""
conn = sqlite3.connect('jd_phone_info.db')
cursor = conn.cursor()
sql = 'select 品牌, 评论 from phone'
cursor.execute(sql)
datas = cursor.fetchall()
pingpai_counts = {}
for data in datas:
pingpai = data[0]
count = json.loads(data[1])
count = count['CommentCountStr']
if '+' in count:
count = count[:-1]
if '万' in count:
count = int(count[:-1]) * 10000
else:
count = int(count)
else:
count = int(count)
if pingpai not in pingpai_counts:
pingpai_counts[pingpai] = 0
pingpai_counts[pingpai] += count
total = sum(pingpai_counts.values())
pingpai_counts = sorted(pingpai_counts.items(), key=lambda x: x[1], reverse=True)
pingpai = [p[0] for p in pingpai_counts]
counts = [p[1] for p in pingpai_counts]
zhanyoulv = [p[1] / total * 1.0 for p in pingpai_counts]
return pingpai, counts, zhanyoulv
@app.route('/query_phone_zhanyoulv')
def query_phone_zhanyoulv():
pingpai, counts, zhanyoulv = phone_sell_count()
return jsonify({'keys': pingpai, 'counts': counts, 'zhanyoulv': zhanyoulv})
@app.route('/fetch_pingpai_prices')
def fetch_pingpai_prices():
"""各品牌在售手机价格区间分布"""
conn = sqlite3.connect('jd_phone_info.db')
cursor = conn.cursor()
sql = 'select 品牌, 价格 from phone'
cursor.execute(sql)
datas = cursor.fetchall()
loc_price = {}
for data in datas:
pingpai, price = data
if pingpai == 'VERTU': continue
if pingpai not in loc_price:
loc_price[pingpai] = []
loc_price[pingpai].append(price)
loc_counts = {}
loc_mean_price = {}
for pingpai in loc_price:
loc_counts[pingpai] = len(loc_price[pingpai])
loc_mean_price[pingpai] = np.mean(loc_price[pingpai])
locations = list(loc_price.keys())
results = {
'品牌': locations,
'品牌数量': [loc_counts[loc] for loc in locations],
'品牌平均价格': [loc_mean_price[loc] for loc in locations],
'品牌价格数据': [loc_price[loc] for loc in locations]
}
return jsonify(results)
@app.route('/query_phone_good_comment_ratio')
def query_phone_good_comment_ratio():
"""不同手机品牌的好评率分布"""
conn = sqlite3.connect('jd_phone_info.db')
cursor = conn.cursor()
sql = 'select 品牌, 评论 from phone'
cursor.execute(sql)
datas = cursor.fetchall()
# 计算出热销的手机
pingpai, counts, zhanyoulv = phone_sell_count()
hot_pingpai = pingpai[:30]
pingpai_counts = {}
for data in datas:
pingpai = data[0]
if pingpai not in hot_pingpai:
continue
comment = json.loads(data[1])
# 平均评分
PoorRate = comment['PoorRate']
# 好评率
GoodRate = comment['GoodRate']
if pingpai not in pingpai_counts:
pingpai_counts[pingpai] = []
pingpai_counts[pingpai].append([PoorRate, GoodRate])
# 计算平均差评
pinpai_PoorRate = {}
# 计算平均好评率
pinpai_GoodRate = {}
for pinpai in pingpai_counts:
pinpai_PoorRate[pinpai] = (sum([p[0] for p in pingpai_counts[pinpai]])) / len(pingpai_counts[pinpai])
pinpai_GoodRate[pinpai] = (sum([p[1] for p in pingpai_counts[pinpai]])) / len(pingpai_counts[pinpai])
pinpai_PoorRate = sorted(pinpai_PoorRate.items(), key=lambda x: x[1], reverse=True)
pingpai1 = [p[0] for p in pinpai_PoorRate]
PoorRate = [p[1] for p in pinpai_PoorRate]
pinpai_GoodRate = sorted(pinpai_GoodRate.items(), key=lambda x: x[1], reverse=False)
pingpai2 = [p[0] for p in pinpai_GoodRate]
GoodRate = [p[1] for p in pinpai_GoodRate]
return jsonify({'pinpai': pingpai1, 'PoorRate': PoorRate,
'pingpai2': pingpai2, 'GoodRate': GoodRate})
@app.route('/get_all_brands')
def get_all_brands():
"""获取所有品牌"""
pingpai, counts, zhanyoulv = phone_sell_count()
return jsonify({'品牌': pingpai, '数量': counts})
@app.route('/recommend_phones')
def recommend_phones():
"""基于参数手机推荐"""
品牌 = request.args.get('品牌')
最低价格 = request.args.get('最低价格')
最高价格 = request.args.get('最高价格')
最低好评率 = request.args.get('最低好评率')
最低好评率 = float(最低好评率)
conn = sqlite3.connect('jd_phone_info.db')
cursor = conn.cursor()
sql = "select * from phone where 品牌=='{}' and 价格 >= {} and 价格 <= {}".format(品牌, 最低价格, 最高价格)
cursor.execute(sql)
datas = cursor.fetchall()
phones = []
all_names = set()
for data in datas:
comment = json.loads(data[5])
GoodRate = comment['GoodRate']
if (GoodRate < 最低好评率) or ():
continue
if not data[3].strip():
continue
if data[3] in all_names:
continue
phones.append(
{
'品牌': data[0],
'图片': data[1],
'价格': data[2],
'产品名称': data[3],
'链接': data[4],
'好评率': GoodRate
}
)
all_names.add(data[3])
# 按照好评率排序
phones = sorted(phones, key=lambda x: x['好评率'], reverse=True)
# 推荐 TOP20 的
return jsonify({'推荐手机': phones[:20]})
if __name__ == "__main__":
app.run(host='127.0.0.1')
5、源码获取方式
🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看【用户名】、【专栏名称】、就可以找到我啦🍅
感兴趣的可以先收藏起来,点赞、关注不迷路,查看下方👇🏻👇🏻
更多推荐
所有评论(0)