Plotly 是一款在線的數(shù)據(jù)分析和數(shù)據(jù)可視化工具吝岭,可以在線繪制條形圖三痰、散點(diǎn)圖、餅圖窜管、直方圖等等散劫。同時(shí)它支持在線編輯,以及python幕帆、javascript获搏、matlab、R等許多API失乾,這里就以python為例常熙,簡單介紹一下Plotly。
(一)準(zhǔn)備
進(jìn)入主頁碱茁,往下找裸卫,可以看到有好多圖標(biāo)類型:
先來,隨便點(diǎn)開一個(gè)條形圖(Bar Charts)早芭,可以看到有示例代碼彼城,代碼比較詳細(xì),在這里就不說了退个,感興趣的可以自己運(yùn)行一下募壕,需要注意的是,要提前下載plotly的python庫语盈,老樣子:
pip install plotly
本次使用的數(shù)據(jù)舱馅,就以之前爬取的拉勾網(wǎng)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進(jìn)行分析提取
soup = BeautifulSoup(response.body, 'html.parser')
for info in soup.find_all('li', 'con_list_item default_list'):
# 將提取的salary字符串缠借,只截取最少工資并轉(zhuǎn)換成整數(shù)形式干毅,如:7k-12k -> 7000,因?yàn)榇嬖贙大小寫不統(tǒng)一泼返,所以統(tǒng)一變?yōu)樾? 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], # 工作地點(diǎn)
'salary': salary, # 最低工資
'time': (info.find('span', 'format-time')).string, # 發(fā)布時(shí)間
'grade': info.find('div', 'li_b_l').get_text().split('/')[-1].replace('\n', '').rstrip(), # 學(xué)歷要求
'company': info.attrs['data-company'], # 公司名稱
'href': href
}
其中href屬性可加可不加硝逢,無所謂,加的話需要修改相關(guān)item,數(shù)據(jù)庫等信息渠鸽。
(二)進(jìn)入正題
plotly已經(jīng)有了叫乌,MySQL數(shù)據(jù)也有了,下面開始進(jìn)入正題徽缚,如何使用Plotly圖形化MySQL中的工具憨奸,為了便于Plotly的處理,先下載一個(gè)Python數(shù)據(jù)分析包Pandas
pip install pandas
招聘地區(qū)統(tǒng)計(jì)
代碼實(shí)現(xiàn):
# -*- 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')
#數(shù)據(jù)庫連接信息
db_config ={
'host': '127.0.0.1',
'port': 3306,
'user': 'root',
'password': '',
'db': 'lg_info',
'charset': 'utf8'
}
# 獲得數(shù)據(jù)庫連接
connection = pymysql.connect(**db_config)
# SQL語句凿试,計(jì)算各地區(qū)數(shù)目
with connection.cursor() as cursor:
sql = 'select position,count(*) from info01 GROUP BY position'
cursor.execute(sql)
rows = cursor.fetchall()
# 使用Pandas中的DataFrame處理便于plotly的使用排宰,轉(zhuǎn)換成DataFarame的格式,類似二維表
df = pandas.DataFrame([[ij for ij in i] for i in rows])
df.rename(columns={0: 'position', 1: 'count'}, inplace=True)
# 數(shù)據(jù)繪圖红省,橫縱坐標(biāo)分別為地區(qū)和數(shù)量
trace1 = go.Bar(
x=df['position'],
y=df['count']
)
data = [trace1]
# 離線形式存儲形成的圖表
py.offline.plot(data, filename='g:/test.html')
同樣的原理额各,可以做如下統(tǒng)計(jì)圖表,其中的關(guān)鍵點(diǎn)就是SQL語句的書寫吧恃,再就是各種圖表API的使用,這個(gè)可以參照官網(wǎng)給出的例子麻诀,十分詳細(xì)痕寓。