图书数据中选取个人借书信息代码

中国图书馆图书分类法

原始数据集

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对整个图书借阅信息进行筛选,选取有用的部分重新保存为新的Excel

import pandas as pd
from string import *

#PATRON_ID是学生个人ID,ITEM_CALLNO中的英文字母是图书的类别,LOAN_DATE是借书日期
##图书类别:A马克思主义、列宁主义、毛泽东思想、邓小平理论;B哲学、宗教;C 社会科学总论;D 政治、法律;E 军事;F 经济;G 文化、科学、教育、体育;
##H 语言、文字;I 文学;J 艺术;K 历史、地理;N 自然科学总论;O 数理科学和化学;P 天文学、地球科学;Q 生物科学;R 医药、卫生;S 农业科学;T-TN 工业技术;
##TP 自动化技术、计算机技术;TQ 化学工业;TU 建筑科学;TV 水利工程;U 交通运输;V 航空、航天;X 环境科学、安全科学;Z 综合性图书。

def time_transform(list):
    list[0], list[1], list[2] = list[-1], list[0], list[1]
    return list

# 读取数据
Book_data = pd.read_excel(r'Book borrowing data.xlsx')
#数据去重
Book_data.drop_duplicates(inplace = True)

#只要其中关键的几列数据
Book_data = Book_data.loc[0::,['PATRON_ID', 'ITEM_CALLNO', 'LOAN_DATE']]
#图书类别编号的处理
Book_data.ITEM_CALLNO = Book_data.ITEM_CALLNO.apply(func=lambda x: x.replace(x[2::],''))  #先取前两个字符串
Book_data.ITEM_CALLNO = Book_data.ITEM_CALLNO.apply(func=lambda x: x.translate(str.maketrans('', '', digits)))  #再去掉两个字符串中的数字
#对时间转化为日期型1/1/2013→2013/1/1
Book_data.LOAN_DATE = Book_data.LOAN_DATE.apply(func=lambda x : '/'.join(time_transform(x.split('/'))))
# print(Book_data)
# 将数据结果保存到excel表格中
Book_data.to_excel('New_Book_Borrowing.xlsx')

去重后数据从914050减少到554671个
在这里插入图片描述

筛选出借阅记录中的所有人的个人ID(删除重复的ID)

import pandas as pd
import numpy as np
# 读取数据
Book_data = pd.read_excel(r'New_Book_Borrowing.xlsx')
#只要其中关键的几列数据
Persons_ID = Book_data.loc[0::,['PATRON_ID']]
#去重,总结出个人ID
Person_ID = Persons_ID.drop_duplicates()   #删掉重复的ID
# #显示Dateframe所有行
# pd.set_option('display.max_rows',None)
# #显示所有列
# pd.set_option('display.max_columns',None)
#输出所有的个人ID
print(Person_ID)
#将数据框转化为数组,方便后面操作取数据
Person_ID_array = np.array(Person_ID)
#统计人数
Num_person = len(Person_ID_array)
print('总人数:',Num_person)
#取出第3个ID
print(Person_ID_array[2][0])

结果:

         PATRON_ID
0       8748847336
5       8748486970
6       8747440724
7       8747440776
8       8771449230
...            ...
913762  8749444140
913790  8740244788
913930  8749844683
913935  8749848727
914015  8749844757

[26784 rows x 1 columns]
总人数: 26784
8747440724

接着筛选出个人的借阅信息

import pandas as pd
import numpy as np

# 读取数据
Book_data = pd.read_excel(r'New_Book_Borrowing.xlsx').iloc[0: , 1:]
#选取个人数据
Person_data = Book_data.loc[Book_data.PATRON_ID == 8748847336, ['ITEM_CALLNO', 'LOAN_DATE']]
#显示Dateframe所有行
pd.set_option('display.max_rows',None)
#显示所有列
pd.set_option('display.max_columns',None)
print(Person_data)

结果:

       ITEM_CALLNO   LOAN_DATE
0                H    2013/1/1
1                H    2013/1/1
2                H    2013/1/1
3                H    2013/1/1
4                H    2013/1/1
12393            D   2013/2/20
41997            F   2013/4/19
42075            F   2013/4/19
42076            F   2013/4/19
44409            D   2013/4/24
44410            E   2013/4/24
44411            E   2013/4/24
44412            D   2013/4/24
44413            D   2013/4/24
44414            D   2013/4/24
44415            F   2013/4/24
45453            F   2013/4/27
48682            H    2013/5/8
51060            B   2013/5/15
51061            B   2013/5/15
51972            B   2013/5/17
58146            C    2013/6/6
58609            D    2013/6/8
58610            D    2013/6/8
90730            I   2013/10/9
98921            F  2013/10/29
98922            I  2013/10/29
103188           F   2013/11/7
103193           D   2013/11/7
105828           I  2013/11/14
105829           F  2013/11/14
105830           F  2013/11/14
109832           D  2013/11/25
112350           F   2013/12/2
112351           F   2013/12/2
113557           H   2013/12/4
114580           F   2013/12/6
116010           F  2013/12/11
116308           F  2013/12/11
118941           F  2013/12/18
118942           D  2013/12/18
124737           F    2014/1/1
124931           D    2014/1/2
133208           D   2014/2/17
133209           D   2014/2/17
147113           K   2014/3/13
147114           K   2014/3/13
159210           D   2014/4/15
164065           I   2014/4/29
164066           I   2014/4/29
164067           I   2014/4/29
165304           D    2014/5/5
199421           H   2014/9/23
205564           D  2014/10/10
205565           D  2014/10/10
205566           D  2014/10/10
205567           D  2014/10/10
205568           D  2014/10/10
205569           D  2014/10/10
205643           D  2014/10/10
205644           D  2014/10/10
205645           D  2014/10/10
205646           D  2014/10/10
223443           F   2014/12/2
223444           K   2014/12/2
223529           D   2014/12/2
223983           D   2014/12/4
223984           D   2014/12/4
239476           D   2015/1/14
244827           D   2015/2/28
244828           D   2015/2/28
247891           D    2015/3/5
247892           D    2015/3/5
247893           D    2015/3/5
247894           D    2015/3/5
251265           D   2015/3/11
251266           D   2015/3/11
251267           D   2015/3/11
251727           D   2015/3/12
251728           D   2015/3/12
251729           D   2015/3/12
251730           D   2015/3/12
251805           D   2015/3/12
254727           J   2015/3/19
254728           D   2015/3/19

对个人借阅书籍的信息按照时间划分次数

时间戳与时间的转换

import time
time_list = ['2013/1/8', '2013/2/3', '2013/10/7', '2013/7/2', '2014/5/6']

list = []
for dt in time_list:
    #转换成时间数组
    timeArray = time.strptime(dt, "%Y/%m/%d")
    #转换成时间戳
    timestamp = time.mktime(timeArray)
    list.append(timestamp)
    print(timestamp)

for timestamp in list:
    # 转换成localtime
    time_local = time.localtime(timestamp)
    # 转换成新的时间格式
    dt = time.strftime("%Y/%m/%d", time_local)
    print(dt)

结果:

1357574400.0
1359820800.0
1381075200.0
1372694400.0
1399305600.0
2013/01/08
2013/02/03
2013/10/07
2013/07/02
2014/05/06

时间格式转化为时间戳进行排序

import time
time_list = ['2013/1/8', '2013/2/3', '2013/10/7', '2013/7/2', '2014/5/6']

def get_list(date):
    timestamp = time.mktime(time.strptime(date, "%Y/%m/%d"))  #转化为时间戳
    print(timestamp)
    return timestamp

list=sorted(time_list,key=lambda date:get_list(date))
print(list)

结果:

1357574400.0
1359820800.0
1381075200.0
1372694400.0
1399305600.0
['2013/1/8', '2013/2/3', '2013/7/2', '2013/10/7', '2014/5/6']

处理表格

import pandas as pd
import numpy as np
import time
# 读取数据
Book_data = pd.read_excel(r'New_Book_Borrowing.xlsx').iloc[0: , 1:]
#选取个人数据
Person_data = Book_data.loc[Book_data.PATRON_ID == 8748847336, ['LOAN_DATE', 'ITEM_CALLNO']]
#把时间格式转化为时间戳
Person_data['TIMESTAMP'] = Person_data.LOAN_DATE.apply(func=lambda x: time.mktime(time.strptime(x, "%Y/%m/%d")))
print(Person_data)
#显示Dateframe所有行
pd.set_option('display.max_rows',None)
#显示所有列
pd.set_option('display.max_columns',None)

grouped = Person_data.groupby(by = ['TIMESTAMP', 'LOAN_DATE', 'ITEM_CALLNO'])
result = grouped.aggregate({'ITEM_CALLNO':np.size})
# 数据集重命名
result.rename(columns={'ITEM_CALLNO':'ITEM_NUMBER'}, inplace=True)
print(result)
# 将数据结果保存到excel表格中
result.to_excel(f'{8748847336}.xlsx')

结果:

        LOAN_DATE ITEM_CALLNO     TIMESTAMP
0        2013/1/1           H  1.356970e+09
1        2013/1/1           H  1.356970e+09
2        2013/1/1           H  1.356970e+09
3        2013/1/1           H  1.356970e+09
4        2013/1/1           H  1.356970e+09
...           ...         ...           ...
251729  2015/3/12           D  1.426090e+09
251730  2015/3/12           D  1.426090e+09
251805  2015/3/12           D  1.426090e+09
254727  2015/3/19           J  1.426694e+09
254728  2015/3/19           D  1.426694e+09

[85 rows x 3 columns]
                                     ITEM_NUMBER
TIMESTAMP    LOAN_DATE  ITEM_CALLNO             
1.356970e+09 2013/1/1   H                      5
1.361290e+09 2013/2/20  D                      1
1.366301e+09 2013/4/19  F                      3
1.366733e+09 2013/4/24  D                      4
                        E                      2
                        F                      1
1.366992e+09 2013/4/27  F                      1
1.367942e+09 2013/5/8   H                      1
1.368547e+09 2013/5/15  B                      2
1.368720e+09 2013/5/17  B                      1
1.370448e+09 2013/6/6   C                      1
1.370621e+09 2013/6/8   D                      2
1.381248e+09 2013/10/9  I                      1
1.382976e+09 2013/10/29 F                      1
                        I                      1
1.383754e+09 2013/11/7  D                      1
                        F                      1
1.384358e+09 2013/11/14 F                      2
                        I                      1
1.385309e+09 2013/11/25 D                      1
1.385914e+09 2013/12/2  F                      2
1.386086e+09 2013/12/4  H                      1
1.386259e+09 2013/12/6  F                      1
1.386691e+09 2013/12/11 F                      2
1.387296e+09 2013/12/18 D                      1
                        F                      1
1.388506e+09 2014/1/1   F                      1
1.388592e+09 2014/1/2   D                      1
1.392566e+09 2014/2/17  D                      2
1.394640e+09 2014/3/13  K                      2
1.397491e+09 2014/4/15  D                      1
1.398701e+09 2014/4/29  I                      3
1.399219e+09 2014/5/5   D                      1
1.411402e+09 2014/9/23  H                      1
1.412870e+09 2014/10/10 D                     10
1.417450e+09 2014/12/2  D                      1
                        F                      1
                        K                      1
1.417622e+09 2014/12/4  D                      2
1.421165e+09 2015/1/14  D                      1
1.425053e+09 2015/2/28  D                      2
1.425485e+09 2015/3/5   D                      4
1.426003e+09 2015/3/11  D                      3
1.426090e+09 2015/3/12  D                      5
1.426694e+09 2015/3/19  D                      1
                        J                      1

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值