import warnings
warnings.filterwarnings('ignore')
在数据分析的过程中,经常会遇到一个很麻烦的问题,就是中文无法显示,这个困难真的会困扰很多同学包括我在内,还好终于找到了问题的解决办法,在之前的一篇博客中已经涉及到了,详情戳:机器学习 | 特征重要性判断
下面就详细分开的说下每种图该怎么画!
参数:
p1 = sns.boxplot(x = 'type_now', y = '7_active_days', data=df, order=['高活','中活','低活','不活'])
plt.savefig('plot/3-1.png')
plt.show()
注:倒数第二行的命令是保存图片,具体看需求,最后一个命令是显示图片。有时候jupyter无法显示图片,还得再运行一下ok,有点玄学,不过在命令框的前面加上一个魔法命令就可以解决了:
%matplotlib inline
绘制后的效果见下图:
有时候希望画成1×2 或者 2×1的图形,具体如何实现呢?
代码:
f, (ax1,ax2) = plt.subplots(1, 2, figsize=(10, 6))
sns.distplot(df['event_columnx'], ax=ax1)
sns.distplot(df['event_columnx_now'], ax=ax2)
plt.savefig('plot/3-4.png')
plt.show()
参数:
效果:
import seaborn as sns
import matplotlib.pyplot as plt
def test(df):
dfData = df.corr()
plt.subplots(figsize=(9, 9)) # 设置画面大小
sns.heatmap(dfData, annot=False, vmax=1, square=True, cmap="Blues")
plt.savefig('./相关系数图.png')
plt.show()
绘图后效果见下图:
先上图:
起到的作用:
代码:
ax = sns.countplot(x = 'type', hue = 'type_now', data = df, order=['高活','中活','低活','不活'])
plt.savefig('plot/3-1-2.png')
plt.show()
参数:
补充:
# 调整figsize
f, ax = plt.subplots(figsize=(12, 8))
代码:
f, ax = plt.subplots(figsize=(10, 8))
sns.distplot(df['session_count'], kde=True)
plt.savefig('plot/3-3-3.png')
plt.show()
效果:
参数:
代码:
def PlotHis2(col1, col2, pic_name):
# 函数作用:绘制1×2的直方图
# col1:表示变量1
# col2:表示变量2
# pic_name:图片保存后的名称
# 注:其实更合适一点是加入数据框的名称
import numpy as np
np.set_printoptions(suppress=True)
f, (ax1,ax2) = plt.subplots(1, 2, figsize=(10, 6))
sns.distplot(df[col1], ax=ax1)
sns.distplot(df[col2], ax=ax2)
plt.savefig('plot/' + pic_name + '.png')
plt.show()
效果见下图:
代码:
def PlotBox2(col1, col2, pic_name):
# 函数作用:绘制1×2的直方图
# col1:表示变量1
# col2:表示变量2
# pic_name:图片保存后的名称
# 注:其实更合适一点是加入数据框的名称
import numpy as np
np.set_printoptions(suppress=True)
f, (ax1,ax2) = plt.subplots(1, 2, figsize=(10, 6))
sns.boxplot(x = 'type_now', y=col1, data=df, ax=ax1, order=['高活','中活','低活','不活'])
sns.boxplot(x = 'type_now', y=col2, data=df, ax=ax2, order=['高活','中活','低活','不活'])
plt.savefig('plot/' + pic_name + '.png')
plt.show()
效果见下图:
代码:
import numpy as np
def to_log(x):
return np.log(1+x)
def PlotBoxLog2(col1, col2, pic_name):
f, (ax1,ax2) = plt.subplots(1, 2, figsize=(10, 6))
log_col1 = 'log_' + col1
log_col2 = 'log_' + col2
df[log_col1] = df[col1].map(to_log)
df[log_col2] = df[col2].map(to_log)
sns.boxplot(x = 'type_now', y=log_col1, data=df, ax=ax1, order=['高活','中活','低活','不活'])
sns.boxplot(x = 'type_now', y=log_col2, data=df, ax=ax2, order=['高活','中活','低活','不活'])
plt.savefig('plot/' + pic_name + '.png')
plt.show()
效果见下图:
代码:
def CalVar(col1, col2):
import numpy as np
np.set_printoptions(suppress=True)
cols = [col1, col2]
for col in cols:
print('变量 %s 描述统计计算结果如下:' % col)
print(df[col].describe())
print('--------********-------')
代码执行层面:
CalVar('event_columnx', 'event_columnx_now')
实现效果:
import numpy as np
np.set_printoptions(suppress=True)
函数代码:
def RemoveValue_sole(df_model, col, s):
# 其中s作用是统计总共有多少行记录被删去
r1 = df_model.shape[0]
v_mean = df_model[col].mean()
v_std = df_model[col].std()
thrhol = v_mean + 10 * v_std
df_model = df_model[df_model[col]<=thrhol]
r2 = df_model.shape[0]
s = s + r1 - r2
print('列 %s 删除10倍以上标准差的数值 共删除的行数为: %d ' % (col, r1-r2))
return s
实现剔除代码:
s = 0
for col in model_col:
# 其中model_col为事先定义好的需要剔除异常值的变量!
s = RemoveValue_sole(df_model, col, s)
print(s)
实现效果见下:
可以看到总共是4027个被单独剔除!但是df_model好像是不动的?
啥叫滚动剔除?就是一个变量异常值被剔除之后,在这个被剔除异常值的数据框的基础之上再考虑下一个变量,继续下去!应用相较于第一种应该是广泛的!
代码:
def RemoveValue(df_model, col):
r1 = df_model.shape[0]
v_mean = df_model[col].mean()
v_std = df_model[col].std()
thrhol = v_mean + 10 * v_std
df_model = df_model[df_model[col]<=thrhol]
r2 = df_model.shape[0]
print('列 %s 删除10倍以上标准差的数值 共删除的行数为: %d ' % (col, r1-r2))
return df_model
滚动剔除代码:
for col in model_col:
df_model = RemoveValue(df_model, col)
# 每一次赋值返回均为df_model 这样就能起到滚动的作用!
print(df_model.shape)
实现效果见下: