#python connectHDFS.py ratings.csv > result.csv 命令行执行此命令
import numpy as np
import matplotlib.pyplot as plt
from hdfs import *
import os
import math
import pandas as pd
import pymysql
from mrjob.job import MRJob
from mrjob.step import MRStep
from matplotlib.pyplot import MultipleLocator
db = pymysql.connect(host=‘127.0.0.1‘ port=3306 user=‘root‘ passwd=‘123456‘ db=‘test‘ charset=‘utf8‘)
cursor = db.cursor() #新建数据库访问游标
user_movie = ‘u.data‘
movie_information = ‘u.item‘
user_information = ‘u.user‘
plt.rcParams[‘font.sans-serif‘] = [‘SimHei‘] # 指定默认字体
plt.rcParams[‘axes.unicode_minus‘] = False # 解决保存图像是负号‘-‘显示为方块的问题
def mr_PreTreatment(): #数据预处理,生成result1.csv文件
user_items=[]
items=[]
for line in open(‘u.data‘):
user_items.append(line.split(‘\t‘))
for line in open(‘u.item‘ encoding= ‘ISO-8859-1‘):
items.append(line.split(‘|‘))
items_hash={}
for i in items:
items_hash[i[0]]=i[1]
for ui in user_items:
ui[1]=items_hash[ui[1]]
f = open(‘ratings.csv‘‘w‘encoding=‘utf-8‘)
for ui in user_items:
f.write(ui[0]+‘|‘+ui[1]+‘|‘+ui[2]+‘\n‘)
f.close()
def score_analysis(): #电影评分分析
scores = {“1“:0“2“:0“3“:0“4“:0“5“:0}
for line in open(user_movie):
user item score = line.split(‘\t‘)[0:3]
scores[score] += 1
x1 = scores.keys() #用字典的键也就是分数作为x轴
y1 = scores.values() #用字典键对应的值也就是打分人数作为y轴
# print(scores)
plt.figure(figsize=(19 10))
plt.subplot(232)
plt.bar(x1y1color = ‘slateblue‘width = 0.95)
plt.title(“电影评分统计图“fontsize=14)
plt.xlabel(“影片评分 (0-5)“fontsize=14)
plt.ylabel(“评分人数“fontsize = 14)
def movie_year_analysis(): #电影年份分析
yearCounts = {} #用来统计电影年份与数量的对应关系
for year in range(19221999): #按照数据集中电影的年份信息 生成年份字典
yearCounts[str(year)] = 0
for line in open(movie_informationencoding=‘ISO-8859-1‘):
release_date = line.split(‘|‘)[2]
release_year = release_date[-4:]
if release_year == ““: continue
yearCounts[release_year] += 1
x2 = list(yearCounts.keys()) #获取x轴坐标并转为列表
y2 = list(yearCounts.values())#获取y轴坐标并转为列表
plt.subplot(235)
plt.plot(x2y2label = ‘电影数量‘color = ‘cornflowerblue‘)
plt.legend(loc=“upper right“) #设置标签图在右上角
x_major_locator=MultipleLocator(5) #设置x轴间隔为5
ax=plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
plt.xticks(rotation = -60) #将x轴坐标旋转60度
x_new = range(19221998)
plt.title(“电影年份统计图“fontsize=14)
plt.xlabel(“年份“fontsize=14)
plt.ylabel(“电影数量“fontsize = 14)
# plt.show()
def occuptin_analysis():
occuption_count = {}
for line in open(user_information):
occuption = line.split(‘|‘)[3]
occuption_count[occuption] = occuption_count.get(occuption0) + 1 #统计职业及其对应人数
sort_occuption_counts = sorted(occuption_count.items()key=lambda k:
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2020-07-05 12:35 .vscode\
文件 57 2020-07-05 12:35 .vscode\settings.json
文件 13257 2020-07-17 10:52 connectHDFS.py
文件 1184 2020-07-16 10:22 mr1.py
文件 2824 2020-07-16 15:44 mr2.py
文件 712 2020-07-16 09:48 preprocess.py
文件 3066030 2020-07-17 08:12 ratings.csv
文件 6798328 2020-07-17 08:12 result.csv
文件 818 2020-07-13 01:33 temp.py
文件 497 2020-07-09 20:59 test.py
文件 7644 2020-07-12 22:14 test2.py
文件 2654 2020-07-12 10:09 test3.py
文件 770 2020-07-12 10:12 test4.py
文件 2295 2020-07-12 11:52 test5.py
文件 1146 2020-07-12 22:18 test6.py
文件 1979173 2020-07-10 21:55 u.data
文件 236344 2020-07-10 21:55 u.item
文件 22628 2000-07-20 05:09 u.user