博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,选择我们,就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅

点击查看作者主页,了解更多项目!

🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅

1、毕业设计:2026年计算机专业毕业设计选题汇总(建议收藏)✅

2、最全计算机专业毕业设计选题大全(建议收藏)✅

1、项目介绍

技术栈
python语言、Flask框架、pyecharts可视化、requests爬虫技术、京东数据

功能模块
· 各厂商手机销售分布
· 手机品牌市场占有率
· 各品牌手机价格分析
· 各品牌好评率分析
· 智能推荐
· 市场占比率预测

项目介绍
本项目是基于Python技术栈对京东平台手机数据进行抓取、分析与推荐的系统。采用requests爬虫技术从京东采集手机的价格、销量、评论等数据,经数据清洗后存入数据库。系统利用Flask框架构建后端分析服务,通过pyecharts实现数据可视化,对各厂商手机销售分布、市场占有率、价格区间、好评率等维度进行统计分析并直观展示。同时提供智能推荐功能,用户可根据品牌、价格区间、好评率等参数筛选获得个性化手机推荐。系统还包含市场占比率预测与后台数据管理功能,为用户提供全面的手机数据分析与选购参考。

2、项目界面

(1)注册登录界面
该页面是基于Python的手机数据可视化分析系统界面,顶部设有功能导航栏,包含多维度数据分析与管理选项,中部左侧为系统介绍说明,右侧是注册登录模块,下方展示可视化背景图,可实现用户身份验证登录、系统功能导航与数据可视化分析引导。
在这里插入图片描述

(2)各品牌手机价格分析
该页面是基于Python的手机数据可视化分析系统界面,顶部设有多维度数据分析与管理的功能导航栏,主体区域展示各品牌手机价格区间分布的直方图与箱型图,可实现手机价格数据的多维度可视化分析与直观展示。
在这里插入图片描述

(3)手机品牌市场占有率分析
该页面是基于Python的手机数据可视化分析系统界面,顶部设有多维度数据分析与管理的功能导航栏,主体区域展示各大手机品牌市场占有率分布的饼状图,可实现手机品牌市场占有率数据的可视化分析与直观展示。
在这里插入图片描述

(4)各厂商手机销售分布分析
该页面是基于Python的手机数据可视化分析系统界面,顶部设有多维度数据分析与管理的功能导航栏,主体区域展示各大手机厂商的手机销售分布柱状图,可实现手机厂商销售数据的可视化分析与直观对比展示。
在这里插入图片描述

(5)各品牌好评率分析
该页面是基于Python的手机数据可视化分析系统界面,顶部设有多维度数据分析与管理的功能导航栏,主体区域左右分别展示各大手机厂商平均好评率与差评率的对比柱状图,可实现手机品牌好评与差评数据的可视化分析与直观对比展示。

在这里插入图片描述

(6)智能推荐
该页面是基于Python的手机数据可视化分析系统的智能推荐界面,顶部设有多维度数据分析与管理的功能导航栏,中部配备品牌、价格区间、好评率的筛选输入框与推荐按钮,下方展示符合筛选条件的手机商品卡片,可实现个性化手机商品推荐与直观展示。
在这里插入图片描述

(7)后台管理
该页面是基于Python的手机数据可视化分析系统的后台数据管理界面,顶部设有后台管理与数据管理的功能切换选项,中部配备数据列表、创建、批量操作、搜索及分页功能,可实现手机商品数据的查询、新增、编辑与分页管理操作。
在这里插入图片描述

3、项目说明

一、技术栈简要说明
本系统后端采用Python语言进行开发,基于Flask框架搭建Web服务架构,实现路由分发与业务逻辑处理。数据采集层面使用requests爬虫技术,从京东平台动态抓取手机商品信息,包括价格、销量、评论等核心字段。采集到的原始数据经过数据清洗处理后存入数据库。数据可视化采用pyecharts库,将分析结果以直方图、箱型图、饼状图、柱状图等形式在前端动态呈现。前端界面使用HTML构建,配合响应式布局实现用户交互。整体技术架构覆盖数据采集、数据处理、数据可视化和用户交互全流程。

二、功能模块详细介绍
· 各厂商手机销售分布:该模块通过柱状图形式展示各大手机厂商的销售分布情况。顶部导航栏提供功能切换,主体区域柱状图清晰呈现各厂商销量对比,帮助用户了解市场销售格局,为厂商评估市场表现提供数据参考。

· 手机品牌市场占有率:模块以饼状图形式呈现各大手机品牌的市场占有率分布。通过直观的扇形比例展示,用户可快速了解各品牌在京东平台的市场份额,识别主流品牌和市场领导者,页面设计简洁明了。

· 各品牌手机价格分析:该模块通过直方图与箱型图组合展示各品牌手机的价格区间分布。直方图呈现价格频次分布,箱型图展示价格中位数、四分位数及异常值,帮助用户全面了解各品牌定价策略和价格波动范围,为购买决策提供参考。

· 各品牌好评率分析:模块左右分别展示各大手机厂商平均好评率与差评率的对比柱状图。通过正面评价与负面评价的直观对比,用户可快速识别产品质量和用户满意度较高的品牌,同时了解各品牌的用户反馈特点。

· 智能推荐:该模块提供个性化手机推荐功能。页面中部设有品牌、价格区间、好评率等筛选输入框与推荐按钮,下方展示符合筛选条件的手机商品卡片。用户可根据自身需求组合筛选条件,系统返回匹配的商品列表,提升选购效率。

· 市场占比率预测:模块基于历史数据对手机品牌未来市场占比率进行预测分析。通过算法模型计算趋势变化,帮助用户和商家预判市场走向,为营销策略和采购计划提供数据支持,增强决策前瞻性。

· 后台管理:该模块提供手机商品数据的后台管理功能。页面顶部设有后台管理与数据管理的功能切换选项,中部配备数据列表、创建、批量操作、搜索及分页功能,管理员可实现对商品数据的查询、新增、编辑与分页管理操作,保障数据维护效率。

三、项目总结
本项目构建了一个基于Flask框架的京东手机数据可视化分析与推荐系统,实现了从数据采集、清洗处理到可视化分析与智能推荐的全流程功能。系统通过requests爬虫获取京东手机数据,经数据清洗保证分析质量,利用pyecharts将销售分布、市场占有率、价格区间、好评率等多维度分析结果以直观图表形式呈现。前端采用HTML构建,顶部导航栏便于功能切换,智能推荐模块支持用户自定义筛选,后台管理提供便捷的数据维护。界面层面,注册登录页面管理用户准入,各品牌价格分析页面通过直方图与箱型图展示价格分布,市场占有率页面用饼图呈现份额格局,销售分布页面用柱状图对比销量,好评率页面用对比柱状图展示用户反馈,智能推荐页面提供个性化筛选,后台管理页面实现数据操作。项目为用户提供了全面的手机数据分析工具和个性化推荐服务,具有较高的实用价值。

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

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐