python处理用户签到数据(一)(2014.5.14)

来源:互联网 发布:log4j 输出json格式 编辑:程序博客网 时间:2024/05/22 04:30
 读文件 的操作:f=open("checkin\\data_test.csv",'r')
                            newline=f1.readline()
                                if newline='':
                                        break;
                                     arr=newline.split(',')   
 
毕设中需要 把foursquare签到的时间进行处理,因为用北京时间抓取的纽约签到,简单地说就是将所有的签到时间减去13小时。签到中的时间格式 是这样13/05/2014 21:20:10
    datetime模块比 time模块要好一些 ,似乎time功能具有的功能datetime都具有。
贴一些处理语句吧 
将时间格式化d= datetime.datetime.strptime("13/05/2014 21:20:10","%d/%m/%Y %H:%M:%S")
时间差的计算d=d-datetime.timedelta(hours=24)  此处为减去24小时

在文件中插入列的时候需要将元组转换为列表进行处理。
list 和array可以通过初试化进行转换,将tuple转变为list之后即可以进行插入这样的操作。列表和数组的转换 
alist=list(array)
array=tuple(alist)


 str='...'.join(arr),join是和split对应的操作,表达式将元组中的值用...连接,并赋值给str

需要采用键值对将相同的用户签到记录放到一起,并进行时间上的排序,根据字典值进行排序。用字典建立关联关系。
python 3.3的字典遍历语句和以前的版本有所不同
for k,v in dict1.items():
 print(k,v)

排序:
只有列表可以排序,元组不可以排序
示例语句,对字典dict3按照值排序
sorted_x = sorted(dict3.items(), key=lambda dict3 : dict3[1])


需要自定义排序方法 :按照记录中的时间先后进行排序

事实上是多属性排序,先按照用户编号,再按照用户的签到时间,两个属性进行排序

对python的语法基本熟悉之后,对我的数据处理可以按照步骤进行,每一步骤产生中间结果:
1.对签到记录按照用户进行排序,即将相同用户的签到放在一起
2.对同一用户进行时间先后排序(降序排列,将较近的签到放在前面)
3.筛选掉用户签到记录小于10的用户
4.时间进行处理,即将给定的时间处理为框架时间
5.进行测试集训练集的划分,取用户最近的5个签到为测试集其余为训练集

可以将1,2合并为处理一个列表函数,其中自定义比较函数。
发现python3.3居然把sort中的cmp去掉了,还是用2.7吧
居然不向下兼容……


进行1,2两步处理(在2.7环境下)
最终直接使用的是列表自带的sort函数。



0 0