<input id="0qass"><u id="0qass"></u></input>
  • <input id="0qass"><u id="0qass"></u></input>
  • <menu id="0qass"><u id="0qass"></u></menu>

    自制信息檢索網站(二)——分析掘金數據

    今天繼續自制信息檢索網站的第二步,簡單的分析一下掘金的數據。在上次第一步得到數據后通過簡單的數據清洗可視化來看一看掘金。

    本次使用的是jupyter notebook用到的庫有pymongo,用來連接MongoDB數據庫;jieba用來進行分詞;pyecharts用來數據可視化。

    掘金文章長度

    這一部分會對所有爬取到的掘金文章的長度進行統計,首先統計所有文章的長度:

    # 分析文章的長度分布
    all_items = collection.find({})
    all_content_length = [len(item['content']) for item in all_items]
    print(all_items.count())
    
    # 輸出 2996
    復制代碼

    然后在文章長度按照large(>=10000字),middle(5000-10000字),small(1000-5000字),x-small(0-1000字)進行分類:

    content_length_distribution = {
        'large': 0,
        'middle': 0,
        'small': 0,
        'x-small': 0,
    }
    for item_content_length in all_content_length:
        if item_content_length >= 10000:
            content_length_distribution['large'] += 1 
        elif item_content_length >= 5000 and item_content_length < 10000:
            content_length_distribution['middle'] += 1 
        elif item_content_length >= 1000 and item_content_length < 5000:
            content_length_distribution['small'] += 1 
        else:
            content_length_distribution['x-small'] += 1
    print(content_length_distribution)
    
    # 輸出 {'small': 1707, 'middle': 440, 'large': 175, 'x-small': 674}
    復制代碼

    通過echarts繪圖:

    from pyecharts import Pie
    pie = Pie("掘金文章長度分布圖", "單位為:(字)")
    pie.add("字數", ["x-small", "large", "middle", "small"], [674,175,440,1707],
            is_more_utils=True)
    pie
    復制代碼

    可以看到掘金的文章大多還是以1000-5000位多數的。然后我們看一下在1000-5000各部分的文章字數分布情況。

    from pyecharts import Bar
    # 字數在1000 - 5000 的文章字數分布
    small_content_length_distribution = {
        '1000-2000': 0 ,
        '2000-3000': 0 ,
        '3000-4000': 0 ,
        '4000-5000': 0 
    }
    for item_content_length in all_content_length:
        if item_content_length >= 1000 and item_content_length < 2000:
            small_content_length_distribution['1000-2000'] += 1 
        elif item_content_length >= 2000 and item_content_length < 3000:
            small_content_length_distribution['2000-3000'] += 1 
        elif item_content_length >= 3000 and item_content_length < 4000:
            small_content_length_distribution['3000-4000'] += 1 
        elif item_content_length >= 4000 and item_content_length < 5000:
            small_content_length_distribution['4000-5000'] += 1
    print(small_content_length_distribution)
    
    #輸出 {'3000-4000': 347, '4000-5000': 238, '2000-3000': 495, '1000-2000': 627}
    
    bar = Bar('字數在1000 - 5000 的文章字數分布',"單位為:(字)")
    labels = [label for label in small_content_length_distribution.keys()]
    values = [value for value in small_content_length_distribution.values()]
    # print(labels)
    bar.add('字數',labels,values,is_more_utils=True)
    bar
    復制代碼

    這里可以看到在1000-5000字數內文章的分布還是比較均勻的。

    掘金的標簽

    掘金的文章大部分都自帶tags,我們來看一下這寫tags多數有什么。

    # 分析所有文章的tags
    all_items = collection.find({})
    # 獲得所有的tags
    all_tags = []
    for item in all_items:
        all_tags += item['tags']
    print(all_tags[:20])
    
    # 輸出 ['JavaScript', '前端', '微信小程序', 'RxJS', '微信', 'JavaScript', '設計', '微信小程序', '前端', '微信', '微信小程序', '微信小程序', '前端', '微信', '微信小程序', '前端', '微信', '微信小程序', 'JavaScript', '前端']
    
    all_tags_set = set(all_tags)
    print(len(all_tags_set))
    all_tags_distribution = {}
    for set_item in all_tags_set:
        all_tags_distribution[set_item] = 0
    # print(all_tags_distribution)
    for tag_item in all_tags:
        all_tags_distribution[tag_item] += 1
    
    from pyecharts import WordCloud
    
    word_cloud = WordCloud('掘金文章的標簽的分布','')
    
    labels = [label for label in all_tags_distribution.keys()]
    values = [value for value in all_tags_distribution.values()]
    
    word_cloud.add('次數',labels,values)
    word_cloud
    復制代碼

    從這里可以看到tags還是跟近兩年比較火的前端、人工智能相關。

    掘金每年的文章數

    掘金每年的文章數呈現什么樣的趨勢了,我們來看一下。

    year_list = []
    for item_create_date in all_created_date:
        year_list.append(item_create_date.split('-')[0])
    year_list = sorted(year_list,key=lambda x:int(x[3]))
    # print(year_list)
    year_set = set(year_list)
    print(year_set)
    all_year_distribution = {}
    for set_item in year_set:
        all_year_distribution[set_item] = 0
    
    for list_item in year_list:
        all_year_distribution[list_item] += 1
    print(all_year_distribution)
    
    from pyecharts import Line
    
    line = Line('掘金文章年份分布圖','')
    labels = [label for label in all_year_distribution.keys()]
    values = [value for value in all_year_distribution.values()]
    
    line.add('文章數',['2015', '2016', '2017', '2018'],[ 4, 327, 1162, 1503],is_more_utils=True)
    line
    復制代碼

    可以看到,掘金近幾年一直呈上升趨勢,越來越多的人選擇掘金,當然也因為筆者爬取的數據有限,所以結果僅供參考。我們再來看看去年,也就是2017每個月份的文章數。

    # 2017年每個月份的文章分布圖
    month_list = []
    # all_created_date[:5]
    for item_created_date in all_created_date:
        if item_created_date.split('-')[0] == '2017':
            month_list.append(int(item_created_date.split('-')[1]))
            
    month_list.sort()
    month_set = set(month_list)
    # print(month_set)
    
    month_distribution = {}
    for set_item in month_set:
        month_distribution[set_item] = 0
    
    for list_item in month_list:
        month_distribution[list_item] += 1
    print(month_distribution)
    
    line = Line('掘金文章2017年每月分布圖','')
    labels = [label for label in month_distribution.keys()]
    values = [value for value in month_distribution.values()]
    
    line.add('文章數',labels,values,is_more_utils=True)
    line
    
    #輸出 {1: 60, 2: 15, 3: 17, 4: 25, 5: 41, 6: 23, 7: 29, 8: 51, 9: 64, 10: 137, 11: 200, 12: 500}
    復制代碼

    掘金文章的瀏覽量、收藏量

    我們接下來看一下那些文章是掘金里面的明星文章。首先是瀏覽量前50的文章。

    # 瀏覽量前五十
    views_count_distribution = {}
    for item in sort_by_views_count[:50]:
    #     print(item['title'],item['views_count'])
        views_count_distribution[item['title']] = item['views_count']
    print(views_count_distribution)
    
    # {'編寫自己的代碼庫(javascript常用實例的實現與封裝)': 16254, '未來的前端工程師': 11002, '你敢在post和get上刁難我,就別怪我裝逼了': 14472, '送給前端開發者的一份新年禮物': 12775, 'B站的前端之路': 17492, '2018前端值得關注的技術': 23680, '微信小游戲跳一跳外掛輔助程序': 12887, '如何優雅地使用 Git': 11595, 'AI 系統首次實現真正自主編程,完爆初級程序員': 28363, '首個微信小程序開發教程!': 125928, '面試過阿里等互聯網大公司,我知道了這些套路 | 掘金技術征文': 18862, '鹿晗關曉彤公開戀情,是如何把微博服務器搞炸的?': 21196, '某小公司RESTful、共用接口、前后端分離、接口約定的實踐': 11735, '這一次,徹底弄懂 JavaScript 執行機制': 24905, '打造自己的JavaScript武器庫': 12927, '100+ 超全的 web 開發工具和資源': 10838, 'JavaScript專題系列20篇正式完結!': 20346, 'iView 發布后臺管理系統 iview-admin,沒錯,它就是你想要的': 14191, '2018 我所了解的 Vue 知識大全(一)': 11840, '[譯] React、Jest、Flow 和 Immutable.js 將使用 MIT 許可證': 27578, '個人總結(css3新特性)': 12321, '教你用Python來玩微信跳一跳': 22652, '2017下半年掘金日報優質文章合集:前端篇': 16820, '[譯] 2017 年比較 Angular、React、Vue 三劍客 ': 15398, '個人分享--web前端學習資源分享': 19548, '如何無痛降低 if else 面條代碼復雜度': 19974, '技術胖155集前端視頻教程-全部免費觀看': 19691, '關于IT培訓機構的個人看法': 18355, 'JS維護nginx反向代理,媽媽再也不用擔心我跨域了!': 10739, '能讓你開發效率翻倍的 VSCode 插件配置(上)': 11849, '手摸手,帶你優雅的使用 icon': 11728, 'Vue 脫坑記 - 查漏補缺(匯總下群里高頻詢問的xxx及給出不靠譜的解決方案)': 26215, '前端入行兩年--教會了我這些道理': 12649, '反擊爬蟲,前端工程師的腦洞可以有多大?': 11503, '永久免費!吳恩達剛公布的深度學習課程上線網易云課堂': 15603, '2018 Web 開發者最佳學習路線': 11105, '別再拿奇技淫巧搬磚了': 17900, 'GitHub 排名前 100 的安卓、iOS 項目簡介': 14091, '源碼圈 365 胖友的書單整理': 67221, '媽媽再也不用擔心我不會webpack了': 15861}
    
    bar = Bar('掘金文章瀏覽量前50分布圖','')
    labels = [label for label in views_count_distribution.keys()]
    values = [value for value in views_count_distribution.values()]
    
    bar.add('瀏覽數',labels,values,is_more_utils=True)
    bar
    復制代碼

    由于title過于長所以這里顯示不是很好,有興趣的可以去github上面下載這個notebook看一下。再來看一下收藏量:

    # 收藏量前五十
    sort_by_collection_count = collection.find().sort('collection_count',pymongo.DESCENDING)
    
    collection_count_distribution = {}
    for item in sort_by_collection_count[:50]:
    #     print(item['title'],item['views_count'])
        collection_count_distribution[item['title']] = item['collection_count']
    # print(collection_count_distribution)
    
    bar = Bar('掘金文章收藏量前50分布圖','')
    labels = [label for label in collection_count_distribution.keys()]
    values = [value for value in collection_count_distribution.values()]
    
    bar.add('收藏數',labels,values,is_more_utils=True)
    bar
    復制代碼

    下面是評論量:

    # 評論量前五十
    sort_by_comments_count = collection.find().sort('comments_count',pymongo.DESCENDING)
    
    comments_count_distribution = {}
    for item in sort_by_comments_count[:50]:
    #     print(item['title'],item['views_count'])
        comments_count_distribution[item['title']] = item['comments_count']
    # print(collection_count_distribution)
    
    bar = Bar('掘金文章評論量前50分布圖','')
    labels = [label for label in comments_count_distribution.keys()]
    values = [value for value in comments_count_distribution.values()]
    
    bar.add('評論數',labels,values,is_more_utils=True)
    bar
    復制代碼

    掘金的標題和內容

    下面我們來通過分詞來看一下掘金的標題和內容大致都說了些什么。 首先是標題:

    all_tokens_set = set(all_tokens_list)
    # print(all_tokens_set)
    all_tokens_distribution = {}
    for set_item in all_tokens_set:
        all_tokens_distribution[set_item] = 0
    # print(all_tags_distribution)
    for token_item in all_tokens_list:
        all_tokens_distribution[token_item] += 1
    # print(all_tokens_distribution)
    
    from pyecharts import WordCloud
    word_cloud = WordCloud('掘金文章標題分布','')
    
    labels = [label for label in all_tokens_distribution.keys()]
    values = [value for value in all_tokens_distribution.values()]
    
    word_cloud.add('次數',labels,values)
    word_clou
    復制代碼

    接下來是內容:

    # 分析文章內容
    all_content = [item['content'] for item in collection.find({})]
    
    content_tokens_list = []
    
    for line in all_content:
        cuts = jieba.cut(line,cut_all=False)
        for cut in cuts:
            if cut not in add_punc:
                content_tokens_list.append(cut)
            
    print(len(content_tokens_list))
    # 輸出 4806605
    content_tokens_set = set(content_tokens_list)
    print(len(content_tokens_set))
    # 輸出 80081
    content_tokens_distribution = {}
    for set_item in content_tokens_set:
        content_tokens_distribution[set_item] = 0
    # print(all_tags_distribution)
    for token_item in content_tokens_list:
        content_tokens_distribution[token_item] += 1
        
    new_content_tokens_distribution = sorted(content_tokens_distribution.items(),key=lambda x:x[1])
    # print(content_tokens_distribution.items())
    word_cloud_data = new_content_tokens_distribution[-800:-150]
    
    word_cloud = WordCloud('掘金文章內容分布','')
    
    labels = [label[0] for label in word_cloud_data]
    values = [value[1] for value in word_cloud_data]
    
    word_cloud.add('次數',labels,values)
    word_cloud
    復制代碼

    這里由于掘金的內容詞太多了,而且前面很大一部分都是停用詞,幾乎沒有意義,所以截取了一部分展示,其實效果也不好。最后因為爬取的數據有限,所以所有結果僅供參看,并無任何實際意義。 項目的源代碼在這里 juejin_spider.

    • 0
      點贊
    • 0
      評論
    • 0
      收藏
    • 一鍵三連
      一鍵三連
    • 掃一掃,分享海報

    ??2021 CSDN 皮膚主題: 大白 設計師:CSDN官方博客 返回首頁
    實付
    使用余額支付
    點擊重新獲取
    掃碼支付
    錢包余額 0

    抵扣說明:

    1.余額是錢包充值的虛擬貨幣,按照1:1的比例進行支付金額的抵扣。
    2.余額無法直接購買下載,可以購買VIP、C幣套餐、付費專欄及課程。

    余額充值
    多乐彩