快捷导航

微博评论采集下来后怎样把发布时间转换成统一格式

2022-6-21 11:31| 发布者: Fuller| 查看: 2499| 评论: 1

摘要: 微博发布时间有很多格式,不统一就没法做进一步数据分析,那么,对微博评论采集结果进行格式化或其它数据预处理的时候怎样同意转换时间格式?在Jupyter Notebook下使用python进行处理的方法是怎样的? ...

1. 问题起源

1.1. 微博发布时间有很多格式,不统一就没法做进一步数据分析

那么,对微博评论采集结果进行格式化或其它数据预处理的时候怎样同意转换时间格式?在Jupyter Notebook下使用python进行处理的方法是怎样的?

微博目前是研究社会舆情和人群特征的重要数据源,很多毕业设计论文是在挖掘微博内容后写成的,有同学使用集搜客微博采集工具箱中的微博评论采集工具采集了很多微博评论:

看到的采集结果像下图

很多同学在得到这个数据结果后,导入GooSeeker分词和文本分析软件对文本内容进行初步加工,然后可以建立多种分析模型,比如计算相似度、进行分类或者聚类、做回归计算、基于共现词做图分析和度分析等等。上图可以看到,要把发布时间作为一个分析维度,原始格式的时间显然不行。采集到的发布时间原始数据有如下几种格式:

  • 2分钟前
  • 3小时前
  • 6月16日 17:24
  • 今天 09:31
  • 2021-12-31 23:15

希望统一成如下样例格式: 2022-03-31 15:59

那么,从集搜客采集工具或者GooSeeker分词工具导出结果以后,在进一步量化分析之前,有必要对数据的某些字段进行格式化处理。下面我们专门讲一下用python对时间进行同一个格式化。

1.2. 使用什么工具进行这些数据预处理?

python下有很多功能强大的内置库和第三方库,可以借助这些工具进行各种数据的处理,比如:文本,时间日期,数字等。

我们今天使用的Pandas是一个很好用的工具。Pandas 是 Python 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。Pandas 是Python数据分析实践与实战的必备高级工具。

Pandas 适用于处理以下类型的数据:

  1. 与 SQL 或 Excel 表类似的,含异构列的表格数据;
  2. 有序和无序(非固定频率)的时间序列数据;
  3. 带行列标签的矩阵数据,包括同构或异构型数据;
  4. 任意其它形式的观测、统计数据集, 数据转入 Pandas 数据结构时不必事先标记。

在前一周的notebook中,我们对GooSeeker网络爬虫软件采集到的商品参数结构,在notebook中使用Pandas做多个数据表的合并。从那里可以体会到使用notebook的特点:第一,可以交互式探索;第二,探索过程自然而然地记录在notebook中。

本notebook依然聚焦于Pandas的使用,减少python的代码量,我们依然直接读取GooSeeker网络爬虫软件采集到的微博评论结果表,看看怎样转化时间格式。

1.3. 本模板适应的场景

本模板根据GooSeeker网络爬虫软件采集到的微博评论结果,在python中使用Pandas打开excel表,进行时间字段的处理,然后将处理后的结果保存到结果目录。

1.4. 使用方法

基本操作顺序是:

  1. 使用微博采集工具箱的微博评论采集工具,采集成功后导出微博评论excel表
  2. 将导出的微博评论excel表放在本notebook的data/raw文件夹中
  3. 从头到尾执行本notebook的单元

注意:每个notebook项目目录都预先规划好了,具体参看Jupyter Notebook项目目录规划参考。如果要做多个分析项目,把整个模板目录专门拷贝一份给每个分析项目。

1.5. 简要技术说明

在每个功能项单元,如果不需要关心的编程细节,将注明【编程细节】。

本notebook主要实现以下几个步骤:

  1. 读取data/raw文件夹中的从微博采集工具导出的微博评论采集结果excel表
  2. 对微博评论采集结果excel表的发布时间字段进行格式化处理

2. 运行环境的搭建

如何快速搭建运行本Notebook需要的环境?最简单的方法是下载安装Anaconda,这是一个python集成环境,常用的库都配套好了。

3. 数据源

数据源是微博采集工具箱的微博评论采集工具采集的微博评论数据。供参考和实验。

4. 修改历史

2022-06-17:第一版发布

5. 版权说明

本notebook是GooSeeker大数据分析团队开发的,所分析的源数据是微博采集工具箱的微博评论采集工具采集的,本notebook中的数据和代码可自由共享使用,包括转发、复制、修改、用于其他项目中。

6. 准备程序环境

导入必要的Python程序包,设定要分析的文件名变量。使用以下变量对应GooSeeker采集到的微博评论表:

  • file_weibo_com:微博评论表

【编程细节】本节下面的代码将对上述微博评论表名变量赋值

import pandas as pd

import os

import datetime

import re

%xmode Verbose

import warnings

warnings.filterwarnings("ignore", category=DeprecationWarning)

# 存原始数据的目录

raw_data_dir = os.path.join(os.getcwd(), '../../data/raw')

# 存处理后的数据的目录

processed_data_dir = os.path.join(os.getcwd(), '../../data/processed')

filename_temp = pd.Series(['微博评论'])

file_weibo_com = ''


结果输出如下:

Exception reporting mode: Verbose


7. 检测data\raw目录下是否有分词效果表

# 0:'微博评论'

print(raw_data_dir + '\r\n')

for item_filename in os.listdir(raw_data_dir):

    if filename_temp[0] in item_filename:

        file_weibo_com = item_filename

        continue

if file_weibo_com:

    print("微博评论excel表:", "data/raw/", file_weibo_com)

else:

    print("微博评论excel表:不存在")


结果输出如下:

C:\Users\work\workspace_219\notebook\微博评论采集下来后怎样把发布时间转换成统一格式_20220617\notebook\eda\../../data/raw

微博评论excel表: data/raw/ 微博评论采集结果_20220617110653802.xlsx


8. 读取微博评论表

以下的演示以微博采集工具箱的微博评论采集工具采集的微博评论数据excel表为例,需要把excel表放到本notebook的data/raw文件夹下

df = pd.read_excel(os.path.join(raw_data_dir, file_weibo_com))


8.1. 查看excel表的前5行

df.head(5)

8.2. 在dataframe最右边新增一列“发布时间_new”

df["发布时间_new"] = ''


8.3. 格式化“发布时间”并写入“发布时间_new”

读取datafram的每一行,按不同的格式进行不同的处理,处理后的结果写入“发布时间_new”这一列

df_output = df

for idx, row in df.iterrows():

    # 从源数据表读出来需要的字段

    # 读源数据表的时候,采用了序号方式:idx

    v_createdate = df.iloc[idx]['<createdate>'][0:19]

    v_createdate_date = datetime.datetime.strptime(v_createdate,"%Y-%m-%d %H:%M:%S")

    v_pub_date = df.iloc[idx]['发布时间'].split('来自')[0].strip()

    # 格式1:35秒前

    if re.search('\d{1,2}秒前', v_pub_date):

        v_pubdate_new = v_createdate_date - datetime.timedelta(seconds = int(v_pub_date.split('秒前')[0]))

    # 格式2:5分钟前

    elif re.search('\d{1,2}分钟前', v_pub_date):

        v_pubdate_new = v_createdate_date - datetime.timedelta(minutes = int(v_pub_date.split('分钟前')[0]))

    # 格式3:6小时前

    elif re.search('\d{1,2}小时前', v_pub_date):

        v_pubdate_new = v_createdate_date - datetime.timedelta(hours = int(v_pub_date.split('小时前')[0]))

    # 格式4:今天 09:31

    elif re.search('今天 \d{1,2}:\d{1,2}', v_pub_date):

        v_year = int(v_createdate[0:4])

        v_month = int(v_createdate[5:7])

        v_day = int(v_createdate[8:10])

        v_hour = int(v_pub_date.split(' ')[1][0:2])

        v_minute = int(v_pub_date.split(' ')[1].split(':')[1])               

        v_pubdate_new = datetime.datetime(year=v_year,month=v_month,day=v_day,hour=v_hour,minute=v_minute,second=0)

    # 格式5:6月16日 17:24

    elif re.search('\d{1,2}月\d{1,2}日 \d{1,2}:\d{1,2}', v_pub_date):

        v_year = int(v_createdate[0:4])

        v_month = int(v_pub_date.split('月')[0])

        v_day = int(v_pub_date.split('月')[1].split('日')[0])

        v_hour = int(v_pub_date.split(' ')[1].split(':')[0])

        v_minute = int(v_pub_date.split(' ')[1].split(':')[1])               

        v_pubdate_new = datetime.datetime(year=v_year,month=v_month,day=v_day,hour=v_hour,minute=v_minute,second=0)                                                          

    # 格式6:2021-12-31 23:15

    elif re.search('\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}', v_pub_date):

        v_pub_date = v_pub_date[0:16]

        v_pubdate_new = datetime.datetime.strptime(v_pub_date, "%Y-%m-%d %H:%M")                                             

    # 更新“发布时间_new”的值

    df_output.loc[idx,'发布时间_new'] = v_pubdate_new

    #print(df_output.loc[idx,'发布时间_new'])


8.4. 显示更新后的dataframe的前5行

拉动滚动条到最右边,可以看到“发布时间_new”这一列的值已经填充为标准时间格式

df_output.head(5)

8.5. 把处理后的dataframe保存到processed目录下

file_weibo_com_output = 'output_' + file_weibo_com

df_output.to_excel(os.path.join(processed_data_dir, file_weibo_com_output), sheet_name='sheet1')

9. 下载本notebook

微博评论采集下来后怎样把发布时间转换成统一格式_20220617.zip


鲜花

握手

雷人

路过

鸡蛋
发表评论

最新评论

评论 wangyong 2024-1-10 16:53
Dataframe中还有pd.to_datetime方法,可以将不规则的时间格式统一为"%Y-%m-%d %H:%M:%S"
data_articles['publish_date'] = pd.to_datetime(
          data_articles['publish_date'], errors='coerce')

查看全部评论(1)

GMT+8, 2024-3-19 18:54