數據分析實戰

Edithtml

 



數據分析實戰


使用適當的分析方法,對收集的數據進行分析,總結規律,提取有價值的信息,造成有效結論的過程。python

基礎分析方法:數組

對比分析、分組分析、結構分析、分佈分析、交叉分析、矩陣分析等方法。網絡

高級分析方法:數據結構

迴歸分析、聚類分析、決策樹、神經網絡、因子分析、時間序列分析等方法。ide

數據分析的做用:函數

  • 現狀分析:日報、月報等
  • 緣由分析:專題分析
  • 預測分析:年度計劃制定時分析
  • 現狀分析:日報、月報等
  • 緣由分析:專題分析
  • 預測分析:年度計劃制定時分析

數據分析流程:優化

Alt text

數據準備

數據類型

  • Logical,邏輯型,布爾型ui

    • 兩種取值:True、False
    • 運算規則:與(&)、或(|)、非(not)
  • Numerical,數值型編碼

    • 實數
    • 運算規則:加、減、乘、除、取整(//)、求餘(%)、乘方(**)
  • Character,字符型

數據結構

相互之間存在一種或多種關係的數據類型的集合。

Pandas中兩種經常使用的數據結構:

  • Series
  • DataFrame

Series

用於存儲一行或一列的數據,以及與之相關的索引的集合。

DataFrame數據框

用於存儲多行和多列的數據集合
可與Excel類比

Series、DataFrame參考印象筆記《Python數據分析與展現》

向量化運算

向量化計算是一種特殊的並行計算方式,能夠在同一時間執行屢次操做,一般是對不一樣的數據執行一樣的一個或一批指令,或者說把指令用於一個數據/向量。

numpy中ndarray中的相關操做,即爲向量化運算。

原則:

  • 儘量避免顯示的for循環
  • 過早的優化是魔鬼

數據處理

數據導入

導入CSV文件

參考:參數詳解

使用pandas庫中read_csv函數導入CSV文件

from pandas import read_csv
read_csv(file,encoding)

 

  • 導入中文時,encoding=’utf-8’

 

numpy庫中用loadtxt導入CSV文件。

導入文本文件

使用pandas庫中read_table函數導入普通文本文件。
語法:

from pandas import read_table
read_table(file,names=[列名1,列名2,……],sep="",encoding,……)

Alt text

Alt text

若是存在中文路徑,在read_table參數中增長engine='python'參數。

導入Excel文件

使用read_excel函數導入Excel文件。

from pandas import read_excel
read_excel(fileName,sheetname,names)

數據導出

導出文本文件

**to_csv**函數:
to_csv(filePath,sep=",",index=True,header=True)
![Alt text](./1499088638638.png)

重複值處理

數據結構中,行相同的數據只保留一行。 找出重複位置:
dIndex=df.duplicated()
根據某些列,找出重複位置:
dIndex=df.duplicated('id')
dIndex=df.duplicated(['id','key'])
提取重複數據
df[dIndex]
默認根據全部列,刪除:
newdf=df.drop_duplicates()
指定某一列,刪除:
newdf=df.drop_duplicates('id')

缺失值處理

**三種措施:**
  • 數據補齊:df.fillna('value')
  • 刪除對應缺失行:df.dropna()
  • 不處理

讀取文件時,經過指定值做爲缺失值。如‘缺失值’表明缺失值:

df=pd.read_csv(r'D:\data.csv',na_values=['缺失值'])

空格值處理

strip()函數

  • lstrip():Left,左邊空格
  • rstrip():Right,右邊空格
  • strip():兩邊空格

字段抽取

根據已知列數據的開始和結束爲止,抽取出新的列。

字段抽取函數:slice(start,stop)

例如:提取‘ABC1234’中的數字等。

df['列名'].str.slice(0,3)

字段拆分

相似於Excel中的分列。

分割函數:df.str.split(sep,n,expand=False)

  • sep:用於分割的字符串
  • n:分割爲多少列
  • expand:是否展開爲數據框,默認FALSE

返回值:

  • 若是expand爲True,返回值爲DataFrame
  • 若是expand爲FALSE,返回值爲Series

記錄抽取

根據必定的條件,對數據進行抽取。

相似於Excel中的過濾。

記錄抽取函數:dataframe[condition]

  • condition:過濾條件。

Alt text

Alt text

注意:comments爲列名

隨機抽樣

隨機抽樣函數:

data.sample(n,frac,replace=False)
  • n:按個數抽樣
  • frac:按百分比抽樣
  • replace:是否可放回抽樣,默認FALSE不可放回。

分層抽樣:

按照某一列進行分組,用data.groupby('class').其實就是對data數據進行按照class列進行分組,返回一個字典。

Alt text

Alt text

typicalNDict:1組抽2個,2組抽4個,3組抽6個。

記錄合併

將兩個結構相同的DataFrame,合併成一個DataFrame。

函數:pd.concat([df1,df2,……])

numpy中,用concatenate()函數。

字段合併

字段拆分的逆操做。用「+」號。
必須是str型數據:

df.astype(str)

字段匹配

根據各表共有的關鍵字段,把各表所需的記錄一一對應起來。

表的合併.

字段匹配函數:

merge(x,y,left_on,right_on,how)
  • x,y:待匹配df
  • left_on:第一個df用於匹配的列
  • right_on:第二個df用於匹配的列
  • how:
    • ‘left’:左鏈接,即便鏈接不上,保留左邊沒鏈接(匹配)上的部分
    • ‘right’:右鏈接,即便鏈接不上,保留右邊沒鏈接(匹配)上的部分
    • ’outer’:外鏈接,都保留。

簡單計算

data['total']=data.price*data.num

數據標準化

無量綱化

0-1標準化

data['scale']=round(dta.score-data.score.min()/(data.score.max()-data.score.min()),2)

數據分組

根據數據分析對象的特徵,按照必定的數值指標,把數據分析對象劃分爲不一樣的區間進行研究。——分檔

函數:

cut(series,bins,right=True,labels=NULL)
  • bins:分組的劃分數組
  • right:分組的時候,右邊是否閉合
  • labels:分組的自定義標籤

時間處理

時間轉換:將字符型的時間格式數據轉換爲時間型數據。

時間轉換函數:

datatime=pd.to_datatime(dataString,format)

Alt text

時間格式化:將時間型數據按照指定格式轉換爲字符型數據。

時間格式化函數:

dateTimeFormat=datetime.dt.strftime(format)

時間屬性抽取:從日期格式裏抽取須要的部分,如月、日。
抽取語法:

datetime.dt.property

Alt text

時間抽取

根據必定的條件,對時間格式的數據進行抽取。

  • 根據索引進行抽取
    • DataFrame.ix[start:end]
    • DataFrame.ix[dates]
  • 根據時間列進行抽取
    • DataFrame[condition]

注意:df.ix[]:經過行號或行標籤索引。

虛擬變量 dummy variables

虛擬變量,也叫啞變量和離散特徵編碼,可用來表示分類變量、非數量因素可能產生的影響。

  • 離散特徵取值之間有大小意義:尺寸(L,M)
    • pd.Series.map(dict)
  • 離散特徵取值之間無大小意義:顏色(R,G)
    • pd.get_dummies()

具體:

pd.get_dummies(data,prefix=None,prefix_sep='_',dummy_na=False,columns=None,drop_first=False)

Alt text

數據分析

基本統計

描述性統計分析函數:describe(),一次性求得基本狀況。

另外,還可用下表統計函數:

Alt text

還有:

  • 累計求和:cumsum
  • 最大值最小值所在位置:argmin()、argmax()
  • 百分位數:quantile()

分組分析

根據分組字段,將分析對象劃分紅不一樣的部分,以進行對比分析各組之間的差別性。

經常使用統計指標:計數、求和、平均值。

分組統計函數:

Alt text

Alt text

Alt text

分佈分析

將數據等距或者不等距的分組,進行研究各組分佈規律。

交叉分析

分析兩個或兩個以上分組變量之間的關係,以交叉表的形式進行。

交叉計數函數(透視表):

pivot_table(values,index,columns,aggfunc,fill_value)

Alt text

結構分析

在分組及交叉的基礎上,計算各組成部分所佔比重,進而分析整體的內部特徵。

外運算:

Alt text

內運算:

Alt text

相關分析

研究兩個或兩個以上隨機變量之間相互依存關係的方向和密切程度。

  • 線性相關
  • 非線性相關

線性相關關係主要採用皮爾遜(Pearson)相關係數r來度量連續變量之間線性相關強度。

Alt text

相關分析函數:

  • DataFrame.corr():計算每一個列兩兩之間的相關度,返回DataFrame。
  • Series.corr(other):計算該序列與傳入列之間的相關度,返回一個數值,即相關度。

RFM分析

根據客戶活躍程度和交易金額貢獻,進行客戶價值分析。

Alt text

Alt text

RFM分析過程:

Alt text

矩陣分析

根據事物(產品、服務等)的兩個重要屬性(指標)做爲分析依據,進行關聯分析(象限分析)。

數據可視化

散點圖scatter

plot(x,y,'.',color=(r,g,b))

Alt text

折線圖

plt(x,y,style,color,linewith)

餅圖

plt.pie(x,labels,colors,explode,autopct)

Alt text

柱形圖

bar(left,height,width,color)
barh(left,height,width,color)

Alt text

直方圖

hist(x,color,bins,cumulative=False)

Alt text

地圖

地圖繪製步驟:

  1. 獲取地圖對象,獲取每一個區域的名字以及順序;
  2. 在每一個區域的名字和順序後面,加上須要展現的數據及經緯度;
  3. 根據數據大小,設置每一個區域展現顏色(0,1)。
  4. 根據顏色進行填充
  5. 根據經緯度進行標註地圖的名字

須要安裝Basemap庫.

熱力地圖

相關文章
相關標籤/搜索