1. 程式人生 > >[Python資料分析] 2-單因子探索分析與視覺化

[Python資料分析] 2-單因子探索分析與視覺化

I.理論部分
 
1)概念相關:
集中趨勢:均值,中位數,眾數,分位數
離中趨勢:標準差,方差
資料分佈:偏度係數,峰度係數,正態分佈,三大分佈
抽樣理論:抽樣誤差(確定樣本量)、抽樣精度
 
2)資料分類
定類(類別):根據事物離散,無差別屬性進行的分類。性別,民族
定序(順序):可以界定資料的大小,但不能測定差值。低中高
定距(間隔):可以界定資料大小的同時測定差值,但無絕對零點(乘除比率等無意義)。溫度
定比(比率):可以界定資料大小,可以測定差值,有絕對零點(乘除比率有意義)。身高,體重
 
3)單屬性分析:
1.異常值分析
    連續異常值:[下分位數-K*(Q3-Q1),上分位數+K*(Q3-Q1)]
    離散異常值:空值
    知識異常值:不符合常理的值
2.對比分析
    比較什麼?
        絕對數比較,
        相對數比較,
        結構相對數:部分與總體
        比例相對數:總體內不同部分的數值進行比較
        比較相對數:同一時空下相似或者同質的數值進行的比較
        動態相對數:增速等
        強度相對數:性質不同但有相互聯絡屬性相互的聯合,平均
    怎麼比?
        時間維度:同比,環比
        空間維度:
        經驗與計劃:進度與排期的比較
3.結構分析
    靜態:分析總體的組成(總體的結構)
    動態:分析結構變化的趨勢
4.分佈分析
    直接獲得的概率分佈
    判斷是不是正態分佈
    極大似然(相似程度的衡量)
 
 
II.編碼實現
 
1)準備工作
pip install pandas  #cmd中利用pip安裝所需要的包pandas,numpy,scipy
ipmort pandas as pd  #IDE中呼叫所需的包,包括了pandas,scipy.stats
df = pd.read_csv(" 檔案路徑")  #資料的選取
 
pandas庫顯示不完全的問題使用下列程式碼:
pd.set_option('display.max_columns', None)  #顯示所有列
pd.set_option('display.max_rows', None)  #顯示所有行
pd.set_option('max_colwidth',100)  #設定value的顯示長度為100,預設為50
 
2)一些簡單操作
單series資料檢視,目的是為了尋找異常值,此處以HR表中department列為例
d_s = df["department"]
d_s.sum()  #求和
d_s.mean()  #均值
d_s.median()  #中位數
d_s.quantile(q=0.25)  #四分位數
d_s.mode()  #眾數
d_s.std()  #標準差
d_s.var()  #方差
d_s.skew()  #偏度係數
d_s.kurt()  #峰度係數
d_s.value_counts()  #按照型別計數
d_s.value_counts(normalize = True).sort_index()  #按照型別計算百分比,並排序
d_s.where(d_s != "sale")  #顯示不為sale的值,即sale值記為空值
d_s.dropna()  #刪除空值
d_s.isnull()  # 列出是否有異常值
d_s[d_s.isnull()]  # 檢視哪些是空置
df[df["department"].isnull()]   # 檢視空值資料
 
3)對比分析
1.清除空值
df = df.dropna(axis=0,how='any')  #刪除空值axis=(0行,1列),how(any任一為空,all所有為空)
2.清除其他異常值
df = df[df["last_evaluation"]<=1][df["salary"]!="nme"][df["department"]!="sale"]  #刪除其餘
3.對比部門之間的關係
df.groupby("department").mean()
4.切片
df.loc[:,["last_evaluation","department"]].groupby("department").mean()
5.自己定義函式對比
df.loc[:,["average_monthly_hours","department"]].groupby("department").apply(lambda x:x.max()-x.min())
 
 
III.初級視覺化
1)柱狀圖:橫軸為類,有意義的為它的高度,此處以工資這一列不同工資水平的人數做柱狀圖
# 呼叫庫
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
 
# 檔案讀取
df = pd.read_csv(r"C:\Users\Administrator\sample_code\data\HR.csv")
df = df.dropna(axis=0,how='any')
df = df[df["last_evaluation"]<=1][df["salary"]!="nme"][df["department"]!="sale"]
 
# 用seaborn改變樣式(背景色,字型,字號,顏色
sns.set_style(style="darkgrid")
sns.set_context(context="poster",font_scale=0.5)
# 如果要用色塊中的某個顏色,要改成陣列形式再做標註:sns.set_palette([sns.color_palette("RdBu", n_colors=7)][5])
sns.set_palette(sns.color_palette("RdBu", n_colors=7))
 
# 加標題
plt.title("SALARY")
# 橫座標
plt.xlabel("salary")
# 縱座標
plt.ylabel("number")
# 製圖(橫軸為salary對應的數字,縱軸為salary對應的數量),同時可以指定寬度
plt.bar(np.arange(len(df["salary"].value_counts()))+0.5,df["salary"].value_counts(),width=0.5)
# 橫軸標註(用salary對應數字的index覆蓋salary對應的數字)
plt.xticks(np.arange(len(df["salary"].value_counts()))+0.5,df["salary"].value_counts().index)
# 修改橫縱座標的顯示範圍,發現只顯示了一半,橫座標需要加0.5
plt.axis([0,4,0,10000])
# 用zip函式確定確定標註位置和標註的值
for x,y in zip(np.arange(len(df["salary"].value_counts()))+0.5,df["salary"].value_counts()):
    plt.text(x,y,y,ha="center",va="bottom")
# seaborn為matplotib的封裝,所以後者的命令前者也可以用,下面為seaborn的命令,hue向下鑽取
sns.countplot(x="salary",hue="department",data=df)
 
# 顯示圖表
plt.show()
 
 
 
2)直方圖,橫軸為一個區間,有意義的是他的面積
# 呼叫庫
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
 
# 檔案讀取
df = pd.read_csv(r"C:\Users\Administrator\sample_code\data\HR.csv")
df = df.dropna(axis=0,how='any')
df = df[df["last_evaluation"]<=1][df["salary"]!="nme"][df["department"]!="sale"]
 
# 用seaborn改變樣式(背景色,字型,字號,顏色
sns.set_style(style="whitegrid")
sns.set_context(context="paper",font_scale=0.8)
# 如果要用色塊中的某個顏色,要改成陣列形式再做標註:sns.set_palette([sns.color_palette("RdBu", n_colors=7)][5])
sns.set_palette(sns.color_palette("RdBu", n_colors=7))
 
# 製圖,***其他圖形也可以這樣設定在一頁上生成類似格式的圖***
f = plt.figure()
# 在一行三列第一個位置新增一個直方圖
f.add_subplot(1,3,1)
# 引數kde,hist分別對應曲線和直方,不需要改為False即可
sns.distplot(df["satisfaction_level"],bins=10)
f.add_subplot(1,3,2)
sns.distplot(df["last_evaluation"],bins=10)
f.add_subplot(1,3,3)
sns.distplot(df["average_monthly_hours"],bins=10)
 
# 顯示圖表
plt.show()
 
 
 
3)箱線圖
# 呼叫庫
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
 
# 檔案讀取
df = pd.read_csv(r"C:\Users\Administrator\sample_code\data\HR.csv")
df = df.dropna(axis=0,how='any')
df = df[df["last_evaluation"]<=1][df["salary"]!="nme"][df["department"]!="sale"]
 
# 用seaborn改變樣式(背景色,字型,字號,顏色
sns.set_style(style="whitegrid")
sns.set_context(context="paper",font_scale=0.8)
# 如果要用色塊中的某個顏色,要改成陣列形式再做標註:sns.set_palette([sns.color_palette("RdBu", n_colors=7)][5])
sns.set_palette(sns.color_palette("RdBu", n_colors=7))
 
# x,y分別代表橫,豎,引數saturation確定方框的邊界,引數whis確定上分位數再向上的幾倍的分位數間距為上界
sns.boxplot(x=df["time_spend_company"],saturation=0.75,whis=3)
 
# 顯示圖表
plt.show()
 
 
 
4)折線圖:事物變化趨勢
# 呼叫庫
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
 
# 檔案讀取
df = pd.read_csv(r"C:\Users\Administrator\sample_code\data\HR.csv")
df = df.dropna(axis=0,how='any')
df = df[df["last_evaluation"]<=1][df["salary"]!="nme"][df["department"]!="sale"]
 
# 用seaborn改變樣式(背景色,字型,字號,顏色
sns.set_style(style="whitegrid")
sns.set_context(context="paper",font_scale=0.8)
# 如果要用色塊中的某個顏色,要改成陣列形式再做標註:sns.set_palette([sns.color_palette("RdBu", n_colors=7)][5])
sns.set_palette(sns.color_palette("RdBu", n_colors=7))
 
# 繪製time_spend_company和left的折線圖
sub_df=df.groupby("time_spend_company").mean()
sns.pointplot(sub_df.index,sub_df["left"])
# 或者可以這樣畫 
# sns.pointplot(x="time_spend_company",y="left",data=df)
 
# 顯示圖表
plt.show()
 
 
 
4)餅圖:檢視百分比,無法用seaborn繪製,利用matplotlib繪製
# 呼叫庫
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
 
# 檔案讀取
df = pd.read_csv(r"C:\Users\Administrator\sample_code\data\HR.csv")
df = df.dropna(axis=0,how='any')
df = df[df["last_evaluation"]<=1][df["salary"]!="nme"][df["department"]!="sale"]
 
# 設定標籤
lbs=df["department"].value_counts().index
# 設定分離塊
explodes=[0.1 if i=="sales" else 0 for i in lbs]
# 製圖,autopct="%1.1f%%"設定顯示值,color可以採用seaborn的內容
plt.pie(df["department"].value_counts(normalize=True),explode=explodes,labels=lbs,autopct="%1.1f%%",colors=sns.color_palette("Reds"))
 
# 顯示圖表
plt.show()

相關推薦

[Python資料分析] 2-因子探索分析視覺

I.理論部分 1)概念相關: 集中趨勢:均值,中位數,眾數,分位數 離中趨勢:標準差,方差 資料分佈:偏度係數,峰度係數,正態分佈,三大分佈 抽樣理論:抽樣誤差(確定樣本量)、抽樣精度 2)資料分類 定類(類別):根據事物離散,無差別屬性進行的分類。性別,民族 定序(

Python & R:資料探勘、自然語言處理視覺

微信公眾號關鍵字全網搜尋最新排名【機器學習演算法】:排名第一【機器學習】:排名第一【Python

python資料分析新手入門課程學習——(二)探索分析視覺(來源:慕課網)

 一,單因子與對比分析視覺化 資料 import pandas as pd df = pd.read_csv('./HR.csv') #檢視前十條資料 df.head(10) 以下為顯示的結果 我們可以看出: 第一個屬性satisf

Python資料探勘學習——親和性分析

最近了解了一些Python資料探勘方面的內容,主要學習了《Python資料探勘入門與實踐》這本書的內容,在這裡對書中的內容以及我遇到的一些問題進行整理。 資料探勘旨在讓計算機根據已有的資料作出決策。 資料探勘的第一步一般是建立資料集,資料集主要包括: (1)樣本:表示真實世界中的物體

python資料探勘實戰筆記——文字分析(6):關鍵詞提取

緊接上篇的文件,這節學習關鍵字的提取,關鍵詞——keyword,是人們快速瞭解文件內容,把握主題的重要內容。 #匯入需要的模組 import os import codecs import pandas import jieba import jieba.ana

Python+pandas+matplotlib資料分析視覺案例(附原始碼)

問題描述:執行下面的程式,在當前資料夾中生成飯店營業額模擬資料檔案data.csv然後完成下面的

jQuery分析(2) - $工廠函數分析

bject 所有 合並 ams cto cnblogs rip 詳細 blog jQuery分析(2) - $工廠函數分析 前言 從這節進入jQuery的世界,首先從jQuery的入口函數開始了解jQuery()或$是如何運作的,這裏我給出了一

資料分析(使用matplotlib,seaborn,ploty進行視覺)——1

柱狀圖  使用matplotlib畫圖 import matplotlib.pyplot as plt import seaborn as sns import pandas as pd import numpy as np # 匯入資料 df = pd.read_csv(

人人都是資料分析師:Tableau應用實戰(三)初級視覺分析

初級視覺化分析 本章將以電力行業資料及常見視覺化分析需求為例,介紹11種初級檢視的建立用法,分別是:以“2014年各省市售電量明細表”作為資料來源的條形圖(4.1)、餅圖(4.3)、折線圖(4.4)、氣泡圖(4.8)、圓檢視(4.9)、標靶圖(4.10);以“公司年齡統計表”作為資料

Elastic Stack實戰學習教程~日誌資料的收集、分析視覺

Elastic Stack介紹 近幾年,網際網路生成資料的速度不斷遞增,為了便於使用者能夠更快更精準的找到想要的內容,站內搜尋或應用內搜尋成了不可缺少了的功能之一。同時,企業積累的資料也再不斷遞增,對海量資料分析處理、視覺化的需求也越來越高。 在這個領域裡,開源專案ElasticSearch贏得了市場的關

3.Python資料型別(2)——math庫和random庫

1. math數學庫 常用的數學庫函式: 2. random庫——隨機函式 常用函式: 3. 例:圓周率兀的計算——蒙特卡洛法:採用隨機試驗求解問題的方法 在構造的1/4個圓和正方形內隨機拋灑大量的點,計算在圓內點的個數與總數的比值,即為1/4兀 from

拉鉤網 資料分析視覺

前端時間爬取了拉鉤網的某一職位的相關資訊,於是就有了分析一下這些資料的想法,爬取的方式可以看我的另一篇部落格,csv檔案的資料主要是以下的這些在csv中儲存的格式為第一列為職位名稱,第二,三列為薪水的範圍,第四列為工作城市,第五、六列為工作經驗年限,第七列為最低學歷,第八列為

探索性資料分析視覺

  世界如此大,我想去看看;資料如此豐富,怎麼能看完。   面對未知,人類是富有探索精神的,可以不畏艱險,可以排除萬難,正是這種探索精神使得人類不斷進步不斷創造一個又一個奇蹟。對於紛繁複雜的資料世界,我們如何進行探索性分析呢? 探索性資料分析   之前

讀取CSV檔案進行簡單的資料處理視覺分析

機緣巧合之下,看到了這麼一個題,之前也沒接觸過視覺化這一塊,感覺挺有意思就順手做了做 大致意思呢,就是在csv裡有三種資料:一個時間,一個振幅(emmm,有點彆扭),一個頻率。但是在頻率上有問題,有外在頻率干擾,要過濾掉干擾,找出傳遞真正資訊的頻率。並對其傳遞的資訊做出

BeeGFS原始碼分析2-客戶端概要分析

註冊檔案系統型別 init_fhgfs_client 核心模組初始化: // fhgfs_client_module\source\program\Main.c #define BEEGFS_LICENSE "GPL v2" static int __init init_fhgf

SpringMVC原始碼分析2:SpringMVC設計理念DispatcherServlet

轉自:https://my.oschina.net/lichhao/blog SpringMVC簡介 SpringMVC作為Struts2之後異軍突起的一個表現層框架,正越來越流行,相信javaee的開發者們就算沒使用過SpringMVC,也應該對其略有耳聞。我試圖通過對SpringMVC的設計思想和原始碼實

FFmpeg libswscale原始碼分析2-轉碼命令列濾鏡圖

本文為作者原創,轉載請註明出處: libswscale 原始碼分析系列文章: [1]. [FFmpeg libswscale原始碼分析1-API介紹](https://www.cnblogs.com/leisure_chn/p/14349382.html) [2]. [FFmpeg libsws

caffe之網路權重視覺(C++實現),分析網路功能 caffe之網路權重視覺(C++實現)

原 caffe之網路權重視覺化(C++實現) 2017年05月05日 11:28:12 真小假 閱讀數:3083 &

微信小程式六(資料請求 表的建立 提交 接收)

好了 開始正題了,本節小小研究了下 微信小程式的表單建立與提交 先看看效果 1. 表單頁面 <view id="adduser">     <form bindsubmit="formSubmit" bindreset="formReset"> &

python v3.3.2中使用subprocess模組其它程式進行管道通訊

下面是python指令碼sup.py: import subprocess p = subprocess.Popen("test.exe", stdin = subprocess.PIPE,stdout = subprocess.PIPE, stderr = subpr