python爬虫豆瓣读书top250+数据清洗+数据库+Java后端开发+Echarts数据可视化(六)

今天实现各出版社出版图书占比、每年图书出版数量、评价人数top10的图书名称的数据可视化效果。具体不详细讲了,可参考(四)https://blog.youkuaiyun.com/qq_45804925/article/details/113117424

1 各出版社出版图书占比

在这里插入图片描述
这个的图片太大了,没有截完图。

1.1 在cn.geo.doubanbook.entity包下创建Publisher.java类

package cn.geo.doubanbook.entity;

import java.io.Serializable;
/**
 * 各出版社出版图书占比
 * @author SGG
 *
 */
public class Publisher implements Serializable{
   
   

	private static final long serialVersionUID = 1L;
	
	private String publisher;
	private Integer num;

	public Publisher() {
   
    }
	/**
	 * @param publisher
	 * @param num
	 */
	public Publisher(String publisher, Integer num) {
   
   
		super();
		this.publisher = publisher;
		this.num = num;
	}
	@Override
	public String toString() {
   
   
		return "Publisher [publisher=" + publisher + ", num=" + num + "]";
	}
	@Override
	public int hashCode() {
   
   
		final int prime = 31;
		int result = 1;
		result = prime * result + ((num == null) ? 0 : num.hashCode());
		result = prime * result + ((publisher == null) ? 0 : publisher.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
   
   
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Publisher other = (Publisher) obj;
		if (num == null) {
   
   
			if (other.num != null)
				return false;
		} else if (!num.equals(other.num))
			return false;
		if (publisher == null) {
   
   
			if (other.publisher != null)
				return false;
		} else if (!publisher.equals(other.publisher))
			return false;
		return true;
	}
	public String getPublisher() {
   
   
		return publisher;
	}
	public void setPublisher(String publisher) {
   
   
		this.publisher = publisher;
	}
	public Integer getNum() {
   
   
		return num;
	}
	public void setNum(Integer num) {
   
   
		this.num = num;
	}
}

1.2 在cn.geo.doubanbook.dao包下创建PublisherDAO.java类

package cn.geo.doubanbook.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import cn.geo.doubanbook.entity.Publisher;
import cn.geo.doubanbook.util.DBUtils;

/**
 * 各出版社出版图书占比的持久层类
 * @author SGG
 *
 */
public class PublisherDAO {
   
   

	/**
	 * 查询各出版社出版图书占比
	 * @return
	 * @throws SQLException
	 */
	public List<Publisher> listPublisher() throws SQLException {
   
   
		List<Publisher> list = new ArrayList<Publisher>(248);
		
		// 从数据库连接池获取连接
		Connection conn = DBUtils.getConn();
		// 声明SQL的执行器
		Statement st = conn.createStatement();
		// 执行SQL语句
		String sql = "select * from book_publisher_num";
		ResultSet rs = st.executeQuery(sql);
		// 对结果集进行操作
		while(rs.next()) {
   
   
			// 获取该行数据中的指定字段
			String publisher = rs.getString("publisher");
			int num = rs.getInt("num");
			// 创建Publisher对象,封装一行数据
			Publisher pn= new Publisher(publisher, num);
			// 将Publisher对象 保存到集合中
			list.add(pn);
		}
		// 关闭连接释放资源
		st.close();
		conn.close();
		
		return list;	
	}
}

1.3 持久层测试用例开发

package cn.geo.doubanbook.dao;

import java.sql.SQLException;
import java.util.List;

import org.junit.Test;

import cn.geo.doubanbook.dao.PublisherDAO;
import cn.geo.doubanbook.entity.Publisher;

public class PublisherDAOTest {
   
   

	PublisherDAO dao = new PublisherDAO();
	/**
	 * 测试PublisherDAO中的listPublisher方法中的方法
	 * @throws SQLException
	 */
	@Test
	public void listPublisher() throws SQLException{
   
   
		List<Publisher> list = dao.listPublisher();
		list.forEach(item->System.out.println(item));
	}
}

1.4 在cn.geo.doubanbook.entity包下创建PublisherVO.java类

package cn.geo.doubanbook.entity;

import java.io.Serializable;
import java.util.List;

public class PublisherVO implements Serializable{
   
   

	private static final long serialVersionUID = -6643160296906955532L;
	
	private List<String> xData;	
	private List<Integer> yData;
	private List<String> pieData;

	public PublisherVO() {
   
   }
	/**
	 * @param xData
	 * @param yData
	 * @param pieData
	 */
	public PublisherVO(List<String> xData, List<Integer> yData, List<String> pieData) {
   
   
		super();
		this.xData = xData;
		this.yData = yData;
		this.pieData = pieData;
	}
	@Override
	public String toString() {
   
   
		return "PublisherVO [xData=" + xData + ", yData=" + yData + ", pieData=" + pieData + "]";
	}
	@Override
	public int hashCode() {
   
   
		final int prime = 31;
		int result = 1;
		result = prime * result + ((pieData == null) ? 0 : pieData.hashCode());
		result = prime * result + ((xData == null) ? 0 : xData.hashCode());
		result = prime * result + ((yData == null) ? 0 : yData.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
   
   
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		PublisherVO other = (PublisherVO) obj;
		if (pieData == null) {
   
   
			if (other.pieData != null)
				return false;
		} else if (!pieData.equals(other.pieData))
			return false;
		if (xData == null) {
   
   
			if (other.xData != null)
				return false;
		} else if (!xData.equals(other.xData))
			return false;
		if (yData == null) {
   
   
			if (other.yData != null)
				return false;
		} else if (!yData.equals(other.yData))
			return false;
		return true;
	}
	public List<String> getxData() {
   
   
		return xData;
	}
	public void setxData(List<String> xData) {
   
   
		this.xData = xData;
	}
	public List<Integer> getyData() {
   
   
		return yData;
	}
	public void setyData(List<Integer> yData) {
   
   
		this.yData = yData;
	}
	public List<String> getPieData() {
   
   
		return pieData;
	}
	public void setPieData(List<String> pieData) {
   
   
		this.pieData = pieData;
	}
}

1.5 在cn.geo.doubanbook.service包下创建PublisherService.java类

package cn.geo.doubanbook.service;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import cn.geo.doubanbook.dao.PublisherDAO;
import cn.geo.doubanbook.entity.Publisher;
import cn.geo.doubanbook.entity.PublisherVO;

public class PublisherService {
   
   

	private PublisherDAO dao = new PublisherDAO();
	public PublisherVO findPublisher() {
   
   
		// 调用持久层方法,查询所需数据
		List<Publisher> list = null;
		try {
   
   
			list = dao.listPublisher();
		} catch (SQLException e) {
   
   
			e.printStackTrace();
			return null;
		}
		// 创建xData,保存x轴数据
		List<String> xData 
### 回答1: 豆瓣电影是众所周知的一个知名电影评分网站,其中的TOP250电影榜单更是备受关注。爬取这个榜单的数据可以帮助我们更好地了解电影市场和评价,数据可视化方面可以更好地呈现这些数据。 首先,我们可以使用Python程序编爬虫,抓取豆瓣电影TOP250的数据。我们可以通过分析网页源代码,选取需要的信息,例如电影名称、上映时间豆瓣评分、评分人数、电影类型、导演、演员等信息。然后,将所有信息保存在CSV文件中。我们可以使用BeautifulSoup模块或Scrapy框架来实现爬虫程序的编。 接下来,我们可以使用Python数据可视化工具来对这些数据进行可视化处理。例如,我们可以使用matplotlib或Seaborn绘制电影评分的统计图表和线型图,了解每部电影评分的分布情况、评分人数的多寡、豆瓣评分的走向等。另外,我们也可以绘制散点图或热图,从电影类型、上映时间等角度分析不同类型电影的评分情况。我们还可以利用词云图工具呈现电影的标签云图,更直观地展示豆瓣用户对电影的评价。 总的来说,我们可以使用Python爬虫数据可视化工具来爬取豆瓣电影TOP250榜单的数据,并且将数据以图表、统计、云图等形式进行可视化分析,从而更好地了解电影市场和评价。 ### 回答2: 豆瓣电影Top250是电影爱好者们都很熟悉的一个电影排行榜。为了更好地了解这个排行榜的情况,我们可以利用Python爬取豆瓣电影Top250上的电影信息,并将数据制作成可视化图表,以更直观地呈现数据。 首先,我们需要使用Python爬虫技术获取豆瓣电影Top250中每部电影的信息。一般来说,爬取网页数据需要用到一些第三方爬虫库,比如Requests和BeautifulSoup。使用Requests库可以向豆瓣服务器发送请求,获取Top250的网页HTML文件。接着,我们可以使用BeautifulSoup库解析HTML文件,从中获取每一部电影的名称、评分、演员、导演、简介等信息。爬取完毕后,将获取到的数据存储在MySQL或者MongoDB数据库中,方便后续对数据的处理和分析。 接下来,我们需要将获取到的数据进行数据可视化。我们可以使用Python中的Matplotlib或者Seaborn等数据可视化库来制作可视化图表。比如,我们可以生成柱状图、饼图、折线图等多种图表类型,展现Top250中电影各类别的数量分布、电影评分的分布情况、导演、演员等数据的贡献度等信息。 总之,通过Python爬取豆瓣电影Top250数据,并利用数据可视化技术制作图表,我们可以更好地了解电影市场的情况,从中找到一些有用的数据洞察点,对后续的电影市场分析等工作提供有力支持。 ### 回答3: 随着互联网的普及和数据挖掘的发展,数据可视化已经成为当今最流行的技术之一。而Python语言的出现,极大地促进了数据可视化技术的发展,并且能够使数据可视化更加高效、便捷。 Python爬取豆瓣电影Top250数据可以使用爬虫框架Scrapy,通过对网页的解析和内容抓取,将所需数据存入数据集中。数据集中存储了每个电影的名称、导演、主演、类型、上映时间、评价人数、评分等信息,这些数据可以通过Python数据可视化工具如Matplotlib、Pandas等进行可视化处理。 通过数据可视化可以得到丰富的数据分析和呈现,如: 1.不同类型电影的数量 通过Python可视化工具可以得到不同类型电影的数量,并且可以使用饼图、柱状图等图表进行图像展示,帮助人们更好地了解豆瓣Top250电影中各类型的分布情况。 2.电影排名及评价情况 通过Python爬虫框架获取的豆瓣Top250电影可以进行排名展示及评价等数据的分析。可视化工具可以帮助我们通过散点图、折线图等形式直观地了解电影排名及评价情况。 3.电影时长对评分的影响 通过Python可视化工具可视化处理电影时长对评分的影响。可以得出电影时长对于电影评分存在明显影响的结论,以饼图的形式将主观评价高的电影与电影时长进行对比。 Python爬取豆瓣电影Top250,通过数据可视化工具可以使我们直观地了解到豆瓣Top250电影的分类情况、排名和评价等数据信息,同时,也可以了解到电影时长等因素对电影评价的影响,这对我们对电影的分析与推荐可以起到积极的作用,有助于我们更好地了解电影行业的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值