1.导入数据等
# Matplotlib 是Python中类似 MATLAB 的绘图工具
# seaborn就是在matplotlib基础上面的封装,方便直接传参数调用
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
text=pd.read_csv('result.csv')
2.数据可视化
2.1创建一个数据项,并对其进行基本可视化
# 画一条线
data=np.arange(10)
plt.plot(data)
plt.show()
思考回答: 这一部分需要了解可视化图案的的逻辑,知道什么样的图案可以表达什么样的信号 最基本的可视化图案有哪些?分别适用于那些场景?(比如折线图适合可视化某个属性值随时间变化的走势
回答:
最基本可视化图案
柱形图 (bar) | 根据柱形的高低来判断数据的多少,以直观的视觉角度描绘数据的基本变量。通常情况下,为了图像的视觉接受程度,通常一组数据不超过十个。 | 折线图 plot | 是使用线条的形式反映数据随时间的变化趋势,数据越多时,反映的趋势过程越准确,这也是数据的特点,折线图通常处理的数据以时间变化为主要依据点。 | 饼图 (pie) | 图像的展现形式与圆饼相似,将数据按照百分比的形式进行展示对比。同样,由于从视觉角度,人的肉眼对于百分比的精确度掌握不足,在选择数据时,以不超过六个为佳。 | ? 散点图(scatter) | 散点图作为三维数据的应用图,对于数据的划分也是依据多个不同的指标进行,散点图中单个数据的作用不明显,数据量越大,散点图的作用越明显,将数据集中的区域作为数据的分类标准。 |
#柱形图(bar)
x=np.arange(5)
y = np.random.random(5)
vert_bars = plt.bar(x, y)
plt.show()
#折线图(plot)
data=np.arange(10)
plt.plot(data)
plt.show()
#饼图(pie)
#自动根据数据的百分比画饼.。labels是各个块的标签,如子图一。autopct=%1.1f%%表示格式化 #百分比精确输出,explode,突出某些块,不同的值突出的效果不一样。pctdistance=1.12百分比距离#圆心的距离,默认是0.6.
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [15, 30, 45, 10]
explode = (0, 0.1, 0, 0) # only "explode" the 2nd slice (i.e. 'Hogs')
plt.pie(sizes,autopct='%1.2f%%')
plt.show()
#散点图(scatter)
x = np.arange(10)
y = np.random.randn(10)
plt.scatter(x, y, color='red', marker='+')
plt.show()
2.2 可视化展示泰坦尼克号数据集中男女中生存人数分布情况(用柱状图试试)
sex=text.groupby('Sex')['Survived'].sum()
sex.plot.bar()
plt.show()
【思考】计算出泰坦尼克号数据集中男女中死亡人数,并可视化展示?
# 如何和男女生存人数可视化柱状图结合到一起?看到你的数据可视化
# 说说你的第一感受(比如:你一眼看出男生存活人数更多,那么性别可能会影响存活率)
#法1:将女生,男生作为横坐标,存货和死亡人数用不同颜色表示
text.groupby(['Sex','Survived'])['Survived'].count().unstack().plot(kind='bar',stacked='True')
plt.title('survived_count')
plt.ylabel('count')
plt.show()
#法2:将存活,死亡男生,女生分开
sex=text.groupby('Sex')['Survived'].sum()
dead=text.groupby('Sex')['Survived'].count()-sex
df=pd.Series(np.concatenate([sex,dead]))
df.plot.bar()
plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.xticks([0,1,2,3],['存活男生','存活女生','死亡男生','死亡女生']),
plt.show()
注:plot(kind='bar',stacked=True)堆积条形图。
df=pd.Series(np.concatenate([sex,dead])).将sex,dead链接一个矩阵重新存储(默认下方)。
plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.xticks([0,1,2,3],['存活男生','存活女生','死亡男生','死亡女生'])
当你使用汉字时需要将字体调整一下,不然会一直出现空格
2.3 可视化展示泰坦尼克号数据集中不同票价的人生存和死亡人数分布情况。(用折线图试试)(横轴是不同票价,纵轴是存活人数)
# 排序后绘折线图
fare_sur=text.groupby('Fare')['Survived'].value_counts().sort_values(ascending=False)
fig = plt.figure(figsize=(20, 18)) #figure \的长宽
fare_sur.plot(grid=True) #添加网格线
plt.legend() #加上图例
plt.show()
# 排序前
# fare_sur1 = text.groupby(['Fare'])['Survived'].value_counts()
# fig = plt.figure(figsize=(20, 18))
# fare_sur1.plot(grid=True)
# plt.legend()
# plt.show()
2.4 可视化展示泰坦尼克号数据集中不同仓位等级的人生存和死亡人员的分布情况。(用柱状图试试)
#法一
pclass_sur=text.groupby(["Pclass","Survived"])['Survived'].count().unstack().plot(kind='bar',stacked='True')
plt.show()
#法二
pclass_sur = text.groupby(['Pclass'])['Survived'].value_counts()
sns.countplot(x="Pclass", hue="Survived", data=text)
plt.show()
2.5 可视化展示泰坦尼克号数据集中不同年龄的人生存与死亡人数分布情况。(不限表达方式)
# 法一:先聚合,再排序
facet=text.groupby(['Age'])['Survived'].value_counts().sort_index(ascending=True)
facet.plot()
plt.show()
#法二:seaborn的使用
facet = sns.FacetGrid(text, hue="Survived",aspect=3)
facet.map(sns.kdeplot,'Age',shade= True)
facet.set(xlim=(0, text['Age'].max()))
facet.add_legend()
plt.show()
2.6可视化展示泰坦尼克号数据集中不同仓位等级的人年龄分布情况。(用折线图试试)
#法一
# facet = sns.FacetGrid(text, hue="Pclass",aspect=3)
# facet.map(sns.kdeplot,'Age',shade= True)
# facet.set(xlim=(0, text['Age'].max()))
# facet.add_legend()
# plt.show()
#法二
text.Age[text.Pclass == 1].plot(kind='kde')
text.Age[text.Pclass == 2].plot(kind='kde')
text.Age[text.Pclass == 3].plot(kind='kde')
plt.xlabel("age")
plt.legend((1,2,3),loc="best")
Pyecharts
pyecharts优点:
pyecharts步骤:
1.设置通用项
#主题选择作为图表初始化参数进行设置
bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION))
2.?选择图表
3. 设置图表参数
3类图表参数设置类型,分别是图表设置项、通用设置项、系列设置项。
-
图表设置项是具体到某个特定图表对象的设置参数,各图表可选设置参数不同 -
通用设置项最为常用,例如图表初始化设置就属于通用设置中的一项,另外包括标题、坐标轴、可视化缩放条等都属于通用设置项 -
系列设置项则可以用于设置图表的某些具体参数,例如label可设置数据标签是否显示以及位置等 -
set_global_opts()
set_series_opts()
4. 输出结果
|