数据分析

代码环境:python3.7.3 ---MacBook

记录时间:2019/7/1

代码目的:对大批量数据(40000个TXT文件进行数据分析处理)

主要分为三部分:

  • 解析文件路径,读入
  • 每读入一个TXT,处理它们每行数据         
  • 将处理结果存入一个TXT输出                                 
import numpy as np
import pandas as pd
import re
import datetime
import time
import os #read txt
import linecache # read target line function

#### 第一部分 ####
root = '/Users/wangwenzhuo/Desktop/train/' # 这个地址要改(这里我在Mac上写的)
file_names = os.listdir(root)              # 读取所有txt文件名
file_ob_list = []                          # 定义列表存放txt文件名
file_name_list=[]                          # 提取"区域号"和"类型号"
list1=[]
list2=[]
for file_name in file_names:            # 循环地给这520个文件名加上它前面的路径,以得到它的具体路径
    fileob = root + file_name
    file_ob_list.append(fileob)         # 将路径追加到列表中存储  ['C:\\tcga\\datapro\\11\\1.txt','C:\\tcga\\datapro\\11\\2.txt',...](win下)
    pattern = re.compile(r'\d+')        # 用于匹配至少一个数字
    m = pattern.match(file_name, 0, 6)  # 匹配area
    list1.append(m.group(0))
    n=pattern.match(file_name,7,10)     # 匹配kind
    list2.append(n.group(0))
file_name_list.append(dict(zip(list1, list2))) # area : kind
#print("所有文件:",file_ob_list,"\n文件个数:",len(file_ob_list),"\n")

total_txt = []                          # 记录一个txt的用户总访问次数  累计时间差  访问频率
                
#### 第二部分 ####
for file_ob in file_ob_list:            # file_ob_list是所有文件(比如10个txt)对象组成的列表,for用来循环读取每一个文件,读取一个文件的方式是一行行读入,每次循环一次for就读取所有文件的某一行,因为这一行的第一列都是基因名称,都是一样的
    total_visit_time = 0
    total_delta = 0
    total_frequent = 0
    u = []
    total_line = len(open(file_ob).readlines())  # calculate the line of txt
    print("文件名:", file_ob, "\t行数(用户数):", total_line)

    line_num = 1                   # from 1st line
    while line_num <= total_line:  # line_num是当前读完行数
        count = 0    # 一个用户访问次数
        delta = 0    # 一个用户访问间隔总和
        pvisit = []  # 一个用户所有的时间信息

        #print("\n===person", line_num, "===")
        line = linecache.getline(file_ob, line_num)  # 读取第line_num行,定位用户
        line = line.strip()                          # 去掉这一行最后一个\n
        if line is None or len(line) == 0:
            break

        a = line.split('	')[1]
        b = a.split(',')
        for i in b:
            c = i.split('&')
            e = c[1].split('|')
            for j in e:
                count = count + 1  # count是访问量
                f = c[0] + j       # 字符串形式拼接
                time = datetime.datetime.strptime(f, "%Y%m%d%H")
                pvisit.append(time)
                if count > 1:
                    delta = delta + (int)((pvisit[count - 1] - pvisit[count - 2]).days * 24 + (
                                pvisit[count - 1] - pvisit[count - 2]).seconds / 3600)
                     #print("访问时间:", pvisit[count - 1])
        pattern = re.compile(r'\d+')           # 用于匹配至少一个数字

        area = pattern.match(file_ob, 33, 40)  # 匹配area
        kind = pattern.match(file_ob, 40, 43)  # 匹配kind

        total_visit_time = total_visit_time + count
        total_delta = total_delta + delta

        line_num = line_num + 1
    u.append(area.group(0))
    u.append(kind.group(0))
    u.append(str(total_line))
    u.append(str(total_visit_time))
    u.append(str(total_delta))
    u.append(str(float(total_delta / total_visit_time)))
    #表示成字典形式
    # list1 = ['区域号', '类型号', '区域内用户数', '总访问次数', '累计访问间隔', '访问频率']
    # total_txt.append(dict(zip(list1, u)))
    # print(dict(zip(list1, u)))
    #表示成列表形式(生成txt查看)
    total_txt.append(u)
print(total_txt)

#### 第三部分 ####
f = open("/Users/wangwenzhuo/Desktop/1.txt", "w+")  # 创建存放数据的文件
for i, p in enumerate(total_txt):  # 将数据写入文件,i是enumerate()函数返回的ulist的某个元素p(就是一行数据,如['ENSG00000242268.2','0.0','0.10']从第一个开始)开始的序号(0,1,2等)
    print(i)                   # 显示一下打印到了第多少行
    for j, q in enumerate(p):  # 读取p(如['ENSG00000242268.2','0.0','0.10'])中的每一个元素
        f.write(str(q)+"\t")   # 将这个元素写到txt中,每写一个加入一个“\t”(它代表excel中的一根竖线)

    f.write("\n")  # 每写完一行,就写入一个换行符"\n",好使的接下来的数据写入到第二行

f.close()          # 操作完一个文件后应该将它关闭

 

【草稿:实现读取单个TXT的每一行】

#############2019-6-13 在txt文件上实现读取多行##############
# ulist = [] #记录一个用户的总访问次数  累计时间差  访问频率
#
# root='/Users/wangwenzhuo/Desktop/1.txt'
# line_num=1
# total_line = len(open(root).readlines()) #calculate the line of txt
# while line_num <= total_line: #line_num是当前读完行数
#         u = []       # 一个用户的所有信息
#         count = 0    # 一个用户访问次数
#         delta = 0    # 一个用户访问间隔总和
#         pvisit = []  # 一个用户所有的时间信息
#
#         print("\n===person",line_num,"===")
#         line = linecache.getline(root, line_num) #读取第line_num行,定位用户
#         line = line.strip() #去掉这一行最后一个\n
#         if line is None or len(line) == 0:
#             break
#
#         a = line.split('	')[1]
#         b = a.split(',')
#         for i in b:
#             c = i.split('&')
#             e = c[1].split('|')
#             for j in e:
#                 count = count + 1 #count是访问量
#                 f = c[0] + j  # 字符串形式拼接
#                 time = datetime.datetime.strptime(f, "%Y%m%d%H")
#                 pvisit.append(time)
#                 if count > 1:
#                     delta = delta + (int)((pvisit[count - 1] - pvisit[count - 2]).days * 24 + (pvisit[count - 1] - pvisit[count - 2]).seconds /3600)
#                     print("访问时间:",pvisit[count - 1])
#
#         line_num = line_num + 1
#         u.append(line_num)
#         u.append(count)
#         u.append(delta)
#         u.append(float(delta/count))
#         ulist.append(u)
#         print("用户",u[0]-1,"的访问次数:",u[1],"\t累计时间差(小时):",u[2],"\t访问频率:",u[3])
#
# print(ulist)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值