1. 快捷導航

            微博評論采集下來后怎樣把發布時間轉換成統一格式

            2022-6-21 11:31| 發布者: Fuller| 查看: 1047| 評論: 0

            摘要: 微博發布時間有很多格式,不統一就沒法做進一步數據分析,那么,對微博評論采集結果進行格式化或其它數據預處理的時候怎樣同意轉換時間格式?在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


            鮮花

            握手

            雷人

            路過

            雞蛋

            最新評論

            GMT+8, 2022-11-27 00:25

            欧美一级午夜福利免费区