python数据挖掘系列(一)

一:python数据分析课程介绍

1.数据挖掘流程:

数据获取——探索分析——预处理——挖掘建模——模型评估

2.课程内容

3.课程注意点

(1)基础数学知识

(2)前置知识:python

(3)环境

         python3.6.3   

         pycharm

         annaconda5.0.1这里面都包含了(选择python3.6的版本)

 二、数据分析概述:

1.用pandas包导入数据:

import pandas as pd
df=pd.read_csv("./data/HR_comma_sep.csv") #导入csv文件

df.mean() #查看均值
df["satisfaction_level"].median() #查看某一列众数
df.quantile(q=0.25) #分位数 上下四分位数可以监测是否有异常值

df.mode()
df.std()
df.var()
df.sum() #查看各种参数
df.skew()
df.kurt()
df.max()
df.min()

import scipy.stats as ss
ss.norm #创建正态分布
ss.norm.pdf(0.0) #查看正态分布中的某一个点
ss.norm.pdf(1.0)  #查看积分性质
ss.norm.ppf(0.995) #查看积分性质

import numpy as np
sl_s=df["satisfaction_level"] #抽取其中一行
sl_s.isnull() #检验数据中有无null
sl_s[sl_s.isnull()]  #列出数据中的null行

df[df["satisfaction_level"].isnull()] #列出数据中的null行

sl_s=sl_s.fillna() #将数据行中的null行用数据替代
sl_s=sl_s.dropna() #将数据行中的null行直接剔除

################################################################################

2.进行分布特性的初步分析

#按照0.0~0.1~1.0分段统计数量的多少
np.histogram(sl_s.values,bins=np.arange(0.0,1.1,0.1))

运行结果

Out[39]: 
(array([ 195, 1214,  532,  974, 1668, 2146, 1972, 2074, 2220, 2004], dtype=int64),
 array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9,  1. ]))

3.进行离群值的去除

ls_e=df["last_evaluation"]
q_low=le_s.quantile(q=0.25)
q_high=le_s.quantile(q=0.75)
q_interval=q_high-q_low
k=1.5

三:数据可视化管理

1.python可视化工具

 其中matplotlib是用来初步绘图的

以及seaborn是基于matplotlib的封装,用来进一步美化图像的

以及plotly可以将图像直接用于网页中

关于pandas分组的操作,参考以下链接:Pandas分组(GroupBy) - Pandas教程 (yiibai.com)

2.代码实战

2.1 显示柱状图

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

df = pd.read_csv("./data/HR_comma_sep.csv")
plt.bar(np.arange(len(df["salary"].value_counts())),df["salary"].value_counts())
plt.show()

理解:

(1)其中 df["salary"].value_counts() 是一个计数函数,会生成一个二维数组

         当调用 df["salary"].value_counts()会出现以下结果  

low       7316
medium    6446
high      1237
Name: salary, dtype: int64

          当调用 df["salary"].value_counts().index 会出现以下结果

Index(['low', 'medium', 'high'], dtype='object')

 (2)而 len(df["salary"].value_counts()) 会对数组进行计数,结果为3

 (3)np.arange(len(df["salary"].value_counts())) 会形成一个顺序数列,作为直方图的横坐标

2.2 柱状图标注参数

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

df = pd.read_csv("./data/HR_comma_sep.csv")
sns.set_style(style="white")
sns.set_context(context="poster",font_scale=0.8)
sns.set_palette([sns.color_palette("RdBu",n_colors=7)[2]])
plt.title("SALARY")
plt.xlabel("salary")
plt.ylabel("Number")
plt.xticks(np.arange(len(df["salary"].value_counts()))+0.5,df["salary"].value_counts().index())
# 添加纵坐标标注
plt.axis([0, 4, 0, 10000])  # 横轴最小值  横轴最大值  纵轴最小值  纵轴最大值
plt.bar(np.arange(len(df["salary"].value_counts()))+0.5, df["salary"].value_counts(), width=0.5)
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()

或者直接用seaborn绘制

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

df = pd.read_csv("./data/HR_comma_sep.csv")

sns.set_style(style="white")
sns.set_context(context="poster",font_scale=0.8)
sns.set_palette(sns.color_palette("RdBu",n_colors=7))
sns.countplot(x="salary",data=df)
plt.show()

2.3 用seaborn绘制直方图

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

df = pd.read_csv("./data/HR_comma_sep.csv")

sns.set_style(style="white")
sns.set_context(context="poster", font_scale=0.8)
sns.set_palette(sns.color_palette("RdBu", n_colors=7))

f = plt.figure()  # 建立一个figure
f.add_subplot(1, 3, 1)  # 建立子图1
sns.distplot(df["satisfaction_level"], bins=10, kde=False)
f.add_subplot(1, 3, 2)  # 建立子图2
sns.distplot(df["last_evaluation"], bins=10, kde=True)
f.add_subplot(1, 3, 3)  # 建立子图3
sns.distplot(df["average_montly_hours"], bins=10, kde=True)
# bins表示分成10个等级,kde表示趋势线,hist表示矩形

plt.show()

运行结果:

2.4 箱线图

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

df = pd.read_csv("./data/HR_comma_sep.csv")

sns.set_style(style="white")
sns.set_context(context="poster", font_scale=0.8)
sns.set_palette(sns.color_palette("RdBu", n_colors=7))

g = plt.figure()
g.add_subplot(1, 2, 1)  # 建立子图1
sns.boxplot(y=df["time_spend_company"])
g.add_subplot(1, 2, 2)  # 建立子图2
sns.boxplot(x=df["time_spend_company"], saturation=0.75, whis=3)
# 其中x,y代表方向,saturation代表上四分位数,whis 代表上界
plt.show()

运行结果:

2.5 折线图

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

df = pd.read_csv("./data/HR_comma_sep.csv")

sns.set_style(style="white")
sns.set_context(context="poster", font_scale=0.8)
sns.set_palette(sns.color_palette("RdBu", n_colors=7))

sub_df = df.groupby("time_spend_company").mean()
# groupby 的作用是分组,按照 groupby 的数值将数据分成不同的组
# 该项操作将数据按照"time_spend_company"进行分类然后求取平均值
sns.pointplot(sub_df.index, sub_df["left"])
plt.show()

其中,print(sub_df)输出结果如下:

time_spend_company
2     0.016338
3     0.246159
4     0.348064
5     0.565513
6     0.291086
7     0.000000
8     0.000000
10    0.000000

运行结果如下:

或者直接采用:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

df = pd.read_csv("./data/HR_comma_sep.csv")

sns.set_style(style="white")
sns.set_context(context="poster", font_scale=0.8)
sns.set_palette(sns.color_palette("RdBu", n_colors=7))

sns.pointplot(x="time_spend_company", y="left", data=df)
plt.show()

运行结果如下:

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值