用python实现 并且利用HadoopHbase ES elasticsearch clickhouse存储的爬取数据针对数据进行预处理操作并设计不少于10条不同的统计信息 可以对视图信息进行可视化 可以对视图信息进行可视化
对于这个任务,可以按照以下步骤进行:
- 利用Python编写爬虫程序,爬取需要的数据,并存储到Hadoop/Hbase/ES/clickhouse等数据库中。
- 对存储的数据进行预处理操作,包括数据清洗、数据转换、数据合并等。
- 设计不少于10条不同的统计信息,如数据的平均值、标准差、最大值、最小值、频率分布等。
- 利用Python的数据分析库,如pandas、numpy等,实现统计信息的计算和可视化。
- 将统计信息进行可视化,如绘制折线图、柱状图、散点图等。
代码示例:
1.爬虫程序:
import requests from bs4 import BeautifulSoup import pandas as pd import pymysql
爬取数据
url = 'https://www.xxx.com' res = requests.get(url) soup = BeautifulSoup(res.text, 'html.parser') data = [] for item in soup.find_all('div', {'class': 'item'}): title = item.find('a', {'class': 'title'}).text.strip() author = item.find('span', {'class': 'author'}).text.strip() date = item.find('span', {'class': 'date'}).text.strip() data.append([title, author, date])
存储到数据库
conn = pymysql.connect(host='localhost', user='root', password='123456', database='test') cursor = conn.cursor() for item in data: sql = "INSERT INTO data (title, author, date) VALUES (%s, %s, %s)" cursor.execute(sql, item) conn.commit() cursor.close() conn.close()
2.数据预处理:
import pandas as pd import pymysql
从数据库中读取数据
conn = pymysql.connect(host='localhost', user='root', password='123456', database='test') data = pd.read_sql('SELECT * FROM data', conn)
数据清洗
data.dropna(inplace=True)
数据转换
data['date'] = pd.to_datetime(data['date'])
数据合并
data = data.groupby(['author', pd.Grouper(key='date', freq='M')])['title'].count().reset_index() data.columns = ['author', 'date', 'count']
存储到数据库
conn = pymysql.connect(host='localhost', user='root', password='123456', database='test') cursor = conn.cursor() for index, row in data.iterrows(): sql = "INSERT INTO processed_data (author, date, count) VALUES (%s, %s, %s)" cursor.execute(sql, (row['author'], row['date'].strftime('%Y-%m-%d'), row['count'])) conn.commit() cursor.close() conn.close()
3.统计信息计算:
import pandas as pd import pymysql
从数据库中读取数据
conn = pymysql.connect(host='localhost', user='root', password='123456', database='test') data = pd.read_sql('SELECT * FROM processed_data', conn)
统计信息计算
mean = data['count'].mean() std = data['count'].std() max = data['count'].max() min = data['count'].min() freq = data['count'].value_counts()
print('平均值:', mean) print('标准差:', std) print('最大值:', max) print('最小值:', min) print('频率分布:\n', freq)
4.统计信息可视化:
import pandas as pd import pymysql import matplotlib.pyplot as plt
从数据库中读取数据
conn = pymysql.connect(host='localhost', user='root', password='123456', database='test') data = pd.read_sql('SELECT * FROM processed_data', conn)
统计信息可视化
data.groupby('author')['count'].sum().sort_values(ascending=False)[:10].plot(kind='bar') plt.title('Top 10 Authors') plt.xlabel('Author') plt.ylabel('Count') plt.show()
data.groupby(pd.Grouper(key='date', freq='M'))['count'].sum().plot(kind='line') plt.title('Monthly Count') plt.xlabel('Date') plt.ylabel('Count') plt.show()
5.视图信息可视化:
import pandas as pd import pymysql import matplotlib.pyplot as plt import seaborn as sns
从数据库中读取数据
conn = pymysql.connect(host='localhost', user='root', password='123456', database='test') data = pd.read_sql('SELECT * FROM processed_data', conn)
视图信息可视化
sns.boxplot(x='author', y='count', data=data) plt.title('Boxplot of Author Count') plt.xlabel('Author') plt.ylabel('Count') plt.show()
sns.scatterplot(x='date', y='count', hue='author', data=data) plt.title('Scatterplot of Author Count') plt.xlabel('Date') plt.ylabel('Count') plt.show(
原文地址: https://www.cveoy.top/t/topic/eFUa 著作权归作者所有。请勿转载和采集!