博主介绍:✌全网粉丝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、源码获取方式

🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看【用户名】、【专栏名称】、就可以找到我啦🍅

感兴趣的可以先收藏起来,点赞、关注不迷路,查看下方👇🏻👇🏻

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐