極客時間--數據分析課程筆記

數據挖掘的知識清單

數據挖掘的基本流程:

1.商業(yè)理解:數據挖掘不是目的,我們的目的是更好地幫助業(yè)務。所以第一步要從商業(yè)的角度理解項目需求,在這個基礎上,再對數據挖掘的目標進行定義。
2.數據理解:嘗試收集部分數據,然后對數據進行探索,包括數據描述,數據質量驗證等。形成對數據的初步認知。
3.數據準備:開始手收集數據,并對數據進行清洗,集成等操作,完成數據挖掘前的準備工作。
4.模型建立:選擇和應用各種數據挖掘模型,并進行優(yōu)化,以便得到更好的分類結果。
5.模型評估:對模型進行評價,并檢查構建模型的每個步驟,確認模型是否實現(xiàn)了預定的商業(yè)目標。
6.上線發(fā)布: 模型的作用是從數據中尋找“金礦”,也就是我們所說的“知識”。獲得的知識要轉化為用戶可以使用的方式,比如一份報告,或者一個復雜的,可重復的數據挖掘過程。

數據挖掘十大算法:

分類算法:C4.5 , 樸素貝葉斯(Naive Bayes), SVM, KNN, Adaboost, Cart

聚類算法:K-Means , EM

關聯(lián)分析:Apriori

連接分析:PageRank

數據挖掘的數學原理

1.概率論和數理統(tǒng)計
2.線性代數
3.圖論
4.最優(yōu)化方法

知識清單

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中,每一個線性的數組稱為一個軸,其實秩就是描述軸的數量。

創(chuàng)建數組

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 的縮寫,它能對數組中的每個元素進行函數操作。運算非常快。

連續(xù)數組的創(chuàng)建

兩種方法:

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

起到的作用都是一樣的,創(chuàng)建一個[1,3,5,7,9]的數組。
但是這兩種創(chuàng)建方法是有差異的。
np.arange(初始值,終值,步長)----和內置range()函數一樣,不包括終值。

np.linspace(初始值,終值,元素個數)---創(chuàng)建等差數列一維數組,默認包括終值。這個函數會嚴格創(chuàng)建等差數列,意思是可能會出現(xiàn)浮點數。

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) #取余數

統(tǒng)計函數

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.統(tǒng)計數組中的加權平均值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.統(tǒng)計數組中的標準差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)

也可以用字典的方式創(chuàng)建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,))

數據統(tǒng)計

Pandas 和NumPy一樣,都有常用的統(tǒng)計函數,如果遇到空值NaN,會自動排除。


統(tǒng)計函數

數據表合并

兩個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算法:通過分析購物籃中的商品集合,找出商品之間的關聯(lián)關系。利用這種隱性關聯(lián)關系,商家可以強化這類購買行為。

商業(yè)智能BI,數據倉庫DW,數據挖掘DM三者的關系:
百貨商店用數據預測用戶的購物行為屬于商業(yè)智能BI,他們累計的顧客消費行為習慣會存儲到數據倉庫DW里面,通過對個體進行消費行為分析總結出來的規(guī)律屬于數據挖掘DM。

商業(yè)智能BI:Business Intelligence:
x相比于數據倉庫,數據挖掘,它是一個更大的概念。商業(yè)智能可以說是基于數據倉庫,經過了數據挖掘以后,得到商業(yè)價值的過程。所以說數據倉庫是一個金礦,數據挖掘是煉金術,而商業(yè)報告則是黃金。

數據倉庫DW:Data Warehouse
數據倉庫是BI這個房子的地基,搭建好數據倉庫這個地基后,才可以進行分析使用,最后產生價值。
數據倉庫可以說是數據庫的升級概念,數據倉庫的量更龐大,適合數據挖掘和數據分析。數據庫是數據倉庫的技術。
數據倉庫將原有的多個數據來源中的數據進行匯總、整理二得到。數據在進入數據倉庫之前,必須消除數據中的不一致性。方便后續(xù)進行數據分析和挖掘。

數據挖掘:Data Mining
在商業(yè)智能BI中經常會用到數據挖掘技術。數據挖掘的核心包括分類,聚類,預測,關聯(lián)分析等任務。通過這些煉金術,我們可以從數據倉庫中得到寶藏,比如商業(yè)報告。

元數據VS數據元

元數據(Metadata):描述其他數據大數據,也稱為中介數據。

數據元(Data Element):最小數據單元。

數據挖掘的流程:

分類,聚類,預測和關聯(lián)分析:
1.分類
通過訓練集得到一個分類模型,然后這個模型可以對其他數據進行分類。

2.聚類:
聚類就是將數據自動聚類成幾個類別,聚到一起的相似度大,不在一起的差異度大。我們往往利用聚類來做數據劃分。

3.預測:
顧名思義,就是通過當前和歷史數據來預測未來趨勢,它可以更好的幫助我們識別機遇和風險。

4.關聯(lián)分析:
就是發(fā)現(xiàn)數據中的關聯(lián)規(guī)則,它被廣泛的應用在購物籃分析,或事物數據分析中。

數據挖掘的過程

數據挖掘的過程

用戶畫像:

用戶畫像的準則:“都是誰?”“從哪來?”“要去哪?”


用戶畫像建模
為什么要設計唯一標識:

用戶唯一標識是整個用戶畫像的核心??梢允褂脩裘謾C號,郵箱,設備號,cookieID等。

其次,給用戶打標簽:

用戶/消費/行為/標簽
可以從這4個維度來進行標簽劃分:
1.用戶標簽:包括性別、年齡、地域、收入、學歷、職業(yè)等。這些包括了用戶的基礎屬性。
2.消費標簽:消費習慣、購買意向、是否對促銷敏感。這些統(tǒng)計分析用戶的消費習慣。
3.行為標簽:時間段、頻次、時長、訪問路徑。這些是通過分析用戶行為,來得到他們使用APP的習慣。
4.內容分析:對用戶平時瀏覽的內容,尤其是停留時長、瀏覽次數多的內容進行分析,分析出用戶對哪些內容感興趣,比如,金融,娛樂,教育,體育,時尚,科技等。

用戶畫像是現(xiàn)實世界中的用戶的數學建模。我們正是將海量的數據進行標簽化,來得到進準的用戶畫像。

用戶畫像的業(yè)務價值:獲客,粘客和留客。
1.獲客:如何進行拉新,通過更精準的營銷獲取客戶。
2.粘客:個性化推薦,搜索排序,場景運營等。
3.留客:流失率預測,分析關鍵節(jié)點降低流失率。

如果按照數據流處理的階段來劃分用戶畫像建模的過程,可以分為數據層,算法層和業(yè)務層。
數據層是指的用戶消費行為里的標簽。我們可以打上“事實標簽”,作為數據客觀的記錄。
算法層指的是透過這些行為算出的用戶建模。我們可以打上“模型標簽”,作為用戶畫像的分類標識。
業(yè)務層指的是獲客,粘客,留客的手段。我們可以打上“預測標簽”,作為業(yè)務關聯(lián)的結果。

所以這個標簽化的流程,就是通過數據層的“事實標簽”,在算法層進行計算,打上“模型標簽”的分類結果,最后指導業(yè)務層,得出“預測標簽”。

標簽化

數據采集

四大數據源:開放數據源,爬蟲抓取,傳感器和日志采集。

開放數據源:各大公司,政府機構。
爬蟲:python..

數據清洗

數據質量的準則:“完全合一“
完整性:單條數據是否存在空值,統(tǒng)計的字段是否完善。
全面性:
合法性:數據的類型,內容,大小的合法性。
唯一性:是否存在重復記錄。

完整性:
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)

全面性:
列單位不統(tǒng)一:

# 獲取 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來完成轉換的步驟。

數據變換

數據變化在數據分析中的角色:
在數據變換前,我們需要先對字段進行篩選,然后對數據進行探索和相關性分析,接著是選擇算法模型(這里暫時不需要進行計算),然后針對算法模型對數據的需求進行數據變換,從而完成數據挖掘前的準備工作。
數據變換是數據準備的重要環(huán)節(jié),它同數據平滑、數據聚集、數據概化和規(guī)范化等方式將數據轉換為適用于數據挖掘的形式。
1.數據平滑:去除數據中的噪聲,將連續(xù)數據離散化。這里可以使用分箱,聚類和回歸的方式進行數據平滑。
2.數據聚集:對數據進行匯總,在sql里面有一些聚類函數,如MAX()反饋某個字段的最大值,SUM()返回某個字段的數值總和。
3.數據概化:將數據由較低的概念抽象為較高的概念,減少數據復雜度,即用更高的概念替代更低的概念。比如上海,杭州,深圳等可以概化為中國。
4.數據規(guī)范化:使屬性數據按比例縮放,這樣就將原來的值映射到一個新的特定區(qū)域中。重用的方法有最小--最大規(guī)范化,Z-score規(guī)范化,按小數定標規(guī)范化等。
5.屬性構造:構造出新的數據并添加到屬性集中。這里會用到特征工程的知識,因為通過屬性和屬性的連接構造新的屬性,其實就是特征工程。

數據規(guī)范化的集中方法

1.Min-max 規(guī)范化(其實就是極差規(guī)范化)
將原始數據變化到【0,1】空間中,
公式為:新數值= (原數-最小值)/(最大值-最小值)

2.Z-Score規(guī)范化
假設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.小數定標規(guī)范化
小數定標規(guī)范化就是通過移動小數點的位置來進行規(guī)范化。小數點移動多少位取決于屬性A的取值中的最大絕對值。
舉個例子,比如屬性 A 的取值范圍是 -999 到 88,那么最大絕對值為 999,小數點就會移動 3 位,即新數值 = 原數值 /1000。那么 A 的取值范圍就被規(guī)范化為 -0.999 到 0.088。

python的SciKit_Learn 庫的使用。

SciKit_Learn 庫是python的重要機器學習庫,它幫助我們封裝了大量的機器學習算法,比如分類、聚類、回歸、降維等。此外,它還包含了數據變換模塊

數據可視化

數據可視化的視圖都有哪些?


可視化類型

數據可視化的工具

商業(yè)智能分析:tableau, PowerBi

python數據可視化

可視化視圖都有哪些?

1.比較:比較數據間各類別的關系,或者是它們隨著時間的變化趨勢,比如折線圖;

2.聯(lián)系:查看兩個或兩個以上變量之間的關系,比如散點圖;

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 。核密度估計是通過核函數幫我們來估計概率密度的方法。(就是畫出的直方圖有沒有連續(xù)曲線)

條形圖:
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" 團戰(zhàn) ",u" 發(fā)育 ",u" 輸出 "])
stats=[83, 61, 95, 67, 76, 88]
# 畫圖數據準備,角度、狀態(tài)值
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()

二元變量分布:
如果我們想要看兩個變量之間的關系,就需要用到二元變量分布。當然二元變量分布有多種呈現(xiàn)方式,散點圖就是一種二元變量分布

在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 是跨列(其實就是按行)

決策樹

決策樹的工作原理:

決策樹基本上就是把我們以前的經驗總結出來。我給你準備了一個打籃球的訓練集。如果我們要出門打籃球,一般會根據“天氣”、“溫度”、“濕度”、“刮風”這幾個條件來判斷,最后得到結果:去打籃球?還是不去?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容