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

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

Plotly的Python主页

(一)准备

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

初识Plotly—Python图形化MySQL中数据_第1张图片
Paste_Image.png

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

pip install plotly
初识Plotly—Python图形化MySQL中数据_第2张图片
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

招聘地区统计

初识Plotly—Python图形化MySQL中数据_第3张图片
招聘地区统计.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的使用,这个可以参照官网给出的例子,十分详细。

初识Plotly—Python图形化MySQL中数据_第4张图片
学历要求饼状图.png
初识Plotly—Python图形化MySQL中数据_第5张图片
工资情况.png

你可能感兴趣的:(初识Plotly—Python图形化MySQL中数据)