韦德国际_韦德国际1946官方网站_韦德国际1946手机版
做最好的网站

从爬虫到数量可视化,Python完结数量可视化看怎

日期:2019-05-26编辑作者:韦德国际1946官方网站

昨天首固然的话一下怎么可视化来监督你的爬虫的景况。

Python数据可视化

写得一点也不细浅,前边会对数据深入分析专项论题开始展览深远。

图片 1

pyecharts 是一个用来生成 Echarts 图表的类库。
Echarts 是百度开源的贰个数码可视化 JS 库。首要用以数据可视化。

信任大家在跑爬虫的进度中,也会咋舌自身养的爬虫1分钟能够爬多少页面,多大的数据量,当然查询的措施精彩纷呈。明天自己来说一种可视化的艺术。

安装景况matplotlib

村办前边也说了猛烈提出使用Pycharm作为Python初学者的首要推荐IDE,主要照旧因为其庞大的插件功效,许多意况都能1键安装到位,像本文的matplotlib,numpy,requests等。
下边直接上效益图:

学学python爬虫有1段时间了,明日先拿智联招聘的北京集团数据练练手,并做一些数额解析,分享给大家。

安装

pyecharts 包容 Python贰 和 Python三。最近版本为 0.一.二

pip install pyecharts

有关爬虫数据在mongodb里的本子笔者写了2个得以热更新配置的本子,即增多了新的爬虫配置以往,不用重启程序,就可以获取刚刚增加的爬虫的情形数据。

绘图轻便的折丝图

一、数据获得

图片 2

入门

率先伊始来绘制你的第贰个图表

from pyecharts import Bar

bar = Bar("我的第一个图表", "这里是副标题")
bar.add("服装", ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"], [5, 20, 36, 10, 75, 90])
bar.show_config()
bar.render()

guide-0

Tip: 能够按左侧的下载按键将图片下载到地点

  • add()
    第二措施,用于增加图表的多少和设置各类配置项
  • show_config()
    从爬虫到数量可视化,Python完结数量可视化看怎么监督你的爬虫状态。打字与印刷输出图表的装有配置项
  • render()
    暗中认可将会在根目录下生成1个 render.html 的文本,协理 path 参数,设置文件保留地点,如 render(r"e:my_first_chart.html"),文件用浏览器展开。
    默许的编码类型为 UTF-八,在 Python三 中是没什么难点的,Python3对汉语的支撑好过多。不过在 Python第22中学,编码的拍卖是个很胸闷的主题材料,一时半刻没能找到完美的消除方法,最近只得通过文件编辑器自身开始展览一回编码,作者用的是 Visual Studio Code,先经过 Gbk 编码重新张开,然后再用 UTF-八重新保存,那样用浏览器张开的话就不会油然则生中文乱码难点了。

多数全数的图形类型都以那样绘制的:

  1. chart_name = Type() 先导化具体品种图表。
  2. add() 增添数码及布局项。
  3. render() 生成 .html 文件。

1.成品图

利用plot来绘制折线

import matplotlib.pyplot as plt

# 绘制折线图
squares = [1, 4, 9, 16, 25]
# plt.plot(squares, linewidth=5)  # 指定折线粗细,
# #plt.show();
#
# #修改标签文字和线条粗细
# plt.title("squre number", fontsize=24)
# plt.xlabel("Value", fontsize=14)
# plt.ylabel("square of value", fontsize=14)
# plt.tick_params(axis='both', labelsize=14)
# plt.show()

# 校正图形
input_values = [1, 2, 3, 4, 5]
plt.plot(input_values, squares, linewidth=5)
plt.show()

图片 3

折线图1.png

更动的职能图:

壹、爬虫思路

①首先找到东京集团列表页面 https://www.liepin.com/company/020-000/。
二是因为该页面最多显示拾0页,所以要分行当爬取,分行当未有超过十0页的了。
叁到手各行业页面包车型客车网站。
4对每贰个行业页面实行翻页,那样就曾经获取上海集团的装有页面。
伍再从那些页面中获得具备商家实际情况页的网址。
6对详细情况页进行分析获取到各厂家的详尽数据。

图形类型

因篇幅原因,这里只交给了各种图表类型的言传身教(代码 生成图表)。详细参数的牵线请参照他事他说加以考察项目 README.md 文档

图片 4 

应用scatter绘制散点图并安装样式

import matplotlib.pyplot as plt

# 简单的点
# plt.scatter(2, 4)
# plt.show()
#
# # 修改标签文字和线条粗细
plt.title("squre number", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("square of value", fontsize=14)

#设置刻度标记大小
plt.tick_params(axis='both', which='major', labelsize=14)


# 绘制散点
x_values = [1, 2, 3, 4, 5]
y_values = [1, 4, 9, 16, 25]
plt.scatter(x_values, y_values, s=100)
plt.show()

图片 5

scatter绘制散点.png

2、scrapy爬虫

伍个函数分别对应后三个步骤,这里用到User-Agent随机切换,没用代理,共11548条数据用时3一分钟左右
Spider模块代码如下(其余模块基本没用):

# -*- coding: utf-8 -*-

import scrapy
import requests
from bs4 import BeautifulSoup
from lxml import etree
import re
import random
import time
from LiePinWang.items import LiepinwangItem
import json

hds=[{'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'},
    {'User-Agent':'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.12 Safari/535.11'},
    {'User-Agent':'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'},
    {'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:34.0) Gecko/20100101 Firefox/34.0'},
    {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/44.0.2403.89 Chrome/44.0.2403.89 Safari/537.36'},
    {'User-Agent':'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'},
    {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'},
    {'User-Agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0'},
    {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1'},
    {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1'},
    {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11'},
    {'User-Agent':'Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11'},
    {'User-Agent':'Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11'}]

class LiepinSpider(scrapy.Spider):
    name = "liepin"


    def start_requests(self):
        href_list = []
        url = 'https://www.liepin.com/company/020-000/'
        req = requests.get(url).text
        soup = BeautifulSoup(req,'lxml')
        hrefs_1 = soup.select('#region > div.wrap > div.top-bar > div.industry-box > div > a')
        for href_1 in hrefs_1:
            href_list.append(href_1['href'])
        href_list.pop()
        hrefs_2 = soup.select('#region > div.wrap > div.top-bar > div.industry-box > div > div > a')
        for href_2 in hrefs_2:
            href_list.append(href_2['href'])
        href_list.pop()
        for industry_href in href_list[1:]:
            yield scrapy.Request(url = industry_href,callback=self.next_page)

    def next_page(self,response):
        base_url = response.url
        req = requests.get(base_url,headers=hds[random.randint(0,len(hds)-1)]).text
        pages = re.findall('(.*?)',req,re.S)[0].replace('共','').replace('页','')
        if pages:
            for i in range(0,int(pages)):
                urls = str(base_url)   'pn'   str(i)
                yield scrapy.Request(url = urls ,callback=self.get_company_url)
        else:
            yield scrapy.Request(url = base_url ,callback=self.get_company_url)

    def get_company_url(self,response):
        url = response.url
        req = requests.get(url,headers=hds[random.randint(0,len(hds)-1)]).text
        soup = BeautifulSoup(req,'lxml')
        company_urls = soup.select('#region > div.wrap > div.company-list.clearfix > div > div.item-top.clearfix > div > p.company-name > a')
        for company_url in company_urls:
            detail_url = company_url['href']
            yield scrapy.Request(url = detail_url ,callback=self.parse_detail)

    def parse_detail(self,response):
        url = response.url
        try:
            item = LiepinwangItem()
            req = requests.get(url,headers=hds[random.randint(0,len(hds)-1)]).text
            selector = etree.HTML(req)


            item['companyname'] = selector.xpath('//*[@id="company"]/div[2]/section/div/h1/text()')[0] if selector.xpath('//*[@id="company"]/div[2]/section/div/h1/text()') else None
            position = selector.xpath('//*[@id="company"]/div[2]/div/div/div[2]/h2/small/text()')[0] if selector.xpath('//*[@id="company"]/div[2]/div/div/div[2]/h2/small/text()') else None
            item['position_total'] = re.sub("D", "", position)
            item['welfares'] = selector.xpath('//*[@id="company"]/div[2]/section/div/div/ul/li/text()') if selector.xpath('//*[@id="company"]/div[2]/section/div/div/ul/li/text()') else None
            item['industry'] = selector.xpath('//*[@id="company"]/div[2]/div/aside/div[2]/ul[1]/li[1]/a/text()')[0] if selector.xpath('//*[@id="company"]/div[2]/div/aside/div[2]/ul[1]/li[1]/a/text()') else None
            item['companysize'] = selector.xpath('//*[@id="company"]/div[2]/div/aside/div[2]/ul[1]/li[2]/text()')[0] if selector.xpath('//*[@id="company"]/div[2]/div/aside/div[2]/ul[1]/li[2]/text()') else None
            item['address'] = selector.xpath('//*[@id="company"]/div[2]/div/aside/div[2]/ul[1]/li[3]/text()')[0] if selector.xpath('//*[@id="company"]/div[2]/div/aside/div[2]/ul[1]/li[3]/text()') else None
            item['poi'] = selector.xpath('//*[@id="company"]/div[2]/div/aside/div[2]/ul[1]/li[3]/@data-point')[0] if selector.xpath('//*[@id="company"]/div[2]/div/aside/div[2]/ul[1]/li[3]/@data-point') else None
            item['time'] = selector.xpath('//*[@id="company"]/div[2]/div/aside/div[2]/ul[2]/li[2]/text()')[0] if selector.xpath('//*[@id="company"]/div[2]/div/aside/div[2]/ul[2]/li[2]/text()') else None
            item['capital'] = selector.xpath('//*[@id="company"]/div[2]/div/aside/div[2]/ul[2]/li[3]/text()')[0] if selector.xpath('//*[@id="company"]/div[2]/div/aside/div[2]/ul[2]/li[3]/text()') else None
            item['field'] = selector.xpath('//*[@id="company"]/div[2]/div/aside/div[2]/ul[1]/li[1]/text()')[0].strip() if selector.xpath('//*[@id="company"]/div[2]/div/aside/div[2]/ul[1]/li[1]/text()') else None
            yield item 
        except Exception:
            pass

出于数据量相当的小,爬取到的多寡保存成csv格式就足以了,然后再把csv转换为Excel格式,方便做多少洗涤和深入分析。

Bar(柱状图/条形图)

from pyecharts import Bar

bar = Bar("标记线和标记点示例")
bar.add("商家A", attr, v1, mark_point=["average"])
bar.add("商家B", attr, v2, mark_line=["min", "max"])
bar.render()

bar-1

from pyecharts import Bar

bar = Bar("x 轴和 y 轴交换")
bar.add("商家A", attr, v1)
bar.add("商家B", attr, v2, is_convert=True)
bar.render()

bar-2

那一个是监察和控制服务器网速的最后收获,显示的是下载与上传的网速,单位为M。爬虫的法则都以如出壹辙的,只然则将数据存到InfluxDB的点子不均等而已, 如下图。

电动总括数据

import matplotlib.pyplot as plt

x_values = list(range(1, 1001))
y_values = [x ** 2 for x in x_values]
# y_values = [x * x for x in x_values]
# y_values = [x ^ 2 for x in x_values]

plt.scatter(x_values, y_values, s=40)

# 坐标轴的取值范围
# plt.axis(0, 1100, 0, 1100000)  # 依次是xmin xmax,ymin,ymax

plt.show()

图片 6

活动总括功效图.png

2、数据洗濯

1、编号,方便做多少总计。
二、对那二个数据开始展览洗刷,数据格式统1。
叁、坐标调换,前程无忧使用的是金星坐标系,所以要调换为WGS八肆地球坐标系,方便做深入分析,这里运用的是旁人写好的代码,地址https://github.com/wandergis/coordTransform_py。
四、通过QGIS软件1贰分出个厂商所在的行政区和街镇(区域)。
5、在58同城找到行当分类的数目,对各样行干归为1三大类。
保洁之后,大约长这么:

图片 7

EffectScatter(带有涟漪特效动画的散点图)

from pyecharts import EffectScatter

v1 = [10, 20, 30, 40, 50, 60]
v2 = [25, 20, 15, 10, 60, 33]
es = EffectScatter("动态散点图示例")
es.add("effectScatter", v1, v2)
es.render()

effectscatter-0

es = EffectScatter("动态散点图各种图形示例")
es.add("", [10], [10], symbol_size=20, effect_scale=3.5, effect_period=3, symbol="pin")
es.add("", [20], [20], symbol_size=12, effect_scale=4.5, effect_period=4,symbol="rect")
es.add("", [30], [30], symbol_size=30, effect_scale=5.5, effect_period=5,symbol="roundRect")
es.add("", [40], [40], symbol_size=10, effect_scale=6.5, effect_brushtype='fill',symbol="diamond")
es.add("", [50], [50], symbol_size=16, effect_scale=5.5, effect_period=3,symbol="arrow")
es.add("", [60], [60], symbol_size=6, effect_scale=2.5, effect_period=3,symbol="triangle")
es.render()

effectscatter-1

图片 8 

自由漫步

import matplotlib.pyplot as ply

from random import choice


class RandomWalk():
    def __init__(self, num_points=5000):
        self.num_points = num_points

        self.x_values = [0]
        self.y_values = [0]

    def fill_walk(self):

        # 不断走,直到达到指定步数

        while len(self.x_values) < self.num_points:

            # 决定前进方向以及沿这个方向前进的距离

            x_direction = choice([1, -1])
            x_distance = choice([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
            x_step = x_direction * x_distance

            y_direction = choice([1, -1])
            y_distance = choice([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
            y_step = y_direction * y_distance

            # 不能原地踏步

            if x_step == 0 and y_step == 0:
                continue

            next_x = self.x_values[-1]   x_step
            next_y = self.y_values[-1]   y_step

            self.x_values.append(next_x)
            self.y_values.append(next_y)


rw = RandomWalk()
rw.fill_walk()
ply.scatter(rw.x_values, rw.y_values, s=15)
ply.show()

3、数据剖判及可视化

Funnel(漏斗图)

from pyecharts import Funnel

attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
value = [20, 40, 60, 80, 100, 120]
funnel = Funnel("漏斗图示例")
funnel.add("商品", attr, value, is_label_show=True, label_pos="inside", label_text_color="#fff")
funnel.render()

funnel-0

可以完成对爬虫数量,增量,大小,大小增量的实时监察和控制。

效果图

图片 9

自由漫步图.png

一、各行当集团数目及占比

图片 10

  • 仅在58同城络,集团最多的本行为互连网/游戏/软件,占比2五.5%,到达了北京公司的肆分之一以上,东京的网络商家数目尽管跟京城没法比,但照样是占比最高的。
  • 紧随其后的正是金融行当,东京作为中夏族民共和国的经济焦点,金融行当料定不会少。
  • 其二人是房土地资金财产/建筑/物业,香江的房价在举国上下都以数壹数2的,房地产建筑行业也不会少。

Gauge(仪表盘)

from pyecharts import Gauge

gauge = Gauge("仪表盘示例")
gauge.add("业务指标", "完成率", 66.66)
gauge.show_config()
gauge.render()

gauge-0

  1. 环境

利用Pygal模拟掷骰子

pygal能够绘制的图形能够访问pygal介绍

图片 11

pygal绘图.png

景况设置,直接在Pycharm上安装插件。

import pygal

from random import randint


class Die():
    def __init__(self, num_sides=6):
        self.num_sides = num_sides;

    def roll(self):
        # 返回一个位于1和骰子面数之间的随机值
        return randint(1, self.num_sides)


die = Die()
results = []

# 掷100次骰子,并将结果放在列表中。
for roll_num in range(10):
    result = die.roll()
    results.append(str(result))

print(results)

# 分析结果
frequencies = []
for value in range(1, die.num_sides   1):
    frequency = results.count(value)
    frequencies.append(frequency)

print(frequencies)

# 对结果进行可视化
hist = pygal.Box()

hist.title = "result of rolling one D6 1000 times"
hist.x_labels = ['1', '2', '3', '4', '5', '6']
hist.x_title = "Result"
hist.y_title = "frequency of result"

hist.add('D6', frequencies)
hist.render_to_file('die_visual.svg')

2、各层面包车型地铁商家数目

图片 12

  • 拾0-4一百人的中型小型型企业最多,达到了367叁家,其次是①-四十几人和50-玖拾柒个人的小型集团。

吉优(地理坐标系)

from pyecharts import Geo

data = [
    ("海门", 9),("鄂尔多斯", 12),("招远", 12),("舟山", 12),("齐齐哈尔", 14),("盐城", 15),
    ("赤峰", 16),("青岛", 18),("乳山", 18),("金昌", 19),("泉州", 21),("莱西", 21),
    ("日照", 21),("胶南", 22),("南通", 23),("拉萨", 24),("云浮", 24),("梅州", 25)...]
geo = Geo("全国主要城市空气质量", "data from pm2.5", title_color="#fff", title_pos="center",
width=1200, height=600, background_color='#404a59')
attr, value = geo.cast(data)
geo.add("", attr, value, visual_range=[0, 200], visual_text_color="#fff", symbol_size=15, is_visualmap=True)
geo.show_config()
geo.render()

geo-0

from pyecharts import Geo

data = [("海门", 9), ("鄂尔多斯", 12), ("招远", 12), ("舟山", 12), ("齐齐哈尔", 14), ("盐城", 15)]
geo = Geo("全国主要城市空气质量", "data from pm2.5", title_color="#fff", title_pos="center",
          width=1200, height=600, background_color='#404a59')
attr, value = geo.cast(data)
geo.add("", attr, value, type="effectScatter", is_random=True, effect_scale=5)
geo.show_config()
geo.render()

geo-1

  • InfluxDb ,是现阶段相比较流行的小时连串数据库;
  • Grafana ,2个可视化面板(Dashboard),有着特别不错的图纸和布局彰显,作用齐全的衡量仪表盘和图纸编辑器,帮衬Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作为数据源
  • Ubuntu
  • influxdb (pip install influxdb)
  • Python 2.7

使用Web API

三、公司福利

图片 13

图片 14

  • 事关福利,小编脑海中就表露出了苍井空(日文名:蒼井そら)的印象,这里用的是PPT大神阿文推荐的wordart,https://wordart.com/create
  • 便宜排行前2个人的是:伍险一金、带薪年假、绩效奖金、岗位晋升,很明朗,都以跟钱和休假有关的。
  • 鉴于每一个集团福利数据较多,要先将方便数据在Python举办管理,并总括一下,这几个相比较轻巧,代码就不放了。

Graph(关系图)

from pyecharts import Graph

nodes = [{"name": "结点1", "symbolSize": 10},
         {"name": "结点2", "symbolSize": 20},
         {"name": "结点3", "symbolSize": 30},
         {"name": "结点4", "symbolSize": 40},
         {"name": "结点5", "symbolSize": 50},
         {"name": "结点6", "symbolSize": 40},
         {"name": "结点7", "symbolSize": 30},
         {"name": "结点8", "symbolSize": 20}]
links = []
for i in nodes:
    for j in nodes:
        links.append({"source": i.get('name'), "target": j.get('name')})
graph = Graph("关系图-环形布局示例")
graph.add("", nodes, links, is_label_show=True, repulsion=8000, layout='circular', label_text_color=None)
graph.show_config()
graph.render()

graph-0

from pyecharts import Graph

import json
with open("..jsonweibo.json", "r", encoding="utf-8") as f:
    j = json.load(f)
    nodes, links, categories, cont, mid, userl = j
graph = Graph("微博转发关系图", width=1200, height=600)
graph.add("", nodes, links, categories, label_pos="right", repulsion=50, is_legend_show=False,
          line_curve=0.2, label_text_color=None)
graph.show_config()
graph.render()

图片 15

graph-2

  1. 原理

1.1安装requests

以此能够一贯在Pycharm中安装插件,特别有利。

四、各街镇集团数量

图片 16

  • 各区域中,公司数目最多的是陆家嘴伍三柒家,迪拜金融圈中央,其次是张江4八一家,香港技术员最多的地点,第1个人是虹梅路40玖家,为了搜索一下这么些铺面多的区域的行当占比,再进一步把各区域和行当进行交叉深入分析。

    图片 17

  • 结果展现,陆家嘴近伍分三的公司都以财政和经李修缘司,而网络/游戏/软件百货店占相当的低。

  • 张江的网络/游戏/软件集团占比为47%,第一名的虹梅路互连网/游戏/软件商场占比同等是四7%,其余行当整合也和张江近似。
  • 由此上航海用体育场面我们还开掘,石家庄新村和花卉的金融公司占比也极高,到达了40%以上,通过观看地图开采,这三个区域离陆家嘴较近,所以大概是受陆家嘴影响,金融公司也诸多。

Line(折线/面积图)

from pyecharts import Line

attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
v1 = [5, 20, 36, 10, 10, 100]
v2 = [55, 60, 16, 20, 15, 80]
line = Line("折线图示例")
line.add("商家A", attr, v1, mark_point=["average"])
line.add("商家B", attr, v2, is_smooth=True, mark_line=["max", "average"])
line.show_config()
line.render()

line-0

line = Line("折线图-阶梯图示例")
line.add("商家A", attr, v1, is_step=True, is_label_show=True)
line.show_config()
line.render()

line-2

line = Line("折线图-面积图示例")
line.add("商家A", attr, v1, is_fill=True, line_opacity=0.2, area_opacity=0.4, symbol=None)
line.add("商家B", attr, v2, is_fill=True, area_color='#000', area_opacity=0.3, is_smooth=True)
line.show_config()
line.render()

line-3

赢得要展现的数目,包括当前的岁月数额,存到InfluxDb里面,然后再到Grafana里面实行对应的布置就能够展现;

1.2处理API响应

import requests

# 执行api调用并存储响应

url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
r = requests.get(url)
print("Status code:", r.status_code)

# 将api响应存储在一个变量中
response_dic = r.json()

# 处理结果
print(response_dic.keys())


得到结果:
Status code: 200
dict_keys(['total_count', 'incomplete_results', 'items'])

5、各街镇的密度

些微区域就算公司多,可是面积也非常大,并不能够证实该区域的铺面很密集,所以这里引进1个是新的目标:单位面积的密度,来看看到底哪个地方的同盟社最密集。

单位面积的密度=各街镇中集团数目/各街镇的面积

图片 18

  • 密度前2位的是克利夫兰西路,淮海西路和瓦伦西亚东路,那多少个区域尽管非常的小,可是办公楼比较多,大好多都以中型小型型集团,1个商务楼或然有几十家依旧上百家同盟社,举个例子:底特律西路区域即便唯有1.六平方英里,可是有195家商家,所以密度十分的大。

感激您有耐心看到这里,借令你以为风趣也许有用,请点个赞,有任何疑窦能够在世间留言。

Liquid(水球图)

from pyecharts import Liquid

liquid = Liquid("水球图示例")
liquid.add("Liquid", [0.6])
liquid.show_config()
liquid.render()

liquid-0

from pyecharts import Liquid

liquid = Liquid("水球图示例")
liquid.add("Liquid", [0.6, 0.5, 0.4, 0.3], is_liquid_animation=False, shape='diamond')
liquid.show_config()
liquid.render()

liquid-2

  1. 安装

一.三管理响应字典

# 将api响应存储在一个变量中
response_dic = r.json()

# 处理结果
print(response_dic.keys())

print("Total repositories:", response_dic['total_count'])

repo_dics = response_dic['items']
print("repositories returned:"   str(len(repo_dics)))

# 研究一个仓库
repo_dic = repo_dics[0]
print("nKeys:", str(len(repo_dic)))

# for key in sorted(repo_dic.keys()):
#     print(key)


print("Name:", repo_dic['name'])
print("Owner:", repo_dic['owner']['login'])
print("Starts:", repo_dic['stargazers_count'])
print("Repository:", repo_dic['html_url'])
print("Created:", repo_dic['created_at'])
print("Updated:", repo_dic['updated_at'])
print("Description:", repo_dic['description'])


得到结果:

Total repositories: 2061622
repositories returned:30

Keys: 71
Name: awesome-python
Owner: vinta
Starts: 40294
Repository: https://github.com/vinta/awesome-python
Created: 2014-06-27T21:00:06Z
Updated: 2017-10-29T00:50:49Z
Description: A curated list of awesome Python frameworks, libraries, software and resources

Map(地图)

from pyecharts import Map

value = [155, 10, 66, 78, 33, 80, 190, 53, 49.6]
attr = ["福建", "山东", "北京", "上海", "甘肃", "新疆", "河南", "广西", "西藏"]
map = Map("Map 结合 VisualMap 示例", width=1200, height=600)
map.add("", attr, value, maptype='china', is_visualmap=True, visual_text_color='#000')
map.show_config()
map.render()

map-1

from pyecharts import Map

value = [20, 190, 253, 77, 65]
attr = ['汕头市', '汕尾市', '揭阳市', '阳江市', '肇庆市']
map = Map("广东地图示例", width=1200, height=600)
map.add("", attr, value, maptype='广东', is_visualmap=True, visual_text_color='#000')
map.show_config()
map.render()

map-2

4.1 Grafana安装

Parallel(平行坐标系)

from pyecharts import Parallel

c_schema = [
    {"dim": 0, "name": "data"},
    {"dim": 1, "name": "AQI"},
    {"dim": 2, "name": "PM2.5"},
    {"dim": 3, "name": "PM10"},
    {"dim": 4, "name": "CO"},
    {"dim": 5, "name": "NO2"},
    {"dim": 6, "name": "CO2"},
    {"dim": 7, "name": "等级",
    "type": "category", "data": ['优', '良', '轻度污染', '中度污染', '重度污染', '严重污染']}
]
data = [
    [1, 91, 45, 125, 0.82, 34, 23, "良"],
    [2, 65, 27, 78, 0.86, 45, 29, "良"],
    [3, 83, 60, 84, 1.09, 73, 27, "良"],
    [4, 109, 81, 121, 1.28, 68, 51, "轻度污染"],
    [5, 106, 77, 114, 1.07, 55, 51, "轻度污染"],
    [6, 109, 81, 121, 1.28, 68, 51, "轻度污染"],
    [7, 106, 77, 114, 1.07, 55, 51, "轻度污染"],
    [8, 89, 65, 78, 0.86, 51, 26, "良"],
    [9, 53, 33, 47, 0.64, 50, 17, "良"],
    [10, 80, 55, 80, 1.01, 75, 24, "良"],
    [11, 117, 81, 124, 1.03, 45, 24, "轻度污染"],
    [12, 99, 71, 142, 1.1, 62, 42, "良"],
    [13, 95, 69, 130, 1.28, 74, 50, "良"],
    [14, 116, 87, 131, 1.47, 84, 40, "轻度污染"]
]
parallel = Parallel("平行坐标系-用户自定义指示器")
parallel.config(c_schema=c_schema)
parallel.add("parallel", data)
parallel.show_config()
parallel.render()

parallel-1

官方安装引导

Pie(饼图)

from pyecharts import Pie

attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
v1 = [11, 12, 13, 10, 10, 10]
pie = Pie("饼图示例")
pie.add("", attr, v1, is_label_show=True)
pie.show_config()
pie.render()

pie-0

from pyecharts import Pie

attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
v1 = [11, 12, 13, 10, 10, 10]
v2 = [19, 21, 32, 20, 20, 33]
pie = Pie("饼图-玫瑰图示例", title_pos='center', width=900)
pie.add("商品A", attr, v1, center=[25, 50], is_random=True, radius=[30, 75], rosetype='radius')
pie.add("商品B", attr, v2, center=[75, 50], is_random=True, radius=[30, 75], rosetype='area',
        is_legend_show=False, is_label_show=True)
pie.show_config() 
pie.render()

pie-2

安装好现在,展开当地的贰仟端口,就可以进入管理分界面,用户名与密码都以 admin 。

Polar(极坐标系)

from pyecharts import Polar

radius = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
polar = Polar("极坐标系-堆叠柱状图示例", width=1200, height=600)
polar.add("A", [1, 2, 3, 4, 3, 5, 1], radius_data=radius, type='barRadius', is_stack=True)
polar.add("B", [2, 4, 6, 1, 2, 3, 1], radius_data=radius, type='barRadius', is_stack=True)
polar.add("C", [1, 2, 3, 4, 1, 2, 5], radius_data=radius, type='barRadius', is_stack=True)
polar.show_config()
polar.render()

polar-3

from pyecharts import Polar

radius = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
polar = Polar("极坐标系-堆叠柱状图示例", width=1200, height=600)
polar.add("", [1, 2, 3, 4, 3, 5, 1], radius_data=radius, type='barAngle', is_stack=True)
polar.add("", [2, 4, 6, 1, 2, 3, 1], radius_data=radius, type='barAngle', is_stack=True)
polar.add("", [1, 2, 3, 4, 1, 2, 5], radius_data=radius, type='barAngle', is_stack=True)
polar.show_config()
polar.render()

polar-4

4.2 InfulxDb安装

Radar(雷达图)

from pyecharts import Radar

schema = [ 
    ("销售", 6500), ("管理", 16000), ("信息技术", 30000), ("客服", 38000), ("研发", 52000), ("市场", 25000)]
v1 = [[4300, 10000, 28000, 35000, 50000, 19000]]
v2 = [[5000, 14000, 28000, 31000, 42000, 21000]]
radar = Radar()
radar.config(schema)
radar.add("预算分配", v1, is_splitline=True, is_axisline_show=True)
radar.add("实际开销", v2, label_color=["#4e79a7"], is_area_show=False)
radar.show_config()
radar.render()

radar-0

value_bj = [
    [55, 9, 56, 0.46, 18, 6, 1], [25, 11, 21, 0.65, 34, 9, 2],
    [56, 7, 63, 0.3, 14, 5, 3], [33, 7, 29, 0.33, 16, 6, 4]...]
value_sh = [
    [91, 45, 125, 0.82, 34, 23, 1], [65, 27, 78, 0.86, 45, 29, 2],
    [83, 60, 84, 1.09, 73, 27, 3], [109, 81, 121, 1.28, 68, 51, 4]...]
c_schema= [{"name": "AQI", "max": 300, "min": 5},
           {"name": "PM2.5", "max": 250, "min": 20},
           {"name": "PM10", "max": 300, "min": 5},
           {"name": "CO", "max": 5},
           {"name": "NO2", "max": 200},
           {"name": "SO2", "max": 100}]
radar = Radar()
radar.config(c_schema=c_schema, shape='circle')
radar.add("北京", value_bj, item_color="#f9713c", symbol=None)
radar.add("上海", value_sh, item_color="#b3e4a1", symbol=None)
radar.show_config()
radar.render()

radar-1

以此设置就英特网和煦找呢,有多数的配备笔者都并未有布置,就不在这里误人子弟了。

Scatter(散点图)

from pyecharts import Scatter

v1 = [10, 20, 30, 40, 50, 60]
v2 = [10, 20, 30, 40, 50, 60]
scatter = Scatter("散点图示例")
scatter.add("A", v1, v2)
scatter.add("B", v1[::-1], v2)
scatter.show_config()
scatter.render()

scatter-0

pyecharts-0

from pyecharts import Scatter

scatter = Scatter("散点图示例")
v1, v2 = scatter.draw("..pyecharts-0.png")
scatter.add("pyecharts", v1, v2, is_random=True)
scatter.show_config()
scatter.render()

pyecharts-1

  1. InfluxDb轻松操作

WordCloud(词云图)

from pyecharts import WordCloud

name = ['Sam S Club', 'Macys', 'Amy Schumer', 'Jurassic World', 'Charter Communications',
        'Chick Fil A', 'Planet Fitness', 'Pitch Perfect', 'Express', 'Home', 'Johnny Depp',
        'Lena Dunham', 'Lewis Hamilton', 'KXAN', 'Mary Ellen Mark', 'Farrah Abraham',
        'Rita Ora', 'Serena Williams', 'NCAA baseball tournament', 'Point Break']
value = [10000, 6181, 4386, 4055, 2467, 2244, 1898, 1484, 1112, 965, 847, 582, 555,
         550, 462, 366, 360, 282, 273, 265]
wordcloud = WordCloud(width=1300, height=620)
wordcloud.add("", name, value, word_size_range=[20, 100])
wordcloud.show_config()
wordcloud.render()

wordcloud-0

wordcloud = WordCloud(width=1300, height=620)
wordcloud.add("", name, value, word_size_range=[30, 100], shape='diamond')
wordcloud.show_config()
wordcloud.render()

wordcloud-1

境遇了数据库,鲜明要把增加和删除改查学会了哟, 和sql大致同1,唯有一小点的界别,具体操作,大家可以参见官方的文书档案。

用户自定义

用户还是可以自定义结合 Line/Bar 图表
需使用 get_series()custom() 方法

get_series()
""" 获取图表的 series 数据 """

custom(series)
''' 追加自定义图表类型 '''
  • series -> dict
    追加图表类型的 series 数据

先用 get_series() 获取数据,再选用 custom() 将图片结合在1道

from pyecharts import Bar, Line

attr = ['A', 'B', 'C', 'D', 'E', 'F']
v1 = [10, 20, 30, 40, 50, 60]
v2 = [15, 25, 35, 45, 55, 65]
v3 = [38, 28, 58, 48, 78, 68]
bar = Bar("Line - Bar 示例")
bar.add("bar", attr, v1)
line = Line()
line.add("line", v2, v3)
bar.custom(line.get_series())
bar.show_config()
bar.render()

custom-0

  • influx 进入命令行
  • CREATE DATABASE test 制造数据库
  • show databases 查看数据库
  • use test 使用数据库
  • show series 看表
  • select * from table_test 选取数据
  • DROP MEASUREMENT table_test 删表

更加多示例

用极坐标系画出2个慈祥

import math
from pyecharts import Polar

data = []
for i in range(101):
    theta = i / 100 * 360
    r = 5 * (1   math.sin(theta / 180 * math.pi))
    data.append([r, theta])
hour = [i for i in range(1, 25)]
polar = Polar("极坐标系示例", width=1200, height=600)
polar.add("Love", data, angle_data=hour, boundary_gap=False,start_angle=0)
polar.show_config()
polar.render()

example-0

用极坐标系画出1朵小花

import math
from pyecharts import Polar

data = []
for i in range(361):
    t = i / 180 * math.pi
    r = math.sin(2 * t) * math.cos(2 * t)
    data.append([r, i])
polar = Polar("极坐标系示例", width=1200, height=600)
polar.add("Flower", data, start_angle=0, symbol=None, axis_range=[0, None])
polar.show_config()
polar.render()

example-1

还是能给小花涂上颜色

import math
from pyecharts import Polar

data = []
for i in range(361):
    t = i / 180 * math.pi
    r = math.sin(2 * t) * math.cos(2 * t)
    data.append([r, i])
polar = Polar("极坐标系示例", width=1200, height=600)
polar.add("Color-Flower", data, start_angle=0, symbol=None, axis_range=[0, None],
          area_color="#f71f24", area_opacity=0.6)
polar.show_config()
polar.render()

example-1-1

用散点图画出四个慈祥

from pyecharts import Scatter

scatter = Scatter("散点图示例", width=800, height=480)
v1 ,v2 = scatter.draw("..love.png")
scatter.add("Love", v1, v2)
scatter.render()

example-2

用散点图画出3个火辣的 Bra

from pyecharts import Scatter

scatter = Scatter("散点图示例", width=1000, height=480)
v1 ,v2 = scatter.draw("..up.png")
scatter.add("Cup", v1, v2)
scatter.render()

example-3

用散点图画出3个妖媚的 Bra

from pyecharts import Scatter

scatter = Scatter("散点图示例", width=1000, height=480)
v1 ,v2 = scatter.draw("..up.png")
scatter.add("Cup", v1, v2, label_color=["#000"])
scatter.render()

example-4

某地最低温和最高天气温度折线图

from pyecharts import Line

attr = ['周一', '周二', '周三', '周四', '周五', '周六', '周日', ]
line = Line("折线图示例")
line.add("最高气温", attr, [11, 11, 15, 13, 12, 13, 10], mark_point=["max", "min"], mark_line=["average"])
line.add("最低气温", attr, [1, -2, 2, 5, 3, 2, 0], mark_point=["max", "min"],
         mark_line=["average"], yaxis_formatter="°C")
line.show_config()
line.render()

example-5

饼图嵌套

from pyecharts import Pie

pie = Pie("饼图示例", title_pos='center', width=1000, height=600)
pie.add("", ['A', 'B', 'C', 'D', 'E', 'F'], [335, 321, 234, 135, 251, 148], radius=[40, 55],is_label_show=True)
pie.add("", ['H', 'I', 'J'], [335, 679, 204], radius=[0, 30], legend_orient='vertical', legend_pos='left')
pie.show_config()
pie.render()

example-6

饼图再嵌套

import random
from pyecharts import Pie

attr = ['A', 'B', 'C', 'D', 'E', 'F']
pie = Pie("饼图示例", width=1000, height=600)
pie.add("", attr, [random.randint(0, 100) for _ in range(6)], radius=[50, 55], center=[25, 50],is_random=True)
pie.add("", attr, [random.randint(20, 100) for _ in range(6)], radius=[0, 45], center=[25, 50],rosetype='area')
pie.add("", attr, [random.randint(0, 100) for _ in range(6)], radius=[50, 55], center=[65, 50],is_random=True)
pie.add("", attr, [random.randint(20, 100) for _ in range(6)], radius=[0, 45], center=[65, 50],rosetype='radius')
pie.show_config()
pie.render()

example-7

某地的降水量和蒸发量柱状图

from pyecharts import Bar

attr = ["{}月".format(i) for i in range(1, 13)]
v1 = [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3]
v2 = [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3]
bar = Bar("柱状图示例")
bar.add("蒸发量", attr, v1, mark_line=["average"], mark_point=["max", "min"])
bar.add("降水量", attr, v2, mark_line=["average"], mark_point=["max", "min"])
bar.show_config()
bar.render()

example-8

每一种电影中"好片"所占的比重

from pyecharts import Pie

pie = Pie('各类电影中"好片"所占的比例', "数据来着豆瓣", title_pos='center')
pie.add("", ["剧情", ""], [25, 75], center=[10, 30], radius=[18, 24],
        label_pos='center', is_label_show=True, label_text_color=None, )
pie.add("", ["奇幻", ""], [24, 76], center=[30, 30], radius=[18, 24],
        label_pos='center', is_label_show=True, label_text_color=None, legend_pos='left')
pie.add("", ["爱情", ""], [14, 86], center=[50, 30], radius=[18, 24],
        label_pos='center', is_label_show=True, label_text_color=None)
pie.add("", ["惊悚", ""], [11, 89], center=[70, 30], radius=[18, 24],
        label_pos='center', is_label_show=True, label_text_color=None)
pie.add("", ["冒险", ""], [27, 73], center=[90, 30], radius=[18, 24],
        label_pos='center', is_label_show=True, label_text_color=None)
pie.add("", ["动作", ""], [15, 85], center=[10, 70], radius=[18, 24],
        label_pos='center', is_label_show=True, label_text_color=None)
pie.add("", ["喜剧", ""], [54, 46], center=[30, 70], radius=[18, 24],
        label_pos='center', is_label_show=True, label_text_color=None)
pie.add("", ["科幻", ""], [26, 74], center=[50, 70], radius=[18, 24],
        label_pos='center', is_label_show=True, label_text_color=None)
pie.add("", ["悬疑", ""], [25, 75], center=[70, 70], radius=[18, 24],
        label_pos='center', is_label_show=True, label_text_color=None)
pie.add("", ["犯罪", ""], [28, 72], center=[90, 70], radius=[18, 24],
        label_pos='center', is_label_show=True, label_text_color=None, is_legend_show=True, legend_top="center")
pie.show_config()
pie.render()

example-9

用极坐标系画出三个蜗牛壳

import math
from pyecharts import Polar

data = []
for i in range(5):
    for j in range(101):
        theta = j / 100 * 360
        alpha = i * 360   theta
        r = math.pow(math.e, 0.003 * alpha)
        data.append([r, theta])
polar = Polar("极坐标系示例")
polar.add("", data, symbol_size=0, symbol='circle', start_angle=-25, is_radiusaxis_show=False,
          area_color="#f3c5b3", area_opacity=0.5, is_angleaxis_show=False)
polar.show_config()
polar.render()

example-10

  1. 存数据

Github 地址:https://github.com/chenjiandongx/pyecharts

InfluxDb数据库的数量有早晚的格式,因为本身都以应用python库进行相关操作,所以上面将要python中的格式突显一下:

图片 19 

其中:

本文由韦德国际发布于韦德国际1946官方网站,转载请注明出处:从爬虫到数量可视化,Python完结数量可视化看怎

关键词: 日记本 Python专栏 科研作图 Hello world

蚂蚁蚂蚁,兰顿蚂蚁

韦德国际1946官方网站,原创 微小的蚂蚁 夜幕,呆坐在盖碗间, 那是一堆有集体有纪律的蚂蚁,他们分工显著,动作...

详细>>

Java数组的排序方式,Java数组定义和应用

方法一: 1前言 一.数组的概念: 壹律种档案的次序数据的汇聚。其实数组就是二个器皿。 Java数组的排序方式,Java数...

详细>>

EasyUI四个自定义校验,举办自定义Token校验

背景 SpringSecurity私下认可使用「用户名/密码」的艺术张开登入校验,并由此cookie的不二秘诀存留登入消息。在部分定...

详细>>

super

    亲子日记第23陆天    气候:晴      周三       Parent diaries for 137th days      https://www.zhihu.com/question/20040039 h...

详细>>