資料分析模組
1、功能綜述
該部分可以實現將使用者的csv檔案進行一系列資料分析並且返回相應的分析結果。這部分主要的分析包括返回資料主要屬性,相關性資訊、熱力圖,特徵分布散點圖、密度圖,預設值統計和補全,統計偏值並歸正,生成詞云等,將這些在後台分析出來的資料、等返回給使用者,實現乙個基本的csv檔案通用分析處理功能。
2、功能實現
定義dataanalyze類,其中檔案file作為其中的屬性,定義相關函式來實現對應的功能。
2.1返回資料屬性
為了來給使用者對該資料有乙個最直觀的認識,定義check_structure函式,返回資料的形狀和每列資料的屬性(包括索引範圍、列屬性的數量,是否為空,資料型別等),該部分主要是用dataframe資料型別的index和columns屬性來獲得資料的行數和列數;在原來的內建函式info函式的基礎上進行改進,可以返回資料每種特徵的名字,每個特徵有多少個值,是否是空,資料型別等。以drinks.cvs檔案為例子,輸出該函式的返回值如下:
資料基本屬性
2.2特徵相關性
在資料分析中,相關性分析是乙個非常重要的一部分,可以由此找到數值型屬性中那些屬性的關係最近,即那些屬性最重要,最值得花時間來研究。定義correlation函式,在裡面返回各種數值型屬性之間的相關性的數值,同時利用seaborn庫來畫出關係熱力圖,更加直觀。可以直接借助dataframe的corr函式來獲得任意兩個屬性的關係資料,利用sns.heatmap(df.corr(), cmap="ylgnbu")做出熱力圖。還是使用上面的例子,執行後顯示如下:
每個數值型的特徵之間相關值
顏色越深,表示兩個特徵之間的關係越密切,相互之間的影響更大。例如beer_servings和自己的關係最大為1,除此之外和total_litres_of_pure_alcohol特徵也非常大。得到這些關係資料後,我們就可以有針對性對這些更重要特徵進行如下處理。
2.3特徵分布
這部分主要是為了觀察特徵自己以及特徵之間的更加分布關係,例如線性單增的散點分布,在那個部分的分布更加密集等,除此之外,還容易找出異常值,之後將其刪除,保證資料的準確性。定義dig_dist函式,在裡面作對角線網格圖描述數值型特徵的之間的分布(網格圖中包含柱狀分布圖,散點分布圖和密度圖),相關**如下:
g = sns.pairgrid(df) # 主對角線是資料集中每乙個數值型資料列的直方圖,
g.map_diag(sns.distplot) # 指定對角線繪圖型別
g.map_upper(plt.scatter, edgecolor="white") # 兩兩關係分布
g.map_lower(sns.kdeplot) # 繪製核密度分布圖。
最後用plt顯示效果如下:
特徵之間分布圖
2.4預設值統計和補全
該部分也是資料預處理非常重要的部分,尤其是資料量較少,可以保證資料完整性。首先來統計每種屬性的預設的數量df.isnull().sum(),以及預設數占自己總數的比率,將這兩個特徵組合在一起構成乙個新的dataframe資料來返回。
然後我們根據所有預設之中每種特徵的佔比做出餅狀圖來顯示,最後利用水平柱狀圖顯示每種特徵的預設數量和不預設的數量。還是使用上面的檔案例子,效果如下:
每個特徵的預設統計
從上面可以看出continent特徵有23個預設值,佔總數的0.119171,而其他特徵都沒有預設。
從上面的餅狀圖和柱狀圖中可以看出所以預設值中屬於continent特徵佔100%,即只有continent有預設,其他特徵沒有。
在知道那些特徵有預設之後就可以開始有針對性進行特徵值的補全。填充的方法主要有三種:字元型特徵用none填充;數值型用眾數填充;通過資料擬合來填充。其中第三種的填充效果最好,但我們這裡比較通用,不是特別對某個資料集處理,後面考慮改進。所以主要是使用前兩種方式:
for index in nulldata.index:
if type(index) is not object:
f[index].fillna("none", inplace=true)
else:
df[index].fillna(df[index].mode()[0], inplace=true)
2.5特徵偏值統計和改正
現實世界中資料的分布都是服從正態分佈,但是由於我們載入的csv檔案中的資料往往較少,所以其分布可能會偏離正態正態分佈,這就使得資料的客觀性降低,對之後的使用有所影響,所有我們需要計算每種數值型特徵的偏值df.skew(),將其倒排序後返回,並利用柱狀圖將其表示出來,效果如下:
對於這些偏值過高的特徵進行 np.log1p()操作,降低其偏差值,這裡我選擇偏值大於0.5的特徵進行log1p,當然具體門閥值可以按照特定的資料要求和自己需求而定。與上乙個功能補全預設值相同,我們都要都資料集進行更新,保證以後的功能都是在這個處理過的資料集上實現的。
2.6特徵值的詞云
以上的大部分資料分析處理都是對數值型特徵進行的,而這個詞云是對字元型特徵的值進行統計,將特徵的值在某個形態中全部顯示出來,其中字型大小表示其在特徵值**現的頻率。該部分主要是使用wordcloud庫,將物件型別的特徵的全部取出來連成乙個字串型別變數,該字串作為作為詞云的文字的輸入,其中還包括背景設定,字型設定,停用詞設定等。dinks.cvs其中的country特徵的詞云如下所示:
3、總結改進
這個部分的初衷是實現乙個通用的自動分析和處理資料並返回結果給使用者,但其中還是存在一些不足,例如增加可以處理的資料的型別,比如json資料,data資料等;在異常值發現方面,可以使用lasson回歸訓練資料來找到異常值並刪除;除此之外,還可以做一些特徵工程,如將字元型特徵轉化為數值型,資料向量化,增加新特徵等,本來想在此基礎上針對資料集實現機器學習的回歸**功能,但是由於不清楚對獲取的資料集的那個特徵進行**,而且這種通用的處理的誤差必然會比較大。
參考:人類身份驗證 - segmentfault
資料分析報告的通用結構
根據閱讀 資料分析師養成寶典 及個人理解後所得。明確業務目標 資料準備 資料指標與分析 撰寫分析報告 了解必須的業務資訊,明確問題型別,因為不同的問題型別,要解決的問題不同。問題型別 必解決的問題 可延伸的問題 描述類發生了什麼事 無因果類 發生了什麼事,為什麼會發生 無 類 發生了什麼事,未來會如...
大資料分析技術架構的通用模組
對於企業來說,坐擁龐大的資料資源,想要實現大資料分析,首先要建立自己的大資料系統平台,每個公司都有自己的具體業務場景,因此對大資料平台的要求也不同。今天我們僅從通用的角度,來聊聊大資料分析需要什麼技術架構?不同的業務場景下,需要根據實際的業務需求,選擇適合自己的技術框架,來搭建自己的大資料架構體系。...
pandas資料分析案例
1 資料分析步驟 資料分析步驟 1 先載入資料 pandas.read cvs path 2 檢視資料詳情 df.info df.describe df.head 3 根據業務獲取資料 複雜在此 4 展現資料 2 案例 coding utf 8 911資料中不同月份不同型別的 的次數的變化情況 im...