欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Task2 数据分析

程序员文章站 2022-07-14 10:54:24
...

Datawhale 零基础入门数据挖掘-Task2 数据分析

赛题:零基础入门数据挖掘 - 二手车交易价格预测
地址:https://tianchi.aliyun.com/competition/entrance/231784/introduction?spm=5176.12281957.1004.1.38b02448ausjSX

观察数据维度

1.载入各种数据科学以及可视化库:
数据科学库 pandas、numpy、scipy;
可视化库 matplotlib、seabon;
其他;

#coding:utf-8
#导入warnings包,利用过滤器来实现忽略警告语句。
import warnings
warnings.filterwarnings('ignore')

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

2.载入数据:
载入训练集和测试集;
简略观察数据(head()+shape);

**## 1) 载入训练集和测试集;
path = './datalab/231784/'
Train_data = pd.read_csv(path+'used_car_train_20200313.csv', sep=' ')
Test_data = pd.read_csv(path+'used_car_testA_20200313.csv', sep=' ')**

3.数据总览:
通过describe()来熟悉数据的相关统计量
通过info()来熟悉数据类型

可以看到有4754个样本数据,每个样本有90列。Task2 数据分析
4.判断数据缺失和异常
查看每列的存在nan情况
异常值检测
Task2 数据分析可以看到90列中70列为float,13列为int,7列object
Task2 数据分析
对缺失数据进行可视化分析,直观了解“nan”个数并打印分析,对缺失很少的进行补充继续使用数据,或者使用lgb等树模型进行空缺后优化,若缺失过多则直接删去该类型的数据。

# 可视化看下缺省值
msno.matrix(Train_data.sample(250))
msno.bar(Train_data.sample(1000))

Task2 数据分析

# 可视化看下缺省值
msno.matrix(Test_data.sample(250))
msno.bar(Test_data.sample(1000))

Task2 数据分析
5.了解预测值的分布
总体分布概况(*约翰逊分布等)
查看skewness and kurtosis
查看预测值的具体频数
Task2 数据分析
1)price的总体分布概况分析,画出norm,lognorm以及*约翰逊分布来观察。
Task2 数据分析
Task2 数据分析
Task2 数据分析
6.特征分为类别特征和数字特征,并对类别特征查看unique分布
数字特征分析

Task2 数据分析
可以看到有72列有缺失值,其中student_feature特征有63.1%的样本缺失了,故而把这列删掉。
7.相关性分析

price_numeric = Train_data[numeric_features]
correlation = price_numeric.corr()
print(correlation['price'].sort_values(ascending = False),'\n')

#可视化热图
f , ax = plt.subplots(figsize = (7, 7))

plt.title('Correlation of Numeric Features with Price',y=1,size=16)
plt.show()

sns.heatmap(correlation,square = True,  vmax=0.8)

#最后从中删除price
del price_numeric['price']

Task2 数据分析
2)查看几个特征的偏度和峰值

for col in numeric_features:
    print('{:15}'.format(col), 
          'Skewness: {:05.2f}'.format(Train_data[col].skew()) , 
          '   ' ,
          'Kurtosis: {:06.2f}'.format(Train_data[col].kurt())

Task2 数据分析
每个数字特征得分布可视化
数字特征相互之间的关系可视化
多变量互相回归关系可视化
8.类型特征分析
unique分布

for fea in categorical_features:
    print(Train_data[fea].nunique())
    
categorical_features

类别特征箱形图可视化

categorical_features = ['model',
 'brand',
 'bodyType',
 'fuelType',
 'gearbox',
 'notRepairedDamage']
for c in categorical_features:
    Train_data[c] = Train_data[c].astype('category')
    if Train_data[c].isnull().any():
        Train_data[c] = Train_data[c].cat.add_categories(['MISSING'])
        Train_data[c] = Train_data[c].fillna('MISSING')

def boxplot(x, y, **kwargs):
    sns.boxplot(x=x, y=y)
    x=plt.xticks(rotation=90)

f = pd.melt(Train_data, id_vars=['price'], value_vars=categorical_features)
g = sns.FacetGrid(f, col="variable",  col_wrap=2, sharex=False, sharey=False, size=5)
g = g.map(boxplot, "value", "price")

Task2 数据分析
类别特征的小提琴图可视化

catg_list = categorical_features
target = 'price'
for catg in catg_list :
    sns.violinplot(x=catg, y=target, data=Train_data)
    plt.show()

categorical_features = ['model',
 'brand',
 'bodyType',
 'fuelType',
 'gearbox',
 'notRepairedDamage']

类别特征的柱形图可视化类别

def bar_plot(x, y, **kwargs):
    sns.barplot(x=x, y=y)
    x=plt.xticks(rotation=90)

f = pd.melt(Train_data, id_vars=['price'], value_vars=categorical_features)
g = sns.FacetGrid(f, col="variable",  col_wrap=2, sharex=False, sharey=False, size=5)
g = g.map(bar_plot, "value", "price")

特征的每个类别频数可视化(count_plot)

def count_plot(x,  **kwargs):
    sns.countplot(x=x)
    x=plt.xticks(rotation=90)

f = pd.melt(Train_data,  value_vars=categorical_features)
g = sns.FacetGrid(f, col="variable",  col_wrap=2, sharex=False, sharey=False, size=5)
g = g.map(count_plot, "value")

9.用pandas_profiling生成数据报告

import pandas_profiling

pfr = pandas_profiling.ProfileReport(Train_data)
pfr.to_file("./example.html")