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())


原文地址:https://www.cnblogs.com/Yanjy-OnlyOne/p/13291233.html