python学习之第二十天(图表展示数据)

1.python数据分析库有哪些
2.python绘制图表库有哪些
3.echarts绘制饼状图 柱状图 折线图
4.pyecharts绘制饼状图 柱状图 折线图
5.动态生成sql语句
6.如何获取一个对象的类名
7.基于sql的数据分析
8.爬虫和反爬虫和反反爬虫
分布式爬虫(scrapy-redis)案例参考2019-8-21笔记

1.python数据分析库有哪些

# python的数据分析库
# pandas https://www.yiibai.com/pandas/python_pandas_quick_start.html
# numpy
# import pandas as pd
# import numpy as np
#
# pd.read_clipboard()
# pd.read_csv()
# pd.read_excel()
# pd.read_html()
# pd.read_json()

2.python绘制图表库有哪些

# python的图表绘制
# matplotlib  https://morvanzhou.github.io/tutorials/data-manipulation/plt/1-1-why/
# echarts 属于百度公司  https://echarts.baidu.com/
# pyecharts 用python对echarts做了个封装 http://pyecharts.herokuapp.com/
# turtle https://www.cnblogs.com/zxysaigao/p/8465839.html
# seaborn  http://seaborn.pydata.org/examples/many_facets.html
# snapshot

3.echarts绘制饼状图 柱状图 折线图

echarts官网

echarts使用步骤
第一步.
在这里插入图片描述
用第四种 进入cdnis

在这里插入图片描述
粘到head中
在这里插入图片描述
第二步:

在这里插入图片描述
第三步

在这里插入图片描述
下面是两个实例
绘制柱状图:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--  1.引用js -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/4.2.1/echarts.min.js"></script>
</head>
<body>
<!-- 2.为 ECharts 准备一个具备大小(宽高)的 DOM -->
<div id="main" style="width: 600px;height:400px;"></div>
</body>
<script type="text/javascript">
    // 基于准备好的dom,初始化echarts实例
    var myChart = echarts.init(document.getElementById('main'));
    // 指定图表的配置项和数据
    var option = {
        title: {
            text: '工作数量对比'
        },
        dataset: {
            source: [
                ['product', 'python', 'php'],
                ['一月', 43.3, 85.8],
                ['二月', 83.1, 73.4],
                ['三月', 86.4, 65.2],
            ]
        },
        tooltip: {},
        legend: {},
        xAxis: {type: 'category'},
        yAxis: {},
        series: [
            {type: 'bar'},
            {type: 'bar'},
        ]
    };
    // 使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);
</script>
</html>

绘制折线图

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/4.2.1/echarts.min.js"
            integrity="sha256-XNiBJGZuErA+MsbKwxuTqNMimobZMsVS79SkTUroRz4=" crossorigin="anonymous"></script>
</head>
<body>
<div id="main" style="width: 800px;height:600px;"></div>
</body>
<script type="text/javascript">
    var myChart = echarts.init(document.getElementById('main'));
    var option = option = {
        title: {
            text: '折线图堆叠'
        },
        tooltip: {
            trigger: 'axis'
        },
        legend: {
            data: ['python', 'php', 'java']
        },
        grid: {
            left: '3%',
            right: '4%',
            bottom: '3%',
            containLabel: true
        },
        toolbox: {
            feature: {
                saveAsImage: {}
            }
        },
        xAxis: {
            type: 'category',
            boundaryGap: false,
            data: ['周一', '周二', '周三']
        },
        yAxis: {
            type: 'value'
        },
        series: [
            {
                name: 'python',
                type: 'line',
                stack: '总量',
                data: [120, 132, 101]
            },
            {
                name: 'php',
                type: 'line',
                stack: '总量',
                data: [220, 182, 191]
            },
            {
                name: 'java',
                type: 'line',
                stack: '总量',
                data: [150, 232, 201]
            }
        ]
    };
    // 使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);
</script>
</html>

4.pyecharts绘制饼状图 柱状图 折线图

首先安装pyecharts
pip install pyecharts==0.5.5

以下是三个实例

柱状图:


from pyecharts import Bar
bar =Bar("工作数量对比", "python和php")
bar.add("python", ["1月", "2月", "3月"], [5, 20, 36])
bar.add("php", ["1月", "2月", "3月"], [5, 20, 36])
# bar.show_config()
bar.render("py柱状图.html")

折线图

扫描二维码关注公众号,回复: 11409104 查看本文章
from pyecharts import Line

attr = ["1月", "2月", "3月", "4月"]
v1 = [5, 20, 36, 10]
v2 = [55, 60, 16, 20]
v3 = [10, 50, 40, 90]
line = Line("折线图示例")
line.add("python", attr, v1)
line.add("php", attr, v2)
line.add("java", attr, v3)
line.render("py折线图.html")

饼状图

from pyecharts import Pie
attr =["python", "php", "java"]
v1 =[100, 120, 60]
pie = Pie("饼图示例")
pie.add("", attr, v1, is_label_show=True)
pie.render("py饼状图.html")

5.动态生成sql语句

import sqlite3


class SqlitePipeline(object):
    def __init__(self, db_name):
        if not db_name:
            db_name = "db"
        self.db = sqlite3.connect(f"{db_name}.sqlite")
        self.cursor = self.db.cursor()

    
    # 加载配置,获取custom_settings设置的字段,这里获取的是DB_NAME
    
    @classmethod
    def from_settings(cls, settings):
        db_name = settings['DB_NAME']
        return cls(db_name)

    def close_spider(self, spider):
        self.cursor.close()
        self.cursor = None
        self.db.close()
        self.db = None

    def process_item(self, item, spider):
        create_table_last_part = ""
        lie_list = []
        value_list = []
        for key, value in item.items():
            if isinstance(value, int):
                value_type = "INTEGER"
            elif isinstance(value, str):
                value_type = "VARCHAR(255)"
            elif isinstance(value, float):
                value_type = "FLOAT"
            elif isinstance(value, list):
                value_type = "VARCHAR(255)"
                value = value[0]
            if "url" in key:
                value_type += " UNIQUE"
            create_table_last_part += f"{key} {value_type},"
            lie_list.append(key)
            value_list.append(value)
        sql1 = f"""
                    CREATE TABLE IF NOT EXISTS {type(item).__name__} (
                        id INTEGER PRIMARY KEY  AUTOINCREMENT,
                        {create_table_last_part[:-1]}
                    )
                """
        self.cursor.execute(sql1)
        try:
            sql1 = f"""INSERT INTO {type(item).__name__} ({",".join(lie_list)}) VALUES ({("?,"*len(lie_list))[:-1]})"""
            self.cursor.execute(sql1, value_list)
            self.db.commit()
        except Exception as e:
            print("插入失败!数据重复",e)
        return item

6.如何获取一个对象的类名

在这里插入图片描述

7.基于sql的数据分析

import sqlite3

db = sqlite3.connect("job51.sqlite")
cursor = db.cursor()

# 统计数据中有多少个城市
sql1 = """
SELECT job_city FROM Job51Item GROUP BY job_city;
"""
# 统计工作数量
sql1 = """
SELECT COUNT(*) FROM Job51Item;
"""
# 统计数据中每个城市有多少工作数量
sql1 = """
SELECT COUNT(*), job_city FROM Job51Item  GROUP BY job_city;
"""
# 统计某个城市的工作种类和其对应的数量,以上海为例
sql1 = """
SELECT COUNT(*), job_city, job_type FROM Job51Item WHERE job_city='上海' GROUP BY job_type ;
"""
# 统计上海c++每天的岗位数量变化
sql1 = """
SELECT COUNT(*), job_city, job_type,job_date FROM Job51Item WHERE job_city='上海' AND job_type='c++' GROUP BY job_date ;
"""
# 用柱状图表示每个城市每个语言工作数量的对比情况
#

cursor.execute(sql1)
result = cursor.fetchall()
print(result)

cursor.close()
db.close()
cursor=None
db=None

8.爬虫和反爬虫和反反爬虫

# 爬虫:工程师写脚本去采集对方的数据的行为
# 反爬虫:对方想尽办法不让我用脚本采集的行为
# 反反爬虫:工程师想尽办法突破对方的设置采集了对方数据的行为



# 爬虫必将胜利,不过是时间关系

# 反爬虫技巧
# 1. 检测User-Agent是否为浏览器
# 2. 检测IP的访问频率
# 3. 检测Cookie中的字段
# Cookie由服务器生成,浏览器存储
# 4. 验证码(随机)
# 5. 参数进行js动态加密
# 6. 字体加密

# 反反爬虫技巧
# 1. 手动构造请求头,设置User-Agent
# 2. 设置Download_Delay=2
# 3. 禁用Cookie/手动粘贴Cookie访问
# 4. 捕获验证码的条件(云打码、OCR光学识别、手动验证、github搜索破解方式)
# 验证码类型
# 1) 图片滑动  2)数字字母混合   3)输入表达式结果
# 4) 点击对应图案 5) 类似12306的验证码
# 5. 分析网页,找到js文件,使用pyexecjs模拟js加密
# 6. 找到对应的ttf文件,研究编码


# 爬虫技巧
# 1. 爬取app 比 爬取web 要简单
# 2. 如果请求(http/https)看不到,则可能是基于socket的请求
# 3. 常用的抓包工具(charles/fiddler)只能抓取http/https
# wireshark可以抓取任意请求
# mitmproxy 抓取手机请求的框架
# 4. 模拟浏览器行为来抓取请求
# python:selenium
# nodejs: puppeteer
# 5. 可视化爬虫
# gerapy:分布式爬虫管理框架
# InfluxDb+Grafana
# 6. app安装包的反编译(安卓比苹果简单)

# 面试题
# 如果分布式爬虫中有两台电脑死机或没有爬虫,如何监控?
# 类似于点名,定时检索每台电脑是否存活
# 每台电脑定时通过redis发送特定消息证明电脑存活,否则报警


# 定时任务(time)

猜你喜欢

转载自blog.csdn.net/qq_41150890/article/details/99987302