一,导入数据
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.read_csv("./HR.csv")
# 去除异常值
df =df.dropna(how="any",axis=0)
df = df[df["last_evaluation"]<=1][df["salary"]!="nme"][df["department"]!="sale"]
df.head(5)
df["salary"].value_counts()
二,柱状图
1.使用matplotlib画图
#真正有意义的是柱状图的高度
# 横坐标是工资的长度
# 纵坐标是工资value_counts的值
plt.title("SALARY")
plt.xlabel("salary")
plt.ylabel("Number")
#x轴坐标值
plt.xticks(np.arange(len(df["salary"].value_counts())),df["salary"].value_counts().index)
#设置显示范围[xmin,xmax,ymin,ymax]
plt.axis([0,4,0,10000])
plt.bar(np.arange(len(df["salary"].value_counts()))+0.5,df["salary"].value_counts(),width=0.5)
#数字标在图表上,用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")
plt.show()
2.使用seaborn画图
#seaborn是matplotlib的封装,所以matplotlib命令在seaborn中也是可以用的
# 改变图表样式:"darkgrid","whitegrid","white","ticks"
sns.set_style(style="darkgrid")
# 设置字体context和字号font_scale.
# 字体:"paper","notebook","talk","poster"
sns.set_context(context="poster",font_scale=0.8)
# 设置颜色palette:"matplotlib colormap","color_palette()"
sns.set_palette("summer")
sns.set_palette([sns.color_palette("RdBu",n_colors=7)[5]])
# seaborn画图
#sns.countplot(x="salary",data=df)
# 多层绘图,以"department"为分割进行多层绘制
sns.countplot(x="salary",hue="department",data=df)
三,直方图
f = plt.figure()
# 添加子图(行,列,第几个图)
f.add_subplot(1,3,1)
# kde=False 去掉曲线
# hist = False 去掉直方图
sns.distplot(df["satisfaction_level"],bins=10,kde=True,hist=True)
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)
结论:satisfaction_level大部分集中在右边,last_evaluation有个小的波动,每个月的工作时长基本上呈现两极分布
四,箱线图
# saturation=0.75上四分位数
# whis=3(whis(也就是K)一般取1.5〜3)
sns.boxplot(y=df["satisfaction_level"],saturation=0.75,whis=3)
五,折线图
#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()
结论:..我们可以看到在公司呆5年的时候,离职率最高4年其次6年第三所以,5年前后离职率比较大随着时间越来越久,离职率会下来时间越短,离职率也不高。
六,饼图
主要用来做结构分析
# seaborn中无饼图的画法,我们使用matplotlib
#加上标签
lbs=df["department"].value_counts().index
#autopct加上数字
#单独给某个部门间隔加宽,以凸显这个部门
explodes=[0.1 if i == "sales" else 0 for i in lbs]
plt.pie(df["department"].value_counts(normalize=True),labels=lbs,explode=explodes,autopct="%1.1f%%",colors=sns.color_palette("Reds"))
plt.show()
其他图:散点图,气泡图,雷达图等