本文用到的数据,可以加QQ跟群主获取:群名称:PYTHONERS-数据群 号:663468799学习python和数据分析推荐地方: www.lynda.com获取lynda官网会员的方式:http://item.taobao.com/item.htm?id=557746408785
1. time模块
我们可以使用time.gmtime()函数将时间转换成更加易读的形式。该函数使用timestamp作为参数,返回struct_time类的一个实例对象。该实例对象可以用来表示当前时间的一些属性。
比如:
- tm_year: timestamp的年份
- tm_mon: timestamp的月份(1-12)
- tm_mday: timestamp的日期(1-31)
- tm_hour: 时间戳的小时(0-23)
- tm_min: 时间戳的分钟(0-59)
需要注意的是time模块UTC时间,关于UTC时间,点击这里https://baike.baidu.com/item/协调世界时/787659?fr=aladdincurrent_time = time.time() current_struct_time = time.gmtime(current_time) current_year = current_struct_time.tm_year
2. datetime模块
当日期计算量大时,datetime更加好用。比如需要计算时间跨度和不同时区时。
基于datatime类创建一个对象:
或者简化:date_2017 = datetime.datetime(year=2017, month=12, day=31, hour=11, minute=23, second=12)
获取当前的UTC时间的datetime对象,可以使用datetime.utcnow()函数,如下:date_2017 = datetime.datetime(year=2017, month=12, day=31)
一旦我们创建了一个datetime对象,我们可以使用该对象的以下属性:current_datetime = datetime.datetime.utcnow()
- year:返回年值作为整数。
- month:返回月值一个整数。
- day:返回整数值。
- hour:将小时值返回为整数。
- minute:返回小数值作为整数。
- second:返回第二个值作为整数。
- microsecond:将微秒值作为整数返回
3. 时间的计算
当我们需要对时间进行计算的时候,我们需要用到datetime模块中的timedelta类。
当我们创建timedelta的时候,我们可以指定以下参数:
- weeks
- days
- hours
- minutes
- seconds
- milliseconds
- microseconds
today = datetime.datetime.now()
然后,我们创建一个timedelta的实例对象,用来表示时间长度;diff = datetime.timedelta(weeks=3, days=2)
然后,我们计算3周和2天后的时间:future = today + diff
当然我们也可以计算该时间跨度前的时间:past = today - diff
4. 时间输出的格式化
datetime对象提供了一个格式化输入时间的方法,datetime.strftime()
格式化日期:
%Y/%y ,%B/%b, %d, %A/%a -- 2015/15 , September/Sep, 25, Sunday/Sun
%c 本地的时间格式 %x 本地时间 %X 本地日期
格式化时间:
%I/%H 12小时/24小时 %M 分 %S 秒, %p
print(now.strftime("%Y")) # 2016
print(now.strftime("%y")) # 16
print(now.strftime("%B")) # September
print(now.strftime("%b")) # Sep
print(now.strftime("%d")) # 25
print(now.strftime("%A")) # Sunday
print(now.strftime("%a")) # Sun
print(now.strftime("%c")) # 本地时间格式
print(now.strftime("%x")) # 本地时间
print(now.strftime("%X")) # 本地日期
例子:datetime.datetime.now().strftime("%I:%M%p on %A %B %d, %Y")
04:07PM on Thursday October 05, 2017
5. 解析日期正如我们可以将datetime对象格式化输出一样,我们同样可以对一个日期字符串进行解析。我们可以使用datetime.datetime.strptime()函数转换日期字符串:
- 日期字符串(例如"Mar 03, 2010")
- 格式字符串(例如"%b %d, %Y")
需要注意的是,strptime()是一个函数,而不是某个对象上调用的方法。 使用方法如下:格式:datetime.datetime.strptime(字符串,解析格式)-> 返回一个datetime对象march3 = datetime.datetime.strptime("Mar 03,2010", "%b%d, %Y")
这样我们可以将一个字符串日期,转换成一个datetime实例对象。strptime()函数一般可以和strftime()函数一起使用。import datetime mystery_date = datetime.datetime.strptime(mystery_date_formatted_string, "%I:%M%p on %A %B %d, %Y") print(mystery_date.strftime("%I:%M%p on %A %B %d, %Y"))
6. AskReddit数据练习
reddit是一个内容和社区网站,用户可以向具有相似兴趣的人群提交链接,短信和其他类型的内容。
我们将使用的数据,来之2015年之前与AskReddit的前1000名职位数据集,如下:
Title:帖子的标题
Score:该帖子收到的upvote的数量
Time:当帖子出现(时间戳)
Gold:Reddit Gold用户发布了多少帖子
NumComs:该帖子收到的评论数
Title
|
Score
|
Time
|
Gold
|
NumComs
|
"What's your internet ""white whale"", something you've been searching for years to find with no luck?"
|
11510
|
1433213314.0
|
1
|
26195
|
What's your favorite video that is 10 seconds or less?
|
8656
|
1434205517
|
4
|
8479
|
What are some interesting tests you can take to find out about yourself?
|
8480
|
1443409636.0
|
1
|
4055
|
由于第二行的time是Unix timestamp, 我们无法阅读,需要通过一下函数转换:datetime_obj = datetime.datetime.fromtimestamp(1434205517)
第一步: 读取数据,转换日期
将该数据读入,然后转化成一个list_of_list,代码:
import csv
import datetime
ports = scv.reader(open("askreddit_2015.csv")) # 读取数据将数据保存在一个嵌套列表中
for post in posts:
float_time = float(post[2]) # 将time列的数据转换成浮点型
post[2] = datetime.datetime.fromtimestamp(float_time) # 使用fromtimestamp将浮点数据转换成datetime对象
print(post[2])
2015-06-02 02:48:34
2015-06-13 14:25:17
2015-09-28 03:07:16 v
2015-08-21 20:23:43
第二步:统计制定月份个数
def month_count(i):
count = 0
for row in posts:
if row[2].month == i:
count += 1
print(count)
return count
feb_count = month_count(2)
aug_count = month_count(8)