课题名称 | 基于hadoop+spark的漫画推荐与可视化系统 | 课题类型 | 设计 | 课题性质 | 结合实际 | ||||||||||||
课题来源 | 自拟 | 横、纵向项目名称 | 无 | ||||||||||||||
项目编号 | 无 | 项目来源 | 无 | ||||||||||||||
导师姓名 | 黄亮 | 职称 | 有否科研背景 | 有 | 有否实际工程背景 | 否 | |||||||||||
所在单位 | 数学与计算机学院 | 所学专业 | 上机时数 | 384(小时) | |||||||||||||
目的要求 |
| ||||||||||||||||
主要内容 |
| ||||||||||||||||
预期 目标 | (一)Selenium自动化Python爬虫工具采集漫画视频等约10万条存入.csv文件作为数据集; (二)使用pandas+numpy或MapReduce对数据进行数据清洗,生成最终的.csv文件并上传到hdfs; (三)使用hive数仓技术建表建库,导入.csv数据集; (四)离线分析采用hive_sql完成,实时分析利用Spark之Scala完成; (五)统计指标使用sqoop导入mysql数据库; (六)使用Flask+echarts进行可视化大屏开发; (七)使用机器学习、深度学习的算法进行个性化漫画视频推荐; (八)使用卷积神经网络KNN、CNN实现漫画视频流量预测; (九)搭建springboot+vue.js前后端分离web系统进行个性化推荐界面、漫画视频流量预测界面、知识图谱等实现; | ||||||||||||||||
教研室审查小组意见 | 本课题能否满足综合训练学生的教学要求 | ||||||||||||||||
课题中有无基本工程训练内容,份量多大(限于理工专业) | |||||||||||||||||
本课题的要求、任务、内容是否明确、具体 | |||||||||||||||||
进行本课题现有实施条件是否具备 | |||||||||||||||||
工作量是否饱满,课题难度是否适中 | |||||||||||||||||
进行本课题尚缺的条件本单位能否解决 | |||||||||||||||||
对本课题的评审结论: 教研室主任(签字): 20 年 月 日 | |||||||||||||||||
院系审定意见 | 院长(系主任)(签字): 20 年 月 日 |
核心算法代码分享如下:
import csv
import pymysql
import requests
connect = pymysql.connect(host="bigdata",port=3306, user="root",
password="123456", database="hive_zymk")
cur = connect.cursor()
cur.execute("select * from tb_zymk " )
rv = cur.fetchall()
lines=0
for result in rv:
id=result[0]
title=result[1]
update_times=result[2]
tags=result[3]
content=result[4]
readings=result[5]
subscribes=result[6]
rewards=result[7]
monthtickets=result[8]
recommends=result[9]
comments=result[10]
scores=result[11]
author=result[12]
zps=result[13]
ctime=result[14]
img=result[15]
url=result[16]
#title字段去掉特殊字符
title = title.strip().replace(',', ',').replace('"', '').replace("'", '').replace("\n", '').replace('\r', '').replace('\t', '')
# 内容字段去掉特殊字符
content = content.strip().replace(',', ',').replace('"', '').replace("'", '').replace("\n", '').replace('\r', '').replace('\t', '')
#zps
zps = zps.strip().replace(',', ',').replace('"', '').replace("'", '').replace("\n", '').replace('\r', '').replace('\t', '')
# 阅读量替换汉字数值入亿 万
temp_readings=readings
if '亿' in readings:
temp_readings=float(readings.replace('亿',''))*100000000
elif '万' in readings:
temp_readings = float(readings.replace('万', '')) * 10000
readings = str(int(temp_readings))
#订阅量subscribes
temp_subscribes=subscribes
if '亿' in subscribes:
temp_subscribes=float(subscribes.replace('亿',''))*100000000
elif '万' in subscribes:
temp_subscribes = float(subscribes.replace('万', '')) * 10000
subscribes = str(int(temp_subscribes))
#打赏rewards
temp_rewards=rewards
if '亿' in rewards:
temp_rewards=float(rewards.replace('亿',''))*100000000
elif '万' in rewards:
temp_rewards = float(rewards.replace('万', '')) * 10000
rewards = str(int(temp_rewards))
#monthtickets月票
temp_monthtickets=monthtickets
if '亿' in monthtickets:
temp_monthtickets=float(monthtickets.replace('亿',''))*100000000
elif '万' in monthtickets:
temp_monthtickets = float(monthtickets.replace('万', '')) * 10000
monthtickets = str(int(temp_monthtickets))
#recommends 推荐数
temp_recommends=recommends
if '亿' in recommends:
temp_recommends=float(recommends.replace('亿',''))*100000000
elif '万' in recommends:
temp_recommends = float(recommends.replace('万', '')) * 10000
recommends = str(int(temp_recommends))
#ctime需要去掉空格
ctime=ctime.strip()
if update_times == None or len(update_times) == 0 or update_times == '' or update_times == 'None':
update_times = '无'
#tags标签字段拆分
# 标签
tags_arr=tags.split('|')
for tag in tags_arr:
print(tag)
zps_arr = zps.split('|')
for zp in zps_arr:
print(zp)
zymk_file = open("zymk.csv", mode="a+", newline='', encoding="utf-8")
zymk_writer = csv.writer(zymk_file)
zymk_writer.writerow(
[id,title,update_times,tag,content,readings,subscribes,rewards,monthtickets,recommends,comments,scores,author,zp,ctime,img,url])
zymk_file.close()
print('国产动漫转CSV',id,title,update_times,tag,content,readings,subscribes,rewards,monthtickets,recommends,comments,scores,author,zp,ctime,img,url)
lines=lines+1
print('正在处理,当前总计处理数据', lines,'条')
print('全部处理完毕','处理数据量',lines,'条')