极客时间--数据分析课程笔记

数据挖掘的知识清单

数据挖掘的基本流程:

1.商业理解:数据挖掘不是目的,我们的目的是更好地帮助业务。所以第一步要从商业的角度理解项目需求,在这个基础上,再对数据挖掘的目标进行定义。
2.数据理解:尝试收集部分数据,然后对数据进行探索,包括数据描述,数据质量验证等。形成对数据的初步认知。
3.数据准备:开始手收集数据,并对数据进行清洗,集成等操作,完成数据挖掘前的准备工作。
4.模型建立:选择和应用各种数据挖掘模型,并进行优化,以便得到更好的分类结果。
5.模型评估:对模型进行评价,并检查构建模型的每个步骤,确认模型是否实现了预定的商业目标。
6.上线发布: 模型的作用是从数据中寻找“金矿”,也就是我们所说的“知识”。获得的知识要转化为用户可以使用的方式,比如一份报告,或者一个复杂的,可重复的数据挖掘过程。

数据挖掘十大算法:

分类算法:C4.5 , 朴素贝叶斯(Naive Bayes), SVM, KNN, Adaboost, Cart

聚类算法:K-Means , EM

关联分析:Apriori

连接分析:PageRank

数据挖掘的数学原理

1.概率论和数理统计
2.线性代数
3.图论
4.最优化方法

知识清单

Lesson 3:python 基础语法

就当复习一下。
list 列表
可以用append() 在尾部添加元素。insert()在具体位置插入元素。pop() 删除尾部的元素(这个其实是把list当做一个栈来使用,pop()返回最后一个元素,append()相当于push入栈)。

Tuple元组
不可修改的list

dictionary字典
键值对。多次对同一个key放入value,后面的值会把前面的值冲掉。删除字典的元素用pop(key)
查询值用 get(key),如果不存在,可以用一个默认值,写作 get(key,default)

set集合
集合 set 和字典 dictory 类似,不过它只是 key 的集合,不存储 value。同样可以增删改查,增加使用 add(),
删除使用remove(),查看某个元素是否在集合里,用 in

注释
引用
函数 def

numpy

ps.为了使计算更快,提高内存和计算资源的使用率,需要避免采用隐式拷贝,而采用就地操作的方式。

ndarray 多维数组

在Numpy数组中,维数称为秩(rank),一维数组的秩为 1, 二维数组的秩为 2,等等等。
在NumPy中,每一个线性的数组称为一个轴,其实秩就是描述轴的数量。

创建数组

import numpy as np
a = np.array([1, 2, 3])
b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b[1,1]=10
print a.shape
print b.shape
print a.dtype
print b

结果:

(3L,)
(3L, 3L)
int32
[[ 1  2  3]
 [ 4 10  6]
 [ 7  8  9]]

多重数组,把一个线性数组作为元素,嵌套起来变成多维数组。

结构数组:

import numpy as np
persontype = np.dtype({
    'names':['name', 'age', 'chinese', 'math', 'english'],
    'formats':['S32','i', 'i', 'i', 'f']})
peoples = np.array([("ZhangFei",32,75,100, 90),("GuanYu",24,85,96,88.5),
       ("ZhaoYun",28,85,92,96.5),("HuangZhong",29,65,85,100)],
    dtype=persontype)
ages = peoples[:]['age']
chineses = peoples[:]['chinese']
maths = peoples[:]['math']
englishs = peoples[:]['english']
print np.mean(ages)
print np.mean(chineses)
print np.mean(maths)
print np.mean(englishs)

定义了结构以后,就可以通过key进行分片操作了

ufunc 运算

ufunc 是universal function 的缩写,它能对数组中的每个元素进行函数操作。运算非常快。

连续数组的创建

两种方法:

x1 = np.arange(1,11,2)
x2 = np.linspace(1,9,5)

起到的作用都是一样的,创建一个[1,3,5,7,9]的数组。
但是这两种创建方法是有差异的。
np.arange(初始值,终值,步长)----和内置range()函数一样,不包括终值。

np.linspace(初始值,终值,元素个数)---创建等差数列一维数组,默认包括终值。这个函数会严格创建等差数列,意思是可能会出现浮点数。

x2 = np.linspace(1,9,4)
结果 = [1.         3.66666667 6.33333333 9.        ]

算数运算

用Numpy进行数组的加减乘除,求n次方和取余数。
不同数量的数组做运算会报错。

x1 = np.arange(1,11,2)
x2 = np.linspace(1,9,5)
print np.add(x1, x2)
print np.subtract(x1, x2)
print np.multiply(x1, x2)
print np.divide(x1, x2)
print np.power(x1, x2)
print np.remainder(x1, x2) #取余数

统计函数

1.计算数组/矩阵中的最大值函数 amax(),最小值函数 amin()

import numpy as np
a = np.array([[1,2,3], [4,5,6], [7,8,9]])
print np.amin(a)
print np.amin(a,0)  #这里的0是指的横轴。
print np.amin(a,1) #这里的1 是指的纵轴。
print np.amax(a)
print np.amax(a,0)
print np.amax(a,1)

2.计算最大值和最小值之差(极差)的函数ptp()

a = np.array([[1,2,3], [4,5,6], [7,8,9]])
print np.ptp(a)
print np.ptp(a,0)
print np.ptp(a,1)

3.数组的百分位数percentile()
返回整个数组的第P个百分位数。如用np.percentile(a,40) 即是数组a的第40%位置的数

a = np.array([[1,2,3], [4,5,6], [7,8,9]])
print np.percentile(a, 50)
print np.percentile(a, 50, axis=0)
print np.percentile(a, 50, axis=1)

4.计算数组的中位数median(),和平均数mean()

a = np.array([[1,2,3], [4,5,6], [7,8,9]])
# 求中位数
print np.median(a)
print np.median(a, axis=0)
print np.median(a, axis=1)
# 求平均数
print np.mean(a)
print np.mean(a, axis=0)
print np.mean(a, axis=1)

5.统计数组中的加权平均值average()

a = np.array([1,2,3,4])
wts = np.array([1,2,3,4])
print np.average(a)
print np.average(a,weights=wts)

weights 可以传一个权重进去。
6.统计数组中的标准差std(),方差var()

a = np.array([1,2,3,4])
print np.std(a)
print np.var(a)

Numpy排序

在Numpy里排序可以使用sort()
sort(a,axis = -1,kind = 'quicksort',order = None)
默认情况使用的是快速排序(quicksort),也有其他排序方法可以指定:合并排序(mergesort),堆排序(heapsort).
axis = -1 为默认的,即沿着数组的最后一个轴排序,可以取不同的axis轴,也可以使axis = None 代表将数组扁平化为一个向量进行排序。
order 字段可以使结构化的数组按照某个字段进行排序。

a = np.array([[4,3,2],[2,4,1]])
print np.sort(a)
print np.sort(a, axis=None)
print np.sort(a, axis=0)  
print np.sort(a, axis=1)  

pandas

pandas 提供dataframe和series两个核心数据结构。

series:一个定长的字典序列。

说是定长是因为在储存的时候,相当于两个ndarray,这个和字典结构最大的不同,因为在字典的结构里,元素的个数是不固定的。
series的两个基本属性: index 和 values。在Series结构中,index默认为0,1,2,,,,也可以自己指定序列,如index = ['a','b','c',,,,,,]

import pandas as pd
c = pd.Series([1,2,3,4,5,6],index = ['a','b','c','d','e','f'])
print(c)

也可以用字典的方式创建Series:

c = pd.Series({'a':1,'b':2,'c':3,'d':4})
print(c)

Dataframe:类似于数据库表的结构

Dataframe包括了行索引和列索引,我们可以将DataFrame看成是由相同索引的Series组成的字典类型。

import pandas as pd
from pandas import Series, DataFrame
data = {'Chinese': [66, 95, 93, 90,80],'English': [65, 85, 92, 88, 90],'Math': [30, 98, 96, 77, 90]}
df1= DataFrame(data)
df2 = DataFrame(data, index=['ZhangFei', 'GuanYu', 'ZhaoYun', 'HuangZhong', 'DianWei'], columns=['English', 'Math', 'Chinese'])
print (df1)
print (df2)

数据的导入和输出

可以用pd.read_csv(),pd.read_excel()等read函数进行数据的读取,用dataframe.to_csv()等函数进行数据的输出。

import pandas as pd
from pandas import Series, DataFrame
score = DataFrame(pd.read_excel('data.xlsx'))
score.to_excel('data1.xlsx')
print score

数据清洗

用drop()函数可以丢掉特定的行或列

df2 = df2.drop(columns=['Chinese'])

用dataframe.dropna()可以drop掉有空数值的行。用axis 可以限定drop掉行还是列,axis= 0 是行,axis = 1 是列。

重命名列名:两种方法:1.可以用dataframe.rename(columns = {'原列名':'新列名'},inplace = True)

去掉重复的值:dataframe.drop_duplicates()只有所有列全部和之前的列一样才会被drop掉,留下第一个

更改数据格式:

df2['Chinese'].astype('str') 
df2['Chinese'].astype(np.int64) 

删除数据间的空格

# 删除左右两边空格
df2['Chinese']=df2['Chinese'].map(str.strip)
# 删除左边空格
df2['Chinese']=df2['Chinese'].map(str.lstrip)
# 删除右边空格
df2['Chinese']=df2['Chinese'].map(str.rstrip)

如果想删除数据中的某个特殊符号:

df2['Chinese']=df2['Chinese'].str.strip('$')

大小写转换:upper(),lower(),title()

查找空值:想看一个dataframe里哪个空格是空值,用dataframe.isnull()
想看哪一列有空值,用:dataframe.isnull().any()

用apply()函数对数据进行清洗

1.对name列的数值进行大小写转换:

df['name'] = df['name'].apply(str.upper)

2.用apply对dataframe里的数据应用函数

def double_df(x):
           return 2*x
df1[u'语文'] = df1[u'语文'].apply(double_df)

df1[u'语文'] = df1[u'语文'].apply(lambda x:x*2)

也可以定义更复杂的函数,用axis指定函数应用的行还是列,用args = ()传入这个函数的其他参数

def plus(df,n,m):
    df['new1'] = (df[u'语文']+df[u'英语']) * m
    df['new2'] = (df[u'语文']+df[u'英语']) * n
    return df
df1 = df1.apply(plus,axis=1,args=(2,3,))

数据统计

Pandas 和NumPy一样,都有常用的统计函数,如果遇到空值NaN,会自动排除。


统计函数

数据表合并

两个DataFrame的合并用的是merge()函数,有5种形式:
初始化:

df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
df2 = DataFrame({'name':['ZhangFei', 'GuanYu', 'A', 'B', 'C'], 'data2':range(5)})

1.基于指定列进行连接

df3 = pd.merge(df1,df2,on = 'name')

只会留下两个dataframe里name字段里一样的数据,类似于sql的inner join。

2.inner内连接:
inner内连接是merge合并的默认情况。如上

3.left左连接
以第一个dataframe为主的连接,和sql 的left join 类似。
在merge()里面加一个kind = ‘left’ 的参数。

df3 = pd.merge(df1,df2,on = 'name',how='left')

4.right右连接:以第二个DataFrame为主。

df3 = pd.merge(df1,df2,on = 'name',how='right')

5.outer 外链接:相当于两个DataFrame的并集

df3 = pd.merge(df1,df2,on = 'name',how='outer')

如何用sql方法打开pandas

用pandasql

import pandas as pd
from pandas import DataFrame
from pandasql import sqldf, load_meat, load_births
df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
pysqldf = lambda sql: sqldf(sql, globals())
sql = "select * from df1 where name ='ZhangFei'"
print pysqldf(sql)

学数据分析需要掌握的基本概念

Apriori算法:通过分析购物篮中的商品集合,找出商品之间的关联关系。利用这种隐性关联关系,商家可以强化这类购买行为。

商业智能BI,数据仓库DW,数据挖掘DM三者的关系:
百货商店用数据预测用户的购物行为属于商业智能BI,他们累计的顾客消费行为习惯会存储到数据仓库DW里面,通过对个体进行消费行为分析总结出来的规律属于数据挖掘DM

商业智能BI:Business Intelligence:
x相比于数据仓库,数据挖掘,它是一个更大的概念。商业智能可以说是基于数据仓库,经过了数据挖掘以后,得到商业价值的过程。所以说数据仓库是一个金矿,数据挖掘是炼金术,而商业报告则是黄金。

数据仓库DW:Data Warehouse
数据仓库是BI这个房子的地基,搭建好数据仓库这个地基后,才可以进行分析使用,最后产生价值。
数据仓库可以说是数据库的升级概念,数据仓库的量更庞大,适合数据挖掘和数据分析。数据库是数据仓库的技术。
数据仓库将原有的多个数据来源中的数据进行汇总、整理二得到。数据在进入数据仓库之前,必须消除数据中的不一致性。方便后续进行数据分析和挖掘。

数据挖掘:Data Mining
在商业智能BI中经常会用到数据挖掘技术。数据挖掘的核心包括分类,聚类,预测,关联分析等任务。通过这些炼金术,我们可以从数据仓库中得到宝藏,比如商业报告。

元数据VS数据元

元数据(Metadata):描述其他数据大数据,也称为中介数据。

数据元(Data Element):最小数据单元。

数据挖掘的流程:

分类,聚类,预测和关联分析:
1.分类
通过训练集得到一个分类模型,然后这个模型可以对其他数据进行分类。

2.聚类:
聚类就是将数据自动聚类成几个类别,聚到一起的相似度大,不在一起的差异度大。我们往往利用聚类来做数据划分。

3.预测:
顾名思义,就是通过当前和历史数据来预测未来趋势,它可以更好的帮助我们识别机遇和风险。

4.关联分析:
就是发现数据中的关联规则,它被广泛的应用在购物篮分析,或事物数据分析中。

数据挖掘的过程

数据挖掘的过程

用户画像:

用户画像的准则:“都是谁?”“从哪来?”“要去哪?”


用户画像建模
为什么要设计唯一标识:

用户唯一标识是整个用户画像的核心。可以使用户名,手机号,邮箱,设备号,cookieID等。

其次,给用户打标签:

用户/消费/行为/标签
可以从这4个维度来进行标签划分:
1.用户标签:包括性别、年龄、地域、收入、学历、职业等。这些包括了用户的基础属性。
2.消费标签:消费习惯、购买意向、是否对促销敏感。这些统计分析用户的消费习惯。
3.行为标签:时间段、频次、时长、访问路径。这些是通过分析用户行为,来得到他们使用APP的习惯。
4.内容分析:对用户平时浏览的内容,尤其是停留时长、浏览次数多的内容进行分析,分析出用户对哪些内容感兴趣,比如,金融,娱乐,教育,体育,时尚,科技等。

用户画像是现实世界中的用户的数学建模。我们正是将海量的数据进行标签化,来得到进准的用户画像。

用户画像的业务价值:获客,粘客和留客。
1.获客:如何进行拉新,通过更精准的营销获取客户。
2.粘客:个性化推荐,搜索排序,场景运营等。
3.留客:流失率预测,分析关键节点降低流失率。

如果按照数据流处理的阶段来划分用户画像建模的过程,可以分为数据层,算法层和业务层。
数据层是指的用户消费行为里的标签。我们可以打上“事实标签”,作为数据客观的记录。
算法层指的是透过这些行为算出的用户建模。我们可以打上“模型标签”,作为用户画像的分类标识。
业务层指的是获客,粘客,留客的手段。我们可以打上“预测标签”,作为业务关联的结果。

所以这个标签化的流程,就是通过数据层的“事实标签”,在算法层进行计算,打上“模型标签”的分类结果,最后指导业务层,得出“预测标签”。

标签化

数据采集

四大数据源:开放数据源,爬虫抓取,传感器和日志采集。

开放数据源:各大公司,政府机构。
爬虫:python..

数据清洗

数据质量的准则:“完全合一“
完整性:单条数据是否存在空值,统计的字段是否完善。
全面性:
合法性:数据的类型,内容,大小的合法性。
唯一性:是否存在重复记录。

完整性:
1.填充缺失值:删除,均值,高频值

df['age'].fillna(df['age'].mean(), inplace = True)  #均值
age_most = df['age'].value_counts().index[0]
df['age'].fillna(age_most,inplace = True)

2.删除缺失行

df.dropna(how = 'all',inplace = True)

全面性:
列单位不统一:

# 获取 weight 数据列中单位为 lbs 的数据
rows_with_lbs = df['weight'].str.contains('lbs').fillna(False)
print df[rows_with_lbs]
# 将 lbs 转换为 kgs, 2.2lbs=1kgs
for i,lbs_row in df[rows_with_lbs].iterrows():
    # 截取从头开始到倒数第三个字符之前,即去掉 lbs。
    weight = int(float(lbs_row['weight'][:-3])/2.2)
    df.at[i,'weight'] = '{}kgs'.format(weight) 

合理性:
含有非ASCII码的值

# 删除非 ASCII 字符
df['first_name'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True)
df['last_name'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True)

唯一性:
一个列有多个参数:

# 切分名字,删除源数据列
df[['first_name','last_name']] = df['name'].str.split(expand=True)
df.drop('name', axis=1, inplace=True)

重复数据:

# 删除重复数据行
df.drop_duplicates(['first_name','last_name'],inplace=True)

数据集成

数据集成的两种架构:ETL 和 ELT

ETL :Extract , Transform , Load
在数据源提取数据后先进行转换,最后将转换后的结果写入目的地。
ELT: Extract , Load , Transform
在数据源提取数据后先导入目的地,然后利用数据库的聚合分析能力或者外部计算框架如spark来完成转换的步骤。

数据变换

数据变化在数据分析中的角色:
在数据变换前,我们需要先对字段进行筛选,然后对数据进行探索和相关性分析,接着是选择算法模型(这里暂时不需要进行计算),然后针对算法模型对数据的需求进行数据变换,从而完成数据挖掘前的准备工作。
数据变换是数据准备的重要环节,它同数据平滑、数据聚集、数据概化和规范化等方式将数据转换为适用于数据挖掘的形式。
1.数据平滑:去除数据中的噪声,将连续数据离散化。这里可以使用分箱,聚类和回归的方式进行数据平滑。
2.数据聚集:对数据进行汇总,在sql里面有一些聚类函数,如MAX()反馈某个字段的最大值,SUM()返回某个字段的数值总和。
3.数据概化:将数据由较低的概念抽象为较高的概念,减少数据复杂度,即用更高的概念替代更低的概念。比如上海,杭州,深圳等可以概化为中国。
4.数据规范化:使属性数据按比例缩放,这样就将原来的值映射到一个新的特定区域中。重用的方法有最小--最大规范化,Z-score规范化,按小数定标规范化等。
5.属性构造:构造出新的数据并添加到属性集中。这里会用到特征工程的知识,因为通过属性和属性的连接构造新的属性,其实就是特征工程。

数据规范化的集中方法

1.Min-max 规范化(其实就是极差规范化)
将原始数据变化到【0,1】空间中,
公式为:新数值= (原数-最小值)/(最大值-最小值)

2.Z-Score规范化
假设A与B的考试成绩都是80分,A的考卷满分是100分(及格60分),B的考卷满分是500分(及格300分)。虽然两个人都考了80分,但A的80分和B的80分代表完全不同的含义。
如何用相同的标准来比较A与B的成绩呢?Z-Score就可以解决这个问题。
公式:新数值= (原数值-均值)/标准差
假设 A 所在的班级平均分为 80,标准差为 10。B 所在的班级平均分为 400,标准差为 100。那么 A 的新数值 =(80-80)/10=0,B 的新数值 =(80-400)/100=-3.2
那么在Z-Score标准下,A的成绩比B的好
Z-Score算法简单,不受数据量影响,结果易于比较,但是需要整体数据的均值和方差,而且结果只能用于比较,没有实际意义。

3.小数定标规范化
小数定标规范化就是通过移动小数点的位置来进行规范化。小数点移动多少位取决于属性A的取值中的最大绝对值。
举个例子,比如属性 A 的取值范围是 -999 到 88,那么最大绝对值为 999,小数点就会移动 3 位,即新数值 = 原数值 /1000。那么 A 的取值范围就被规范化为 -0.999 到 0.088。

python的SciKit_Learn 库的使用。

SciKit_Learn 库是python的重要机器学习库,它帮助我们封装了大量的机器学习算法,比如分类、聚类、回归、降维等。此外,它还包含了数据变换模块

数据可视化

数据可视化的视图都有哪些?


可视化类型

数据可视化的工具

商业智能分析:tableau, PowerBi

python数据可视化

可视化视图都有哪些?

1.比较:比较数据间各类别的关系,或者是它们随着时间的变化趋势,比如折线图;

2.联系:查看两个或两个以上变量之间的关系,比如散点图;

3.构成:每个部分占整体的百分比,或者是随着时间的百分比变化,比如饼图;

4.分布:关注单个变量,或者多个变量的分布情况,比如直方图。

引入matplot包,Seaborn包:

import matplot.pyplot as plt
import seaborn as sns 

散点图(scatter plot):
plt.scatter(x,y,marker = None)
x,y 是坐标,marker代表了符号的标记。比如 x , >, o 等。

sns.jointplot(x,y,data = None, kind = 'scatter')

折线图:折线图可以用来表示数据随着时间变化的趋势。

plt.plot(x,y) 要提前把数据按照x轴的大小进行排序。

sns.lineplot(x,y,data = None)其中x,y是data中的下标,data是我们要传入的数据,一般是DataFrame 类型。

直方图:
plt.hist(x,bins = 10)
参数x 是一维数组,bins代表直方图中箱子的数量,默认为10

sns.distplot(x, bins = 10,kde = True)
参数x 是一维数组,bins是箱子的数量,kde代表显示核密度估计,默认是True 。核密度估计是通过核函数帮我们来估计概率密度的方法。(就是画出的直方图有没有连续曲线)

条形图:
plt.bar(x,height)
x代表x轴的位置序列,height 是y轴的数值序列,也就是柱子的高度。

sns.barplot(x = None, y = None,data = None)
参数data为Dataframe类型,x,y 是其中的变量

箱线图:由五个数值点组成,帮助我们分析数据的差异性,离散程度和异常值等

plt.boxplot(x,lables = None)
x代表要绘制箱线图的数据,lables是缺省值,可以为箱线图添加标签

sns.boxplot(x = None, y = None, data = None)
参数data为DataFrame , x和y是其中的变量。

饼图:
显示每个部分大小和总和之间的比例
plt.pie(x, lables = None)
x代表饼图的数据,lables 添加标签

热力图(heat map):
是一种矩阵表示方法,矩阵中的元素值用颜色来表示。
是一种非常直观的多元变量分析方法。

sns.heatmap(data)
用Seaborn自带的数据集flights来试验

import matplotlib.pyplot as plt
import seaborn as sns
# 数据准备
flights = sns.load_dataset("flights")
data=flights.pivot('year','month','passengers')
# 用 Seaborn 画热力图
sns.heatmap(data)
plt.show()

蜘蛛图:
一种显示一对多关系的方法。在蜘蛛图中,一个变量相对于另一个变量的显著性是清晰可见的。

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.font_manager import FontProperties  
# 数据准备
labels=np.array([u" 推进 ","KDA",u" 生存 ",u" 团战 ",u" 发育 ",u" 输出 "])
stats=[83, 61, 95, 67, 76, 88]
# 画图数据准备,角度、状态值
angles=np.linspace(0, 2*np.pi, len(labels), endpoint=False)
stats=np.concatenate((stats,[stats[0]]))
angles=np.concatenate((angles,[angles[0]]))
# 用 Matplotlib 画蜘蛛图
fig = plt.figure()
ax = fig.add_subplot(111, polar=True)   
ax.plot(angles, stats, 'o-', linewidth=2)
ax.fill(angles, stats, alpha=0.25)
# 设置中文字体
font = FontProperties(fname=r"C:\Windows\Fonts\simhei.ttf", size=14)  
ax.set_thetagrids(angles * 180/np.pi, labels, FontProperties=font)
plt.show()

二元变量分布:
如果我们想要看两个变量之间的关系,就需要用到二元变量分布。当然二元变量分布有多种呈现方式,散点图就是一种二元变量分布

在Seaborn里,直接使用 sns.jointplot(x, y, data=None, kind) 函数即可。其中用 kind 表示不同的视图类型:“kind=‘scatter’”代表散点图,“kind=‘kde’”代表核密度图,“kind=‘hex’ ”代表 Hexbin 图,它代表的是直方图的二维模拟。

成对关系:如果想要探索数据集中的多个成对双变量的分布,可以直接采用 sns.pairplot() 函数。它会同时展示出 DataFrame 中每对变量的关系,另外在对角线上,你能看到每个变量自身作为单变量的分布情况。
ps.用pandas的scatter_matrix也是相同的效果

import matplotlib.pyplot as plt
import seaborn as sns
# 数据准备
iris = sns.load_dataset('iris')
# 用 Seaborn 画成对关系
sns.pairplot(iris)
plt.show()
数据可视化

axis= 0 是跨行(其实就是按列)
axis= 1 是跨列(其实就是按行)

决策树

决策树的工作原理:

决策树基本上就是把我们以前的经验总结出来。我给你准备了一个打篮球的训练集。如果我们要出门打篮球,一般会根据“天气”、“温度”、“湿度”、“刮风”这几个条件来判断,最后得到结果:去打篮球?还是不去?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容