数据:
链接: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')
结果如图:
基本分析就是这样了。