<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          微博熱搜數(shù)據(jù)探索與處理

          共 4882字,需瀏覽 10分鐘

           ·

          2021-12-22 15:53

          ??????關(guān)注我,和老表一起學(xué)Python、云服務(wù)器


          • 一、前言

          • 二、專欄概要

          • 三、搞事情:讀取mysql數(shù)據(jù)并進行數(shù)據(jù)探索與處理

            • 3.1 pandas+sqlalchemy讀取數(shù)據(jù)

            • 3.2 數(shù)據(jù)探索與處理

          • 四、下集預(yù)告

          一、前言

          今天的分享來滿足這位讀者的需求,想讀“關(guān)于數(shù)據(jù)庫sql或者MySQL的,就那種Python來處理數(shù)據(jù)庫,比如Python爬蟲爬到數(shù)據(jù),然后封存到數(shù)據(jù)庫里面,然后再從sql里面讀取,進行分析可視化”。

          后面寫文章一方面是自己學(xué)習(xí)筆記,另外也會針對讀者需求寫一些專題文章,如果你有自己的想法,歡迎瀏覽器訪問下方鏈接,或者點擊閱讀原文,給老表提意見:

          https://shimo.im/forms/GryQ9CYRcxJ9hcYx/fill?channel=wechat

          二、專欄概要

          三、搞事情:讀取mysql數(shù)據(jù)并進行數(shù)據(jù)分析與可視化

          在上一節(jié)中,我們已經(jīng)將數(shù)據(jù)存儲到了MySQL數(shù)據(jù)庫,本節(jié)我們將從數(shù)據(jù)庫中讀取出數(shù)據(jù),然后進行數(shù)據(jù)探索和針對性處理。

          3.1 pandas+sqlalchemy讀取數(shù)據(jù)

          我們采用的是pandas+sqlalchemy進行數(shù)據(jù)的存儲讀取等操作,原因嘛,對比其他的這個方法最快,最簡單(上篇文章已經(jīng)說過了),讀取出來的數(shù)據(jù)就是dataframe格式,還可以在讀取過程進行數(shù)據(jù)格式化,優(yōu)秀。

          讀取數(shù)據(jù):

          #?調(diào)用pandas?的?read_sql?、讀取數(shù)據(jù)
          from?sqlalchemy?import?create_engine
          #?利用sqlalchemy的create_engine創(chuàng)建一個數(shù)據(jù)庫連接引擎
          engine?=?create_engine('mysql+pymysql://用戶名:密碼@localhost:3306/數(shù)據(jù)庫名稱?charset=utf8')

          sql?=?'select?*?from?wb_hot'
          #?第一個參數(shù):查詢sql語句
          #?第二個參數(shù):engine,數(shù)據(jù)庫連接引擎
          #?第三個參數(shù):將指定列轉(zhuǎn)換成指定的日期格式
          pd_read_sql?=?pd.read_sql(sql,?engine,?parse_dates={'wb_first_time':?"%Y:%m:%H:%M:%S"})

          3.2 數(shù)據(jù)探索與處理

          首先我們可以利用調(diào)用shape屬性查看數(shù)據(jù)的規(guī)模,調(diào)用info函數(shù)查看數(shù)據(jù)信息,調(diào)用describe函數(shù)查看數(shù)據(jù)分布情況。

          • 數(shù)據(jù)有82869行,4列
          #?查看數(shù)據(jù)規(guī)模?多少行?多少列
          pd_read_sql.shape

          #?---輸出---?#?
          (82869,?4)
          • 沒有空值,we_title是字符串類型,web_hot_time和wb_hot_number是數(shù)值類型,wb_first_time是日期類型。
          #?查看整體數(shù)據(jù)信息,包括每個字段的名稱、非空數(shù)量、字段的數(shù)據(jù)類型查看數(shù)據(jù)基本信息
          pd_read_sql.info()
          • describe默認輸出數(shù)值類型的列的各項指標數(shù)據(jù)。
          #?查看數(shù)據(jù)表中數(shù)據(jù)類型的列的數(shù)據(jù)分布情況
          '''
          ?? count:數(shù)量統(tǒng)計,非空值數(shù)量
          ?? mean:均值
          ?? std:標準差
          ?? min:最小值
          ?? 25%:四分之一分位數(shù)
          ?? 50%:二分之一分位數(shù)
          ?? 75%:四分之三分位數(shù)
          ?? max:最大值
          ?? unipue:不同的值有多少個
          ?? top:出現(xiàn)次數(shù)最多的詞
          ?? freq:top詞出現(xiàn)的次數(shù)
          '''

          pd_read_sql.describe()
          • 我們也可以看其他兩列(非數(shù)值類型)的數(shù)據(jù)情況
          #?查看單列的數(shù)據(jù)發(fā)布情況
          pd_read_sql['wb_title'].describe()
          • 看下微博熱搜不同標題出現(xiàn)次數(shù)情況top10
          #?統(tǒng)計所有熱搜標題出現(xiàn)次數(shù)
          pd_read_sql['wb_title'].value_counts()[:10]

          通過上面基本探索,我們了解了數(shù)據(jù)的大概情況,目前數(shù)據(jù)只有四個維度,能分析的維度就很有限,所以我們需要先自己列下有哪些維度可以拆分、可以進行分析可視化,如下是我自己的簡單思考:

          自己拆分了

          基于上面的內(nèi)容,需要提前拆分的只有熱搜標題,從里面我們可以拆分出熱搜相關(guān)地理位置、熱搜相關(guān)人名、熱搜相關(guān)年齡段等數(shù)據(jù)。

          那么接下來我們就想辦法來拆分熱搜標題吧~

          這里我想到的是直接用現(xiàn)成的命名實體識別庫來對熱搜標題進行拆分,最先想到的就是之前畢設(shè)用過的Stanford CoreNLP,不過由于這個是Java寫的,使用需要安裝jdk,所以不太想用它,查了下,發(fā)現(xiàn)了一個只用python就可以的第三方庫:foolnltk,

          官方項目地址:https://github.com/rockyzhengwu/FoolNLTK

          直接運行pip命令即可安裝,不過包比較大(包括訓(xùn)練好的模型)、依賴也多,所以建議用鏡像源安裝,如:

          pip3?install?-i?http://mirrors.aliyun.com/pypi/simple/?foolnltk
          foolnltk依賴真多

          還可以直接調(diào)用一些免費、開放的接口,如百度大腦的詞法分析,如果大家感興趣,可以留言說說,下回給大家分享,也歡迎大家提前體驗,將學(xué)習(xí)操作筆記分享給老表。

          https://ai.baidu.com/tech/nlp_basic/lexical

          安裝好后,直接導(dǎo)入,你可能遇到下面問題,不要慌,這是tensorflow版本的問題,tf2.0以后移除了tf.contrib模塊,所以我們直接安裝低版本tf即可。

          ModuleNotFoundError

          首先卸載tensorflow高版本,然后安裝低版本,如1.15.0。

          #?先卸載
          pip3?install?tensorflow
          #?安裝2.0以下的tensorflow版本?避免No?module?named?'tensorflow.contrib'?
          !pip3?install?tensorflow==1.15

          安裝成功后,我們可以運行一個示例看看效果:

          import?fool?

          text?=?["15地抵北京大興機場航班取消"]
          words,?ners?=?fool.analysis(text)
          print(ners)

          可以看到,結(jié)果是出來了,但是有警告提示,也很簡單,按上面說明,到對應(yīng)文件中改下代碼即可,先看代碼,我們直接調(diào)用了foolnltk的analysis函數(shù),傳入了一個列表參數(shù)(也可以是字符串),返回結(jié)果是一個元組。

          words是對字符串的文本詞性分析,ners是對文本的實體識別,每組是一個元組,其中第一個和第二個元素是識別出的內(nèi)容在字符串中起始結(jié)束位置,第三個元素是字符串表示的含義,比如北京大興機場被識別出是一個地名,用location表示,最后一個元素是識別出的字符串,而且ners是一個兩層列表。

          經(jīng)過測試,我們發(fā)現(xiàn)person表示人名(如:趙麗穎),org表示組織名字(一般是國家組織,如:工信部),company表示公司名字(如:鴻星爾克)。

          不過有點不太好的就是識別不是很準確,另外無法識別出表示年齡段的詞,比如:00后這種,關(guān)于識別準確問題,這篇文章暫且這樣處理,00后這種年齡段,我寫了一個正則表達式來識別。

          import?re?
          def?get_age_group(text):
          ????data?=?re.findall('.*?(\d{2}后).*?',?text)
          ????if?data:
          ????????return?'-'.join(data)
          ????else:
          ????????return?''

          那么我們就需要增加五列:location、person、org、company、age,首先寫一個函數(shù),用于從一個熱搜標題中解析出需要新增的內(nèi)容,注意get_age_group函數(shù)之前上面已經(jīng)寫過啦,所以這里直接調(diào)用即可。

          import?fool

          def?get_key_word(text):
          ????#?字典匹配速度快
          ????result?=?{
          ????????'person':?'',
          ????????'location':?'',
          ????????'org':?'',
          ????????'company':?'',
          ????}
          ????words,?ners?=?fool.analysis(text)
          ????for?ner?in?ners[0]:
          ????????if?ner[2]?in?result:
          ????????????result[ner[2]]?=?result[ner[2]]?+?'-'?+?ner[3]
          ????
          ????return?result['person'],?result['location'],?result['org'],?result['company'],?get_age_group(text)

          然后我們寫幾行代碼對原數(shù)據(jù)進行批量處理,這里我們主要用到了apply函數(shù)去批量處理wb_title數(shù)據(jù),然后利用concat函數(shù)將新增數(shù)據(jù)和原始數(shù)據(jù)合并。

          import?time
          #?新增五列?位置?姓名?組織?公司?年齡段
          t1?=?time.time()??#?時間戳?單位秒
          print(f'熱搜標題處理開始時間:{t1}')
          #?從wb_title中解析出新增列
          pd_test?=?pd_read_sql['wb_title'].apply(get_key_word)
          t2?=?time.time()??#?時間戳?單位秒
          print(f'熱搜標題解析結(jié)束時間:{t2}')
          print(f'成功解析了數(shù)據(jù){pd_test.shape[0]}條,耗費時間:{(t2-t1)/60:.2}分鐘')

          #?處理新增列
          pd_test?=?pd.DataFrame(list(pd_test),??columns=['person',?'location',?'org',?'company',?'age'])
          #?合并
          pd_all?=?pd.concat([pd_read_sql,?pd_test],?axis=1)

          t3?=?time.time()??#?時間戳?單位秒
          print(f'熱搜標題處理結(jié)束時間:{t3}')
          print(f'成功處理了數(shù)據(jù){pd_all.shape[0]}條,耗費時間:{(t3-t2)/60:.2}分鐘')

          一共八萬多條數(shù)據(jù),整個解析花費了7分鐘左右,數(shù)據(jù)處理好后,我們先保存一份到本地,避免系統(tǒng)突然奔潰或者啥誤操作,又得重新來過。

          #?處理好的數(shù)據(jù)?首先本地保存下
          pd_all.to_csv('wb_data_1.csv',?encoding='utf-8_sig',index=False)
          #?然后查看下數(shù)據(jù)的基本情況
          pd_all.info()


          四、下集預(yù)告

          以上,相對簡潔的給大家分享了如何讀取數(shù)據(jù),并根據(jù)分析維度出發(fā),去拆分、處理現(xiàn)有數(shù)據(jù)。

          下一講中,我們將一起學(xué)習(xí)對處理好的數(shù)據(jù)如何進行數(shù)據(jù)分析與可視化,也歡迎大家在留言區(qū)提出更多可以分析的角度,關(guān)于數(shù)據(jù)分析與可視化這一節(jié),你還想學(xué)習(xí)什么其他的內(nèi)容也可以在評論區(qū)、留言區(qū)進行留言。

          點贊+留言+轉(zhuǎn)發(fā),就是對我最大的支持啦~


          --End--


          如何找到我:



          學(xué)習(xí)更多:
          整理了我開始分享學(xué)習(xí)筆記到現(xiàn)在超過250篇優(yōu)質(zhì)文章,涵蓋數(shù)據(jù)分析、爬蟲、機器學(xué)習(xí)等方面,別再說不知道該從哪開始,實戰(zhàn)哪里找了
          點贊”就是對博主最大的支持?
          瀏覽 125
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  2019年情侣免费自拍视频青青 | 五月天草逼网址 | 草久网 | 婷婷好色五月天 | 色色射|