阿里音乐流行趋势预测大赛—浅尝辄止(二)

本文介绍了一种将Unix时间戳转换为常规日期格式的方法,并通过Python脚本实现了这一转换过程。该脚本读取CSV文件中的时间戳数据,将其转换为年、月、日、时等格式,并将结果写回新的CSV文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    本篇博文接上一篇博文浅尝辄止(一)的内容,这里主要介绍竞赛给的数据中时间戳的处理方法,时间戳是形如“1426406400”形式的一组时间计数,我们需要将其转化为正常的时分秒的形式,然后再将转化后的结果写入到csv文件当中去,最后我们得到的转换前的和转换后的文件内容形式如下:


转换后的:


从左到右的数据依次为:用户ID,歌曲ID,时间点,用户操作行为,日期,月,日,时;观察发现我们这里做的主要工作只是将Unix时间戳转化成日常形式,然后将月,日,时,截取出来,将这些数据分别对应的重新写入到csv文件当中。下面给出具体的程序,程序做了简单标注,欢迎指正!

# -*- coding: utf-8 -*-
 
import time
import pandas as pd 
import numpy
import csv
start=time.clock()


def timestamp_datetime(value):
    format = '%Y-%m-%d %H:%M:%S'         #'%Y-%m-%d %H:%M:%S'
    value = time.localtime(value)
    
    dt = time.strftime(format, value)
    return dt

def timestamp_datetime_month(value):
    format = '%m'         
    value = time.localtime(value)
    
    dtm = time.strftime(format, value)
    return dtm
def timestamp_datetime_day(value):
    format = '%d'         
    value = time.localtime(value)
    
    dtd = time.strftime(format, value)
    return dtd
def timestamp_datetime_hour(value):
    format = '%H'         
    value = time.localtime(value)
    
    dth = time.strftime(format, value)
    return dth

#t=eval('1426406400')
#T=timestamp_datetime(t)



actions=pd.read_csv('E:\\Tianchi\\Music\\mars_tianchi_user_actions.csv',nrows=1000000,header=None)



date=actions.loc[:,2]
user=actions.loc[:,0]
song=actions.loc[:,1]
act=actions.loc[:,3]
day=actions.loc[:,4]     #数据被切分出来
i=0
dt=numpy.mat(date)       #或许用list列表更方便
dt=numpy.transpose(dt)

months=[]
days=[]
hours=[]
while i<1000000:      #5652232
    #if date[i:(i+1)]=NaN:
    #   break
     
    months.append(timestamp_datetime_month(float(dt[i,0])))
    days.append(timestamp_datetime_day(float(dt[i,0])))
    hours.append(timestamp_datetime_hour(float(dt[i,0])))        #三个大列表

    T=timestamp_datetime(float(dt[i,0]))       #时间戳变换
    T=str(T)
    date.loc[i:(i+1)]=T
    i=i+1
#print date
date=list(date)
user=list(user)
song=list(song)
act=list(act)
day=list(day)

with open('E:\\Tianchi\\Music\\test.csv','wb') as myfile:
    i=0
    mywriter=csv.writer(myfile)   #实例化为mywriter 
    while i<1000000:
        mywriter.writerow([user[i],song[i],date[i],act[i],day[i],months[i],days[i],hours[i]])
        i=i+1


end=time.clock()
print 'running time is: %.3f'%(end-start)




### 网络流基础概念 网络流是一种用于建模和解决涉及流量传输问题的技术,在计算机科学领域具有广泛的应用。它通常被用来描述在一个图结构中如何分配资源以满足特定需求。 #### 定义 在网络流理论中,一个**网络**可以表示为有向图 \( G=(V, E) \),其中 \( V \) 是顶点集合,\( E \) 是边集合。每条边都有一个容量限制,即允许通过的最大流量。此外,还定义了一个源节点(source)和汇节点(sink),分别代表流量的起点和终点[^4]。 #### 关键术语 - **容量 (Capacity)**: 边上的最大可能流量。 - **实际流量 (Flow)**: 当前通过该边的实际数量。 - **残留容量 (Residual Capacity)**: 可供增加的额外流量。 #### 最大流最小割定理 最大流问题是寻找从源到汇之间能够传递的最大总流量。此问题可以通过多种算法求解,最著名的包括 Ford-Fulkerson 方法以及 Edmonds-Karp 算法改进版本。最大流等于最小割,这是网络流的核心理论之一。 ```python from collections import defaultdict def bfs(residual_graph, source, sink, parent): visited = [False] * len(residual_graph) queue = [] queue.append(source) visited[source] = True while queue: u = queue.pop(0) for ind, val in enumerate(residual_graph[u]): if not visited[ind] and val > 0: queue.append(ind) visited[ind] = True parent[ind] = u if ind == sink: return True return False def ford_fulkerson(graph, source, sink): residual_graph = [list(row) for row in graph] max_flow = 0 parent = [-1] * len(graph) while bfs(residual_graph, source, sink, parent): path_flow = float('Inf') s = sink while(s != source): path_flow = min(path_flow, residual_graph[parent[s]][s]) s = parent[s] max_flow += path_flow v = sink while(v != source): u = parent[v] residual_graph[u][v] -= path_flow residual_graph[v][u] += path_flow v = parent[v] return max_flow ``` 上述代码实现了经典的 Ford-Fulkerson 算法来计算给定图中的最大流。 #### 应用场景 网络流不仅限于传统的水流模型,还可以应用于许多现实世界的问题,比如交通规划、物流配送优化等。在网络安全方面,理解网络流有助于分析恶意软件传播路径或者设计更有效的防御机制对抗 DDoS 攻击等问题[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值