美文网首页测试@IT·互联网大数据 爬虫Python AI Sql
初识Plotly—Python图形化MySQL中数据

初识Plotly—Python图形化MySQL中数据

作者: Veniendeavor | 来源:发表于2017-02-12 18:30 被阅读461次

    Plotly 是一款在线的数据分析和数据可视化工具,可以在线绘制条形图、散点图、饼图、直方图等等。同时它支持在线编辑,以及python、javascript、matlab、R等许多API,这里就以python为例,简单介绍一下Plotly。

    Plotly的Python主页

    (一)准备

    进入主页,往下找,可以看到有好多图标类型:

    Paste_Image.png

    先来,随便点开一个条形图(Bar Charts),可以看到有示例代码,代码比较详细,在这里就不说了,感兴趣的可以自己运行一下,需要注意的是,要提前下载plotly的python库,老样子:

    pip install plotly
    
    Paste_Image.png

    本次使用的数据,就以之前爬取的拉勾网Python招聘信息,之前只爬取了前五页,这次稍微将代码修改一下,爬取全部三十页的招聘信息,lg_spider.py修改如下:

    # -*- coding:utf-8 -*-
    import scrapy
    from bs4 import BeautifulSoup
    
    
    class lg_spider(scrapy.Spider):
        name = 'lg'  # 爬虫名字
    
        def start_requests(self):
            urls = ['https://www.lagou.com/zhaopin/Python/',
                    ]
            headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
            for x in range(1,31):
                yield scrapy.Request(url=urls[0] + str(x), headers=headers, callback=self.parse)
    
        def parse(self, response):
            # 使用Beautiful Soup进行分析提取
            soup = BeautifulSoup(response.body, 'html.parser')
            for info in soup.find_all('li', 'con_list_item default_list'):
                # 将提取的salary字符串,只截取最少工资并转换成整数形式,如:7k-12k  -> 7000,因为存在K大小写不统一,所以统一变为小写
                salary = info.attrs['data-salary'].lower()
                salary = salary.split('k')[0]
                salary = int(salary) * 1000
                href = info.find('a', 'position_link').attrs['href']
                href = 'http:' + href
                # 存储爬取的信息
                yield {
                    'title': info.attrs['data-positionname'],  # 职位
                    'position': info.find('em').get_text().split('·')[0],  # 工作地点
                    'salary': salary,  # 最低工资
                    'time': (info.find('span', 'format-time')).string,  # 发布时间
                    'grade': info.find('div', 'li_b_l').get_text().split('/')[-1].replace('\n', '').rstrip(),  # 学历要求
                    'company': info.attrs['data-company'],  # 公司名称
                    'href': href
                }
    

    其中href属性可加可不加,无所谓,加的话需要修改相关item,数据库等信息。

    (二)进入正题

    plotly已经有了,MySQL数据也有了,下面开始进入正题,如何使用Plotly图形化MySQL中的工具,为了便于Plotly的处理,先下载一个Python数据分析包Pandas

    pip install pandas
    

    招聘地区统计

    招聘地区统计.png

    代码实现:

    # -*- coding:utf-8 -*-
    import pymysql
    import pandas
    import plotly as py
    import plotly.graph_objs as go
    
    # 注册的Plotly账户和密码
    py.tools.set_credentials_file(username='YOUR_NAME', api_key='YOUR_PASSWORD')
    
    #数据库连接信息
    db_config ={
        'host': '127.0.0.1',
        'port': 3306,
        'user': 'root',
        'password': '',
        'db': 'lg_info',
        'charset': 'utf8'
    }
    # 获得数据库连接
    connection = pymysql.connect(**db_config)
    
    # SQL语句,计算各地区数目
    with connection.cursor() as cursor:
        sql = 'select position,count(*) from info01 GROUP BY position'
        cursor.execute(sql)
        rows = cursor.fetchall()
    
    # 使用Pandas中的DataFrame处理便于plotly的使用,转换成DataFarame的格式,类似二维表
    df = pandas.DataFrame([[ij for ij in i] for i in rows])
    df.rename(columns={0: 'position', 1: 'count'}, inplace=True)
    
    # 数据绘图,横纵坐标分别为地区和数量
    trace1 = go.Bar(
        x=df['position'],
        y=df['count']
    )
    
    data = [trace1]
    # 离线形式存储形成的图表
    py.offline.plot(data, filename='g:/test.html')
    

    同样的原理,可以做如下统计图表,其中的关键点就是SQL语句的书写,再就是各种图表API的使用,这个可以参照官网给出的例子,十分详细。

    学历要求饼状图.png 工资情况.png

    相关文章

      网友评论

        本文标题:初识Plotly—Python图形化MySQL中数据

        本文链接:https://www.haomeiwen.com/subject/yqmaittx.html