以前的金曲奖就是华语音乐的代表,特别是80、90年代,谭张争霸,四大天王等,虽然近来影响力已不如之前,但让我们来看看1983-2017的获奖名单。数据来源于百度百科“十大劲歌金曲颁奖典礼”,由于名单较多,我们只选取了前20位进行图形化展视。可能有些奖项由于个人原因没有参加,例如谭咏麟87年之后未参加颁奖,张国荣更是89-97退出歌坛等,但从这些结果仍然可能与大家想象的不太一样:1)最受欢迎男歌星,张学友只有1次获奖,张敬轩、古巨基各有4次获奖,歌神有点委曲哈;2)最受欢迎女歌星,容祖儿12次获奖可以说是一枝独秀,像王菲仅有2次获奖,差距确实有点大;3)金曲金奖,这一次歌神张学友终于获得最多的4次,但大众情人刘德华1次没有,也是出乎大家意料;4)金曲奖,也是容祖儿拨得头筹,这一次天王刘德华终于站在了第一梯队(注:金曲奖每届有10-20首,而金曲金奖每届只有1首);5)最佳作曲奖,不是太熟悉,但像黄沾这样的大佬我们还是知道的;6)最佳填词奖,这个和大家预期一样,林夕以10次遥遥领先;7)最佳编曲奖,这个还不如最佳作曲奖的名字熟悉;8)总次数,是指示所有奖项中出现名字相加(不局限于以上7个奖项),容祖儿在奖项上的强大优势折桂。
具体分析(代码及图片)如下,首先抓取数据
#从百度百科获取数据
def get_data():url = "https://baike.baidu.com/item/%E5%8D%81%E5%A4%A7%E5%8A%B2%E6%AD%8C%E9%87%91%E6%9B%B2%E9%A2%81%E5%A5%96%E5%85%B8%E7%A4%BC/477072?fr=aladdin"#pandas直接获取url数据,并设置第0行为列标题html_text = pd.read_html(url, encoding="utf-8", header=0) #将数据存入列表lst global lst lst = []for i in range(0,37):lst.append(html_text[i])
一、最受欢迎男歌星获奖次数统计
#历届大奖,最受欢迎男歌星
def man_lijiedajiang():#获取历届大奖的数据pd_data = pd.DataFrame(lst[1])# print(pd_data)#写入oracle,表名需要小写pd_data.to_sql('历届大奖', engine, if_exists='replace', index=True, \dtype={'年度': sqlalchemy.types.NVARCHAR(50),\'届次': sqlalchemy.types.String(length=50),\'最受欢迎男歌星': sqlalchemy.types.String(50),\'最受欢迎女歌星': sqlalchemy.types.String(length=50),\'金曲金奖': sqlalchemy.types.String(length=50),\})#查询获取数据用sql语句,不要分号,表名如果是英文要小写sql = "select 最受欢迎男歌星 as 最受欢迎男歌星,count(*) as 次数 \from 历届大奖 group by 最受欢迎男歌星 \order by 次数 desc,最受欢迎男歌星 DESC"print("从数据库读取前------------------------------")#执行sql语句,从数据库取出数据m_data = pd.read_sql(sql,engine)#取出的数据只保留前20行df = m_data[0:20]# print('最受欢迎男歌星',df)#画图,直方图,x轴标签为列“最受欢迎男歌星”df.plot(kind="bar",x='最受欢迎男歌星',title='最受欢迎男歌星获奖次数')#保存为图片,也可保存为pdfplt.savefig('最受欢迎男歌星.png', dpi=300)
输出
二、最受欢迎女歌星获奖次数统计
#历届大奖,最受欢迎女歌星
def woman_lijiedajiang():#查询获取数据用sql语句,不要分号,表名如果是英文要小写sql = "select 最受欢迎女歌星 as 最受欢迎女歌星,count(*) as 次数 \from 历届大奖 group by 最受欢迎女歌星 \order by 次数 desc,最受欢迎女歌星 DESC"print("从数据库读取前------------------------------")#执行sql语句,从数据库取出数据m_data = pd.read_sql(sql,engine)#取出的数据只保留前13行df = m_data[0:20]# print('最受欢迎女歌星',df)#画图,直方图,x轴标签为列“最受欢迎男歌星”df.plot(kind="bar",x='最受欢迎女歌星',title='最受欢迎女歌星获奖次数')#保存为图片,也可保存为pdfplt.savefig('最受欢迎女歌星.png', dpi=300)
输出
三、金曲金奖获奖次数统计
#历届大奖,金曲金奖
def jinquJJ_lijiedajiang():#查询获取数据用sql语句,不要分号,表名如果是英文要小写sql = "select 金曲金奖, count(*) as 次数 \from (select substr(金曲金奖,instr(金曲金奖,'》',-1,1)+1) as 金曲金奖 from 历届大奖) \group by 金曲金奖 order by 次数 desc,金曲金奖 DESC"print("从数据库读取前------------------------------")#执行sql语句,从数据库取出数据m_data = pd.read_sql(sql,engine)#取出的数据只保留前13行df = m_data[0:20]# print('金曲金奖',df)#画图,直方图,x轴标签为列“金曲金奖”df.plot(kind="bar",x='金曲金奖',title='金曲金奖获奖次数')#保存为图片,也可保存为pdfplt.savefig('金曲金奖.png', dpi=300)
输出
四、金曲奖获奖次数统计(注:金曲奖每届有10-20首,而金曲金奖每届只有1首)
#获奖名单,金曲
def jinqu_huojiangmingdan():#为了for循环下不会累积数据,每次for循环前先删除表cursor = db.cursor() # 获取游标,用于进行 SQL 操作#如果存在table'获奖名单',则先删除str_sql = "declare \num number; \begin \select count(1) into num from all_tables where TABLE_NAME = '获奖名单' and OWNER='ZCK'; \if num=1 then \execute immediate 'drop table 获奖名单'; \end if; \end;"cursor.execute(str_sql)cursor.close() # 关闭游标db.close() # 关闭数据库#将lst里面的列表数据取出,并写入到数据库,table为'获奖名单' for i in range(2,36):pd_data = pd.DataFrame(lst[i])# print(pd_data)pd_data.to_sql('获奖名单', engine, if_exists='append', index=True, \dtype={'奖项名称': sqlalchemy.types.String(500),\'获奖人及作品': sqlalchemy.types.String(500), }) #查询获取数据用sql语句,不要分号,表名如果是英文要小写sql = "select 获奖人及作品, count(*) as 次数 from \(select 奖项名称,substr(获奖人及作品,instr(获奖人及作品,'、',1,1)+1) as 获奖人及作品 \from (select * from 获奖名单 t where 奖项名称 LIKE '%劲歌金曲奖%' and 获奖人及作品 like '%、%') \union all \select 奖项名称,substr(获奖人及作品,instr(获奖人及作品,'》',-1,1)+1) as 获奖人及作品 \from (select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'、',-1,1)-1) as 获奖人及作品 \from (select * from 获奖名单 t where 奖项名称 LIKE '%劲歌金曲奖%' and 获奖人及作品 like '%、%')) \union all \select 奖项名称,substr(获奖人及作品,instr(获奖人及作品,'》',-1,1)+1) as 获奖人及作品 \from 获奖名单 WHERE 奖项名称 LIKE '%劲歌金曲奖%'and 获奖人及作品 not LIKE '%、%') \group by 获奖人及作品 order by 次数 desc,获奖人及作品 DESC"print("从数据库读取前------------------------------")#执行sql语句,从数据库取出数据m_data = pd.read_sql(sql,engine)# 取出的数据只保留前20行df = m_data[0:20]# print('获奖名单',df) # SQL选出“次数”中值最大值,作为y轴标签最大值sql_yticks = "select max(次数) from \(select 获奖人及作品, count(*) as 次数 from \(select 奖项名称,substr(获奖人及作品,instr(获奖人及作品,'、',1,1)+1) as 获奖人及作品 \from (select * from 获奖名单 t where 奖项名称 LIKE '%劲歌金曲奖%' and 获奖人及作品 like '%、%') \union all \select 奖项名称,substr(获奖人及作品,instr(获奖人及作品,'》',-1,1)+1) as 获奖人及作品 \from (select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'、',-1,1)-1) as 获奖人及作品 \from (select * from 获奖名单 t where 奖项名称 LIKE '%劲歌金曲奖%' and 获奖人及作品 like '%、%')) \union all \select 奖项名称,substr(获奖人及作品,instr(获奖人及作品,'》',-1,1)+1) as 获奖人及作品 \from 获奖名单 WHERE 奖项名称 LIKE '%劲歌金曲奖%'and 获奖人及作品 not LIKE '%、%') \group by 获奖人及作品 order by 次数 desc,获奖人及作品 DESC)"# pandas读出“次数”中值最大值data_yticks = pd.read_sql(sql_yticks,engine) # 值类型转换 int_ticks = data_yticks["MAX(次数)"].astype("int") # print(type(int_ticks)) # 生成y轴标签yticks = list(range(1,int(int_ticks)+1,1)) #画图,直方图,x轴标签为列“获奖名单”ax = df.plot(x='获奖人及作品', kind="bar", title='金曲获奖次数', yticks=yticks,color='red')ax.set_ylabel('获奖次数') #设置Y轴名称ax.set_xlabel('名字') #设置X轴名称ax.legend(loc='upper right') #设置图例的位置plt.gcf().subplots_adjust( bottom=0.2) #图形居画布边距#保存为图片,也可保存为pdfplt.savefig('金曲获奖名单.png', dpi=300)
输出
五、最佳作曲奖获奖次数统计
#获奖名单,最佳作曲奖
def zuoqu_huojiangmingdan(): #查询获取数据用sql语句,不要分号,表名如果是英文要小写sql = "select 获奖人及作品, count(*) as 次数 from \(select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'《',-1,1)-1) as 获奖人及作品 \from (select * from 获奖名单 t where 奖项名称 LIKE '%最佳作曲奖%'and 获奖人及作品 not LIKE '%、%') \union all \select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'、',1,1)-1) as 获奖人及作品 \from (select * from 获奖名单 t where 奖项名称 LIKE '%最佳作曲奖%' and 获奖人及作品 like '%、%') \union all \select 奖项名称,substr(获奖人及作品,instr(获奖人及作品,'、',-1,1)+1) as 获奖人及作品 \from (select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'《',-1,1)-1) as 获奖人及作品 \from (select * from 获奖名单 t where 奖项名称 LIKE '%最佳作曲奖%'and 获奖人及作品 LIKE '%、%'))) \group by 获奖人及作品 order by 次数 desc,获奖人及作品 DESC"print("从数据库读取前------------------------------")#执行sql语句,从数据库取出数据m_data = pd.read_sql(sql,engine)# print(m_data)# 取出的数据只保留前20行df = m_data[0:20]# print('最佳作曲奖',df) # SQL选出“次数”中值最大值,作为y轴标签最大值sql_yticks = "select max(次数) from \(select 获奖人及作品, count(*) as 次数 from \(select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'《',-1,1)-1) as 获奖人及作品 \from (select * from 获奖名单 t where 奖项名称 LIKE '%最佳作曲奖%'and 获奖人及作品 not LIKE '%、%') \union all \select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'、',1,1)-1) as 获奖人及作品 \from (select * from 获奖名单 t where 奖项名称 LIKE '%最佳作曲奖%' and 获奖人及作品 like '%、%') \union all \select 奖项名称,substr(获奖人及作品,instr(获奖人及作品,'、',-1,1)+1) as 获奖人及作品 \from (select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'《',-1,1)-1) as 获奖人及作品 \from (select * from 获奖名单 t where 奖项名称 LIKE '%最佳作曲奖%'and 获奖人及作品 LIKE '%、%'))) \group by 获奖人及作品 order by 次数 desc,获奖人及作品 DESC)"# pandas读出“次数”中值最大值data_yticks = pd.read_sql(sql_yticks,engine) # 值类型转换 int_ticks = data_yticks["MAX(次数)"].astype("int") # print(type(int_ticks)) # 生成y轴标签yticks = list(range(1,int(int_ticks)+1,1)) #画图,直方图,x轴标签为列“获奖名单”ax = df.plot(x='获奖人及作品', kind="bar", title='最佳作曲奖', yticks=yticks,color='red')ax.set_ylabel('获奖次数') #设置Y轴名称ax.set_xlabel('名字') #设置X轴名称ax.legend(loc='upper right') #设置图例的位置plt.gcf().subplots_adjust( bottom=0.2) #图形居画布边距#保存为图片,也可保存为pdfplt.savefig('最佳作曲奖.png', dpi=300)
输出
六、最佳填词奖获奖次数统计
#获奖名单,最佳填词奖
def tianci_huojiangmingdan(): #查询获取数据用sql语句,不要分号,表名如果是英文要小写sql = "select 获奖人及作品, count(*) as 次数 from \(select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'《',-1,1)-1) as 获奖人及作品 \from (select * from 获奖名单 t where 奖项名称 LIKE '%最佳填词奖%'and 获奖人及作品 not LIKE '%、%') \union all \select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'、',1,1)-1) as 获奖人及作品 \from (select * from 获奖名单 t where 奖项名称 LIKE '%最佳填词奖%' and 获奖人及作品 like '%、%') \union all \select 奖项名称,substr(获奖人及作品,instr(获奖人及作品,'、',-1,1)+1) as 获奖人及作品 \from (select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'《',-1,1)-1) as 获奖人及作品 \from (select * from 获奖名单 t where 奖项名称 LIKE '%最佳填词奖%'and 获奖人及作品 LIKE '%、%'))) \group by 获奖人及作品 order by 次数 desc,获奖人及作品 DESC"print("从数据库读取前------------------------------")#执行sql语句,从数据库取出数据m_data = pd.read_sql(sql,engine)# 取出的数据只保留前20行df = m_data[0:20]# print('最佳作曲奖',df) # SQL选出“次数”中值最大值,作为y轴标签最大值sql_yticks = "select max(次数) from \(select 获奖人及作品, count(*) as 次数 from \(select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'《',-1,1)-1) as 获奖人及作品 \from (select * from 获奖名单 t where 奖项名称 LIKE '%最佳填词奖%'and 获奖人及作品 not LIKE '%、%') \union all \select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'、',1,1)-1) as 获奖人及作品 \from (select * from 获奖名单 t where 奖项名称 LIKE '%最佳填词奖%' and 获奖人及作品 like '%、%') \union all \select 奖项名称,substr(获奖人及作品,instr(获奖人及作品,'、',-1,1)+1) as 获奖人及作品 \from (select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'《',-1,1)-1) as 获奖人及作品 \from (select * from 获奖名单 t where 奖项名称 LIKE '%最佳填词奖%'and 获奖人及作品 LIKE '%、%'))) \group by 获奖人及作品 order by 次数 desc,获奖人及作品 DESC)"# pandas读出“次数”中值最大值data_yticks = pd.read_sql(sql_yticks,engine) # 值类型转换 int_ticks = data_yticks["MAX(次数)"].astype("int") # print(type(int_ticks)) # 生成y轴标签yticks = list(range(1,int(int_ticks)+1,1)) #画图,直方图,x轴标签为列“获奖名单”ax = df.plot(x='获奖人及作品', kind="bar", title='最佳填词奖', yticks=yticks,color='red')ax.set_ylabel('获奖次数') #设置Y轴名称ax.set_xlabel('名字') #设置X轴名称ax.legend(loc='upper right') #设置图例的位置plt.gcf().subplots_adjust( bottom=0.2) #图形居画布边距#保存为图片,也可保存为pdfplt.savefig('最佳填词奖.png', dpi=300)
输出
七、最佳编曲奖获奖次数统计
#获奖名单,最佳编曲奖
def bianqu_huojiangmingdan(): #查询获取数据用sql语句,不要分号,表名如果是英文要小写sql = "select 获奖人及作品, count(*) as 次数 from \(select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'《',-1,1)-1) as 获奖人及作品 \from (select * from 获奖名单 t where 奖项名称 LIKE '%最佳编曲奖%'and 获奖人及作品 not LIKE '%、%') \union all \select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'、',1,1)-1) as 获奖人及作品 \from (select * from 获奖名单 t where 奖项名称 LIKE '%最佳编曲奖%' and 获奖人及作品 like '%、%')\union all \select 奖项名称,substr(获奖人及作品,instr(获奖人及作品,'、',-1,1)+1) as 获奖人及作品 \from (select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'《',-1,1)-1) as 获奖人及作品 \from (select * from 获奖名单 t where 奖项名称 LIKE '%最佳编曲奖%'and 获奖人及作品 LIKE '%、%'))) \group by 获奖人及作品 order by 次数 desc,获奖人及作品 DESC"print("从数据库读取前------------------------------")#执行sql语句,从数据库取出数据m_data = pd.read_sql(sql,engine)# 取出的数据只保留前20行df = m_data[0:20]# print('最佳编曲奖',df) # SQL选出“次数”中值最大值,作为y轴标签最大值sql_yticks = "select max(次数) from \(select 获奖人及作品, count(*) as 次数 from \(select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'《',-1,1)-1) as 获奖人及作品 \from (select * from 获奖名单 t where 奖项名称 LIKE '%最佳编曲奖%'and 获奖人及作品 not LIKE '%、%') \union all \select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'、',1,1)-1) as 获奖人及作品 \from (select * from 获奖名单 t where 奖项名称 LIKE '%最佳编曲奖%' and 获奖人及作品 like '%、%')\union all \select 奖项名称,substr(获奖人及作品,instr(获奖人及作品,'、',-1,1)+1) as 获奖人及作品 \from (select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'《',-1,1)-1) as 获奖人及作品 \from (select * from 获奖名单 t where 奖项名称 LIKE '%最佳编曲奖%'and 获奖人及作品 LIKE '%、%'))) \group by 获奖人及作品 order by 次数 desc,获奖人及作品 DESC)"# pandas读出“次数”中值最大值data_yticks = pd.read_sql(sql_yticks,engine) # 值类型转换 int_ticks = data_yticks["MAX(次数)"].astype("int") # print(type(int_ticks)) # 生成y轴标签yticks = list(range(1,int(int_ticks)+1,1)) #画图,直方图,x轴标签为列“获奖名单”ax = df.plot(x='获奖人及作品', kind="bar", title='最佳编曲奖', yticks=yticks,color='red')ax.set_ylabel('获奖次数') #设置Y轴名称ax.set_xlabel('名字') #设置X轴名称ax.legend(loc='upper right') #设置图例的位置plt.gcf().subplots_adjust( bottom=0.2) #图形居画布边距#保存为图片,也可保存为pdfplt.savefig('最佳编曲奖.png', dpi=300)
输出
八、总数统计(包含所有奖项,不局仅于前面列的七个奖项)
#获奖名单,总数统计(包含所有奖项)
def total_huojiangmingdan(): #查询获取数据用sql语句,不要分号,表名如果是英文要小写sql = "select 获奖人及作品, count(*) as 次数 from \(SELECT * FROM\(select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'《',-1,1)-1) as 获奖人及作品 \from (select * from 获奖名单 t where 获奖人及作品 not LIKE '%、%' and 获奖人及作品 LIKE '%》%'))\WHERE 获奖人及作品 not like '%:%' and 获奖人及作品 not like '%.%' and 获奖人及作品 not like '%《%'\UNION ALL\SELECT * FROM\(select 奖项名称,substr(获奖人及作品,instr(获奖人及作品,'》',-1,1)+1) as 获奖人及作品 \from (select * from 获奖名单 t where 获奖人及作品 not LIKE '%、%' and 获奖人及作品 LIKE '%》%'))\WHERE 获奖人及作品 not like '%:%' and 获奖人及作品 not like '%.%'\UNION ALL\select 奖项名称,substr(获奖人及作品,instr(获奖人及作品,':',-1,1)+1) as 获奖人及作品\from (select * from 获奖名单 t where 获奖人及作品 not LIKE '%、%' and 获奖人及作品 not LIKE '%》%' and 获奖人及作品 LIKE '%:%')\UNION ALL\select 奖项名称, 获奖人及作品 from 获奖名单 t where 获奖人及作品 not LIKE '%、%' and 获奖人及作品 not LIKE '%》%' and 获奖人及作品 not LIKE '%:%'\UNION ALL\select * from(\select 奖项名称,substr(获奖人及作品,instr(获奖人及作品,'、',-1,1)+1) as 获奖人及作品\FROM (select 奖项名称,substr(获奖人及作品,instr(获奖人及作品,'》',-1,1)+1) as 获奖人及作品\FROM (select * from 获奖名单 t where 获奖人及作品 LIKE '%、%' and 获奖人及作品 LIKE '%》%')))\WHERE 获奖人及作品 is not null\UNION ALL\select * from(\select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'、',-1,1)-1) as 获奖人及作品\FROM (select 奖项名称,substr(获奖人及作品,instr(获奖人及作品,'》',-1,1)+1) as 获奖人及作品\FROM (select * from 获奖名单 t where 获奖人及作品 LIKE '%、%' and 获奖人及作品 LIKE '%》%')))\WHERE 获奖人及作品 is not null\UNION ALL\select 奖项名称, 获奖人及作品 from 获奖名单 t where 获奖人及作品 LIKE '%、%' and 获奖人及作品 not LIKE '%》%' and 获奖人及作品 LIKE '%:%'\UNION ALL\select 奖项名称, 获奖人及作品 from 获奖名单 t where 获奖人及作品 LIKE '%、%' and 获奖人及作品 not LIKE '%》%' and 获奖人及作品 not LIKE '%:%')\group by 获奖人及作品 order by 次数 desc,获奖人及作品 DESC"print("从数据库读取前------------------------------")#执行sql语句,从数据库取出数据m_data = pd.read_sql(sql,engine)# 取出的数据只保留前20行df = m_data[0:20]# print('总数统计(包含所有奖项)',df) # SQL选出“次数”中值最大值,作为y轴标签最大值sql_yticks = "select max(次数) from \(select 获奖人及作品, count(*) as 次数 from \(SELECT * FROM\(select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'《',-1,1)-1) as 获奖人及作品 \from (select * from 获奖名单 t where 获奖人及作品 not LIKE '%、%' and 获奖人及作品 LIKE '%》%'))\WHERE 获奖人及作品 not like '%:%' and 获奖人及作品 not like '%.%' and 获奖人及作品 not like '%《%'\UNION ALL\SELECT * FROM\(select 奖项名称,substr(获奖人及作品,instr(获奖人及作品,'》',-1,1)+1) as 获奖人及作品 \from (select * from 获奖名单 t where 获奖人及作品 not LIKE '%、%' and 获奖人及作品 LIKE '%》%'))\WHERE 获奖人及作品 not like '%:%' and 获奖人及作品 not like '%.%'\UNION ALL\select 奖项名称,substr(获奖人及作品,instr(获奖人及作品,':',-1,1)+1) as 获奖人及作品\from (select * from 获奖名单 t where 获奖人及作品 not LIKE '%、%' and 获奖人及作品 not LIKE '%》%' and 获奖人及作品 LIKE '%:%')\UNION ALL\select 奖项名称, 获奖人及作品 from 获奖名单 t where 获奖人及作品 not LIKE '%、%' and 获奖人及作品 not LIKE '%》%' and 获奖人及作品 not LIKE '%:%'\UNION ALL\select * from(\select 奖项名称,substr(获奖人及作品,instr(获奖人及作品,'、',-1,1)+1) as 获奖人及作品\FROM (select 奖项名称,substr(获奖人及作品,instr(获奖人及作品,'》',-1,1)+1) as 获奖人及作品\FROM (select * from 获奖名单 t where 获奖人及作品 LIKE '%、%' and 获奖人及作品 LIKE '%》%')))\WHERE 获奖人及作品 is not null\UNION ALL\select * from(\select 奖项名称,substr(获奖人及作品,1,instr(获奖人及作品,'、',-1,1)-1) as 获奖人及作品\FROM (select 奖项名称,substr(获奖人及作品,instr(获奖人及作品,'》',-1,1)+1) as 获奖人及作品\FROM (select * from 获奖名单 t where 获奖人及作品 LIKE '%、%' and 获奖人及作品 LIKE '%》%')))\WHERE 获奖人及作品 is not null\UNION ALL\select 奖项名称, 获奖人及作品 from 获奖名单 t where 获奖人及作品 LIKE '%、%' and 获奖人及作品 not LIKE '%》%' and 获奖人及作品 LIKE '%:%'\UNION ALL\select 奖项名称, 获奖人及作品 from 获奖名单 t where 获奖人及作品 LIKE '%、%' and 获奖人及作品 not LIKE '%》%' and 获奖人及作品 not LIKE '%:%')\group by 获奖人及作品 order by 次数 desc,获奖人及作品 DESC)"# pandas读出“次数”中值最大值data_yticks = pd.read_sql(sql_yticks,engine) # 值类型转换 int_ticks = data_yticks["MAX(次数)"].astype("int") # print(type(int_ticks)) # 生成y轴标签yticks = list(range(1,int(int_ticks)+1,1)) #画图,直方图,x轴标签为列“获奖名单”指定x轴为'获奖人及作品',颜色为'red',尺寸为figsize=(10,10)ax = df.plot(x='获奖人及作品', kind="bar", title='总数统计(包含所有奖项)', yticks=yticks,color='red',figsize=(10,10))ax.set_ylabel('获奖次数') #设置Y轴名称ax.set_xlabel('名字') #设置X轴名称ax.legend(loc='upper right') #设置图例的位置plt.gcf().subplots_adjust( bottom=0.2) #图形居画布边距 #保存为图片,也可保存为pdfplt.savefig('总数统计(包含所有奖项).png', dpi=900)
输出