各种著名的数据科学公开数据集与数据源

本文整合整合数据科学领域一些著名的数据集。包括数据集简介和数据集获取。

方便做数据分析练习和可视化练手时使用。

藏在Python库里的数据集

一些可视化库和机器学习库有着内置数据集的传统。因为库的文档和案例通常会使用一些数据集来举例、内置数据集后方便用户学习该库的可视化语法,方便复现效果。

Python里内置数据集的库有: plotnine、ggplot、Altair、seaborn、bokeh、plotly、sklearn等等。

plotnine里:通过import plotnine.data as pnd; pnd.__all__语句列出可以直接调用的数据集:

1
__all__ = ['diamonds', 'economics', 'economics_long', 'midwest', 'mpg', 'msleep', 'presidential', 'seals', 'txhousing', 'luv_colours', 'faithful', 'faithfuld', 'huron', 'meat', 'mtcars', 'pageviews']

通过 df=pnd.diamonds 语句载入数据。
数据表实际保存在 site-packages\plotnine\data 文件夹下,都是csv格式存在本地。

ggplot提供的数据集如下:

1
chopsticks, diamonds, mtcars, meat, pageviews, pigeons, movies, mpg, salmon, load_world

通过 import ggplot.datasets as gds;df=gds.diamonds 可以导入对应数据集。
除了world世界地图数据是需要从github下载之外,其他数据集都存在本地,site-packages\ggplot\datasets目录下,也都是csv文件。

Altair:数据集在vega_data里,

1
2
3
from vega_datasets import data
data.list_datasets()
#['7zip', 'airports', 'annual-precip', 'anscombe', 'barley', 'birdstrikes', 'budget', 'budgets', 'burtin', 'cars', 'climate', 'co2-concentration', 'countries', ...]

vega_data里的数据集内容挺多,有统计数据也有地理数据,还有不同数据量的版本,例如flights数据集包含了2k、5k、200k、3m等多个版本。
调用是写:df = data('iris')或者df = data.iris(),数据存在在Anaconda3/Lib/site-packages/vega_datasets目录下,存本地的在local_datasets.json里有描述。本地存的有csv格式的也有json格式的。

seaborn库:seaborn.get_dataset_names()列出可以调用的数据集:

1
2
3
import seaborn as sns
sns.get_dataset_names()
['anagrams', 'anscombe', 'attention', 'brain_networks', 'car_crashes', 'diamonds', 'dots', 'exercise', 'flights', 'fmri', 'gammas', 'geyser', 'iris', 'mpg', 'penguins', 'planets', 'tips', 'titanic']

通过iris=seaborn.load_dataset('iris')载入数据,不过值得说明的是seaborn库本地初始时是不存着这些数据集的,这个和其他库不同,seaborn调用 load_dataset() 的时候是从GitHub下载到本地,所以有时候会下载失败,使用时可以从seaborn-data 自行下载文件再导入(或者考虑用其他库内置的数据集)。

plotly:默认的数据集不多,有7个。

1
2
3
import plotly.express as px
px.data.__all__
#['carshare', 'election', 'election_geojson', 'gapminder', 'iris', 'tips', 'wind']

通过df=px.data.gapminder()调用。

bokeh:数据集相关文件在site-packages/bokeh/sampledata路径下,它把一些通用的数据集都封装为py文件进行调用,例如iris数据集经过了一层封装叫flowers,载入数据是用from bokeh.sampledata.iris import flowers
没有语句可以列出有哪些数据集,从代码中拆出来它内置的数据集有:

1
2
#files=
['CGM.csv', 'US_Counties.zip', 'us_cities.json', 'unemployment09.csv', 'AAPL.csv', 'FB.csv', 'GOOG.csv', 'IBM.csv', 'MSFT.csv', 'WPP2012_SA_DB03_POPULATION_QUINQUENNIAL.zip', 'gapminder_fertility.csv', 'gapminder_population.csv', 'gapminder_life_expectancy.csv', 'gapminder_regions.csv', 'world_cities.zip', 'airports.json', 'movies.db.zip', 'airports.csv', 'routes.csv']

bokeh里iris数据集的调用关系

sklearn,内置了一些经典的机器学习练手数据集。

1
2
3
4
import sklearn.datasets as dts
[i for i in dts.__all__ if 'load' in i]
#输出:
['load_boston','load_diabetes','load_digits','load_files','load_iris','load_breast_cancer','load_linnerud', 'load_mlcomp','load_sample_image', 'load_sample_images','load_svmlight_file','load_svmlight_files']

因此其调用方式:df=dts.load_iris()

另外,sklearn的数据集有很多种:

  • 自带的小数据集,也就是我们上面列出的可以通过dts.load_name()直接导入的;
  • 需在线下载的数据集,通过dts.fetch_name()导入;
  • 模拟生成的数据集,dts.make_name();
  • svmlight/libsvm格式的数据集,导入语句:dts.load_svmlight_file(name);
  • 从买了data.org在线下载获取的数据集:dts.fetch_mldata(name);;

著名公开数据集

一些数据科学领域广泛使用(在教程文章、课程练习等场景也广泛使用)的数据集简介。

iris

鸢尾花数据集。首次出现在著名的英国统计学家和生物学家Ronald Fisher 1936年的论文《The use of multiple measurements in taxonomic problems》中,被用来介绍线性判别式分析
数据集中,包括了三类不同的鸢尾属植物:Iris Setosa,Iris Versicolour,Iris Virginica。
每类50个样本、共150个样本。属性包括花萼长度、宽、花瓣长、宽,单位都是cm。

Iris数据集各列含义

如果安装了seaborn、plotly、bokeh这些可视化库,可以通过上一章提到的语句获取iris数据。
一些在线的数据集下载地址如下:

titanic

声名远扬的泰坦尼克号船员数据集,数据集描述的是船员的性别、年龄、所在船仓等级等特征及最后是否存活。网络上大量的文章是关于泰坦尼克号船员生存率分析的,通过分类或回归算法拟合船员的基本特征与获救情况的关系,甚至一些文章鼓吹将这个项目写入简历。

泰坦尼克数据集概览

在seaborn库里可以通过sns.load_dataset('titanic')获取泰坦尼克数据集。
在线数据源:

boston

波士顿房价数据集。经典的用于回归任务的数据集,机器学习类文章大家喜欢写的是波士顿房价预测,热度和泰坦尼克号船员生存率分析接近了。boston数据集有13个特征,包括各类用地比例、师生比例、每居民房子数、可达性指数等,除土地是否在查尔斯河旁边是一个二值变量,其余特征为数值类型。

该数据集在sklearn库里可以直接导入。

diamonds

钻石数据集。该数据集有10列,csv文件约2.64MB,包含了近54000颗钻石的价格及其他属性。Diamonds数据集在各种R语言数据分析文章里有很高的出镜率,大家普遍用来做探索性数据分析和可视化案例。

diamonds数据列概览

具体各特征含义如下:

  • 钻石价格:以美元计价;
  • 克拉:钻石重量(0.2-5.01);
  • 切割质量:分为公平,良好,非常好,高级,理想 5个等级;
  • 台面:钻石顶部宽度相对于最宽点(43-95);
  • 钻石颜色,从J(最差)到D(最好);
  • 纯度:测量钻石的纯净度(I1(最差),SI2,SI1,VS2,VS1,VVS2,VVS1,IF(最佳));
  • X:长度mm(0-10.74);
  • Y:宽度mm(0-58.9);
  • Z:深度mm(0-31.8);
  • 深度:总深度百分比,根据X,Y,Z算出:=z/平均值(x,y)= 2 * z /(x + y)(43-79)

diamonds数据集详细描述:
https://ggplot2.tidyverse.org/reference/diamonds.html

包含该数据集的库包括seaborn、plotnine及ggplot。

gapminder

Gapminder 本身是一家位于瑞典斯德哥尔摩的非盈利机构,其收集和公开了关于世界的经济、教育、环境、健康等专题数据。Hans Rosling的TED演讲用了几个生动的例子展现了gapminder统计数据的魅力。

plotly包含了一个gapminder样本数据集,
在线数据集下载:

gapminder数据集可视化案例

wine

葡萄酒数据集,该数据集描述来自意大利同一地区三个不同品种的葡萄酒进行化学分析的结果,每种所含的13种成分的数量。特征包括Alcohol、Ash、Total phenols、Hue等13种。

cars

cars数据集现在有两种可能性,一种是在1983年美国统计协会(ASA)公布的,由Ramos和Donoho收集的406辆汽车数据,包括车重(weight)、马力(horsepower)、没加仑油行驶(MPG)、汽车产地(origin)等特征。

汽车特征数据集概览

该数据集在Altair库里有,Altair的教程文档里有关于cars数据集的可视化案例:
https://altair-viz.github.io/altair-tutorial/notebooks/01-Cars-Demo.html

另一种是斯坦福大学整理的16185张汽车图片数据集。

汽车照片数据集介绍

汽车图片数据集下载源:

anscombe

安斯库姆四重奏(Anscombe’s Quartet) ,是一个用于展现当数据序列差别非常大时一些统计值却相等的著名数据集。Anscombe数据集由统计学家Francis Anscombe在1973年构造出来,一共包含了4组数据,每组11个X-Y散点。这四组数据均值、方差、相关系数及线性回归曲线(mean, variance, correlation, and linear regression lines)都相同,X的平均数都是9.0,Y值的平均数都是7.5;X值的方差都是11.0,Y值的方差都是4.12;X、Y之间的相关系数皆为0.816,线性回归线都是y=3.0+0.5x。从统计值来看,这四个数据集似乎非常接近,但具体分布差别巨大。
这个数据集体现了数据实际分布的可视化的重要性以及用对拟合方式的重要性。文字还是苍白了,可以看图去体会:

Anscombe's Quartet数据点分布

I是最“正常”的一组数据,也是这几个统计值擅长勾画的内容,II所反映的事实上是一个精确的二次函数关系,只是在错误地应用了线性模型后,各项统计数字与第一组数据恰好都相同;III描述的是一个精确的线性关系,只是这里面有一个异常值,它导致了上述各个统计数字,尤其是相关度值的偏差;IV则是一个更极端的例子,数据集中在(8,7)附近,但异常值(19,12.5)使得平均数、方差、相关度、线性回归线等所有统计数字全部发生偏差。

注,上图绘制代码:

1
2
3
4
import seaborn as sns
g = sns.FacetGrid(df, col="Series")
g.map(sns.regplot, "X", "Y",color='#1EAFAE',ci=None)
g.add_legend()

airports

地理数据,美国机场的坐标点。包含5列,分别为airport code, city, state, latitude, and longitude。

在Altair、bokeh库里能直接导入使用。
数据集公开地址:

热门整合数据源