數據分析實戰
Edit
- 數據分析實戰
-
- 數據準備
-
- 數據類型
- 數據結構
-
- Series
- DataFrame數據框
- 向量化運算
- 數據處理
-
- 數據導入
-
- 導入CSV文件
- 導入文本文件
- 導入Excel文件
- 數據導出
-
- 導出文本文件
- 重復值處理
- 缺失值處理
- 空格值處理
- 字段抽取
- 字段拆分
- 記錄抽取
- 隨機抽樣
- 記錄合並
- 字段合並
- 字段匹配
- 簡單計算
- 數據標準化
- 數據分組
- 時間處理
- 時間抽取
- 虛擬變量 dummy variables
- 數據分析
-
- 基本統計
- 分組分析
- 分布分析
- 交叉分析
- 結構分析
- 相關分析
- RFM分析
- 矩陣分析
- 數據可視化
-
- 散點圖scatter
- 折線圖
- 餅圖
- 柱形圖
- 直方圖
- 地圖
- 熱力地圖
數據分析實戰
使用適當的分析方法,對收集的數據進行分析,總結規律,提取有價值的信息,形成有效結論的過程。
基礎分析方法:
對比分析、分組分析、結構分析、分布分析、交叉分析、矩陣分析等方法。
高級分析方法:
回歸分析、聚類分析、決策樹、神經網絡、因子分析、時間序列分析等方法。
數據分析的作用:
- 現狀分析:日報、月報等
- 原因分析:專題分析
- 預測分析:年度計劃制定時分析
- 現狀分析:日報、月報等
- 原因分析:專題分析
- 預測分析:年度計劃制定時分析
數據分析流程:
數據準備
數據類型
-
Logical,邏輯型,布爾型
-
- 兩種取值: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,……)
如果存在中文路徑,在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:過濾條件。
註意:comments為列名。
隨機抽樣
隨機抽樣函數:
data.sample(n,frac,replace=False)
- n:按個數抽樣
- frac:按百分比抽樣
- replace:是否可放回抽樣,默認FALSE不可放回。
分層抽樣:
按照某一列進行分組,用
data.groupby(‘class‘)
.其實就是對data數據進行按照class列進行分組,返回一個字典。
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)
時間格式化:將時間型數據按照指定格式轉換為字符型數據。
時間格式化函數:
dateTimeFormat=datetime.dt.strftime(format)
時間屬性抽取:從日期格式裏抽取需要的部分,如月、日。
抽取語法:
datetime.dt.property
時間抽取
根據一定的條件,對時間格式的數據進行抽取。
- 根據索引進行抽取
-
- 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)
數據分析
基本統計
描述性統計分析函數:describe()
,一次性求得基本情況。
另外,還可用下表統計函數:
還有:
- 累計求和:cumsum
- 最大值最小值所在位置:argmin()、argmax()
- 百分位數:quantile()
分組分析
根據分組字段,將分析對象劃分成不同的部分,以進行對比分析各組之間的差異性。
常用統計指標:計數、求和、平均值。
分組統計函數:
分布分析
將數據等距或者不等距的分組,進行研究各組分布規律。
交叉分析
分析兩個或兩個以上分組變量之間的關系,以交叉表的形式進行。
交叉計數函數(透視表):
pivot_table(values,index,columns,aggfunc,fill_value)
結構分析
在分組及交叉的基礎上,計算各組成部分所占比重,進而分析總體的內部特征。
外運算:
內運算:
相關分析
研究兩個或兩個以上隨機變量之間相互依存關系的方向和密切程度。
- 線性相關
- 非線性相關
線性相關關系主要采用皮爾遜(Pearson)相關系數r來度量連續變量之間線性相關強度。
相關分析函數:
DataFrame.corr()
:計算每個列兩兩之間的相關度,返回DataFrame。Series.corr(other)
:計算該序列與傳入列之間的相關度,返回一個數值,即相關度。
RFM分析
根據客戶活躍程度和交易金額貢獻,進行客戶價值分析。
RFM分析過程:
矩陣分析
根據事物(產品、服務等)的兩個重要屬性(指標)作為分析依據,進行關聯分析(象限分析)。
數據可視化
散點圖scatter
plot(x,y,‘.‘,color=(r,g,b))
折線圖
plt(x,y,style,color,linewith)
餅圖
plt.pie(x,labels,colors,explode,autopct)
柱形圖
bar(left,height,width,color)
barh(left,height,width,color)
直方圖
hist(x,color,bins,cumulative=False)
地圖
地圖繪制步驟:
- 獲取地圖對象,獲取每個區域的名字以及順序;
- 在每個區域的名字和順序後面,加上需要展示的數據及經緯度;
- 根據數據大小,設置每個區域展示顏色(0,1)。
- 根據顏色進行填充
- 根據經緯度進行標註地圖的名字
需要安裝Basemap庫.
熱力地圖
數據分析實戰