Python爬取数据并实现可视化是数据分析和数据挖掘中非常重要的一环。以下是Python爬取数据并实现可视化的完整攻略,包含两个示例。
步骤1:安装必要的库
在使用Python爬取数据并实现可视化之前,我们需要先安装必要的库。以下是需要安装的库:
- requests:用于发送HTTP请求和获取响应。
- BeautifulSoup4:用于解析HTML和XML文档。
- pandas:用于数据处理和分析。
- matplotlib:用于数据可视化。
可以使用pip命令来安装这些库:
pip install requests beautifulsoup4 pandas matplotlib
步骤2:爬取数据
在安装必要的库之后,我们可以开始爬取数据。以下是一个简单的示例,可以爬取豆瓣电影Top250的数据:
import requests
from bs4 import BeautifulSoup
import pandas as pd
url = 'https://movie.douban.com/top250'
movies = []
for i in range(0, 250, 25):
params = {'start': str(i), 'filter': ''}
response = requests.get(url, params=params)
soup = BeautifulSoup(response.text, 'html.parser')
items = soup.find_all('div', class_='item')
for item in items:
title = item.find('span', class_='title').text
rating_num = item.find('span', class_='rating_num').text
comment_num = item.find('div', class_='star').find_all('span')[3].text[:-3]
movies.append({'title': title, 'rating_num': rating_num, 'comment_num': comment_num})
df = pd.DataFrame(movies)
df.to_csv('movies.csv', index=False)
在上面的示例中,我们使用requests库发送HTTP请求,使用BeautifulSoup库解析HTML文档,并使用pandas库将数据保存到CSV文件中。
步骤3:数据处理和分析
在爬取数据之后,我们可以使用pandas库进行数据处理和分析。以下是一个示例,可以计算豆瓣电影Top250的平均评分和平均评论数:
import pandas as pd
df = pd.read_csv('movies.csv')
rating_mean = df['rating_num'].astype(float).mean()
comment_mean = df['comment_num'].astype(int).mean()
print(f'豆瓣电影Top250的平均评分为{rating_mean:.2f},平均评论数为{comment_mean:.2f}')
在上面的示例中,我们使用pandas库读取CSV文件,并计算平均评分和平均评论数。
步骤4:数据可视化
在数据处理和分析之后,我们可以使用matplotlib库进行数据可视化。以下是一个示例,可以绘制豆瓣电影Top250的评分和评论数的散点图:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('movies.csv')
rating = df['rating_num'].astype(float)
comment = df['comment_num'].astype(int)
plt.scatter(rating, comment)
plt.xlabel('Rating')
plt.ylabel('Comment')
plt.title('豆瓣电影Top250评分和评论数散点图')
plt.show()
在上面的示例中,我们使用pandas库读取CSV文件,并使用matplotlib库绘制散点图。
示例1:爬取天气数据并绘制折线图
以下是一个示例,可以爬取某城市未来7天的天气数据,并绘制折线图:
import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt
url = 'https://tianqi.moji.com/weather/china/shanghai/pudong-new-district'
weather = []
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
items = soup.find_all('div', class_='wea_info')
for item in items:
date = item.find('em').text
weather_text = item.find('b').text
temperature = item.find('span').text
weather.append({'date': date, 'weather_text': weather_text, 'temperature': temperature})
df = pd.DataFrame(weather)
df['temperature'] = df['temperature'].str.replace('℃', '').astype(int)
plt.plot(df['date'], df['temperature'])
plt.xlabel('Date')
plt.ylabel('Temperature')
plt.title('未来7天天气折线图')
plt.show()
在上面的示例中,我们使用requests库发送HTTP请求,使用BeautifulSoup库解析HTML文档,并使用pandas库将数据保存到DataFrame中。然后,我们使用matplotlib库绘制折线图。
示例2:爬取股票数据并绘制K线图
以下是一个示例,可以爬取某股票最近30天的股票数据,并绘制K线图:
import requests
from bs4 import BeautifulSoup
import pandas as pd
import mplfinance as mpf
url = 'https://finance.sina.com.cn/realstock/company/sh600519/nc.shtml'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
stock = []
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
items = soup.find_all('tr', class_='tr_2')
for item in items:
date = item.find_all('td')[0].text
open_price = item.find_all('td')[1].text
high_price = item.find_all('td')[2].text
low_price = item.find_all('td')[3].text
close_price = item.find_all('td')[4].text
stock.append({'date': date, 'open_price': open_price, 'high_price': high_price, 'low_price': low_price, 'close_price': close_price})
df = pd.DataFrame(stock)
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
df = df.astype(float)
mpf.plot(df, type='candle', mav=(5, 10, 20), volume=True, show_nontrading=True)
在上面的示例中,我们使用requests库发送HTTP请求,使用BeautifulSoup库解析HTML文档,并使用pandas库将数据保存到DataFrame中。然后,我们使用mplfinance库绘制K线图。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python爬取数据并实现可视化代码解析 - Python技术站