Python数据特征分析_01(MOOC学习时长分析)(上)

简介: 本篇博客使用到的数据如下:通过分析每个学生的学习时长来分析学生的学习稳定性。(共有115人,每个人记录了11次的学习数据)

本篇博客使用到的数据如下:通过分析每个学生的学习时长来分析学生的学习稳定性。

(共有115人,每个人记录了11次的学习数据)

a62e6ad756ec476984ed259bf551fb91.png


一、分布分析



1、定量数据分布分析


定量数据分布分析:主要是求极差


将Excel数据导入之后赋值给x,令x3为最后一周的数据:

a46cd1a56cd149678e2e8a1b2f10e5ce.png

x3=x['20220403']
# 01.求极差
R=x3.max()-x3.min() 
# 得到的极差值:11405
# 02.分桶
rg=np.ceil(R/600)
# 使用600作为分组的间隔
# np.ceil用法:求出大于等于R/600的最小整数

得到的rg=20.0,因此如果我们按照间隔600来分组的话,应该要分20桶。

# 构造区间,决定分点
listBins=np.arange(0,12001,600) # 从0-12000,使用600来间隔
listBins

0242176554e241b4ad422ab18ce8d62f.png

import itertools # 容器工具,根据需要组件特定的数据
aa=listBins
bb=list(itertools.permutations(aa,2))
print(bb)
# python 全排列,permutations函数
# itertools.permutations(iterable, r=None)
# 连续返回由 iterable 元素生成长度为 r 的排列。

572f115245ef44619621d1f295c9d896.png

fw=list(listBins)
fenzu=pd.cut(x3.values,fw,right=False)
print(fenzu.codes)
print(fenzu.categories)
# IntervalIndex([[0, 600), [600, 1200), [1200, 1800), [1800, 2400), [2400, 3000) ... [9000, 9600), [9600, 10200), [10200, 10800), [10800, 11400), [11400, 12000)], dtype='interval[int64, left]')
ps=fenzu.value_counts()
ps

ac317f7e401c45c08146db967ad1929e.png

f66d517ea44b4b09b732d07fd0fea8b6.png

1fcffa29a182443dbeb7c99f006b4af2.png

ps.plot(kind='bar')

通过分桶的列表了解学生的学习情况:

3494396b930241a79768f44695f34b6b.png

qujian=pd.cut(x3,fw,right=False)
x['区间']=qujian.values
x.groupby('区间').median()    # 获取中位值
x.groupby('区间').mean()    # 获取平均值
ps_df=pd.DataFrame(ps,columns=['频数'])
ps_df['频率f']=ps_df/ps_df['频数'].sum()
ps_df['频率%']=ps_df['频率f'].map(lambda x:'%.2f%%'%(x*100))
ps_df['累计频率f']=ps_df['频率f'].cumsum() # 累计
ps_df['累计频率%']=ps_df['累计频率f'].map(lambda x:'%.4f%%'%(x*100))
ps_df
81cf1b545ff2433eacd3657ef9514762.png

2、绘制频率图


ps_df['频率f'].plot(kind='bar',
                 width=0.8,
                 figsize=(18,9),
                 rot=90,
                 color='g',
                 grid=True,
                 alpha=0.5
                 )
plt.title("在线学习频率直方图")
x=len(ps_df)
y=ps_df['频率f']
m=ps_df['频数']
for i,j,k in zip(range(x),y,m): # 打包函数,将数据重新整合
    plt.text(i-0.2,j-0.01,'%i' % k,color='k') # 代表柱状图上面的数字与柱状图的距离

a52e7b880abc4653bdda8209d091e4d4.png

# 类似Excel的对比图
ps_df.style.bar(subset=['频率f','累计频率f'], color='green',width=100)
46d5e07855f64de4af8b65447846fbcb.png


二、对比分析



1、绝对数对比


f19406fe0260454a850da7b0eb8fbb9c.png

import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif']=['Microsoft YaHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号
from datetime import datetime
fig,axes = plt.subplots(2,1,figsize = (30,20),sharex=False)
dfddiff.plot(kind='line',style='--.',alpha=0.8,ax=axes[0])
axes[0].legend(loc='best',frameon=True,ncol=3)
dfdiffv2.plot(kind='line',style='--.',alpha=0.8,ax=axes[1])
x=range(len(dfdiffv2))
plt.xticks(x,(dfdiffv2.index.values))
axes[1].set_xticklabels(dfdiffv2.index.values,rotation=90)

586e4127770a409a8c2ebcc44eefff0b.png


将前10人的数据做bar图:可以分析他们在不同时间段的表现情况

ax=df[0:10].plot(kind='bar',legend=False,figsize=(12,8))
patches,labels=ax.get_legend_handles_labels()
ax.legend(patches,labels,loc='best')
plt.xticks(rotation=30)

4de68dde42fa4cf7847d0de58344f023.png


2、差值折线图


# 将两个人的学习时长数据进行比较
fig=plt.figure(figsize=(10,6))
plt.subplots_adjust(hspace=0.3)
ax1=fig.add_subplot(2,1,1)
x=range(len(df2))
y1=df2['罗梓']
y2=-df2['李裕']
plt.bar(x,y1,width=1,facecolor='yellowgreen')
plt.bar(x,y2,width=1,facecolor='lightskyblue')
plt.grid()
plt.xticks(x,(df2.index.values))
ax1.set_xticklabels(df2.index.values,rotation=90)

71f1fa6cf1ef430087b8b44c2a5345a8.png

#差值折线图比较
fig=plt.figure(figsize=(10,6))
plt.subplots_adjust(hspace=0.3)
ax1=fig.add_subplot(2,1,1)
x=range(len(df2))
y1=df2['罗梓']
y2=df2['李裕']
y3=y1-y2
plt.plot(x,y3,'--^r')
plt.axhline(1000,color='r',linestyle='--')
plt.bar(x,y1,width=1,facecolor='yellowgreen')
plt.bar(x,y2,width=1,facecolor='lightskyblue')
plt.grid()
plt.xticks(x,(df2.index.values))
ax1.set_xticklabels(df2.index.values,rotation=90)

d10071d2b6fb42759521cca61206f39f.png


相关文章
|
10月前
|
存储 分布式计算 大数据
基于Python大数据的的电商用户行为分析系统
本系统基于Django、Scrapy与Hadoop技术,构建电商用户行为分析平台。通过爬取与处理海量用户数据,实现行为追踪、偏好分析与个性化推荐,助力企业提升营销精准度与用户体验,推动电商智能化发展。
|
10月前
|
数据采集 Web App开发 数据可视化
Python零基础爬取东方财富网股票行情数据指南
东方财富网数据稳定、反爬宽松,适合爬虫入门。本文详解使用Python抓取股票行情数据,涵盖请求发送、HTML解析、动态加载处理、代理IP切换及数据可视化,助你快速掌握金融数据爬取技能。
8227 1
|
10月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
507 2
|
10月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
734 1
|
10月前
|
算法 Java Docker
(Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
IF 条件判断 使用if语句,对条件进行判断 true则执行代码块缩进语句 false则不执行代码块缩进语句,如果有else 或 elif 则进入相应的规则中执行
1660 1
|
10月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
768 0
|
10月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
10月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的台风灾害分析及预测系统
针对台风灾害预警滞后、精度不足等问题,本研究基于Python与大数据技术,构建多源数据融合的台风预测系统。利用机器学习提升路径与强度预测准确率,结合Django框架实现动态可视化与实时预警,为防灾决策提供科学支持,显著提高应急响应效率,具有重要社会经济价值。
|
10月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的青少年网络使用情况分析及预测系统
本研究基于Python大数据技术,构建青少年网络行为分析系统,旨在破解现有防沉迷模式下用户画像模糊、预警滞后等难题。通过整合多平台亿级数据,运用机器学习实现精准行为预测与实时干预,推动数字治理向“数据驱动”转型,为家庭、学校及政府提供科学决策支持,助力青少年健康上网。

推荐镜像

更多