原始数据集
对整个图书借阅信息进行筛选,选取有用的部分重新保存为新的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