数据可视化
绘制常用图形
常用图形有:
- plt.scatter() 散点图
- plt.plot() 折线图
- plt.bar() 直方图
- plt.pie() 饼图
- plt.boxplot() 箱型图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False
data = pd.read_excel("D:\data\student-score\student-score.xlsx")
data.head()
| 序号 | 姓名 | 学校 | 语文 | 数学 | 英语 | 品德 | 科学 | 总分 |
---|
0 | 1 | 张三湖 | 第1小学 | 95.0 | 99.0 | 80.0 | 10.0 | 10.0 | 294.0 |
---|
1 | 2 | 李小红 | 第1小学 | 98.0 | 97.0 | 79.0 | 10.0 | 9.5 | 293.5 |
---|
2 | 3 | 张南名 | 第1小学 | 94.0 | 97.0 | 80.0 | 10.0 | 10.0 | 291.0 |
---|
3 | 4 | 梁南名 | 第1小学 | 94.5 | 99.0 | 77.0 | 10.0 | 10.0 | 290.5 |
---|
4 | 5 | 常右河 | 第1小学 | 93.0 | 97.0 | 80.0 | 10.0 | 10.0 | 290.0 |
---|
data = data.drop(columns = ["序号","品德","科学"],axis = 1)
data.loc[:,"总分"] = data.loc[:,"语文"] + data.loc[:,"数学"] + data.loc[:,"英语"]
散点图
gp = data.groupby(by = "学校",as_index=False)
data1=gp.mean()
data1.head()
| 学校 | 语文 | 数学 | 英语 | 总分 |
---|
0 | 第10小学 | 67.827869 | 67.901639 | 42.975410 | 178.704918 |
---|
1 | 第11小学 | 71.333333 | 65.416667 | 52.125000 | 188.875000 |
---|
2 | 第12小学 | 57.928571 | 52.428571 | 49.952381 | 160.309524 |
---|
3 | 第13小学 | 65.107143 | 68.285714 | 50.071429 | 183.464286 |
---|
4 | 第14小学 | 58.894737 | 65.526316 | 51.184211 | 175.605263 |
---|
plt.figure(figsize=(6,4))
plt.scatter(data1["总分"],data1["语文"],marker='v')
plt.scatter(data1["总分"],data1["数学"],marker='o')
plt.scatter(data1["总分"],data1["英语"],marker='*')
plt.title("各学校成绩散点图",fontsize = 14)
plt.xlabel("总成绩")
plt.ylabel("各学科成绩")
plt.legend(["语文","数学","英语"]);

plt.figure(figsize=(6,4))
plt.scatter(data1["总分"],data1["语文"],marker='v')
plt.title("各学校语文与总分成绩散点图",fontsize = 14)
plt.xlabel("总成绩")
plt.ylabel("各学科成绩")
plt.legend(["语文"])
<matplotlib.legend.Legend at 0x207b5bd2f60>

data1.plot.scatter(x = "总分", y = "语文")
plt.title("语文与总分成绩散点图")
data1.plot.scatter(x = "总分", y = "数学")
plt.title("数学与总分成绩散点图")
data1.plot.scatter(x = "总分", y = "英语")
plt.title("英语与总分成绩散点图")
Text(0.5, 1.0, '英语与总分成绩散点图')

折线图
plt.figure(figsize=(10,4))
plt.plot(range(21),data1.iloc[:,1],'-*')
plt.plot(range(21),data1.iloc[:,2],'-o')
plt.plot(range(21),data1.iloc[:,3],'-v')
plt.title('各学科成绩变化走势图')
plt.xlabel('各学校')
plt.ylabel('学科成绩')
plt.xticks(range(21),data1["学校"],rotation=30)
plt.legend(['语文','数学','英语']);

直方图
yw = data1.loc[:,"学校":"语文"]
yw = yw.T
yw
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ... | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
---|
学校 | 第1小学 | 第2小学 | 第3小学 | 第4小学 | 第5小学 | 第6小学 | 第7小学 | 第8小学 | 第9小学 | 第10小学 | ... | 第12小学 | 第13小学 | 第14小学 | 第15小学 | 第16小学 | 第17小学 | 第18小学 | 第19小学 | 第20小学 | 第21小学 |
---|
语文 | 90.5 | 85.2143 | 58.7024 | 60.6364 | 69.0776 | 64.1667 | 62.0455 | 76.6695 | 65.881 | 67.8279 | ... | 57.9286 | 65.1071 | 58.8947 | 59.8929 | 63.25 | 68.5 | 64.6818 | 66.2778 | 54.3421 | 51.38 |
---|
2 rows × 21 columns
yw.columns = yw.iloc[0]
yw1 = yw.drop("学校",axis=0)
yw1
学校 | 第1小学 | 第2小学 | 第3小学 | 第4小学 | 第5小学 | 第6小学 | 第7小学 | 第8小学 | 第9小学 | 第10小学 | ... | 第12小学 | 第13小学 | 第14小学 | 第15小学 | 第16小学 | 第17小学 | 第18小学 | 第19小学 | 第20小学 | 第21小学 |
---|
语文 | 90.5 | 85.2143 | 58.7024 | 60.6364 | 69.0776 | 64.1667 | 62.0455 | 76.6695 | 65.881 | 67.8279 | ... | 57.9286 | 65.1071 | 58.8947 | 59.8929 | 63.25 | 68.5 | 64.6818 | 66.2778 | 54.3421 | 51.38 |
---|
1 rows × 21 columns
plt.figure(figsize=(12,4))
plt.bar(range(21),yw.loc["语文",:],width=0.5)
plt.title("语文成绩直方图",fontsize = 14)
plt.ylabel("语文成绩",fontsize = 14)
plt.xticks(range(21),yw.iloc[0],rotation=30,fontsize = 12);

data2 = data1.drop("总分",axis = 1)
data2.head()
| 学校 | 语文 | 数学 | 英语 |
---|
序号 | | | | |
---|
1 | 第1小学 | 90.500000 | 90.910714 | 74.366071 |
---|
2 | 第2小学 | 85.214286 | 87.303571 | 73.946429 |
---|
3 | 第3小学 | 58.702381 | 59.309524 | 52.976190 |
---|
4 | 第4小学 | 60.636364 | 58.000000 | 41.568182 |
---|
5 | 第5小学 | 69.077586 | 72.344828 | 43.353448 |
---|
data2.plot.bar(x = '学校',y = ['语文','数学','英语'],figsize=(16,6),width=0.7,rot = 30,title = "各学科成绩直方图");

饼图
data2.head()
| 学校 | 语文 | 数学 | 英语 |
---|
序号 | | | | |
---|
1 | 第1小学 | 90.500000 | 90.910714 | 74.366071 |
---|
2 | 第2小学 | 85.214286 | 87.303571 | 73.946429 |
---|
3 | 第3小学 | 58.702381 | 59.309524 | 52.976190 |
---|
4 | 第4小学 | 60.636364 | 58.000000 | 41.568182 |
---|
5 | 第5小学 | 69.077586 | 72.344828 | 43.353448 |
---|
plt.figure(figsize=(4,4),dpi=80)
plt.pie(data2.iloc[0,1:]
,labels=['语文','数学','英语']
,autopct='%1.2f')
plt.title('第1小学各学科成绩占比',fontsize=12);

pic2 = plt.figure(figsize=(8,8),dpi=80)
fig1 = pic2.add_subplot(2,2,1)
plt.pie(data2.iloc[0,1:]
,labels=['语文','数学','英语']
,autopct='%1.2f')
plt.title('第1小学各学科成绩占比',fontsize=12)
fig2 = pic2.add_subplot(2,2,2)
plt.pie(data2.iloc[1,1:]
,labels=['语文','数学','英语']
,autopct='%1.2f')
plt.title('第2小学各学科成绩占比',fontsize=12)
fig3 = pic2.add_subplot(2,2,3)
plt.pie(data2.iloc[2,1:]
,labels=['语文','数学','英语']
,autopct='%1.2f')
plt.title('第3小学各学科成绩占比',fontsize=12)
fig4 = pic2.add_subplot(2,2,4)
plt.pie(data2.iloc[3,1:]
,labels=['语文','数学','英语']
,autopct='%1.2f')
plt.title('第4小学各学科成绩占比',fontsize=12);

箱型图
data.head()
| 姓名 | 学校 | 语文 | 数学 | 英语 | 总分 |
---|
0 | 张三湖 | 第1小学 | 95.0 | 99.0 | 80.0 | 274.0 |
---|
1 | 李小红 | 第1小学 | 98.0 | 97.0 | 79.0 | 274.0 |
---|
2 | 张南名 | 第1小学 | 94.0 | 97.0 | 80.0 | 271.0 |
---|
3 | 梁南名 | 第1小学 | 94.5 | 99.0 | 77.0 | 270.5 |
---|
4 | 常右河 | 第1小学 | 93.0 | 97.0 | 80.0 | 270.0 |
---|
data_1 = data.loc[data['学校'] =="第1小学"]
score = (list(data_1.iloc[:,2]),list(data_1.iloc[:,3]),list(data_1.iloc[:,4]))
plt.figure(figsize=(8,6))
plt.boxplot(score
,labels=['语文','数学','英语']
,notch=True
,sym='*'
,whis=1.5);

泰坦尼克号数据集
text = pd.read_csv(r'result.csv')
text.head()

男女中生存人数分布情况
sex = text.groupby('Sex')['Survived'].sum()
sex.plot.bar(color='chocolate')
plt.title('survived_count')
plt.show()

男女中生存人与死亡人数的比例
text.groupby(['Sex','Survived'])['Survived'].count().unstack().plot(kind='bar',stacked='True')
plt.title('survived_count')
plt.ylabel('count')

不同票价的人生存和死亡人数分布情况
fare_sur = text.groupby(['Fare'])['Survived'].value_counts().sort_values(ascending=False)
fig = plt.figure(figsize=(20, 18))
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()

不同仓位等级的人生存和死亡人员的分布情况
pclass_sur = text.groupby(['Pclass'])['Survived'].value_counts()
import seaborn as sns
sns.countplot(x="Pclass", hue="Survived", data=text)

不同年龄的人生存与死亡人数分布情况
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()

不同仓位等级的人年龄分布情况
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")
