數據處理,柱狀圖,countplot,分佈分析圖,箱線圖,點線圖(折線圖),餅圖

python3數據分析與挖掘建模實戰學習目錄

代碼實例下載

本文的csv文件數據部分截圖

本文的csv文件數據部分截圖

導入包

import pandas as pd
import numpy as np

isnull() 判斷缺失值

	df = pd.read_csv("./data/HR.csv")
    #Satisfaction Level
    sl_s = df["satisfaction_level"]
    sl_null = sl_s.isnull()#是否爲空值
    print("satisfaction_level.isnull:\n",df[df["satisfaction_level"].isnull()])

在這裏插入圖片描述

mean(),std(),max(),min(),median(),skew(),kurt()

mean() 求平均值,
std() 求標準差,
max() 求最大值,
min() 求最小值,
median() 求中位數,
skew() 求偏態,
kurt() 求峯態

np.histogram() 直方圖

直方圖是用面積表示各組頻數的多少,矩形的高度表示每一組的頻數或頻率,寬度則表示各組的組距,因此其高度與寬度均有意義。

	sl_s = sl_s.dropna()#丟棄空值
    sl_s = sl_s.fillna(1)#將空值填充成1
    #常用統計項
    print("sl_s.mean:\n",sl_s.mean(),"sl_s.std:\n",sl_s.std(),"sl_s.max:\n",
          sl_s.max(),"sl_s.min:\n",sl_s.min(),"sl_s.median:\n",sl_s.median(),
          "sl_s.skew:\n",sl_s.skew(),"sl_s.kurt:\n",sl_s.kurt())
    #直方圖示例
    # bins=np.arange(0.0,1.1,0.1) 範圍(0.0,1.1),左開右閉,間隔0.1
    print("直方圖:\n",np.histogram(sl_s.values,bins=np.arange(0.0,1.1,0.1)))

在這裏插入圖片描述
在這裏插入圖片描述

條件索引 le_s[le_s>1]

條件索引鏈接

data_arr[condition]

	#Last Evaluation
    le_s = df["last_evaluation"]
    le_null=le_s[le_s.isnull()]
    print("le_s:\n",le_s)
    print("le_s[15000]:",le_s[15000])
    print("le_s[le_s>1]:\n",le_s[le_s>1]) # 第 15000 行,數據爲 999999
    # print("np.histogram:\n",np.histogram(le_s.values, bins=np.arange(0.0, 1.1, 0.1)))

在這裏插入圖片描述

利用條件索引進行異常值過濾

	print("le_s:\n",le_s)
    print("le_s[15000]:",le_s[15000])
    print("le_s[le_s>1]:\n",le_s[le_s>1]) # 第 15000 行,數據爲 999999
    q_low = le_s.quantile(q=0.25)#下四分位數
    print("q_low:\n",q_low)
    q_high=le_s.quantile(q=0.75)#上四分位數
    print("q_high:\n",q_high)
    k=1.5
    q_interval = q_high - q_low
    print("q_interval:\n",q_interval)
    #異常值過濾
    print("le_s[le_s>q_high+k*q_interval]:\n",le_s[le_s>q_high+k*q_interval])
    print("le_s[le_s<q_low-k*q_interval]:\n",le_s[le_s<q_low-k*q_interval])
    le_s=le_s[le_s>q_high+k*q_interval][le_s<q_low-k*q_interval]
    print("le_s:\n",le_s)
    print("len(le_s):\n",len(le_s))

在這裏插入圖片描述

value_counts()

np_s.value_counts(normalize=True) 統計個數的佔比

Python pandas數據計數函數value_counts

sort_index() 默認根據行標籤對所有行排序,或根據列標籤對所有列排序,或根據指定某列或某幾列對行排序。

	#Number Project
    np_s=df["number_project"]
    # print(np_s[np_s.isnull()])
    # print(np_s.mean(),np_s.std(),np_s.median(),np_s.max(),np_s.min(),np_s.skew(),np_s.kurt())
    print("np_s.value_counts:\n",np_s.value_counts(normalize=True)) # 統計個數的佔比
    print(np_s.value_counts(normalize=True).sort_index())

在這裏插入圖片描述
在這裏插入圖片描述

    #average_montly_hours
    amh_s=df["average_monthly_hours"]
    # print(amh_s.mean(),amh_s.std(),amh_s.median(),amh_s.max(),amh_s.min(),amh_s.skew(),amh_s.kurt())
    print("11:",amh_s.quantile(0.75)+1.5*(amh_s.quantile(0.75)-amh_s.quantile(0.25)))
    print(len(amh_s[amh_s < amh_s.quantile(0.75)+1.5*(amh_s.quantile(0.75)-amh_s.quantile(0.25))]))
    print("22:",amh_s.quantile(0.25)-1.5*(amh_s.quantile(0.75)-amh_s.quantile(0.25)))
    print(len([amh_s>amh_s.quantile(0.25)-1.5*(amh_s.quantile(0.75)-amh_s.quantile(0.25))]))
    print("33:",len(amh_s[amh_s < amh_s.quantile(0.75)+1.5*(amh_s.quantile(0.75)-amh_s.quantile(0.25))][amh_s>amh_s.quantile(0.25)-1.5*(amh_s.quantile(0.75)-amh_s.quantile(0.25))]))

在這裏插入圖片描述

    interval=10
    print(np.histogram(amh_s.values,bins=np.arange(amh_s.min(),amh_s.max()+interval,interval)))
    print(amh_s.value_counts(bins=np.arange(amh_s.min(),amh_s.max()+interval,interval)))

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

    #Work Accident
    wa_s=df["Work_accident"]
    print(wa_s.value_counts())

在這裏插入圖片描述

    #Left
    l_s=df["left"]
    print("l_s.value_counts:\n",l_s.value_counts())

在這裏插入圖片描述

    #promotion_last_5years
    pl5_s=df["promotion_last_5years"]
    print("pl5_s.value_counts:\n",pl5_s.value_counts())

在這裏插入圖片描述

    #salary
    s_s=df["salary"]
    print("s_s.value_counts:\n",s_s.value_counts())

在這裏插入圖片描述

    #department
    d_s=df["department"]
    print("d_s.value_counts(normalize=True):\n",d_s.value_counts(normalize=True))
    print("d_s.where(d_s!= sale):\n",d_s.where(d_s!="sale"))

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

    #交叉
    df=df.dropna(how="any",axis=0)
    df=df[df["last_evaluation"]<=1][df["salary"]!="nme"][df["department"]!="sale"]
    print("df:\n",df)

在這裏插入圖片描述
在這裏插入圖片描述

    sub_df_1=df.loc[:,["satisfaction_level","department"]]
    print("sub_df_1:\n",sub_df_1)
    print("sub_df_1.groupby(department):\n",sub_df_1.groupby("department"))
    print("sub_df_1.groupby(department).mean():\n",sub_df_1.groupby("department").mean())

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

    sub_df_2 = df.loc[:,["left","department"]]
    print("sub_df_2:\n",sub_df_2)
    print("000000:\n",sub_df_2.groupby("department").mean())

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

    sub_df_3=df.loc[:,["last_evaluation","department"]]
    print("sub_df_3:\n",sub_df_3)

在這裏插入圖片描述
在這裏插入圖片描述

print("llllll:\n",sub_df_3.groupby("department",group_keys=False)["last_evaluation"].apply(lambda x:x.max()-x.min()))

在這裏插入圖片描述

print("222222:\n",df.groupby("department").mean())

在這裏插入圖片描述

    #Visual
    import seaborn as sns
    import matplotlib.pyplot as plt
    sns.set_style(style="darkgrid")#配置樣式
    sns.set_context(context="poster",font_scale=1.5)#配置字體
    sns.set_palette(sns.color_palette("RdBu", n_colors=7))#配置色板

配置seaborn包

在這裏插入圖片描述

Salary柱狀圖

    #Salary柱狀圖
    plt.title("Salary")
    plt.bar(np.arange(len(df["salary"].value_counts()))+0.25,df["salary"].value_counts(),width=0.5)
    plt.xticks(np.arange(len(df["salary"].value_counts()))+0.5,df["salary"].value_counts().index)
    plt.axis([0,3,0,9000])
    plt.xlabel("salary")
    plt.ylabel("Number")
    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")
    plt.ylim(0,1500)
    plt.show()

在這裏插入圖片描述

countplot

countplot是seaborn庫中分類圖的一種,作用是使用條形顯示每個分箱器中的觀察計數

countplot

    #countplot
    sns.countplot(x="salary",hue="department",data=df)
    plt.show()

在這裏插入圖片描述

分佈分析圖

    #分佈分析圖
    f=plt.figure(0)
    f.add_subplot(1,3,1)
    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()

在這裏插入圖片描述

箱線圖

    #箱線圖
    sns.boxplot(y=df["last_evaluation"],saturation=0.75)
    plt.show()

在這裏插入圖片描述

點線圖(折線圖)

    #點線圖(折線圖)
    sub_df=df.groupby("time_spend_company").mean()
    sns.pointplot(x="time_spend_company",y="left",data=df)
    #sns.pointplot(sub_df.index,sub_df["left"])
    plt.show()

在這裏插入圖片描述

餅圖

    #餅圖
    lbs=df["department"].value_counts().index
    explodes=[0.1 if i=="sales" else 0 for i in lbs ]
    plt.pie(df["department"].value_counts(normalize=True),explode=explodes,autopct='%1.1f%%',colors=sns.color_palette("Reds", n_colors=7),labels=df["department"].value_counts().index)
    plt.show()
    plt.pie(df["number_project"].value_counts(normalize=True),labels=df["number_project"].value_counts().index)
    plt.show()

在這裏插入圖片描述

完整代碼

import pandas as pd
import numpy as np
def main():
    df = pd.read_csv("./data/HR.csv")
    #Satisfaction Level
    sl_s = df["satisfaction_level"]
    sl_null = sl_s.isnull()#是否爲空值
    print(df[df["satisfaction_level"].isnull()])
    sl_s = sl_s.dropna()#丟棄空值
    sl_s = sl_s.fillna(1)#將空值填充成1
    #常用統計項
    print(sl_s.mean(),sl_s.std(),sl_s.max(),sl_s.min(),sl_s.median(),sl_s.skew(),sl_s.kurt())
    #直方圖示例
    print(np.histogram(sl_s.values,bins=np.arange(0.0,1.1,0.1)))

    #Last Evaluation
    le_s = df["last_evaluation"]
    le_null=le_s[le_s.isnull()]
    #常見統計項
    print(le_s.mean(),le_s.std(),le_s.median(),le_s.max(),\
          le_s.min(),le_s.skew(),le_s.kurt())
    print(le_s[le_s>1])
    q_low=le_s.quantile(q=0.25)#下四分位數
    q_high=le_s.quantile(q=0.75)#上四分位數
    k=1.5
    q_interval=q_high-q_low
    #異常值過濾
    le_s=le_s[le_s>q_high+k*q_interval][le_s<q_low-k*q_interval]
    print(len(le_s))
    print(np.histogram(le_s.values, bins=np.arange(0.0, 1.1, 0.1)))

    #Number Project
    np_s=df["number_project"]
    print(np_s[np_s.isnull()])
    print(np_s.mean(),np_s.std(),np_s.median(),np_s.max(),np_s.min(),np_s.skew(),np_s.kurt())
    print(np_s.value_counts(normalize=True).sort_index())

    #average_montly_hours
    amh_s=df["average_monthly_hours"]
    print(amh_s.mean(),amh_s.std(),amh_s.median(),amh_s.max(),amh_s.min(),amh_s.skew(),amh_s.kurt())
    print(len(amh_s[amh_s<amh_s.quantile(0.75)+1.5*(amh_s.quantile(0.75)-amh_s.quantile(0.25))][amh_s>amh_s.quantile(0.25)-1.5*(amh_s.quantile(0.75)-amh_s.quantile(0.25))]))
    interval=10
    print(np.histogram(amh_s.values,bins=np.arange(amh_s.min(),amh_s.max()+interval,interval)))
    print(amh_s.value_counts(bins=np.arange(amh_s.min(),amh_s.max()+interval,interval)))
    #Time Spend Company
    tsc_s=df["time_spend_company"]
    print(tsc_s.value_counts().sort_index())

    #Work Accident
    wa_s=df["Work_accident"]
    print(wa_s.value_counts())

    #Left
    l_s=df["left"]
    print(l_s.value_counts())

    #promotion_last_5years
    pl5_s=df["promotion_last_5years"]
    print(pl5_s.value_counts())

    #salary
    s_s=df["salary"]
    print(s_s.value_counts())

    #department
    d_s=df["department"]
    print(d_s.value_counts(normalize=True))
    print(d_s.where(d_s!="sale"))

    #交叉
    df=df.dropna(how="any",axis=0)
    df=df[df["last_evaluation"]<=1][df["salary"]!="nme"][df["department"]!="sale"]
    sub_df_1=df.loc[:,["satisfaction_level","department"]]
    print(sub_df_1.groupby("department").mean())
    sub_df_2=df.loc[:,["left","department"]]
    print(sub_df_2.groupby("department").mean())
    sub_df_3=df.loc[:,["last_evaluation","department"]]
    print(sub_df_3.groupby("department",group_keys=False)["last_evaluation"].apply(lambda x:x.max()-x.min()))
    print(df.groupby("department").mean())

    #Visual
    import seaborn as sns
    import matplotlib.pyplot as plt
    sns.set_style(style="darkgrid")#配置樣式
    sns.set_context(context="poster",font_scale=1.5)#配置字體
    sns.set_palette(sns.color_palette("RdBu", n_colors=7))#配置色板

    #Salary柱狀圖
    plt.title("Salary")
    plt.bar(np.arange(len(df["salary"].value_counts()))+0.25,df["salary"].value_counts(),width=0.5)
    plt.xticks(np.arange(len(df["salary"].value_counts()))+0.5,df["salary"].value_counts().index)
    plt.axis([0,3,0,9000])
    plt.xlabel("salary")
    plt.ylabel("Number")
    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")
    plt.ylim(0,1500)
    plt.show()

    #countplot
    sns.countplot(x="salary",hue="department",data=df)
    plt.show()
    #分佈分析圖
    f=plt.figure(0)
    f.add_subplot(1,3,1)
    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()

    #箱線圖
    sns.boxplot(y=df["last_evaluation"],saturation=0.75)
    plt.show()
    #點線圖(折線圖)
    sub_df=df.groupby("time_spend_company").mean()
    sns.pointplot(x="time_spend_company",y="left",data=df)
    #sns.pointplot(sub_df.index,sub_df["left"])
    plt.show()
    #餅圖
    lbs=df["department"].value_counts().index
    explodes=[0.1 if i=="sales" else 0 for i in lbs ]
    plt.pie(df["department"].value_counts(normalize=True),explode=explodes,autopct='%1.1f%%',colors=sns.color_palette("Reds", n_colors=7),labels=df["department"].value_counts().index)
    plt.show()
    plt.pie(df["number_project"].value_counts(normalize=True),labels=df["number_project"].value_counts().index)
    plt.show()
if __name__=="__main__":
    main()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章