zoukankan      html  css  js  c++  java
  • EDA数据探索性分析项目实战(2020数据挖掘比赛项目)

    #1、导入数据分析所需要的库
    import scipy.stats as st
    import pandas as pd
    import missingno as mnso
    import pandas_profiling
    import matplotlib
    import matplotlib.pyplot as plt
    import ipywidgets
    from ipywidgets import GridspecLayout
    from matplotlib.pyplot import GridSpec
    import seaborn as sns
    #2、导入原始数据表格进行数据的初步特点分析
    data=pd.read_excel('D:/Byrbt2018/Recent study file/2020数据挖掘项目/12-第二届学生“好问题”征集评选活动数据集(首次提问).xlsx')
    print(data)
    print(data.info())
    print(data.describe())
    print(data.shape)
    print(data.dtypes)
    print(data.columns)
    c=data.columns
    print(c)
    for i in c:
    print(data[i].value_counts())
    缺失值展示函数输出
    '''
    mnso.bar(data.sample(1000))
    mnso.heatmap(data)
    mnso.matrix(data.sample(1000),figsize=(16,7),width_ratios=(15,1))
    '''
    import matplotlib.pyplot as plt
    import matplotlib
    matplotlib.rcParams['font.sans-serif'] = ['SimHei']
    matplotlib.rcParams['axes.unicode_minus'] = False

    price =data["省"].value_counts().values
    x=len(data["省"].value_counts())
    """
    绘制水平条形图方法barh
    参数一:y轴
    参数二:x轴
    """
    plt.barh(range(x), price, height=0.8, color='black', alpha=0.9) # 从下往上画
    plt.yticks(range(x),data["省"].value_counts().index )
    plt.ylabel("不同省份")
    plt.xlabel("人数分布")
    plt.title("不同省份不同区间分布数量")
    for x, y in enumerate(price):
    plt.text(y+5000, x-0.1, '%s' % y)
    plt.show()

    price =data["话题"].value_counts().values
    x=len(data["话题"].value_counts())
    """
    绘制水平条形图方法barh
    参数一:y轴
    参数二:x轴
    """
    plt.barh(range(x), price, height=0.8, color='black', alpha=0.9) # 从下往上画
    plt.yticks(range(x),data["话题"].value_counts().index )
    plt.ylabel("不同话题")
    plt.xlabel("人数分布")
    plt.title("不同话题不同区间分布数量")
    for x, y in enumerate(price):
    plt.text(y+5000, x-0.1, '%s' % y)
    plt.show()

    price =data["年级"].value_counts().values
    x=len(data["年级"].value_counts())
    """
    绘制水平条形图方法barh
    参数一:y轴
    参数二:x轴
    """
    plt.barh(range(x), price, height=0.8, color='black', alpha=0.9) # 从下往上画
    plt.yticks(range(x),data["年级"].value_counts().index )
    plt.ylabel("不同年级")
    plt.xlabel("人数分布")
    plt.title("不同年级不同区间分布数量")
    for x, y in enumerate(price):
    plt.text(y+5000, x-0.1, '%s' % y)
    plt.show()


    price =data["学段"].value_counts().values
    x=len(data["学段"].value_counts())
    """
    绘制水平条形图方法barh
    参数一:y轴
    参数二:x轴
    """
    plt.barh(range(x), price, height=0.8, color='black', alpha=0.9) # 从下往上画
    plt.yticks(range(x),data["学段"].value_counts().index )
    plt.ylabel("不同学段")
    plt.xlabel("人数分布")
    plt.title("不同学段不同区间分布数量")
    for x, y in enumerate(price):
    plt.text(y+5000, x-0.1, '%s' % y)
    plt.show()


    price =data["市"].value_counts().values
    x=len(data["市"].value_counts())
    """
    绘制水平条形图方法barh
    参数一:y轴
    参数二:x轴
    """
    plt.barh(range(x), price, height=0.8, color='black', alpha=0.9) # 从下往上画
    plt.yticks(range(x),data["市"].value_counts().index)
    plt.ylabel("不同市")
    plt.xlabel("人数分布")
    plt.title("不同市不同区间分布数量")
    for x, y in enumerate(price):
    plt.text(y+5000, x-0.1, '%s' % y)
    plt.show()


    price =data["区"].value_counts().values
    x=len(data["区"].value_counts())
    """
    绘制水平条形图方法barh
    参数一:y轴
    参数二:x轴
    """
    plt.barh(range(x), price, height=0.8, color='black', alpha=0.9) # 从下往上画
    plt.yticks(range(x),data["区"].value_counts().index)
    plt.ylabel("不同区")
    plt.xlabel("人数分布")
    plt.title("不同区不同区间分布数量")
    for x, y in enumerate(price):
    plt.text(y+5000, x-0.1, '%s' % y)
    plt.show()


    #点赞数与评论数的连续数据直方分布图展示
    plt.hist(x=data["评论数"], bins=20,
    color="steelblue",
    edgecolor="black")
    # 添加x轴和y轴标签
    plt.xlabel("评论数")
    plt.ylabel("分布个数")
    # 添加标题
    plt.title("干净数据评论数直方分布图")
    # 显示图形
    plt.show()

    #点赞数与评论数的连续数据直方分布图展示
    plt.hist(x=data["点赞数"], bins=20,
    color="steelblue",
    edgecolor="black")
    # 添加x轴和y轴标签
    plt.xlabel("评论数")
    plt.ylabel("分布个数")
    # 添加标题
    plt.title("干净数据点赞数直方分布图")
    # 显示图形
    plt.show()



    数据清洗过程实现

    print(len(data)) #554724
    print(len(data.dropna(axis=0))) #删掉缺失值的行记录 486012
    print(len(data.drop_duplicates())) #删除重复的行7行数据,然后变为了554717
    print(data[data.duplicated()]) #输出重复的行数据的记录,总共为7行数据

    #数据清洗工作开始

    data2=data.dropna(axis=0) #去除缺失值的行
    data2=data2.drop_duplicates() #去除重复的行数据

    #去除各个字段有问题的数据
    print(data2["话题"].value_counts().index)
    data2=data2[data2["话题"].isin(data2["话题"].value_counts().index[:10])]
    print(data2["话题"].value_counts().index)
    print(len(data2)) #472705

    print(data2["省"].value_counts().index)
    data2=data2[data2["省"].isin(data2["省"].value_counts().index[:13])]
    print(data2["省"].value_counts().index)
    print(len(data2)) #472692

    print(data2["学段"].value_counts().index)
    data2=data2[data2["学段"].isin(data2["学段"].value_counts().index[:3])]
    print(data2["学段"].value_counts().index)
    print(len(data2)) #470203

    print(data2["年级"].value_counts().index)
    data2=data2[data2["年级"].isin(data2["年级"].value_counts().index[:12])]
    print(data2["年级"].value_counts().index)
    print(len(data2)) #462443

    data2=data2[(data2["点赞数"]>=0) & (data2["评论数"]>=0)]
    print(len(data2)) #最终合理的数据462441(2个评论数据小于0)#462441

    matplotlib.rcParams['font.sans-serif'] = ['SimHei']
    matplotlib.rcParams['axes.unicode_minus'] = False
    price =data2["省"].value_counts().values
    x=len(data2["省"].value_counts())
    """
    绘制水平条形图方法barh
    参数一:y轴
    参数二:x轴
    """
    plt.barh(range(x), price, height=0.8, color='black', alpha=0.9) # 从下往上画
    plt.yticks(range(x),data2["省"].value_counts().index )
    plt.ylabel("不同省份")
    plt.xlabel("人数分布")
    plt.title("不同省份不同区间分布数量")
    for x, y in enumerate(price):
    plt.text(y+5000, x-0.1, '%s' % y)
    plt.show()


    price =data2["话题"].value_counts().values
    x=len(data2["话题"].value_counts())
    """
    绘制水平条形图方法barh
    参数一:y轴
    参数二:x轴
    """
    plt.barh(range(x), price, height=0.8, color='black', alpha=0.9) # 从下往上画
    plt.yticks(range(x),data2["话题"].value_counts().index )
    plt.ylabel("不同话题")
    plt.xlabel("人数分布")
    plt.title("不同话题不同区间分布数量")
    for x, y in enumerate(price):
    plt.text(y+5000, x-0.1, '%s' % y)
    plt.show()


    price =data2["年级"].value_counts().values
    x=len(data2["年级"].value_counts())
    """
    绘制水平条形图方法barh
    参数一:y轴
    参数二:x轴
    """
    plt.barh(range(x), price, height=0.8, color='black', alpha=0.9) # 从下往上画
    plt.yticks(range(x),data2["年级"].value_counts().index )
    plt.ylabel("不同年级")
    plt.xlabel("人数分布")
    plt.title("不同年级不同区间分布数量")
    for x, y in enumerate(price):
    plt.text(y+5000, x-0.1, '%s' % y)
    plt.show()


    price =data2["学段"].value_counts().values
    x=len(data2["学段"].value_counts())
    """
    绘制水平条形图方法barh
    参数一:y轴
    参数二:x轴
    """
    plt.barh(range(x), price, height=0.8, color='black', alpha=0.9) # 从下往上画
    plt.yticks(range(x),data2["学段"].value_counts().index )
    plt.ylabel("不同学段")
    plt.xlabel("人数分布")
    plt.title("不同学段不同区间分布数量")
    for x, y in enumerate(price):
    plt.text(y+5000, x-0.1, '%s' % y)
    plt.show()


    price =data2["市"].value_counts().values
    x=len(data2["市"].value_counts())
    """
    绘制水平条形图方法barh
    参数一:y轴
    参数二:x轴
    """
    plt.barh(range(x), price, height=0.8, color='black', alpha=0.9) # 从下往上画
    plt.yticks(range(x),data2["市"].value_counts().index)
    plt.ylabel("不同市")
    plt.xlabel("人数分布")
    plt.title("不同市不同区间分布数量")
    for x, y in enumerate(price):
    plt.text(y+5000, x-0.1, '%s' % y)
    plt.show()


    matplotlib.rcParams['font.sans-serif'] = ['SimHei']
    matplotlib.rcParams['axes.unicode_minus'] = False
    price =data2["区"].value_counts().values
    x=len(data2["区"].value_counts())
    """
    绘制水平条形图方法barh
    参数一:y轴
    参数二:x轴
    """
    plt.barh(range(x), price, height=0.8, color='black', alpha=0.9) # 从下往上画
    plt.yticks(range(x),data2["区"].value_counts().index)
    plt.ylabel("不同区")
    plt.xlabel("人数分布")
    plt.title("不同区不同区间分布数量")
    for x, y in enumerate(price):
    plt.text(y+5000, x-0.1, '%s' % y)
    plt.show()


    #点赞数与评论数的连续数据直方分布图展示
    plt.rcParams["font.sans-serif"] = 'SimHei'
    plt.rcParams['axes.unicode_minus'] = False
    plt.hist(x=data2["评论数"], bins=20,
    color="steelblue",
    edgecolor="black")
    # 添加x轴和y轴标签
    plt.xlabel("评论数")
    plt.ylabel("分布个数")
    # 添加标题
    plt.title("干净数据评论数直方分布图")
    # 显示图形
    plt.show()

    #点赞数与评论数的连续数据直方分布图展示
    plt.rcParams["font.sans-serif"] = 'SimHei'
    plt.rcParams['axes.unicode_minus'] = False
    plt.hist(x=data2["点赞数"], bins=20,
    color="steelblue",
    edgecolor="black")
    # 添加x轴和y轴标签
    plt.xlabel("评论数")
    plt.ylabel("分布个数")
    # 添加标题
    plt.title("干净数据点赞数直方分布图")
    # 显示图形
    plt.show()
    '''
    data2.index=range(len(data2))
    data2.to_excel("数据清洗完的最终有效数据.xlsx")

    profile1 = pandas_profiling.ProfileReport(data2)
    profile1.to_file(output_file="oil_data2.html")
    '''
    #偏度与峰度计算
    print(st.skew(data["点赞数"]))
    print(st.kurtosis(data["点赞数"]))
    print(st.skew(data["评论数"]))
    print(st.kurtosis(data["评论数"]))
    print(st.skew(data2["点赞数"]))
    print(st.kurtosis(data2["点赞数"]))
    print(st.skew(data2["评论数"]))
    print(st.kurtosis(data2["评论数"]))

    price =data["校"].value_counts().values
    x=len(data["校"].value_counts())
    """
    绘制水平条形图方法barh
    参数一:y轴
    参数二:x轴
    """
    plt.barh(range(x), price, height=0.8, color='black', alpha=0.9) # 从下往上画
    plt.yticks(range(x),data["校"].value_counts().index )
    plt.ylabel("不同学校")
    plt.xlabel("人数分布")
    plt.title("不同学校不同区间分布数量")
    for x, y in enumerate(price):
    plt.text(y+5000, x-0.1, '%s' % y)
    plt.show()


    price =data2["校"].value_counts().values
    x=len(data2["校"].value_counts())
    """
    绘制水平条形图方法barh
    参数一:y轴
    参数二:x轴

    plt.barh(range(x), price, height=0.8, color='black', alpha=0.9) # 从下往上画
    plt.yticks(range(x),data2["校"].value_counts().index )
    plt.ylabel("不同学校")
    plt.xlabel("人数分布")
    plt.title("不同学校不同区间分布数量")
    for x, y in enumerate(price):
    plt.text(y+5000, x-0.1, '%s' % y)
    plt.show()
    """

    c=data2.columns
    print(c)
    for i in c:
    print(data2[i].value_counts())

    
    
  • 相关阅读:
    python学习第三天
    python学习第二天
    如何解决自学编程的犯困问题
    python学习计划第四天-python第一天
    python学习第三天-Linux入门之二
    python第二天-Linux基础学习
    python入门第一天-Linux的学习入门
    Linux下gdb的使用
    整理一下常见的十种排序
    对指针的理解
  • 原文地址:https://www.cnblogs.com/Yanjy-OnlyOne/p/13291233.html
Copyright © 2011-2022 走看看