'''
如上数据有问题如下:
• 索引无序
• 单价中包含各种各样单位
所以需求如下:
• 读取数据 重置索引
• 将单价列取出 整数 或 浮点数 并转为可计算类型
• 将评分列进行降序
• 直观体现评分数据主要分布在哪个区间
• 直观体现单价与评分的分布
• 取出评分前100条数据 直观体现不同出版社的出书次数
'''
#导入模块
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import re
#导入数据 并预览数据
db_df = pd.read_excel('file_folder/豆瓣读书.xlsx')
db_df.info()
db_df.head(30)
#索引无序
db_df.reset_index(drop=True,inplace=True)
db_df.head(30)
# 索引无序 单价中包含各种各样单位 有带单位的,有不带单位的,有台币的,还有其他货币的
# 取出里面的浮点数字
# 自定义函数
def get_price(x):
regex = re.compile(r'[0-9]*\.?[0-9]+').findall(x)
return float(regex[0])
db_df['单价'] = db_df['单价'].apply(get_price)
这里偷懒没有用round再处理成两位小数
# 将评分列进行降序
db_df.sort_values('评分',ascending=False)
# 直观体现评分数据主要分布在哪个区间
# 单一变量主要就是通过直方图来绘制。在seaborn中直方图的绘制采用的是distplot
sns.distplot(db_df['评分'],rug = True)
plt.show()
唉,mac没设置字体,中文没显示。。。
# 直观体现单价与评分的分布
# 尝试了几种绘图
# seaborn.relplot() 可以用来表示多个变量之间的关联关系。默认情况下是绘制散点图,也可以绘制线性图
db_df.info()
#sns.jointplot(data=db_df,x="评分",y="单价")
#sns.relplot(data=db_df,x="评分", y="单价")
sns.regplot(data=db_df,x="评分", y="单价")
这个1200的是新台币,没处理,应该处理的,只是觉得方法有点笨,看老师有没有高见
#取出评分前100条数据 直观体现不同出版社的出书次数
db_100 = db_df.sort_values('评分',ascending=False)
db_100 = db_100.iloc[:100,:]
#看一下是不是100条数据。。。
db_100.info()
db_100.head()
#seabron 如何把x轴的xtick rotation90°还不太会做!
sns.catplot(x="出版社",data=db_100,kind="count")