分析文件中学生晚归的次数(一)

简单选取给定文件中的结果

初学python做一些小练习
不多BB先上代码

#驱动文件,导入了另外两个写好的py文件
import pandas as pd
from DataProcessing import *
from Late_Statistics import *
#这两个参数的默认设置都是False
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
#读取文件、dataframe
data = ReadFile()
data1 = data.Establish()
data3 = LateNumber()
print('你需要对dorm.test.txt中晚归人数进行统计吗?')
chose = input('需要请输入1: ')
if chose == '1':
    while data3.LateNumber == 0 :
        print('--------------------请等待---------------------')
        print('-----------------预计花费40秒------------------\n\n')
        data3.Cauculation()
else:
    pass
#数据统计(最值,均值)
print(data.names)
str_2 = input('您想知道的详细数据的列名:')
#dia
data1_max = data.GetMax(data1,str_2)
data1_min = data.GetMin(data1,str_2)
data1_aug = data.GetAug(data1,str_2)
data1_sum = data.GetSum(data1,str_2)
print('---------------三十名学生数据归纳(1)----------------')
print('%s的最大值:%.2f'%(str_2,data1_max))
print('%s的最低值:%.2f'%(str_2,data1_min))
print('%s的平均值: %.2f'%(str_2,data1_aug))
print('%s的总和值:%.2f'%(str_2,data1_sum))
print('-----------------------结束---------------------------')
#数据统计(最大占比项)
print(data.names)
data2 = data.GroupBy(data1)
data2_1 = data.DetailedCalculation(data2)
#对于筛选晚归人数,笔者现在还无法筛选出前一天离校第二条回归的情况
import pandas as pd
import time
import os

pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
class LateNumber:
    LateNumber = 0
    def Cauculation(self):
        # 读取文件
        data1 = pd.read_csv('dorm_test.txt', encoding='UTF-8', header=None, names=['学号', '时间', '信号'])

        # 学号,信号data1
        data1_1 = data1.drop(labels=['时间'], axis=1)

        # 时间data1_2
        data1_2 = pd.to_datetime(data1.时间, format='%Y-%m-%d')

        # 将时间data存入到一个新的dorm_1.txt中
        data1_2.to_csv('dorm_1.txt', encoding='UTF-8', index=False)

        # 读出dorm_1.txt    data1_3
        data1_3 = pd.read_csv('dorm_1.txt', encoding='UTF-8', header=None, names=['日期', '时间'], sep=' ')

        # 将日期剖开     data1_4
        data1_4 = data1_3['日期'].str.split('-', expand=True)

        # 将时间剖开
        data1_5 = data1_3['时间'].str.split(':', expand=True)

        # 将日期剖开data存入到一个新的dorm_2.txt中
        data1_4.to_csv('dorm_2.txt', encoding='UTF-8', index=False)

        # 对dorm_2进行修改
        lines_1 = (i for i in open('dorm_2.txt', 'r') if
                   '0,1,2' not in i)  # 不用readlines是因为for i in f是使用一行读取一行,不会消耗太多的内存
        f1 = open('D:/PycharmPro/source/test/dorm_4.txt', 'w', encoding="utf-8")
        f1.writelines(lines_1)
        f1.close()
        os.rename('dorm_2.txt', 'dorm_2.bak')
        os.rename('dorm_4.txt', 'dorm_2.txt')
        os.remove('dorm_2.bak')

        # 将时间剖开data存入到一个新的dorm_3.txt中
        data1_5.to_csv('dorm_3.txt', encoding='UTF-8', index=False)

        # 对dorm_3进行修改
        lines_2 = (i for i in open('dorm_3.txt', 'r') if
                   '0,1,2' not in i)  # 不用readlines是因为for i in f是使用一行读取一行,不会消耗太多的内存
        f2 = open('D:/PycharmPro/source/test/dorm_5.txt', 'w', encoding="utf-8")
        f2.writelines(lines_2)
        f2.close()
        os.rename('dorm_3.txt', 'dorm_3.bak')
        os.rename('dorm_5.txt', 'dorm_3.txt')
        os.remove('dorm_3.bak')

        # # 读取data1_4
        data1_6 = pd.read_csv('dorm_2.txt', encoding='UFT-8', header=None, names=['年', '月', '日'])

        # 读取data1_5
        data1_7 = pd.read_csv('dorm_3.txt', encoding='UFT-8', header=None, names=['时', '分', '秒'])

        # 合并一个全新可用的data2
        data2 = pd.concat([data1_1, data1_6, data1_7], axis=1, ignore_index=False)
        # print(data2)

        # 筛选晚归学生
        # 信号 == 0 表示 '出'    信号 == 1 表示 '进'
        data2_late = data2[['学号', '年', '月', '日']][(data2.信号 == 1) & (data2.时 >= 23) & (data2.分 >= 0) & (data2.秒 >= 0)]
        # print(data2_late)
        # 还有一种情况:前一天出去,第二天早上
        # 计算晚归人数
        self.LateNumber = data2_late.shape[0]
        print('---------------学生晚归人数归纳----------------')
        print('dorm_test.txt中\n在晚上十一点后归校的学生有:%d人' % self.LateNumber)
        print('--------------------结束-----------------------\n\n')
        print('---------------学生详细数据统计----------------')


因为是初学练习,所以在写代码的时候是对DataFrame进行操作
碰到了一个问题,驱动函数加入 if __name__ = _'main'_:的时候发现程序不出结果了,希望大佬们给点解决办法。
跑出来的代码,我想的是怎么去优化计算速度
dorm_test.txt文件太大了,有三百万行就不上传了。

To Be Continued…

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值