本文可以學(xué)習(xí)到以下內(nèi)容:
- matplotlib 中文亂碼解決辦法
- seaborn 中文亂碼解決辦法
- seaborn 庫(kù)csv數(shù)據(jù)下載地址
- 用matplotlib、seaborn启具、pyecharts繪制散點(diǎn)圖
數(shù)據(jù)及源碼地址:https://gitee.com/myrensheng/data_analysis
散點(diǎn)圖
小凡在做數(shù)據(jù)分析的時(shí)候本讥,經(jīng)常需要對(duì)數(shù)據(jù)進(jìn)行可視化操作,這樣可以更加直觀的了解數(shù)據(jù)鲁冯,從而更好的分析數(shù)據(jù)拷沸。python常用來(lái)做數(shù)據(jù)可視化的第三方庫(kù)有:matplotlib、seaborn薯演、pyecharts撞芍。這幾個(gè)第三方庫(kù)都有各自的適用場(chǎng)景。
小凡在學(xué)習(xí)python的時(shí)候跨扮,最先接觸的是matplotlib序无,工作中又接觸到了pyecharts、seaborn好港。本篇以散點(diǎn)圖為例愉镰,重點(diǎn)在于如何方便的使用這些庫(kù)。
matplotlib繪制散點(diǎn)圖
matplotlib是python數(shù)據(jù)可視化最著名的繪圖庫(kù)钧汹,他可以很輕松的繪制出各種各樣的圖表丈探。
導(dǎo)入seaborn、pandas拔莱、numpy碗降、matplotlib等庫(kù)
import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pylab import mpl
在繪制圖表的時(shí)候 matplotlib 對(duì)中文會(huì)顯示成方框,可以用下面辦法解決:
# 黑體
plt.rcParams["font.family"] = "SimHei"
# plt.rcParams['font.sans-serif'] = ['SimHei']
# 解決無(wú)法顯示符號(hào)的問(wèn)題
plt.rcParams['axes.unicode_minus'] = False
# seaborn默認(rèn)主題
# sns.set()
# 解決Seaborn中文顯示問(wèn)題
sns.set(font='SimHei',font_scale=0.8)
官網(wǎng)散點(diǎn)圖案例塘秦,繪制出雅虎股票相鄰兩天的調(diào)整后的收盤(pán)價(jià)(adj_close)漲跌幅度散點(diǎn)圖
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cbook as cbook
# Load a numpy record array from yahoo csv data with fields date, open, close,
# volume, adj_close from the mpl-data/example directory. The record array
# stores the date as an np.datetime64 with a day unit ('D') in the date column.
# 加載數(shù)據(jù)
price_data = (cbook.get_sample_data('goog.npz', np_load=True)['price_data']
.view(np.recarray))
# 獲取最近250天的交易數(shù)據(jù)
price_data = price_data[-250:] # get the most recent 250 trading days
# 計(jì)算漲跌幅度
delta1 = np.diff(price_data.adj_close) / price_data.adj_close[:-1]
# Marker size in units of points^2
# 設(shè)置散點(diǎn)圖每個(gè)點(diǎn)的顏色和大小
volume = (15 * price_data.volume[:-2] / price_data.volume[0])**2
close = 0.003 * price_data.close[:-2] / 0.003 * price_data.open[:-2]
# 設(shè)置圖表和坐標(biāo)軸
fig, ax = plt.subplots()
# 設(shè)置x軸讼渊、y軸數(shù)據(jù),散點(diǎn)的大小尊剔、顏色爪幻、透明度屬性
ax.scatter(delta1[:-1], delta1[1:], c=close, s=volume, alpha=0.5)
# 設(shè)置x軸標(biāo)題
ax.set_xlabel(r'$\Delta_i$', fontsize=15)
# 設(shè)置y軸標(biāo)題
ax.set_ylabel(r'$\Delta_{i+1}$', fontsize=15)
# 設(shè)置標(biāo)題
ax.set_title('Volume and percent change')
# 顯示網(wǎng)格線
ax.grid(True)
fig.tight_layout()
# 顯示圖表
plt.show()
散點(diǎn)圖繪制結(jié)果如下:
seaborn繪制散點(diǎn)圖
seaborn是基于matplotlib封裝的高級(jí)API庫(kù),為繪制各種復(fù)雜的圖表提供了便利。
seaborn的官網(wǎng)數(shù)據(jù)下載緩慢挨稿,我已下載完成仇轻,放在【數(shù)據(jù)加工廠】文件夾下,命名為 seaborn_data
# 加載案例數(shù)據(jù)
data_path = "../數(shù)據(jù)加工廠/seaborn_data/tips.csv"
tips = pd.read_csv(data_path)
# 修改為中文名
tips.columns = ["總賬單","小費(fèi)","性別","是否吸煙","星期幾","時(shí)間","大小"]
用 head 方法進(jìn)行數(shù)據(jù)預(yù)覽
tips.head()
繪制出:不同時(shí)間段(午餐奶甘、晚餐)吸煙的人和不吸煙的人花費(fèi)的賬單和給的小費(fèi)的關(guān)系散點(diǎn)圖
# 繪制散點(diǎn)圖
sns.relplot(
data=tips,
x="總賬單",
y="小費(fèi)",
col="時(shí)間",
hue="是否吸煙",
style="是否吸煙",
# size="size"
)
散點(diǎn)圖繪制結(jié)果如下:
pyecharts繪制散點(diǎn)圖
pyecharts將python和echarts結(jié)合起來(lái)篷店,具有良好的交互性和觀賞性,很適合用于制作數(shù)據(jù)報(bào)表臭家。
from pyecharts import options as opts
from pyecharts.charts import Scatter
from pyecharts.faker import Faker
df = pd.DataFrame(data={"名稱":Faker.choose(),"商家A":Faker.values(),"商家B":Faker.values()})
用 head 方法進(jìn)行數(shù)據(jù)預(yù)覽
df.head()
c = (
Scatter()
.add_xaxis(df["名稱"].values.tolist())
.add_yaxis("商家A", df["商家A"].values.tolist())
.add_yaxis("商家B", df["商家B"].values.tolist())
.set_global_opts(
title_opts=opts.TitleOpts(title="Scatter-VisualMap(Size)"),
visualmap_opts=opts.VisualMapOpts(type_="size", max_=150, min_=20),
)
)
c.render_notebook()
散點(diǎn)圖繪制結(jié)果如下:
總結(jié)
- matplotlib和seaborn更偏向于數(shù)據(jù)可視化探索
- pyecharts偏向于數(shù)據(jù)結(jié)果可視化展示