• 基于Python和Pandas对主流婚恋网站数据可视化分析


    资源下载地址:https://download.csdn.net/download/sheziqiong/85893159
    资源下载地址:https://download.csdn.net/download/sheziqiong/85893159
    1.课题背景及意义
    当下大龄剩男剩女数量日益增加, “催婚”和“婚姻”成为社会关注和网上热议的热门话题。近五年来25-39岁的单身人口数量逐年递增,适婚年龄段人口的性别比也在持续攀升,或将有超3000万青年男性成为剩男。这意味着一面“恐催婚”,一面“结婚难”已然成为当下年轻人面临的现状。
    据珍爱网网络调问卷查调查显示,现在的年轻人其实并不是绝对的不婚主义者,反而多数人是期待爱情降临的,但是,这并不代表着年轻人愿意随意恋爱和结婚。尽管婚恋难是不争的事实,但多数青年仍然愿意等待而不是将就,将有无感觉、是否有感情和今后的婚姻质量放在了重要位置,择偶更看对方的能力,宁缺毋滥是多数青年男女的共识。
    现在的年轻人婚恋更重视内在的匹配度、心灵的契合度以及性格与认知的契合度,这是婚姻品质的基本保证,但客观上也无疑增加了婚恋的成本和成功的难度,年轻人结婚难的问题已经迫在眉睫。
    所以我们决定利用大数据对目前主流婚恋网站上的数据进行清洗汇总并以可视化的方式展现出来,以便得出一些输入的理论和结论来解释目前的问题,并为未来提出更加具体的婚恋问题解决方案提供一个较为基础的数据支撑。

    针对我们清洗获得的多列数据,以及大数据算法加工过后的多元数据,我们选取了很多可视化展示的方法。基于python 平台 我们选择了pandas作为我们数据处理的依赖,matplotlib生成简单图片,利用sklearn进行了降维处理方便可视化展示。对于词频分析,我们选取了wordcloud这一库进行词云的生成。而对于频繁模式挖掘的数据,matplot已经无法满足我们的需求,我们转而选取基于web的echarts进行可视化展示,并且生成了web页面。
    目录

    1. 课题背景及意义 2
    2. 技术路线 3
    3. 数据采集 4
      3.1 爬虫流程 4
      3.2 反反爬虫 5
      3.3 异步 6
      3.4 CI/CD 6
    4. 数据清洗 6
      4.1 数据清洗 6
      4.2 数据保存 9
      4.3 结果一览 10
    5. 数据加工与大数据分析算法 10
      5.1 词频计算 10
      5.2 频繁模式挖掘 11
      5.3 聚类算法 12
    6. 可视化 13
      6.1 技术栈选取 13
      6.2 直接数据可视化展示 13
      6.3 大数据分析算法结果 16
    7. 结果论证 19
      7.1 结论一 20
      7.2 结论二 20
      7.3 结论三 20

    爬虫部分代码:

    import asyncio
    from single_spider import JiaYuanSpider, ZhenAiSpider
    import os
    import sys
    from threading import Lock
    
    from async_spider import AsyncJiaYuanSpider
    
    # 获取账户信息
    def get_account():
        if not os.path.exists("account.txt"):
            username = input("请输入用户名: ")
            password = input("请输入密码: ")
            with open("account.txt", "w+") as account:
                account.write(username)
                account.write("\n")
                account.write(password)
        else:
            with open("account.txt", "r+") as account:
                username = account.readline()
                password = account.readline()
        print("您的用户名为: {}".format(username))
        print("您的密码为: {}".format(password))
        return (username, password)
    
    def get_cookies():
        if not os.path.exists("cookie.txt"):
            cookie = input("请输入 Cookie: ")
            with open("cookie.txt", "w+") as cookie_txt:
                cookie_txt.write(cookie)
        else:
            cookie_txt = open('cookie.txt', 'r+')
            cookie = cookie_txt.readline()
            cookie_txt.close()
        print("Cookie 为 {}".format(cookie))
        return cookie
    
    def single_jiayuan_main():
        cookie = get_cookies()
        url = 'https://search.jiayuan.com/v2/search_v2.php'
        spider = JiaYuanSpider(url, cookie, "data/世纪佳缘-测试.csv")
        for page in range(1, 2):
            payload = [
                ('sex', 'f'),
                ('key', ''), 
                ('stc', '23:1'),
                ('sn', 'default'),
                ('sv', '1'),
                ('p', str(page)),
                ('f', ''), 
                ('listStyle', 'bigPhoto'),
                ('pri_uid', '254091710'),
                ('jsversion', 'v5')
            ]
            spider.run(page, payload)
    
    def single_zhenai_main():
        url = "http://www.zhenai.com/zhenghun"
        spider = ZhenAiSpider(url, "data/珍爱.csv")
        spider.run()
    
    async def async_jiayuan_main():
        if(len(sys.argv) < 4):
            print("[Error] 至少需要四个参数")
            sys.exit(-1)
        start_page = sys.argv[1]
        end_page = sys.argv[2]
        filename = sys.argv[3]
        cookies = get_cookies()
        write_lock = Lock()
        url = "https://search.jiayuan.com/v2/search_v2.php"
        spider = AsyncJiaYuanSpider(url, cookies, filename, write_lock)
        for page in range(int(start_page), int(end_page)):
            payload = [
                ('sex', 'f'),
                ('key', ''), 
                ('stc', '23:1'),
                ('sn', 'default'),
                ('sv', '1'),
                ('p', str(page)),
                ('f', ''), 
                ('listStyle', 'bigPhoto'),
                ('pri_uid', '254091710'),
                ('jsversion', 'v5')
            ]
            run_task = asyncio.create_task(spider.run(page, payload))
            await run_task
        
            
    
    if __name__ == '__main__':
        # asyncio.run(async_jiayuan_main())
        # single_jiayuan_main()
        asyncio.run(async_jiayuan_main())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    资源下载地址:https://download.csdn.net/download/sheziqiong/85893159
    资源下载地址:https://download.csdn.net/download/sheziqiong/85893159

  • 相关阅读:
    【Python】解决类中特性(property)覆盖同名属性(attribute)报错问题
    git版本回退
    linux下docker容器安装已经docker基本使用命令详解
    WEB3 在 React搭建的Dapp中通过redux全局获取并存储用户ETH与自定义token与交易所存储数量
    如何验证一个因果效应
    web前端期末大作业:网站设计与实现——咖啡网站HTML+CSS+JavaScript
    JavaWeb开发-05-SpringBootWeb请求响应
    图像运算和图像增强八
    C#不安全代码
    springcloudalibaba架构(21):MQ的简介
  • 原文地址:https://blog.csdn.net/newlw/article/details/125594585