【Python大数据+AI毕设实战】无人驾驶网约车抖音社会舆情可视化分析系统

70 阅读8分钟

🎓 作者:计算机毕设小月哥 | 软件开发专家

🖥️ 简介:8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。

🛠️ 专业服务 🛠️

  • 需求定制化开发

  • 源码提供与讲解

  • 技术文档撰写(指导计算机毕设选题【新颖+创新】、任务书、开题报告、文献综述、外文翻译等)

  • 项目答辩演示PPT制作

🌟 欢迎:点赞 👍 收藏 ⭐ 评论 📝

👇🏻 精选专栏推荐 👇🏻 欢迎订阅关注!

大数据实战项目

PHP|C#.NET|Golang实战项目

微信小程序|安卓实战项目

Python实战项目

Java实战项目

🍅 ↓↓主页获取源码联系↓↓🍅

基于大数据的无人驾驶网约车抖音社会舆情可视化分析系统-功能介绍

《基于Python大数据+AI的无人驾驶网约车抖音社会舆情可视化分析系统》是一套综合运用Hadoop分布式存储、Spark大数据计算引擎、Python机器学习算法以及Vue.js前端可视化技术的舆情监测分析平台。该系统通过爬取抖音平台上关于无人驾驶网约车的视频评论数据,运用Spark SQL进行大规模数据清洗与预处理,结合Pandas和NumPy进行深度数据挖掘,采用自然语言处理技术实现评论情感极性智能识别,构建多维度舆情分析模型。系统核心功能涵盖情感时间演变趋势分析、地域情感差异对比、热点话题自动识别、用户画像构建、高影响力评论筛选以及传播力指数计算等七大分析维度。后端采用Django框架搭建RESTful API接口,前端使用Vue+ElementUI+ECharts技术栈构建响应式数据可视化界面,支持实时动态图表展示、交互式地图分析、词云生成等多种可视化形式。整个系统基于MySQL数据库进行数据持久化存储,通过HDFS分布式文件系统管理海量非结构化数据,实现了从数据采集、存储、处理到可视化展示的完整舆情分析工作流程。

基于大数据的无人驾驶网约车抖音社会舆情可视化分析系统-选题背景意义

选题背景 随着人工智能技术的快速发展和自动驾驶技术的不断成熟,无人驾驶网约车作为智能交通领域的重要应用场景,正逐步从概念验证走向商业化落地。国内外多家科技公司和传统车企纷纷加大在自动驾驶领域的投入,无人驾驶网约车的路测和试运营活动在多个城市陆续展开。与此同时,短视频平台特别是抖音作为当前最具影响力的社交媒体之一,已成为公众获取信息、表达观点的重要渠道。关于无人驾驶网约车的相关内容在抖音平台上持续发酵,引发了大量用户的关注和讨论。这些讨论既包含对新技术的好奇与期待,也包含对安全性、可靠性的质疑与担忧。传统的舆情监测方式往往依赖人工采集和简单的关键词统计,难以处理海量的短视频评论数据,也无法深入挖掘用户情感态度的变化规律。在这样的背景下,迫切需要运用大数据技术和人工智能算法,构建智能化的舆情分析系统,帮助相关企业和研究机构及时了解公众对无人驾驶网约车的真实态度。 选题意义 本课题的研究具有一定的理论价值和实际应用意义。从技术角度来看,将大数据处理技术与自然语言处理算法相结合,为处理社交媒体平台的海量非结构化数据提供了一种可行的解决方案,丰富了舆情分析的技术手段。通过构建多维度的分析模型,可以更全面地刻画网络舆情的演变规律,为相关领域的研究提供一定的参考。从实际应用层面来说,该系统能够帮助无人驾驶技术研发企业及时了解公众对其产品和服务的反馈,识别潜在的公关风险点,为产品改进和市场策略调整提供数据支撑。对于政府监管部门而言,系统可以协助监测无人驾驶相关政策在社会层面的反响,为政策优化和风险防控提供决策参考。从社会层面来说,通过分析公众对新兴技术的接受度和担忧点,有助于促进技术普及与社会接受之间的良性互动。当然,作为一个毕业设计项目,其影响范围和实际效果仍然有限,主要意义在于为相关研究和应用提供一个基础的技术框架和实现思路。

基于大数据的无人驾驶网约车抖音社会舆情可视化分析系统-技术选型

大数据框架:Hadoop+Spark(本次没用Hive,支持定制) 开发语言:Python+Java(两个版本都支持) 后端框架:Django+Spring Boot(Spring+SpringMVC+Mybatis)(两个版本都支持) 前端:Vue+ElementUI+Echarts+HTML+CSS+JavaScript+jQuery 详细技术点:Hadoop、HDFS、Spark、Spark SQL、Pandas、NumPy 数据库:MySQL

基于大数据的无人驾驶网约车抖音社会舆情可视化分析系统-视频展示

基于大数据的无人驾驶网约车抖音社会舆情可视化分析系统-视频展示

基于大数据的无人驾驶网约车抖音社会舆情可视化分析系统-图片展示

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

基于大数据的无人驾驶网约车抖音社会舆情可视化分析系统-代码展示

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, when, count, avg, desc, asc, regexp_extract, split
from pyspark.sql.types import StructType, StructField, StringType, IntegerType, FloatType
import pandas as pd
import numpy as np
from textblob import TextBlob
import jieba
from collections import Counter
import re

spark = SparkSession.builder.appName("DouYinSentimentAnalysis").config("spark.sql.adaptive.enabled", "true").config("spark.sql.adaptive.coalescePartitions.enabled", "true").getOrCreate()

def sentiment_analysis_processing():
    df = spark.sql("SELECT comment_id, comment_content, comment_time, like_count, reply_count, user_ip FROM douyin_comments")
    sentiment_udf = spark.udf.register("sentiment_analysis", lambda text: get_sentiment_score(text), FloatType())
    df_with_sentiment = df.withColumn("sentiment_score", sentiment_udf(col("comment_content")))
    df_categorized = df_with_sentiment.withColumn("sentiment_category", 
        when(col("sentiment_score") > 0.1, "positive")
        .when(col("sentiment_score") < -0.1, "negative")
        .otherwise("neutral"))
    sentiment_stats = df_categorized.groupBy("sentiment_category").agg(
        count("comment_id").alias("comment_count"),
        avg("like_count").alias("avg_likes"),
        avg("reply_count").alias("avg_replies"))
    time_sentiment = df_categorized.withColumn("date", col("comment_time").substr(1, 10)).groupBy("date", "sentiment_category").count().orderBy("date")
    high_impact_comments = df_categorized.filter((col("like_count") > 100) | (col("reply_count") > 50)).select("comment_content", "sentiment_category", "like_count", "reply_count").orderBy(desc("like_count"))
    sentiment_keywords = df_categorized.filter(col("sentiment_category") == "negative").select("comment_content").rdd.flatMap(lambda row: extract_keywords(row.comment_content)).collect()
    negative_keyword_freq = Counter(sentiment_keywords).most_common(20)
    result_dict = {
        "sentiment_distribution": sentiment_stats.collect(),
        "time_trend": time_sentiment.collect(),
        "high_impact": high_impact_comments.limit(100).collect(),
        "negative_keywords": negative_keyword_freq
    }
    return result_dict

def regional_analysis_processing():
    df = spark.sql("SELECT comment_id, comment_content, user_ip, like_count, reply_count FROM douyin_comments WHERE user_ip IS NOT NULL")
    region_udf = spark.udf.register("extract_region", lambda ip: ip_to_region(ip), StringType())
    df_with_region = df.withColumn("region", region_udf(col("user_ip")))
    sentiment_udf = spark.udf.register("sentiment_analysis", lambda text: get_sentiment_score(text), FloatType())
    df_with_sentiment = df_with_region.withColumn("sentiment_score", sentiment_udf(col("comment_content")))
    df_categorized = df_with_sentiment.withColumn("sentiment_category",
        when(col("sentiment_score") > 0.1, "positive")
        .when(col("sentiment_score") < -0.1, "negative")
        .otherwise("neutral"))
    regional_sentiment = df_categorized.groupBy("region", "sentiment_category").agg(
        count("comment_id").alias("comment_count"),
        avg("like_count").alias("avg_likes"))
    regional_activity = df_categorized.groupBy("region").agg(
        count("comment_id").alias("total_comments"),
        avg("sentiment_score").alias("avg_sentiment"),
        avg("like_count").alias("region_avg_likes"))
    top_regions = regional_activity.orderBy(desc("total_comments")).limit(20)
    sentiment_map = regional_sentiment.filter(col("sentiment_category").isin(["positive", "negative"])).orderBy("region", "sentiment_category")
    regional_keywords = df_categorized.groupBy("region").agg(
        collect_list("comment_content").alias("all_comments"))
    keyword_analysis = regional_keywords.rdd.map(lambda row: (row.region, extract_regional_keywords(row.all_comments))).collect()
    result_dict = {
        "regional_sentiment": sentiment_map.collect(),
        "regional_activity": top_regions.collect(),
        "keyword_by_region": keyword_analysis
    }
    return result_dict

def topic_hotspot_analysis():
    df = spark.sql("SELECT comment_id, comment_content, comment_time, like_count, reply_count FROM douyin_comments")
    keyword_udf = spark.udf.register("extract_keywords", lambda text: " ".join(extract_keywords(text)), StringType())
    df_with_keywords = df.withColumn("keywords", keyword_udf(col("comment_content")))
    keywords_df = df_with_keywords.select("comment_id", "like_count", "reply_count", split(col("keywords"), " ").alias("keyword_array"))
    exploded_keywords = keywords_df.select("comment_id", "like_count", "reply_count", explode(col("keyword_array")).alias("keyword")).filter(col("keyword") != "")
    keyword_stats = exploded_keywords.groupBy("keyword").agg(
        count("comment_id").alias("mention_count"),
        avg("like_count").alias("avg_likes"),
        sum("like_count").alias("total_likes"))
    hot_keywords = keyword_stats.filter(col("mention_count") > 10).orderBy(desc("total_likes")).limit(50)
    safety_keywords = exploded_keywords.filter(col("keyword").rlike("安全|事故|危险|风险|技术")).groupBy("keyword").agg(count("comment_id").alias("safety_mentions")).orderBy(desc("safety_mentions"))
    employment_keywords = exploded_keywords.filter(col("keyword").rlike("司机|工作|失业|就业")).groupBy("keyword").agg(count("comment_id").alias("employment_mentions")).orderBy(desc("employment_mentions"))
    controversy_analysis = df.filter(col("comment_content").rlike("质疑|反对|担心|怀疑")).agg(
        count("comment_id").alias("controversy_count"),
        avg("like_count").alias("controversy_avg_likes"))
    time_based_topics = df.withColumn("hour", col("comment_time").substr(12, 2)).groupBy("hour").agg(count("comment_id").alias("hourly_comments")).orderBy("hour")
    result_dict = {
        "hot_topics": hot_keywords.collect(),
        "safety_concerns": safety_keywords.limit(20).collect(),
        "employment_impact": employment_keywords.limit(15).collect(),
        "controversy_stats": controversy_analysis.collect(),
        "time_distribution": time_based_topics.collect()
    }
    return result_dict

def get_sentiment_score(text):
    if not text or len(text.strip()) == 0:
        return 0.0
    positive_words = ["好", "棒", "赞", "支持", "期待", "先进", "方便", "安全", "可靠"]
    negative_words = ["差", "烂", "反对", "担心", "危险", "不安全", "不可靠", "失业"]
    words = jieba.lcut(text)
    score = 0
    for word in words:
        if word in positive_words:
            score += 1
        elif word in negative_words:
            score -= 1
    return float(score / max(len(words), 1))

def extract_keywords(text):
    if not text:
        return []
    words = jieba.lcut(text)
    filtered_words = [word for word in words if len(word) > 1 and word not in ["的", "了", "是", "在", "有", "和", "就", "都", "被", "从"]]
    return filtered_words[:10]

def ip_to_region(ip):
    if not ip:
        return "未知"
    ip_patterns = {
        "北京": ["1.2.", "1.4.", "1.8."],
        "上海": ["1.1.", "1.3.", "1.6."],
        "广东": ["1.9.", "2.1.", "2.3."],
        "浙江": ["2.2.", "2.4.", "2.6."]
    }
    for region, patterns in ip_patterns.items():
        for pattern in patterns:
            if ip.startswith(pattern):
                return region
    return "其他"

def extract_regional_keywords(comments_list):
    all_text = " ".join(comments_list)
    keywords = extract_keywords(all_text)
    return Counter(keywords).most_common(10)

基于大数据的无人驾驶网约车抖音社会舆情可视化分析系统-结语

🌟 欢迎:点赞 👍 收藏 ⭐ 评论 📝

👇🏻 精选专栏推荐 👇🏻 欢迎订阅关注!

大数据实战项目

PHP|C#.NET|Golang实战项目

微信小程序|安卓实战项目

Python实战项目

Java实战项目

🍅 ↓↓主页获取源码联系↓↓🍅