全国大学生市场调研大赛-数据分析

数据的预处理 删除答题时间小于1分钟的 对异常数据进行一些修改 检查有没有重复的问卷 保留研究所需要的列 处理公共题目缺失值 把数据分为总数据df,来过游客的数据df_gone,没有来过游客的数据df_not_gone,所有原始信息保留 对于df_gone和df_not_gone分别应用孤立森林清洗异常问卷 得到最后的数据集df, df_gone, df_not_gone import pandas as pd df = pd.read_csv('乌蒙大草原旅游问卷调查_final.csv') print(df.shape) df.head() 这两段代码主要是排除答题时间小于60s的问卷,不过问卷网上可以直接进行筛选 # 先把答题时间转换为时间格式 def convert_to_seconds(time_str): if '分' in time_str: minutes, seconds = time_str[:-1].split('分') return int(minutes) * 60 + int(seconds) else: return int(time_str[:-1]) df['答题时长'] = df['答题时长'].astype(str) df['答题时长'] = pd.to_timedelta(df['答题时长'].apply(convert_to_seconds), unit='s') # 删除答题时间小于1分钟的数据 df = df[df['答题时长'] > '00:01:00'] print(df.shape) df.head() 针对Q2年龄的一些数据问题进行处理 import seaborn as sns import matplotlib.pyplot as plt # 查看Q2有没有非数字的数据 df['Q2'].unique() # 修改数据 df['Q2'] = df['Q2']....

March 21, 2024 · 27 min · 5544 words · sirius1y

使用Selenium库爬取网易云音乐和携程旅行评论

网络爬虫记录 前置知识 网站的加载形式有两种:静态加载和动态加载 静态加载 在静态加载中,当你访问一个网页时,服务器会发送一个完整的HTML页面。 所有的内容,包括文本、图片和链接,都嵌入在这个HTML文档中。 CSS和JavaScript通常作为外部文件加载,但它们主要用于增强页面的外观和感觉,而不是改变内容。 对爬虫的影响: 易于爬取:静态页面可以直接通过HTTP请求获取,然后使用HTML解析器(如BeautifulSoup)提取所需信息。 无需执行JavaScript:不需要处理JavaScript生成的内容。 动态加载 动态加载的网页通常使用Ajax(Asynchronous JavaScript and XML)或其他JavaScript框架来异步加载数据。 当你访问这样的网页时,初始的HTML文档可能不包含所有内容。随后,JavaScript会被执行来加载更多数据。 这些数据可能来自服务器的额外HTTP请求,通常返回JSON或XML格式的数据。 对爬虫的影响: 更复杂的爬取过程:由于内容是动态加载的,传统的HTTP请求和HTML解析可能无法获取所有数据。 需要模拟浏览器或分析JavaScript:可能需要使用如Selenium之类的工具来模拟浏览器行为,或分析JavaScript代码和网络请求来直接获取数据。 可能涉及到更多的反爬机制:动态加载的网站可能有更复杂的反爬虫策略。 Selenium库 在刷新网易云音乐的一首歌曲下面的评论的时候,发现浏览器的URL都没有发生变化,应该是采用Ajax刷新了网页的部分内容。 对于这样网站的爬虫有两个思路: 在浏览器的控制台上刷新时候查看“网络”部分,分析发送的请求,在相应的进行模拟 使用selenium工具进行模拟 本次任务采用selenium进行模拟进行爬取评论。 然后会得到一堆.txt文件,用python或者shell脚本把他们合在一起,接下来进行数据分析 代码附录 代码1 网易云音乐评论网络爬虫 from selenium import webdriver from selenium.webdriver.common.by import By from time import sleep # 创建ChromeOptions对象并启用无头模式 chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--headless') driver = webdriver.Chrome(options=chrome_options) # 打开网站 driver.get('https://music.163.com/#/song?id=1392155391') # 设定起始页号 page_number = 1 # 定位元素框架 comment_frame = driver.switch_to.frame('g_iframe') while page_number<260: # 滚动到页面底部,确保所有的评论都被加载 driver.execute_script("window.scrollTo(0, document....

February 14, 2024 · 2 min · 393 words · sirius1y