数据分析及可视化(当当网畅销书)

对下面数据进行数据分析可视化。

导入包:

# coding:utf-8
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from wordcloud import WordCloud
import jieba
from collections import Counter
matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文
# 为了坐标轴负号正常显示。matplotlib默认不支持中文,设置中文字体后,负号会显示异常。需要手动将坐标轴负号设为False才能正常显示负号。
matplotlib.rcParams['axes.unicode_minus'] = False
data=pd.read_excel("当当网畅销书Top500 .xlsx")
print(data.head)

1.

图一:饼图:前一百本书中 书本量前五作者占比
writer=data["作者"][:100]
writers=writer.value_counts().sort_values(ascending=False)[:7]
print(writers.index.tolist())
print(writers.values)

a=[]

for i in range(7):
    s=writers.index.tolist()[i]+":"+str(writers.values[i])
    a.append(s)

print(a)
plt.pie(writers.values,labels=a, autopct='%1.1f%%')

plt.show()

2.

图二:简介词云图
intro=data["简述"].tolist()
intros=[str(item) for item in intro]
intro="".join(intros)
print(intro)

# 分词

stop_words = [",",'的', '是', '在', '等',"。","、", '!', '《', '》', ' ', '“', '”',"你","和",";","+",","]

# 分词并去除停用词
filtered_words = [word for word in jieba.cut(intro) if word not in stop_words]

# 统计词频
word_counts = Counter(filtered_words)

# 绘制词云图
wordcloud = WordCloud(background_color='white', width=800, height=400, font_path='C:\Windows\Fonts\SimHei.ttf').generate_from_frequencies(word_counts)

plt.imshow(wordcloud)
plt.axis('off')
plt.show()

3.

图三:书名词云图
name=data["书名"].tolist()
names=[str(item) for item in name]
names="".join(names)
stop_words = ['(', ')', ',',",",'的', '是', '在', '等',"。","、", '!', '《', '》', ' ', '“', '”',"你","和",";","+"]
filtered_words = [word for word in jieba.cut(names) if word not in stop_words]
word_counts = Counter(filtered_words)
print(word_counts)
wordcloud = WordCloud(background_color='white', width=800, height=400, font_path='C:\Windows\Fonts\SimHei.ttf').generate_from_frequencies(word_counts)

plt.imshow(wordcloud)
plt.axis('off')
plt.show()

4.

图四:柱状图:按作者分类看平均定价
price=data.loc[:100,["作者","定价"]]

prices=price.groupby("作者")["定价"].mean().sort_values(ascending=False)[:10]
print(prices.index.tolist())
print(prices.values.tolist())

plt.bar(prices.index.tolist(),prices.values.tolist())
for i, v in enumerate(prices.values.tolist()):
    plt.text(i, v, str(v), ha='center', va='bottom')
plt.xticks(rotation=45)
plt.show()
5.
图五:饼图:开本占比
kaiben=data.groupby("开本").size()
plt.pie(kaiben, labels=kaiben.index, autopct='%1.1f%%')  # 绘制饼图,显示百分比
plt.title('Column Data Distribution')  # 添加饼图标题
plt.legend()  # 显示图例
plt.show()

6.
图六:饼图: 对定价进行分类 画出占比饼图
prices=data["定价"]
ranges=[(0, 50), (50, 70), (70, 100), (100, 200), (200, 500)]
category_counts = {}
for price in prices:
    for min_price, max_price in ranges:
        if min_price <= price < max_price:
            if (min_price, max_price) in category_counts:
                category_counts[(min_price, max_price)] += 1
            else:
                category_counts[(min_price, max_price)] = 1
            break
labels = [f"{min_price}-{max_price} ({category_counts[(min_price, max_price)]})" for min_price, max_price in category_counts.keys()]
sizes = list(category_counts.values())
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.title("Category Distribution")
plt.show()


                
### 关于当当网图书数据分析的Jupyter Notebook教程 为了完成对当当网图书的数据分析,可以采用Python中的常用数据科学库如`pandas`、`numpy`和可视化工具如`matplotlib`或`pyecharts`来构建完整的流程。以下是基于这些工具的一个典型数据分析示例: #### 1. 安装必要的依赖项 在开始之前,确保已安装所需的数据科学工具箱[^1]。可以通过以下命令安装所需的库: ```bash pip install pandas numpy matplotlib pyecharts jupyterlab requests beautifulsoup4 ``` #### 2. 数据采集阶段 利用网络爬虫技术抓取当当网上的书籍信息(例如书名、作者、价格、评分等)。这里以简单的网页解析为例: ```python import requests from bs4 import BeautifulSoup import pandas as pd def fetch_books_data(url, page_limit=5): books = [] base_url = url.split('?')[0] for i in range(1, page_limit + 1): current_url = f"{base_url}?page_index={i}" response = requests.get(current_url) if response.status_code != 200: continue soup = BeautifulSoup(response.text, 'html.parser') items = soup.find_all('li', class_='list_item') for item in items: try: title = item.find('a', attrs={'name': 'itemlist-title'}).get_text(strip=True) author = item.find('a', attrs={'name': 'P_cbsAuthor'}).get_text(strip=True) price = float(item.find('span', class_='search_now_price').text.strip()[1:]) book_info = { 'title': title, 'author': author, 'price': price } books.append(book_info) except Exception as e: pass return pd.DataFrame(books) url = "http://category.dangdang.com/cp01.00.00.00.00.00.html" df = fetch_books_data(url) print(df.head()) ``` 此代码片段展示了如何从当当网上提取部分书籍的信息并存储到DataFrame中。 #### 3. 数据清洗与预处理 对于获取的数据可能存在的缺失值或其他异常情况,可使用`pandas`进行清理: ```python # 去除重复条目 df.drop_duplicates(inplace=True) # 处理缺失值 df.fillna({'author': '未知'}, inplace=True) # 统计描述性统计量 summary_stats = df.describe() print(summary_stats) ``` #### 4. 可视化分析 借助`pyecharts`绘制柱状图展示不同类别书籍的价格分布: ```python from pyecharts.charts import Bar from pyecharts import options as opts grouped_df = df.groupby('author')['price'].mean().sort_values(ascending=False).head(10) bar_chart = ( Bar() .add_xaxis(grouped_df.index.tolist()) .add_yaxis("平均价格", grouped_df.values.round(2).tolist()) .set_global_opts(title_opts=opts.TitleOpts(title="Top 10 Authors by Average Book Price")) ) bar_chart.render_notebook() # 如果是在Jupyter环境中运行,则可以直接显示图表 ``` 以上代码实现了按作者分组计算每本图书均价,并生成前十大高均价作者的柱形图。 #### 5. 高级功能拓展 如果希望进一步深入研究,还可以引入机器学习方法评估用户兴趣偏好,从而设计个性化推荐系统[^2];或者探索深度学习框架训练复杂模型用于情感分类等问题[^4]。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值