Python数据分析之——数据可视化(折线图)

部署运行你感兴趣的模型镜像
matplotlib的pyplot子库提供了和matlab类似的绘图API,方便用户快速绘制2D图表。
首先我们先来看看效果图:

然后,是数据:

接着是代码:
#coding:utf-8
import numpy as np
import matplotlib.pyplot as plt
import MySQLdb

sql = 'SELECT dt_date,nm_watch FROM ******* WHERE vc_name = "速度与激情8" ORDER BY dt_create DESC LIMIT 0, 10'
db = MySQLdb.connect(***********)
db.set_character_set('utf8')
cursor = db.cursor()
#执行sql语句
data_list = [i for i in cursor.fetchmany(cursor.execute((sql)))]
db.close()
time_list = []
message_list = []
for i,j in data_list:
    # print str(i)[-8:]     #因为数据i表示的是时间,而时间完整值是类似于2017-08-04 15:59:08这样的数据,我们只取其中时分秒并去掉“:”
    # print j
    time_list.append((str(i)[-8:]).replace(':',''))
    message_list.append(j)


x = time_list
y = message_list

#设置画布像素
plt.figure(figsize=(8,6))
#给X、Y轴赋值
plt.plot(x,y,"r",linewidth=1)
#设置X、Y轴名称
plt.xlabel("X")
plt.ylabel("Y")

plt.show()

关于一些参数:
plt.xlabel()
plt.ylabel()
plt.title()
plt.ylim()
plt.legend()

xlabel : 设置X轴的文字
ylabel : 设置Y轴的文字
title : 设置图表的标题
ylim : 设置Y轴的范围
legend : 显示图示

如果大家想系统的学习的话,这有一个链接分享给大家,是一本叫《用python做科学计算》的书:
http://old.sebug.net/paper/books/scipydoc/matplotlib_intro.html



您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>好的,用户想用Python对小说网的数据进行可视化,我需要提供具体的方法和步骤。首先,我得回忆一下之前用户提到的引用内容,里面提到了数据获取、存储到csv和MySQL,以及使用Echarts和Flask进行可视化分析。用户可能已经有一定的爬虫基础,但需要指导如何将数据转化为可视化结果。 首先,数据获取部分,用户可能需要从小说网站爬取数据,比如书名、作者、类型、击量、评分、字数、更新时间等。引用1和4都提到了使用爬虫获取数据,并存储到csv或MySQL。所以第一步应该是数据采集,这部分需要确保数据清洗,处理缺失值和重复数据。 接下来是数据存储。用户可能需要将数据保存到csv文件或者MySQL数据库里,方便后续读取。引用1和2都提到了csv和MySQL的使用,所以这里要说明两种存储方式,并给出示例代码,比如用pandas保存csv,用pymysql连接数据库。 然后是数据分析部分,用户可能需要统计不同类型小说的数量、作者作品数量、评分分布等。引用3中的代码示例展示了读取csv文件和处理数据的方法,可以引用这个来说明如何用pandas进行数据统计。 最重要的部分是数据可视化。用户需要知道用什么库来生成图表。Matplotlib和Seaborn适合静态图表,而Pyecharts或Plotly可以生成交互式图表,引用2和4提到使用Echarts,Pyecharts是基于Echarts的,所以推荐使用Pyecharts。需要给出具体例子,比如饼图展示小说类型分布,柱状图显示热门作者,折线图展示更新时间趋势等。此外,词云图也是常见的可视化方式,可以用WordCloud库生成。 另外,可能需要构建可视化系统,比如用Flask搭建Web应用,结合Echarts展示图表。引用2和4提到了Flask和Echarts的结合,这部分可以作为进阶建议,如果用户需要更复杂的展示方式。 最后,要确保代码示例正确,比如读取数据、处理数据、生成图表的步骤,并提醒用户安装必要的库。同时,注意用户可能遇到的问题,比如编码错误、数据清洗问题,给出相应的解决方法,比如指定编码格式或处理缺失值。 总结步骤应该是:数据采集→清洗存储→分析统计→可视化展示→系统集成(可选)。每个步骤给出具体的方法和示例代码,参考用户提供的引用内容,确保回答符合他们的需求,并帮助用户一步步实现目标。</think>### Python小说网站数据可视化方法分步说明 根据您提供的引用资料和需求,以下是完整的实现方法(包含数据采集到可视化全流程): 一、数据采集阶段 1. 使用Scrapy框架采集基础数据: ```python import scrapy class NovelSpider(scrapy.Spider): name = 'novel' start_urls = ['http://www.xiaoshuowang.com/rank'] def parse(self, response): for book in response.css('.book-item'): yield { 'title': book.css('h3::text').get(), 'author': book.css('.author::text').get(), 'category': book.css('.cat::text').get(), 'word_count': book.css('.count::text').re_first(r'\d+'), 'rating': book.css('.score::text').get(), 'update_time': book.css('.time::attr(title)').get() } ``` > 需处理反爬机制(User-Agent轮换、请求间隔设置)[^4] 二、数据存储阶段 1. CSV存储(适合小规模数据): ```python import pandas as pd df = pd.DataFrame(data_list) df.to_csv('novel_data.csv', index=False, encoding='utf-8-sig') ``` 2. MySQL存储(推荐大数据量): ```python from sqlalchemy import create_engine engine = create_engine('mysql+pymysql://user:pass@localhost/novel_db') df.to_sql('novel_data', con=engine, if_exists='append', index=False) ``` > 注意处理字段类型映射和字符编码[^2] 三、数据分析阶段 ```python # 读取数据示例 df = pd.read_csv('novel_data.csv', parse_dates=['update_time']) # 数据预处理 df['word_count'] = df['word_count'].astype(int) df['rating'] = pd.to_numeric(df['rating'], errors='coerce') df = df.dropna(subset=['category']) # 清除空值 ``` 四、可视化实现 1. 类型分布(环形图): ```python from pyecharts.charts import Pie type_counts = df['category'].value_counts() pie = Pie() pie.add("", [list(z) for z in zip(type_counts.index, type_counts.values)], radius=["40%", "75%"]) pie.set_global_opts(title_opts={"text": "小说类型分布"}).render("type_pie.html") ``` 2. 时间序列分析(动态折线图): ```python import matplotlib.pyplot as plt plt.figure(figsize=(12,6)) df.resample('M', on='update_time')['title'].count().plot() plt.title('作品更新时间分布') plt.savefig('time_trend.png', dpi=300) ``` 3. 多维分析(热力图): ```python import seaborn as sns cross_table = pd.crosstab(df['category'], df['rating_level']) sns.heatmap(cross_table, annot=True, fmt='d').get_figure().savefig('heatmap.png') ``` 五、高级可视化系统搭建(Flask+ECharts) ```python # 后台接口示例 from flask import Flask, render_template app = Flask(__name__) @app.route('/type-distribution') def type_dist(): data = df['category'].value_counts().to_dict() return jsonify(data) # 前端通过ajax获取数据后使用ECharts渲染 ``` 六、常见问题解决方案 1. 中文乱码问题: ```python plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字体 plt.rcParams['axes.unicode_minus'] = False ``` 2. 大数据量优化: - 使用Dask替代Pandas处理超过内存的数据集 - 对MySQL查询添加索引加速 - 采用增量更新策略[^4] 完整技术栈建议: - 采集层:Scrapy + Selenium(应对动态渲染) - 存储层:MySQL + Redis(缓存热门数据) - 分析层:Pandas + Numpy - 可视化层:Pyecharts + Matplotlib + Flask - 部署层:Docker + Nginx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值