1. Anaconda Prompt窗口,运行
pip install -ihttps://pypi.tuna.tsinghua.edu.cn/simple requests_html
命令,以安装request_html包。
2. 在Anaconda Prompt窗口中,通过cd命令导航至代码文件夹,运行Jupyter Notebook命令启动Jupyter Notebook,新建代码文件‘实验5 字典.ipynb’。
from requests_html import HTMLSession
import json
import time, datetime
import pandas as pd
//在Python中,pandas是基于NumPy数组构建的,使数据预处理、清洗、分析工作变得更快更简单。pandas是专门为处理表格和混杂数据设计的,而NumPy更适合处理统一的数值数组数据。
import matplotlib.pyplot as plt//python数据可视化
%matplotlib inline//可以你的python console里面生成图像
#定义一个新会话
session=HTMLSession()
#定义网址
url ='https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=&start=0&limit=500'
#获取网址响应
r = session.get(url)
#得到json数据,含500部电影的信息
movies=json.loads(r.text)
len(movies)
#浏览前两部电影的信息
movies[:2]
#定义一个电影列表,里面存储感兴趣信息
movie_list=[]
for movie in movies:
movie_id=movie['id']
title=movie['title']
score=float(movie['score'])
regions=movie['regions']
try:
year,month,day=time.strptime(movie['release_date'],'%Y-%m-%d')[:3]
date=datetime.date(year,month,day)
except:
year=time.strptime(movie['release_date'],'%Y')[0]
date=datetime.date(year,1,1)
actors=movie['actors']
movie_list.append([movie_id,title,score,regions,date,actors])
#转换成pandas格式以便于用表格方式显示电影信息
data=pd.DataFrame(movie_list)
data.columns=['id','名称','评分','地区','日期','演员']
#查看前5部电影的信息
data.head()
#统计排名前500喜剧电影都是哪里拍的
region_dict={}
for movie in movie_list:
for region in movie[3]:
if region not in region_dict:
region_dict[region]=1
else:
region_dict[region]+=1
#构建列表并排序
region_list=[[region,region_dict[region]] for region in region_dict]
region_list.sort(key=lambda x:x[1],reverse=True)
region_list[:5]
#转换成pandas格式
data=pd.DataFrame(region_list)
data.columns=['地区','数量']
#显示前5个地区
data.head()
#把所有其它地区统计到一起
other_region_list=[x[1] for x in region_list[5:]]
other_count=sum(other_region_list)
#其它地区电影数量(注意总和应超过500)
other_count
final_result=region_list[0:5]+[['其它地区',other_count]]
final_result
x=[v[0] for v in final_result]
y=[v[1] for v in final_result]
plt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False#解决符号显示为方块的问题
plt.bar(x,y)
#统计排名前500喜剧电影的演员
actor_dict={}
for movie in movie_list:
for actor in movie[5]:
if actor not in actor_dict:
actor_dict[actor]=1
else:
actor_dict[actor]+=1
#创建列表并排序
actor_dict=[[actor,actor_dict[actor]] for actor in actor_dict]
actor_dict.sort(key=lambda x:x[1],reverse=True)
actor_dict[:5]
data=pd.DataFrame(actor_dict)
data.columns=['演员','数量']
data.head()