数据分析之电影top250(只抓取了232个。。。中途报错懒得抓了)

数据:
链接:https://pan.baidu.com/s/1knJOiHBKmaLL6pn6E_92xw 
提取码:iamy 

**

’’‘1统计电影数量最多的前五个导演’’'

**

import sqlite3
import pandas as pd#数据分析常用工具
from pyecharts import Pie#饼图
conn=sqlite3.connect(r'D:\BaiduNetdiskDownload\navicat12\navicat\database\spider.db')#连接数据库并
选择对应表操作,使用pandas读取
sql="""select * from douban_movies"""
movie=pd.read_sql(sql,conn)
print(movie.columns)#打印列名,就是为了复制粘贴的。。。
movie_conductor=movie['conductor_name'].value_counts().head(5).to_dict()#选择电影数量多的前五个导演
并转换成字典
#下面操作是特定的,attr和v1都是列表形式
attr = list(movie_conductor.keys())
v1 =   list(movie_conductor.values())
pie = Pie("")
pie.add("导演", attr, v1, is_label_show=True)
pie.render('电影最多前5个导演.html')

结果如图:
在这里插入图片描述

’’‘2统计每个国家出的电影数量’’'

这里有个坑是attr和value是英文的,而我们的是中文的,找了半天才发现,所以需要自己统计了。。。

#连接数据库操作是一样的
import sqlite3
import pandas as pd
from pyecharts import Map
conn=sqlite3.connect(r'D:\BaiduNetdiskDownload\navicat12\navicat\database\spider.db')
sql="""select * from douban_movies"""
movie=pd.read_sql(sql,conn)
# print(movie.columns)
l=[]
country_dict=movie['desgin_country'].value_counts().to_dict()#统计国家数量并转成字典
print(country_dict)
country_list=list(country_dict.keys())#转为键(国家)列表
for countrys_list in country_list:#遍历列表
    countrys=countrys_list.split('/')#按/切割
    for country in countrys:#再次循环
        if country not in l:#不在空列表l中则添加
            l.append(country.strip())#去除字符,默认空白字符
l1=list(set(l))#去重
dt={}#将国家和其对应电影数量统计到字典中
for country1 in l1:
    num=0
    num+=len(movie[movie['desgin_country'].str.contains(country1)])
    dt[country1]=num
dt['中国大陆']=dt['中国大陆']+dt['香港']+dt['台湾']#合并中国电影数量,移除另俩个键然后将键和值均转为列表
dt.pop('香港')
dt.pop('台湾')
value1=list(dt.values())
attr1=list(dt.keys())
#由于世界地图只显示英文,所以只能手动添加,还有美国是United States
attr=['Austria','Netherlands','Thailand','India','Argentina','Poland','Iceland','Spain',
      'China','Switzerland','Greece','United Arab Emirates','Iran','Japan','Brazil',
      'Australia','Canada','Denmark','South Africa','Ireland','Czech Republic','Korea',
      'Sweden','France','Zealand','United States','England','Germany','Italy']
value=[1, 1, 1, 4, 1, 1, 1, 4, 47, 4, 1, 1, 2, 33, 2, 5, 7, 1, 2, 1, 1, 8, 2, 19, 3, 131, 31, 18, 9]
print(attr1)
print(value1)
map0 = Map("世界地图", width=1200, height=600)
map0.add("世界地图", attr, value, maptype="world",is_visualmap=True, visual_text_color='#000')#
map0.render('世界地图.html')

结果如图:
在这里插入图片描述

’’‘3.找到4个评分最高的电影’’'


# 连接数据库操作是一样的
import sqlite3
import pandas as pd
conn=sqlite3.connect(r'D:\BaiduNetdiskDownload\navicat12\navicat\database\spider.db')
sql="""select * from douban_movies"""
movie=pd.read_sql(sql,conn)
# print(movie.columns)
#按照评分分组统计选取最后4个评分
rating_dict=movie.loc[:,['movie_name','rating_num']].groupby('rating_num').size().tail(4).to_dict()
rating_list=list(rating_dict.keys())
rating_list.sort(reverse=True)#逆序排序
print(rating_list)
#循环找出符合评分的电影
for rating in rating_list:
    print(movie[movie['rating_num']==rating]['movie_name'])
    print(type(rating))

结果如图:
在这里插入图片描述

’’‘4.统计电影类型数量’’'

# 连接数据库操作是一样的
import sqlite3
import pandas as pd
from pyecharts import Bar
conn=sqlite3.connect(r'D:\BaiduNetdiskDownload\navicat12\navicat\database\spider.db')
sql="""select * from douban_movies"""
movie=pd.read_sql(sql,conn)
# print(movie.columns)
dt2={}#空字典用来存储类型及对应数量
type_list=movie['type_name'].to_list()#类型转换成列表
print(type_list)
#循环遍历统计每个类型,由于一个电影可以属于不同类型,第一次循环列表,第二次循环每个类型内容
for i in type_list:
    i_list=i.split(',')
    for j in i_list:
        if j not in dt2:
            dt2[j]=1#类型不在字典中,类型数量为1
        else:
            dt2[j]+=1#在字典中就加1
print(dt2)
type_name=list(dt2.keys())
type_num=list(dt2.values())
bar=Bar('电影类型')
bar.add('豆瓣',type_name,type_num,mark_point=['average'])#,is_stack=True
bar.render('电影类型.html')

结果如图:
在这里插入图片描述
基本分析就是这样了。

猜你喜欢

转载自blog.csdn.net/weixin_43788061/article/details/89043448