數據挖掘的知識清單
數據挖掘的基本流程:
1.商業(yè)理解:數據挖掘不是目的辛慰,我們的目的是更好地幫助業(yè)務超升。所以第一步要從商業(yè)的角度理解項目需求,在這個基礎上九巡,再對數據挖掘的目標進行定義图贸。
2.數據理解:嘗試收集部分數據,然后對數據進行探索冕广,包括數據描述疏日,數據質量驗證等。形成對數據的初步認知佳窑。
3.數據準備:開始手收集數據制恍,并對數據進行清洗,集成等操作神凑,完成數據挖掘前的準備工作净神。
4.模型建立:選擇和應用各種數據挖掘模型,并進行優(yōu)化溉委,以便得到更好的分類結果鹃唯。
5.模型評估:對模型進行評價,并檢查構建模型的每個步驟瓣喊,確認模型是否實現了預定的商業(yè)目標坡慌。
6.上線發(fā)布: 模型的作用是從數據中尋找“金礦”,也就是我們所說的“知識”藻三。獲得的知識要轉化為用戶可以使用的方式洪橘,比如一份報告,或者一個復雜的棵帽,可重復的數據挖掘過程熄求。
數據挖掘十大算法:
分類算法:C4.5 , 樸素貝葉斯(Naive Bayes), SVM, KNN逗概, Adaboost弟晚, Cart
聚類算法:K-Means , EM
關聯分析:Apriori
連接分析:PageRank
數據挖掘的數學原理
1.概率論和數理統計
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)建等差數列绒怨,意思是可能會出現浮點數。
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)
也可以用字典的方式創(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,))
數據統計
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算法:通過分析購物籃中的商品集合,找出商品之間的關聯關系允瞧。利用這種隱性關聯關系简软,商家可以強化這類購買行為。
商業(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中經常會用到數據挖掘技術牍白。數據挖掘的核心包括分類脊凰,聚類,預測茂腥,關聯分析等任務狸涌。通過這些煉金術,我們可以從數據倉庫中得到寶藏最岗,比如商業(yè)報告帕胆。
元數據VS數據元
元數據(Metadata):描述其他數據大數據,也稱為中介數據般渡。
數據元(Data Element):最小數據單元懒豹。
數據挖掘的流程:
分類,聚類驯用,預測和關聯分析:
1.分類
通過訓練集得到一個分類模型脸秽,然后這個模型可以對其他數據進行分類。
2.聚類:
聚類就是將數據自動聚類成幾個類別蝴乔,聚到一起的相似度大记餐,不在一起的差異度大。我們往往利用聚類來做數據劃分薇正。
3.預測:
顧名思義片酝,就是通過當前和歷史數據來預測未來趨勢,它可以更好的幫助我們識別機遇和風險挖腰。
4.關聯分析:
就是發(fā)現數據中的關聯規(guī)則雕沿,它被廣泛的應用在購物籃分析,或事物數據分析中猴仑。
數據挖掘的過程
用戶畫像:
用戶畫像的準則:“都是誰审轮?”“從哪來?”“要去哪宁脊?”
為什么要設計唯一標識:
用戶唯一標識是整個用戶畫像的核心断国。可以使用戶名榆苞,手機號稳衬,郵箱,設備號坐漏,cookieID等薄疚。
其次碧信,給用戶打標簽:
用戶/消費/行為/標簽
可以從這4個維度來進行標簽劃分:
1.用戶標簽:包括性別、年齡街夭、地域砰碴、收入、學歷板丽、職業(yè)等呈枉。這些包括了用戶的基礎屬性。
2.消費標簽:消費習慣埃碱、購買意向猖辫、是否對促銷敏感。這些統計分析用戶的消費習慣砚殿。
3.行為標簽:時間段啃憎、頻次、時長似炎、訪問路徑辛萍。這些是通過分析用戶行為,來得到他們使用APP的習慣羡藐。
4.內容分析:對用戶平時瀏覽的內容贩毕,尤其是停留時長、瀏覽次數多的內容進行分析传睹,分析出用戶對哪些內容感興趣亏较,比如帮非,金融,娛樂兑宇,教育启上,體育邢隧,時尚,科技等冈在。
用戶畫像是現實世界中的用戶的數學建模倒慧。我們正是將海量的數據進行標簽化,來得到進準的用戶畫像包券。
用戶畫像的業(yè)務價值:獲客纫谅,粘客和留客。
1.獲客:如何進行拉新溅固,通過更精準的營銷獲取客戶付秕。
2.粘客:個性化推薦,搜索排序侍郭,場景運營等询吴。
3.留客:流失率預測掠河,分析關鍵節(jié)點降低流失率。
如果按照數據流處理的階段來劃分用戶畫像建模的過程猛计,可以分為數據層唠摹,算法層和業(yè)務層。
數據層是指的用戶消費行為里的標簽奉瘤。我們可以打上“事實標簽”勾拉,作為數據客觀的記錄。
算法層指的是透過這些行為算出的用戶建模盗温。我們可以打上“模型標簽”藕赞,作為用戶畫像的分類標識。
業(yè)務層指的是獲客肌访,粘客找默,留客的手段。我們可以打上“預測標簽”吼驶,作為業(yè)務關聯的結果惩激。
所以這個標簽化的流程,就是通過數據層的“事實標簽”蟹演,在算法層進行計算风钻,打上“模型標簽”的分類結果,最后指導業(yè)務層酒请,得出“預測標簽”骡技。
數據采集
四大數據源:開放數據源,爬蟲抓取羞反,傳感器和日志采集布朦。
開放數據源:各大公司,政府機構昼窗。
爬蟲: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來完成轉換的步驟。
數據變換
數據變化在數據分析中的角色:
在數據變換前腹纳,我們需要先對字段進行篩選痢掠,然后對數據進行探索和相關性分析,接著是選擇算法模型(這里暫時不需要進行計算)嘲恍,然后針對算法模型對數據的需求進行數據變換足画,從而完成數據挖掘前的準備工作。
數據變換是數據準備的重要環(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.聯系:查看兩個或兩個以上變量之間的關系,比如散點圖豪直;
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()
二元變量分布:
如果我們想要看兩個變量之間的關系照弥,就需要用到二元變量分布腻异。當然二元變量分布有多種呈現方式,散點圖就是一種二元變量分布
在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 是跨列(其實就是按行)
決策樹
決策樹的工作原理:
決策樹基本上就是把我們以前的經驗總結出來。我給你準備了一個打籃球的訓練集耻台。如果我們要出門打籃球空免,一般會根據“天氣”、“溫度”盆耽、“濕度”蹋砚、“刮風”這幾個條件來判斷,最后得到結果:去打籃球征字?還是不去都弹?