首页 微博热点正文

导读:比较于科学,数据剖析更像是一门艺术。创立款式美丽的数据可视化是这个艺术中不行短少的部分。可是,某些人以为美丽的,也会有人觉得难以承受。和艺术相似,跟着数据剖析的快速演化,人们的观念和品尝也一直在改变。可是总的来说没有人是肯定正确和过错的。

作为一个数据艺术家以及有经历的Python程序员,咱们能够从matplotlib、Seaborn、Bokeh和ggplot这些库里边挑选一些来运用。

作者:伊凡伊德里斯(Ivan Idris)

如需转载请联络篇章科技

01 图形化安斯库姆四重奏

安斯库姆四重奏(Anscombe's Quartet)是一个经典事例,它能够阐明为什么可视化是很重要的。四重奏包括了四组核算特性共同的数据。每个数据集有一些x值以及相对应的y值,咱们将在一个IPython Notebook中列出这些目标。假如你制作出这些数据集,你将发现这些图表天壤之别。

  • 操作过程

在本节你需求履行如下操作:

(1)由如下导入开端:

import pandas as pd 
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib as mpl
from dautil import report
from dautil import plotting
import numpy as np
from tabulate import tabulate

(2)界说以下函数来核算某一数据会集x和y的均值和方差、相关系数,以及斜率和每个数据集的线性拟合的截距:

def aggregate():
df = sns.load_dataset("anscombe")
agg = df.groupby('dataset')\
.agg([np.mean, np.var])\
.transpose()
groups = df.groupby('dataset')
corr = [g.corr()['x'][1] for _, g in groups]
builder = report.DFBuilder(agg.columns)
builder.row(corr)
大草帽年代fits = [np.polyfit(g['x'], g['y'], 1) for _, g in groups]
builder.row([f[0] for f in fits])
builder.row([f[1] for f in fits])
bottom = builder.build(['corr', 'slope', 'intercept'])
return df, pd.concat((agg, bottom))

(3)下面这个函数回来一个字符串,这个字符串有一部分是Markdown,有一部分是重组的文字,有一部分是HTML,这首要是由于原生的Markdown不支撑图表:古宜娣

def generate(table):
writer = report.RSTWriter()
writer.h1('Anscombe Statistics')
writer.add(tabulate(table, tablefmt='html', floatfmt='.3f'))
return writer.rst

(4)制作数据并相应地与Seaborn的lmplot()函数线性拟合:

def plot(df):
sns.set(style="ticks")
g = sns.lmplot(x="x", y="y", col="dataset",
hue="dataset", data=df,
col_wrap=2, ci=None, palette="muted", size=4,
scatter_kws={"s": 50, "alpha": 1})
plotting.embellish(g.fig.axes)

(5)展现一个核算数据的表格如下:

df, table = aggregate()
from IPython.display import display_markdown
display_markdown(generate(table), raw=True)

下表中显现每个数据集的简直相同的核算数据(我修改了IPython配置文件里的 custom.css,所以下表是有色彩的):

(6)以下几行代码制作了数据集:

%matplotlib inline
plot(df)

请拜见以下截图了解终究成果:

02 挑选Seaborn的调色板

Seaborn的调色板和matplotlib的色彩表相似。色彩能够协助你发现数据中的形式,也是重要的可视化组成部分。Seaborn有很丰厚的调色板,在这个示例中会将其可视化。

  • 操作过程

(1)导入部分如下:

import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
from dautil import plotting

(2)运用以下函数协助制作调色板:

def plot_palette(ax, plotter, pal, i, label, ncol=1):
n = len(pal)
x = np.linspace(0.0, 1.0, n)
y = np.arange(n) + i*n
ax.scatter(x, y, c=x,
cmap=mpl.colors.ListedColormap(list(pal)),
s=200)
plotter.plot(x,y,label=label)
handles, labels = ax.get_legend_handles_labels()
ax.legend(loc='best', ncol=ncol, fontsize=18)

(3)分类调色板(categorical palette)关于分类数据很有用,例如性别、血型等。以下函数能够制作一些Seaborn的分类调色板:

def plot_categorical_palettes(ax):
palettes = ['deep', 'muted', 'pastel', 'bright', 'dark','colorblind']
plotter = plotting.CyclePlotter(ax)
ax.set_title('Categorical Palettes')
for i, p in enumerate(palettes):
pal = sns.color_palette(p)
plot_palette(ax, plotter, pal, i, p, 4)

(4)圆形色彩体系(circular color system)一般用HLS(色度亮度饱和度,Hue Lightness Saturation)来替代RGB(红绿蓝Red Gree Blue)色彩空间。假如你有许多分类这将会很有用。以下函数能够运用HLS体系制作调色板。

def plot_circu谷歌卫星地图下载器,干货:用Python玩转数据可视化,炫酷图表是这样做出来的,活佛济公3lar_palettes(ax):
ax.set_title('Circular Palettes')
plotter = plotting.CyclePlotter(ax)
pal = sns.color_palette("hls", 6)
plot_palette(ax, plotter, pal, 0, 'hls')
sns.hls_palette(6, l=.3, s=.8)
plot_palette(ax, plotter, pal, 1, 'hls l=.3 s=.8')
pal = sns.color_palette谷歌卫星地图下载器,干货:用Python玩转数据可视化,炫酷图表是这样做出来的,活佛济公3("husl", 6)
plot_palette(ax, plotter, pal, 2, 'husl')
sns.husl_palette(6, l=.3, s=.8)
plot_palette(ax, plotter, pal, 3, 'husl l=.3 s=.8')

(5)Seaborn也有依据在线的ColorBrewer东西的调色板(http://colorbrewer2.org/)。用以下函数制作出来:

def plot_brewer_palettes(ax):
ax.set_title('Brewer Palettes')
plotter = plotting.CyclePlotter(ax)
pal = sns.color_palette("Paired")
plot_palette(ax, plotter, pal, 0, 'Paired')
pal = sns.color_palette("Set2", 6)
plot_palette(ax, plotter, pal, 1, 'Set2')

(6)接连调色板(sequential palettes)关于数据规模很广的数据来说很有用,比如说稀有量级差异的数据。用以下函数制作出来:

def plot_sequential_palettes(ax):
ax.set_title('Sequential Palettes')
plotter = plotting.CyclePlotter(ax)
pal = sns.color_palette("Blues")
plot_palette(ax, plotter, pal, 0, 'Blues')
pal = sns.color_palette("BuGn_r")
plot_palette(ax, plotter, pal, 1, 'BuGn_r')
pal = sns.color_palette("GnB南山南背面的恐惧故事u_d")
plot_palette(ax, plotter, pal, 2, 'GnBu_d')
pal = sns.color_palette("cubehelix", 6)
plot_palette(ax, plotter, pal, 3, 'cubehelix')

(7)以下几行代码调用了咱们之前界说的函数:

%matplotlib inline
fig, axes = plt.subplots(2, 2, figsize=(16, 12))
plot_ca谷歌卫星地图下载器,干货:用Python玩转数据可视化,炫酷图表是这样做出来的,活佛济公3tegorical_palettes(axes[0][0])
plot_ci95后女生弃学从商rcular_palettes(axes[0][1])
plot_brewer_palettes(axes[1][0])
plot_sequential_palettes(axes[1][1])
plotting.hide_axes(axes)
plt.tight_layout()

请拜见以下截图了解终究成果:

03 挑选matplotlib的色彩表

matplotlib的色彩表最近受到了许多批判,由于它们可能会误导用户,可是在我看来大多数的色彩表仍是不错的。默许的色彩表在matplotlib 2.0中有一些改善,能够在这儿检查:

http://matplotlib.org/style_changes.html

当然,有些matplotlib的色彩表不支撑一些不错的参数,比如说jet。在艺术中,就像数据剖析中相同,简直没有什么东西是肯定正确的,所以这儿就交给读者去判别。

实际上,我觉得考虑怎么处理印刷出书物以及各式各样的色盲问题是很重要的。在这个示例中我将用色条来可视化相对安全的色彩表。这儿运用到的是matplotlib许多色彩表中的很小一部分。

  • 操作过程

(1)导入部分如下:

import matplotlib.pyplot as plt
import matplotlib as mpl
from dautil import plotting

(2)经过以下代码画出数据集:

fig, axes = plt.subplots(4, 4)
cmaps = ['autumn', 'spring', 'summer', 'winter',
'Reds', 'Blues', 'Greens', 'Purples',
'Oranges', 'pink', 'Greys', 'gray',
'binary', 'bone', 'hot', 'cool']
for ax, cm in zip(axes.ravel(), cmaps):
cmap = plt.cm.get_cmap(cm)
cb = mpl.colorbar.ColorbarBase(ax, cmap=cmap,
orientation='horizontal')
cb.set_label(cm)
ax.xaxis.set_ticklabels([])
plt.tight_layout()
plt.show()

请拜见以下截图了解终究成果:

04 与IPython Notebook部件交互

简略来说,这些部件能够让你像在HTML表单里相同挑选一些值,这包括滑块、下拉框、挑选框等。正如你会读到的,这些部件十分便利将咱们在第1章中提及的气候数据可视化。

  • 操作过程

(1)导入部分如下:

import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from IPython.html.widgets import interact
from dautil import data
from dautil import ts

(2)加载数据一起恳求内联图:

%matplotlib inline
df = data.Weather.load()

(3)界说以下函数,这个函数会显现气泡图:

def plot_data(x='TEMP', y='RAIN', z='WIND_SPEED', f='A', size=10,cmap='Blues'):
dfx = df[x].resample(f)
dfy = df[y].resample(f).mean()
dfz = df[z].resample(f).mean()
bubbles = (dfz - dfz.min())/(dfz.max() - dfz.min())
years = dfz.index.year
sc = plt.scatter(dfx, dfy, s= size * bubbles + 9, c = years,
cmap=cmap, label=data.Weather.get_header(z),
alpha=0.5)
plt.colorbar(sc, label='Year')
freqs = {'A': 'Annual', 'M': 'Monthly', 'D': 'Daily'}
plt.title(freqs[f] + ' Averages')
plt.xlabel(data.Weather.get_header(x))
plt.ylabel(data.Weather.get_header(y))
plt.legend(loc='best')

(4)经过以下代码调用咱们刚刚定锡林郭勒气候预报义的函数:

vars = df.columns.tolist()
freqs = ('A', 'M', 'D')
cmaps = [cmap for cmap in plt.cm.datad if not cmap.endswith("_r")]
cmaps.sort()
interact(plot_data, x=vars, y=vars, z=vars, f=freqs,size=(100,700), cmap=cmaps)

(5)本示例需求上手操作一下来了解它的作业原理,下面是一个样例气泡图:

(6)界说另一个函数(和第(2)步中的程序同名,注释掉前一个),这个函数里咱们将数据依照日或月进行分组:

def plot_data(x='TEMP', y='RAIN', z='WIND_SPEED', 
groupby='ts.groupby_yday',
size=10, cmap='Blues'):
if groupby == 'ts.groupby_yday':
groupby = ts.groupby_yday
eli蓝男色f groupby == 'ts.groupby_month':
groupby = ts.groupby_month
else:
raise AssertionError('Unknown groupby ' + groupby)
dfx = groupby(df[x]).mean()
dfy = groupby(df[y]).mean()
dfz = groupby(df[z]).mean()
bubbles = (dfz - dfz.min())/(dfz.max() - dfz.min())
colors = dfx.index.values
sc = plt.scatter(dfx, dfy, s= size * bubbles + 9,
c = colors,cmap=cmap,
label=data.Weather.get_header(z), alpha=0.5)
plt.colorbar(sc, label='Day of Year')
by_dict = {ts.groupby_yday: 'Day of Year', ts.groupby_month: 'Month'}
plt.title('Grouped by ' + by_dict[groupby])
plt.xlabel(data.Weather.get_header(x))
plt.ylabel(data.Weather.get_header(y))
plt.legend(loc='best')

(7)用这段代码调用上述函数:

groupbys = ('ts.groupby_yday',儿童伪娘 'ts.groupby_month')
interact(plot_data, x=vars, y=vars, z=vars, groupby=groupbys,
size=(100,700), cmap=cmaps)

请拜见以下截图了解终究成果:

我对这个图的第一印象是温度和风速似乎是正相关的。

05 检查散点图矩阵

假如你的数据会集变量不是许多,那么检查你数据一切的散点图是个不错的主见。经过调用Seaborn或许pandas的一个函数就能够做到。这些函数会展现一个矩阵的核密朴贤瑞度估量图或对角线上的直方图。

  • 操作过程

(1)导入部分如下:

import pandas as pd
from dautil import data
from dautil import ts
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib as mpl

(2)以下几行代码加载气候数据:

df = data.Weather.load()
df = ts.groupby_yday(df).mean()
df.columns = [data.Weather.get_header(c) for c in df.columns]

(3)用Seaborn的pairplot()函数制作图形,这个函数默许制作对角线上的直方图:

%matplotlib inline
# Seaborn plotting, issues due to NaNs
sns.pairplot(df.fil九趣英语lna(0))

成果如下所示:

(4)经过pandas的scatter_matrix()函数生成一个相似的图形,并恳求对角线上的核密度估量图:

sns.set({'figure.figsize': '16, 12'})
mpl.rcParams['axes.linewidth'] = 9
mpl.rcParams['lines.linewidth'] = 2
plots = pd.scatter_matrix(df, marker='o', diagonal='kde')
plt.show()

请拜见以下截图了解终究成果:

06 经过mpld3运用d3.js进行可视化

d3.js是在2011年推出的一个JavaScript数据可视化库,咱们能够在IPython Notebook里边运用这个库。咱们将在一个一般matplotlib图上增加一个悬浮东西提示。这儿咱们会运用mpld3包作为运用d3.js的桥梁。这个示例不需求任何JavaScript编程。

1. 准备作业

经过以下指令设备mpld3 0.2:

$ [sudo] pip install mpld3

2. 操作过程

(1)由导入开端,并启用mpld3:

%matplotlib inline
import matplotlib.pyplot as plt
import mpld3
mpld3.enable_notebook()
from mpld3 import plugins
import seaborn as sns
from dautil import data
from dautil import ts

(2)加载气候数据并依照下面的办法将其制作出来:

df = data.Weather.load()
df = df[['TEMP', 'WIND_SPEED']]
df = ts.groupby_yday(df).mean()
fig, ax = plt.subplots()
ax.set_title('Averages Grouped by Day of Year')
points = ax.scatter(df['TEMP'], df['WIND_SPEED'],
s=30, alpha=0.3)
ax.set_xlabel(data.Weather.get_header('TEMP'))
ax.set_ylabel(data.Weather.get_header('WIND_SPEED'))
labels = ["Day of year {0}".format(i) for i in range(366)]
tooltip = plugins.PointLabelTooltip(points, labels)
plugins.connect(fig, tooltip)

高亮显现的那一行是东西栏。鄙人面的截图中,咱们能够看到“Day of year 31”文本来自这个东西栏:

如你所见,在这个图形的底部,还有能够平移和缩放图形的设备。

07 创立热图

热图运用一组色彩在矩阵中可视化数据。开端,热图用于表明金融资产(如股票)的价格。Bokeh是一个Python包,能够在IPython Notebook中显现热图,或许生成一个独立的HTML文件。

1. 准备作业

Anaconda自带了Bokeh 0.9.1。Bokeh的设备阐明在:

http://bokeh.pydata.org/en/latest/docs/installation.html

2. 操作过程

(1)导入部分如下:

from collections import OrderedDict
from dautil import data
from dautil import ts
from dautil import plotting
import numpy as np
import bokeh.plott谷歌卫星地图下载器,干货:用Python玩转数据可视化,炫酷图表是这样做出来的,活佛济公3ing as bkh_plt
from bokeh.models import HoverTool

(2)下面的函数加载了温度数据并依照年和月进行分组:

def load():
df = data.Weather.load()['TEMP']
return ts.groupby_year_month(df)

(3)界说一个将数据重排成特别的Bokeh结构的函数:

def create_source():
colors = plotting.sample_hex_cmap()
month = []
year = []
color = []
avg = []
for year_month, group in load():
month.append(ts.short_month(year_month[1]))
year.append(str(year_month[0]))
monthly_avg = np.nanmean(group.values)
avg.append(monthly_avg)
color.append(colors[min(int(abs(monthly_avg)) - 2, 8)])
source = bkh_plt.ColumnDataSource(data=dict(month=month, year=year, color=color, avg=avg))
return year, source

(4)界说一个回来横轴标签的函数:

def all_years():
years = set(year)
start_year = min(years)
end_year = max(years)
return [str(y) for y in range(int(start_year), int(end_year),5)]

(5)界说一个制作包括了悬浮东西栏的热图的函数:

def plot(year, source):
fig = bkh_plt.figure(title="De Bilt, NL Temperature (1901 -2014)",
x_range=all_years(),
y_range=list(reversed(ts.short_months())),
toolbar_location="left",
tools="resize,hover,save,
pan,box_zoom,wheel_zoom")
fig.rect("year", "month", 1, 1, source=source,
color="color", line_color=None)
fig.xaxis.major_label_orientation = np.pi/3
hover = fig.select(dict(type=HoverTool))
hover.tooltips = OrderedDict(谷歌卫星地图下载器,干货:用Python玩转数据可视化,炫酷图表是这样做出来的,活佛济公3[
('date', '@month @year'),
('avg', '@avg'),
])
bkh_plt.output_notebook()
bkh_plt.show(fig)

(6)调用上述界说的函数:

year, source = create_source()
plot(year, source)

请拜见以下截图了解终究成果:

08 把箱线图、核密度图和小提琴图组合

小提琴图(Violin Plot)是一种组合盒图和核密度图或直方图的图形类型。Seaborn和matplotlib都能供给小提琴图。在这个示例中咱们将运用Seaborn来制作气候数据的Z分数(标准分数),分数的标准化并不是必需的,可是假如没有它的话小提琴图会很发散。

  • 操作过程

(1)导入部分如下:

import seaborn as sns
from dautil import data
import matplotlib.pyplot as plt

(2)加载气候数据并核算标准分数:

df = data.Weather.load()
zscores = (df - df.mean())/df.std()

(3)制作标准分数的小提琴图:

%matplotlib inline
plt.figure()
plt.title('Weather Violin Plot')
sns.violinplot(zscores.resample('M').mean())
plt.ylabel('Z-scores')

第一个小提琴图如下所示:

(4)制作雨天和旱天相对风速伏喻夜的小提琴图:

plt.figure()
plt.title('Rainy Weather vs Wind Speed')
categorical = df
categorical['RAIN'] = categorical['RAIN'] > 0
ax = sns.violinplot(x="RAIN", y="WIND_SPEED",data=categorical)

第二个小提琴图如下所示:

09 运用蜂巢图可视化网络图

蜂巢图(Hive Plot)是用于制作网络图的可视化技能。在蜂巢图中咱们将边际制作为曲线。咱们依据特点对节点进行分组,并在径向轴上显现它们。

有些库在蜂窝图方面很专业。一起咱们将运用API来区分Facebook用户的图形。

https://snap.stanford.edu/data/egonets-Facebook.html

这个数据归于斯坦福网络剖析项目(Stanford Network Analysis Project,SNAP),它也供给了Python API,可是现在SNAP API还不支撑Python 3。

1. 准备作业

Anaconda自带了NetworkX 1.9.1,它设备阐明可见:

https://networkx.github.io/documentation/latest/install.html

一起咱们还需求community包,设备地址:

https://bitbucket.org/taynaud/python-louvain

在PyPi上有一个同名的包,可是它和咱们需求设备的没有任何关系。设备hiveplot包,这个包保管在:

https://github.com/ericmjl/hiveplot

$ [sudo] pip install hiveplot 

本示例中运用的hiveplot版别是0.1.7.4。

2. 操作过程

(1)导入部分如下所示:

import networkx as nx
import community
import matplotlib.pyplot as plt
from hiveplot import HivePlot
from collections import defaultdict
from dautil import plotting
from dautil import dataython

(2)载入数据,创立一个NetworkX的Graph目标:

fb_file = data.SPANFB().load()
G = nx.read_edgelist(fb_file,create_using = nx.Graph(),nodetype = int)
print(nx.info(G))

(3)切割图形目标并依照如下的办法创立一个nodes字典:

parts = community.best_partition(G)
nodes = defaultdict(list)
for n, d in parts.items():
nodes[d].append(n)

(4)这个图形会十分大,所以咱们将会创立三个边际分组:

edges = defaultdict(list)
for u, v in nx.edges(G, nodes[0]):
edges[0].append((u, v, 0))
for u, v in nx.edges(G, nodes[1]):
edges[1].append((u, v, 1))
for u, v in nx.edges(G, nodes[2]):
edges[2].append((u, v, 2))

(5)制作这个图形大约需求6分钟:

%matplotlib inline
cmap = plotting.sample_hex_cmap(name='hot', ncolors=len(nodes.keys()))
h = HivePlot(nodes, edges, cmap, cmap)
h.draw()
plt.title('Facebook Network Hive Plot')

等候一段时刻,咱们能够看到如下的图形:

10 显现地图

无论是处理全球数据仍是本地数据,运用地图都是一个合适的可视化办法。咱们需求用坐标来将数据定位到地图上,一般咱们运用的便是这个点的经度和纬度。有许多现有的文件格局能够存储地舆位置数据。

在这个示例中咱们将会运用到特别的shapefile格局以及更常见的制表符分隔值(Tab Separated Values,TSV)格局。shapefile格局是由Esri公司创立的,并包括了三个必需的文件,它们的扩展名分别是.shp、.shx、.dbf。

.dbf文件包括了shapefile中每一个地舆位调教日记置的额定信息的数据库。咱们将运用的shapefile包括了国家鸿沟、人口以及国内生产总值(Gross Domestic Product,GDP)的数据。咱们能够运用cartopy库下载shapefile。

TSV文件包括了超越4000个城市的按时刻序列的人口数据,能够在这儿取得:

https://nordpil.com/resources/world-database-of-large-cities/

1. 准备作业

首要咱们需求从源文件设备Proj.4,或许你也能够运用二进制版别设备:

https://github.com/OSGeo/proj.4/wiki

Proj.4的设备阐明在:

https://github.com/OSGeo/proj.4

然后咱们能够经过pip设备cartopy,本示例中运用到的是cartopy-0.13.0。或许你也能够经过下面的指令进行设备:

$ conda install -c scitools cartopy

2. 操作过程

(1)导入部分如永久地址下所示:

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import cartopy.io.shapereader as shpreader
import matplotlib as mpl
import pandas as pd
from dautil import options
from dautil import data

(2)咱们会运用色彩来做国家人口以及人口许多的城市的可视化。引进如下数据:

countries = shpreader.natural_earth(resolution='110m',
category='cultural',
name='admin_0_countries')
cities = pd.read_csv(data.Nordpil().load_urban_tsv(),sep='\t', encoding='ISO-8859-1')
mill_cities = cities[cities['pop2005'] > 1000]

(3)运用以下代码画出地图,以及相应的色彩条,并将人口许多的城市标记在地图上:

%matplotlib inline
plt.figure(figsize=(16, 12))
gs = 福察皇后mpl.gridspec.GridSpec(2, 1,
height_ratios=[20, 1])
ax = plt.subplot(gs[0], pr杨增和ojection=ccrs.PlateCarree())
norm = mpl.colors.Normalize(vmin=0, vmax=2 * 10 ** 9)
cmap = plt.cm.Blues
ax.set_title('Population Es谷歌卫星地图下载器,干货:用Python玩转数据可视化,炫酷图表是这样做出来的,活佛济公3timates by Country')
for country in shpreader.Reader(countries).records():
ax.add_geometries(country.geometry, ccrs.PlateCarree(),
facecolor=cmap(
norm(country.attributes['pop_e石兰大露八字奶st'])))
plt.plot(mill_cities['Longitude'],
mill_cities['Latitude'], 'r.',
label='Populous city',
transform=ccrs.PlateCarree())
options.set_mpl_options()
plt.legend(loc='lower left')
cax = plt.subplot(gs[1])
cb = mpl.colorbar.ColorbarBase配驴(cax,
cmap=cmap,
norm=norm,
orientation='horizontal')
cb.set_label('Population Estimate')
plt.tight_layout()

11 运用类ggplot2图

ggplot2是在R言语用户群中很盛行的数据可视化库。ggplot2的首要思维是在数据可视化的产出中包括多个图层。就像一个画家,咱们从一个空的画布开端,紧接着一步步地增加图层。

一般咱们运用rpy2来让Python接入R言语代码。可是,假如咱们仅仅想运用ggplot2的话,用pyggplot库会显得愈加便利。在这个示例中将完成三个国家的人口增长的可视化,运用的数据来自pandas上检索到的世界银行的数据。这些数据中包括各种目标和相关元数据。在这儿能够下载到关于这些目标的描绘:

http://api.worldbank.org/v2/en/topic/19?downloadformat=excel

咱们能够以为世界银行的数据集是静态的。可是,相似的数据集常常发生改变,足以占用剖析师一切的时刻。替换目标的姓名显着会影响代码,所以我决议经过joblib库来缓存数据。可是这个办法美中不足的是不能pickle一切的Python目标。

1. 准备作业

首要你需求有设备了ggplot2的R言语环境。假如你不是特别想运用ggplot2,或许你能够越过这个示例。

R言语的主页是:

http://www.r-project.org/

ggplot2的文档:

http://docs.ggplot2.org/current/index.html

你能够经过pip设备pyggplot,我运用的是pyggplot-23。设备joblib,请阅览:

https://pythonhosted.org/joblib/installing.html

我的Anaconda中有joblib 0.8.4。

2. 操作过程

(1)导入部分如下:

import pyggplot
from dautil import data

(2)经过以下代码加载数据:

dawb = data.Worldbank()
pop_grow = dawb.get_name('pop_grow')
df = dawb.download(indicator=pop_grow, start=1984, end=2014)
df = dawb.rename_columns(df, use_longnames=True)

(3)下面用咱们新建的pandas目标DataFrame初始化pyggplot:

p = pyggplot.Plot(df)

(4)增加条形图:

p.add_bar('country', dawb.get清穿之年氏不粘_longname(pop_grow), color='year')

(5)翻转图表,使条形图指向右边并烘托

p.coord_flip(曾宇男)
p.render_notebook()

请拜见以下截图了解终究成果:

12 运用影响图高亮数据

相似于气泡图,影响图(influence plot)会考虑到单个数据点拟合、影响和杠杆之后的残差。残差的巨细制作在垂直轴上,而且能够标识数据点是异常值。为了更好地了解影响图,能够看下面的这些方程。

依据statsmodels文档,残差按标准偏差式(2.1)进行缩放,在式(2.2)中,n是观测点的数量,p是回归量。式(2.3)咱们习气称之为帽子矩阵(hat-matrix)。帽子矩阵的对角元素给出称为杠杆(leverage)的特别衡量,杠杆作为水平轴的量,能够标识出影响图的潜在影响。

在影响图中,影响会决议绘图点的巨细。影响大的点往往具有高残差和杠杆。statsmodels能够运用Cook间隔(Cook's distance)(见式(2.4))或许DFFITS(见式(2.5))来衡量影响值。

  • 操作过程

(1)导入部分如下:

import matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.formula.api import ols
from dautil import data

(2)获取可用的国家的编码:

dawb = data.Worldbank()
countries = dawb.get_countries()[['name', 'iso2c']]

(3)从世界银行加载数据:

population = dawb.download(indicator=[dawb.get_name('pop_grow'),
dawb.get_name('gdp_pcap'),
dawb.get_name('primary_education')],
country=countries['iso2c'],
start=2014,
体操少女end=2014)
population = dawb.rename_columns(population)

(4)界说一个一般最小二乘模型如下:

population_model = ols("pop_grow ~ gdp_pcap + primary_education",
谷歌卫星地图下载器,干货:用Python玩转数据可视化,炫酷图表是这样做出来的,活佛济公3data=population).fit()

(5)运用Cook间隔描绘这个模型的影响图:

%matplotlib inline
fig, ax = plt.subplots(figsize=(19.2, 14.4))
fig = sm.graphics.influence_plot(population_model, ax=ax, criterion="cooks")
plt.grid()

请拜见以下截图了解终究成果:

关于作者:Ivan Idris,曾是Java和数据库使用开发者,后专心于Python和数据剖析范畴,致力于编写洁净、可测验的代码。他仍是《Python Machine Learning By Example》《NumPy Cookbook》等书的作者,在工程实践和书本编撰方面都十分有经历。

本文摘编自《Python数据剖析实战》,经出书方授权发布。

延伸阅览《Python数据剖析实战》

引荐语:面向实际问题的Python数据剖析实践攻略,经过丰厚的实例、很多的代码片段和图例,能够协助你快速把握用Python进行数据剖析的各种技能。

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。