首页 > 其他分享 >关于Gmail电子邮件使用情况数据分析

关于Gmail电子邮件使用情况数据分析

时间:2022-12-23 11:35:34浏览次数:46  
标签:数据分析 plt bar center width 电子邮件 data 邮件 Gmail

关于Gmail电子邮件使用数据分析

一、选题背景

       随着时代的快速发展,互联网越来越发达,越来越多的人们开始抛弃传统的书信邮件,改用了电子邮件。电子邮件有很多的优点,例如发送邮件所需时间短,而且可以发送一些视频,图片还有链接,不怕丢失,操作简单不麻烦。电子邮件可以加深人与人之间的沟通,推进社会的发展。在公司里,上下级之间也通过电子邮件来完成一些工作事务,让公司运转得更加方便。我们可以从Gmail电子邮件数据集来分析电子邮件使用情况,对电子邮件更加了解。

二、大数据分析设计方案

1.本数据集的数据内容与数据特征分析

该数据集记录了近七万封电子邮件的详细信息,包括发出人、邮件种类、顾客定位、主题热度、邮件活动种类等信息,并记录了每一份邮件的状态、字数、是否包含链接或者图片等等具体情况。

字段名称 字段类型 字段说明
Email_ID 字符型 邮件编码
Email_Type 数值型 邮件类型
Subject_Hotness_Score
数值型  主题热度 
Email_Source_Type   数值型   邮件发送方种类 
Customer_Location   字符型   潜在用户定位 
 Email_Campaign_Type  数值型   邮件活动种类 
Total_Past_Communications
 数值型   邮件来往次数 
Time_Email_sent_Category
 
 数值型   发送邮件种类 
 Word_Count   数值型   字数 
Total_Links  数值型   邮件含链接数 
Total_Images  数值型   邮件含图片数 
 Email_Status   数值型   邮件状态 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.数据分析的课程设计方案概述

1.数据清洗:导入公开数据,查找缺省值,补充缺失值,对数值特征进处理

2.数据可视化:直方图、饼状图、分析电子邮件各个信息的具体情况,通过联合分布图、散点图、pairplot查看各个信息之间是否有联系,箱型图来查看是否有异常值的情况

三、数据分析的步骤

1.数据源

采用的数据源来自于爱数科平台

http://www.idatascience.cn/dataset-detail?table_id=100074

2.数据清洗

导入所需要的库

 1 import warnings
 2 warnings.filterwarnings("ignore")
 3 import numpy as np 
 4 import pandas as pd
 5 
 6 import matplotlib.pyplot as plt
 7 import seaborn as sns 
 8 from pyecharts.charts import Bar  
 9 from pyecharts import options as opts
10 %matplotlib inline

导入数据集

1 data = pd.read_csv('F:/2023Python/email.csv')#导入数据
2 data.info()

 

 

 查看前五条数据

 

 

 对数值型变量进行统计

 

 

 缺省值处理

1 #查找是否有缺省值
2 data.isnull().sum()
3 data = data.fillna(data.mean())#缺失数据填充
4 data['Customer_Location'] = data['Customer_Location'].fillna('none')
5 data.tail(10)#默认显示数据最后10行

 

 

 

 

 

 数值特征化处理

1 num_features = [x for x in data.columns if data[x].dtype != object]
2 car_features = [x for x in data.columns if data[x].dtype == object]
3 num_features
4 car_features

 

 

 

3.数据可视化

1.不同邮件类型的发送量情况

 1 pd.Series(data['Email_Type']).value_counts()
 2 #value_counts 直接用来计算Series里面相同数据出现的频率
 3 #通过直方图来研究不同邮件类型的发送量情况
 4 plt.rcParams['font.sans-serif'] = ['SimHei']
 5 plt.rcParams['axes.unicode_minus'] = False
 6 x1_lable = ('类型1')
 7 x2_lable = ('类型2')
 8 x1_number = [48866]
 9 x2_number = [19487]
10 bar_width = 0.2
11 plt.bar(x=x1_lable, height=x1_number, width=bar_width, color=('#0066CC'),label=('类型1'),align='center')
12 plt.text('类型1',50000,'48866',va='center',ha='center')
13 plt.bar(x=x2_lable, height=x2_number, width=bar_width, color=('#339966'),label=('类型2'),align='center')
14 plt.text('类型2',21000,'19487',va='center',ha='center')
15 plt.legend()
16 plt.yticks(fontsize=16, color='#000000')
17 plt.title('两种不同邮件类型发送量情况')
18 plt.show()
19 #定义饼的标签
20 labels=['类型1','类型2']
21 x=[48866,19487]
22 #饼状图分离
23 explode=(0.03,0.06)
24 plt.title("饼状图-两种不同邮件类型发送量情况")
25 plt.pie(x,labels=labels,autopct='%.1f%%',explode=explode)

 

 

 通过两种类型的图观察到,人们在选择邮件类型的时候,大多数是选择第一种类型的邮件来发送占到了71.5%,而第二种类型的邮件却只有28.5%。

 2.邮件所使用的主题的热度趋势

 1 #通过直方图观察邮件所使用的主题的热度趋势
 2 
 3 plt.figure(figsize=(15, 5))
 4 subject=pd.read_csv(open('F:\\2023Python\\email.csv'))
 5 subject.head()
 6 sns.distplot(subject.Subject_Hotness_Score,color='blue',label='主题热度')
 7 my_x_ticks = np.arange(0,5,0.5)
 8 plt.xticks(my_x_ticks)
 9 plt.xlabel("主题")
10 plt.ylabel("热度")
11 plt.legend()
12 plt.grid()
13 plt.show()

 

 

观察图后,可以看到在主题的选择上人们更喜欢位置靠前的主题,人们在主题的选择上一般都选择前面的主题,并没有去花太多的时间去选择主题,而是选择了系统默认的主题,后面的主题只有少部分人会去选择。

 3.邮件发送方男女分布情况

 1 pd.Series(data['Email_Source_Type']).value_counts()
 2 #value_counts 直接用来计算Series里面相同数据出现的频率
 3 plt.rcParams['font.sans-serif'] = ['SimHei']
 4 plt.rcParams['axes.unicode_minus'] = False
 5 x1_human = ('male')
 6 x2_human = ('female')
 7 x1_sum = [37149]
 8 x2_sum = [31204]
 9 bar_width = 0.2
10 plt.bar(x=x1_human, height=x1_sum, width=bar_width, color=('#99CCCC'),label=('male'),align='center')
11 plt.text('male',38000,'37149',va='center',ha='center')
12 plt.bar(x=x2_human, height=x2_sum, width=bar_width, color=('#FF6633'),label=('female'),align='center')
13 plt.text('female',32000,'31204',va='center',ha='center')
14 plt.legend()
15 plt.yticks(fontsize=16, color='#000000')
16 plt.title('邮件发送方男女分布情况')
17 plt.show()
18 #定义饼的标签
19 labels=['男性','女性']
20 x=[37149,31204]
21 #饼状图分离
22 explode=(0.03,0.05)
23 plt.title("饼状图-邮件发送方男女分布情况")
24 plt.pie(x,labels=labels,autopct='%.1f%%',explode=explode)

 

 

 通过两种类型图观察得到,在电子邮件的使用上男性与女性是差不多的,男性就比女性多了8.6%不会出现男性特别多,或者女性特别多这种情况。说明在生活中不管男性还是女性都在使用着电子邮件,享受着电子邮件的便利。

4.邮件编码的分析

1 pd.Series(data['Email_ID']).value_counts()
2 #value_counts 直接用来计算Series里面相同数据出现的频率

 

 

 

 

 经过计算得到邮件编码等于邮件总数,所以每一份邮件都有属于它的独一无二的邮件编码。通过邮件编码可以来精确查到所需邮件,这体现了邮件编码的唯一性。

5.各类潜在用户分布

 1 pd.Series(data['Customer_Location']).value_counts()
 2 #value_counts 直接用来计算Series里面相同数据出现的频率
 3 
 4 bar = Bar() 
 5 # 添加x轴坐标,括号中加入数据列表
 6 bar.add_xaxis(['A类','B类','C类','D类','E类','F类','G类','其他类'])
 7 # 添加y轴坐标,括号中加入数据列表
 8 bar.add_yaxis("图注:潜在用户定位", [1454,4341,5758,7406,10193,4433,23173,11595])  
 9 #标题配置项
10 bar.set_global_opts(title_opts=opts.TitleOpts(
11     title='各类潜在用户分布图'
12 ))
13 bar.render_notebook()
14 
15 #定义饼的标签
16 labels=['A类','B类','C类','D类','E类','F类','G类','其他类']
17 x=[1454,4341,5758,7406,10193,4433,23173,11595]
18 #饼状图分离
19 explode=(0.03,0.05,0.06,0.04,0.08,0.1,0.09,0.11)
20 plt.title("饼状图-潜在用户定位")
21 plt.pie(x,labels=labels,autopct='%.1f%%',explode=explode)

 

 

 

 

 

 通过两种类型的图可以观察到Gmail把潜在用户分成了八类:(A类、B类、C类、D类、E类、F类、G类、其他类),其中G类是这几类中占比最多的,占了33.9%,A类最少,只占了2.1%,而那些其他类的却占了17.0%。

 6.观察男女性在邮件类型和主题的选择上的情况

 1 data_plot = data[['Email_Type','Subject_Hotness_Score','Email_Source_Type']]
 2 data_plot
 3 #把数值型变量转换成字符型变量
 4 data_plot['Email_Source_Type'] = data_plot['Email_Source_Type'].map(str) 
 5 #为了方便观看,把列名换成中文的
 6 data_plot.rename(columns={"Email_Type":"邮件类型",
 7                     "Subject_Hotness_Score":"主题热度",
 8                     "Email_Source_Type":"邮件发送方性别"},inplace=True)
 9 kind_dict = {
10     "1":"male",
11     "2":"female"
12 }
13 data_plot["邮件发送方性别"]=data_plot["邮件发送方性别"].map(kind_dict)
14 data_plot.head()#修改后的数据集的内容如下
15 sns.pairplot(data_plot,hue="邮件发送方性别",markers=["s","D"])

 

 

 

 

 

 

 

 

 通过上图的观察,我们可以得到在邮件类型的选择上第一种类型的邮件男性选择的更多,而第二种类型的邮件是女性的选择的更多,在主题的选择上男女性大多数都是选择前面的主题,后面的主题选的人比较少。

7.各类活动邮件的使用情况

 1 pd.Series(data['Email_Campaign_Type']).value_counts()
 2 #value_counts 直接用来计算Series里面相同数据出现的频率
 3 
 4 plt.rcParams['font.sans-serif'] = ['SimHei']
 5 plt.rcParams['axes.unicode_minus'] = False
 6 x1_type = ('1')
 7 x2_type = ('2')
 8 x3_type = ('3')
 9 x1_ts = [736]
10 x2_ts = [48273]
11 x3_ts = [19344]
12 bar_width = 0.2
13 plt.bar(x=x1_type, height=x1_ts, width=bar_width, color=('#0066CC'),label=('1'),align='center')
14 plt.text('1',1200,'736',va='center',ha='center')
15 plt.bar(x=x2_type, height=x2_ts, width=bar_width, color=('#339966'),label=('2'),align='center')
16 plt.text('2',49500,'48273',va='center',ha='center')
17 plt.bar(x=x3_type, height=x3_ts, width=bar_width, color=('#ff0020'),label=('3'),align='center')
18 plt.text('3',21000,'19344',va='center',ha='center')
19 plt.legend()
20 plt.yticks(fontsize=16, color='#000000')
21 plt.title('各类活动邮件的使用情况')
22 plt.show()
23 
24 #定义饼的标签
25 labels=['1类','2类','3类']
26 x=[736,48273,19344]
27 #饼状图分离
28 explode=(0.03,0.05,0.06)
29 plt.title("饼状图-各类活动邮件的使用情况")
30 plt.pie(x,labels=labels,autopct='%.1f%%',explode=explode)

 

 

 

 

 

 观察上面两种不同类型的图可以看出来,人们在选择活动邮件上特别偏爱选择第二类的活动邮件,占了三种活动邮件的70.6%,而第一类的活动邮件却少有人选择使用。

8.邮件来往次数分布

 1 pd.Series(data['Total_Past_Communications']).value_counts()
 2 #value_counts 直接用来计算Series里面相同数据出现的频率
 3 
 4 data_etype=data[['Total_Past_Communications']]
 5 plt.figure(figsize=(6,6))
 6 f = data_etype.boxplot(sym = 'o',
 7                       vert = True,
 8                       whis = 1.5,
 9                       patch_artist = True,
10                       meanline = False,showmeans = True,
11                       showbox = True,
12                       showcaps = True,
13                       showfliers = True,
14                       notch =False,
15                       return_type = 'dict')
16 plt.title('邮件来往次数分布')
17 for box in f['boxes']:                                           #boxes,箱线
18     box.set(color = '#3333FF',linewidth=1)
19     box.set(facecolor = '#ff2000',alpha=0.5)
20 for whisker in f['whiskers']:                                    #whiskers, 从box到error bar之间的竖线
21     whisker.set(color = '#66FF00',linewidth=0.5,linestyle='-')
22 for cap in f['caps']:                                            # caps, error bar横线
23     cap.set(color='#FF6600',linewidth=2)
24 for median in f['medians']:                                      # medians, 中位值的横线
25     median.set(color='#000000',linewidth=2)
26 for flier in f['fliers']:                                        # fliers, 异常值
27     flier.set(marker='o',color='#FFFF00',alpha=0.5)

 

 

 

 

 

 通过箱型图,我们可以知道在人们之间邮件往来次数还是挺多的,最高的可以达到67份邮件,大多数的人们邮件往来次数是在28、29次,0次出现的原因是因为数据集中该对象含有缺省值,进行缺省值补充时选择了0来补充。

9.观察邮件往来次数中主题的选择

1 #生成测试关系数据
2 data_st=data[['Total_Past_Communications','Subject_Hotness_Score']]
3 data_st.head(10)
4 sns.jointplot(x="Total_Past_Communications",y="Subject_Hotness_Score",data=data_st,color='r')

 

 

 通过联合分布图,我们可以了解到在邮件往来次数比较少的时候人们还会去选择不同的主题来发送邮件,但随着邮件往来次数的增加,人们就不在过多时间去选择主题,对主题的热度下降了。这一种情况可能在工作中会出现的比较多。

10.不同发送邮件种类在主题的选择

1 pd.Series(data['Time_Email_sent_Category']).value_counts()
2 #value_counts 直接用来计算Series里面相同数据出现的频率
3 plt.figure(figsize=(20, 10))
4 sns.pointplot(x = 'Subject_Hotness_Score', y = 'Total_Past_Communications', hue = 'Time_Email_sent_Category', data=data,
5               palette = 'hls',
6               dodge = True,  #设置点是否分开
7               join = True,   #是否连线
8               markers = ['o','x','+'],linestyles = ['-','--','--'],#设置点样式、线型
9               )

 

 

 

 

 

 通过折线图,我们可以看到三种不同类型的发送邮件在主题的选择上都是一样的,大多数的邮件往来都是选择前面的主题,只有少部分的邮件会选择后面的主题。

11.邮件字数

 1 #汇总邮件字数数据
 2 word_message = data.groupby(['Word_Count'])
 3 word_counts = word_message['Word_Count'].agg(['count'])
 4 word_counts.reset_index(inplace=True)
 5 wr = word_counts['Word_Count']
 6 v1 = word_counts['count']
 7 bar = Bar() 
 8 # 添加x轴坐标,括号中加入数据列表
 9 bar.add_xaxis(list(wr))
10 # 添加y轴坐标,括号中加入数据列表
11 bar.add_yaxis("图注:邮件字数分布",list(v1))  
12 #标题配置项
13 bar.set_global_opts(title_opts=opts.TitleOpts(
14     title='邮件字数分布'
15 ),datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")])
16 bar.render_notebook()

 

 

 经过分析,得到人们在写电子邮件时,会分情况来写多少字数,有的人会比较详细的描述事情,就会字数比较多,有的人只是想跟朋友分享美食、风景照片就会写得字数少。

12.邮件含链接数与含图片数的关系

 1 #绘制散点图来观察邮件含链接数跟含图片数的关系
 2 x=data[['Total_Images']]
 3 y=data[['Total_Links']]
 4 # 确定画布
 5 plt.figure(figsize=(10, 6))
 6 
 7 plt.scatter(x, y)# x 代表x轴 y 代表y轴数据, 数据维度必须相同
 8 plt.xlabel('含图片数')
 9 plt.ylabel('含链接数')
10 plt.show()

 

 

 

 

 

 通过散点图,我们可以看到邮件含链接数与含图片数有很大的关系,人们在发送邮件的时候插入图片,也会插入链接,这样做到防止图片无法查看时也可以通过链接来查看图片。

13.邮件的状态

 1 pd.Series(data['Email_Status']).value_counts()
 2 #value_counts 直接用来计算Series里面相同数据出现的频率
 3 
 4 plt.rcParams['font.sans-serif'] = ['SimHei']
 5 plt.rcParams['axes.unicode_minus'] = False
 6 x1_es = ('0')
 7 x2_es = ('1')
 8 x3_es = ('2')
 9 x1_ec = [54941]
10 x2_ec = [11039]
11 x3_ec = [2373]
12 bar_width = 0.2
13 plt.bar(x=x1_es, height=x1_ec, width=bar_width, color=('#00FF00'),label=('0:成功接收'),align='center')
14 plt.text('0',56000,'54941',va='center',ha='center')
15 plt.bar(x=x2_es, height=x2_ec, width=bar_width, color=('#FF9900'),label=('1: 接收失败'),align='center')
16 plt.text('1',12000,'11039',va='center',ha='center')
17 plt.bar(x=x3_es, height=x3_ec, width=bar_width, color=('#33FFFF'),label=('2: 其他'),align='center')
18 plt.text('2',2600,'2373',va='center',ha='center')
19 plt.legend()
20 plt.yticks(fontsize=16, color='#000000')
21 plt.title('邮件状态')
22 plt.show()
23 
24 #定义饼的标签
25 labels=['0:成功接收','1: 接收失败','2: 其他']
26 x=[54941,11039,2373]
27 #饼状图分离
28 explode=(0.03,0.05,0.06)
29 plt.title("饼状图-邮件状态")
30 plt.pie(x,labels=labels,autopct='%.1f%%',explode=explode)

 

 

 

通过上面两种不同类型的图可以知道,电子邮件在使用时,也会出现一些错误,导致邮件的接收失败,所以人们在使用电子邮件时,还是要注意怎么才能正确使用电子邮件,让电子邮件可以成功发送出去。

 

四、程序源码

  1 import numpy as np 
  2 import pandas as pd
  3 import warnings
  4 warnings.filterwarnings("ignore")
  5 import matplotlib.pyplot as plt
  6 import seaborn as sns 
  7 %matplotlib inline
  8 data = pd.read_csv('F:/2023Python/email.csv')#导入数据
  9 data.info()
 10 data.shape
 11 data.head()#显示前五条数据
 12 data.describe()#对每个数值型变量进行统计信息
 13 #查找是否有缺省值
 14 data.isnull().sum()
 15 data = data.fillna(data.mean())#缺失数据填充
 16 data['Customer_Location'] = data['Customer_Location'].fillna('none')
 17 data.tail(10)#默认显示数据最后10行
 18 pd.Series(data['Email_Type']).value_counts()
 19 #value_counts 直接用来计算Series里面相同数据出现的频率
 20 num_features = [x for x in data.columns if data[x].dtype != object]
 21 car_features = [x for x in data.columns if data[x].dtype == object]
 22 num_features
 23 car_features
 24 #通过直方图来研究不同邮件类型的发送量情况
 25 plt.rcParams['font.sans-serif'] = ['SimHei']
 26 plt.rcParams['axes.unicode_minus'] = False
 27 x1_lable = ('类型1')
 28 x2_lable = ('类型2')
 29 x1_number = [48866]
 30 x2_number = [19487]
 31 bar_width = 0.2
 32 plt.bar(x=x1_lable, height=x1_number, width=bar_width, color=('#0066CC'),label=('类型1'),align='center')
 33 plt.text('类型1',50000,'48866',va='center',ha='center')
 34 plt.bar(x=x2_lable, height=x2_number, width=bar_width, color=('#339966'),label=('类型2'),align='center')
 35 plt.text('类型2',21000,'19487',va='center',ha='center')
 36 plt.legend()
 37 plt.yticks(fontsize=16, color='#000000')
 38 plt.title('两种不同邮件类型发送量情况')
 39 plt.show()
 40 #定义饼的标签
 41 labels=['类型1','类型2']
 42 x=[48866,19487]
 43 #饼状图分离
 44 explode=(0.03,0.06)
 45 plt.title("饼状图-两种不同邮件类型发送量情况")
 46 plt.pie(x,labels=labels,autopct='%.1f%%',explode=explode)
 47 
 48 #通过直方图观察邮件所使用的主题的热度趋势
 49 
 50 plt.figure(figsize=(15, 5))
 51 subject=pd.read_csv(open('F:\\2023Python\\email.csv'))
 52 subject.head()
 53 sns.distplot(subject.Subject_Hotness_Score,color='blue',label='主题热度')
 54 my_x_ticks = np.arange(0,5,0.5)
 55 plt.xticks(my_x_ticks)
 56 plt.xlabel("主题")
 57 plt.ylabel("热度")
 58 plt.legend()
 59 plt.grid()
 60 plt.show()
 61 pd.Series(data['Email_Source_Type']).value_counts()
 62 #value_counts 直接用来计算Series里面相同数据出现的频率
 63 plt.rcParams['font.sans-serif'] = ['SimHei']
 64 plt.rcParams['axes.unicode_minus'] = False
 65 x1_human = ('male')
 66 x2_human = ('female')
 67 x1_sum = [37149]
 68 x2_sum = [31204]
 69 bar_width = 0.2
 70 plt.bar(x=x1_human, height=x1_sum, width=bar_width, color=('#0066CC'),label=('male'),align='center')
 71 plt.text('male',38000,'37149',va='center',ha='center')
 72 plt.bar(x=x2_human, height=x2_sum, width=bar_width, color=('#339966'),label=('female'),align='center')
 73 plt.text('female',32000,'31204',va='center',ha='center')
 74 plt.legend()
 75 plt.yticks(fontsize=16, color='#000000')
 76 plt.title('邮件发送方男女分布情况')
 77 plt.show()
 78 #定义饼的标签
 79 labels=['男性','女性']
 80 x=[37149,31204]
 81 #饼状图分离
 82 explode=(0.03,0.05)
 83 plt.title("饼状图-邮件发送方男女分布情况")
 84 plt.pie(x,labels=labels,autopct='%.1f%%',explode=explode)
 85 pd.Series(data['Email_ID']).value_counts()
 86 #value_counts 直接用来计算Series里面相同数据出现的频率
 87 pd.Series(data['Customer_Location']).value_counts()
 88 #value_counts 直接用来计算Series里面相同数据出现的频率
 89 #定义饼的标签
 90 labels=['A类','B类','C类','D类','E类','F类','G类','其他类']
 91 x=[1454,4341,5758,7406,10193,4433,23173,11595]
 92 #饼状图分离
 93 explode=(0.03,0.05,0.06,0.04,0.08,0.1,0.09,0.11)
 94 plt.title("饼状图-潜在用户定位")
 95 plt.pie(x,labels=labels,autopct='%.1f%%',explode=explode)
 96 from pyecharts.charts import Bar  
 97 from pyecharts import options as opts
 98 
 99 bar = Bar() 
100 # 添加x轴坐标,括号中加入数据列表
101 bar.add_xaxis(['A类','B类','C类','D类','E类','F类','G类','其他类'])
102 # 添加y轴坐标,括号中加入数据列表
103 bar.add_yaxis("图注:潜在用户定位", [1454,4341,5758,7406,10193,4433,23173,11595])  
104 #标题配置项
105 bar.set_global_opts(title_opts=opts.TitleOpts(
106     title='各类潜在用户分布图'
107 ))
108 bar.render_notebook()
109 data_plot = data[['Email_Type','Subject_Hotness_Score','Email_Source_Type']]
110 data_plot
111 #把数值型变量转换成字符型变量
112 data_plot['Email_Source_Type'] = data_plot['Email_Source_Type'].map(str) 
113 #为了方便观看,把列名换成中文的
114 data_plot.rename(columns={"Email_Type":"邮件类型",
115                     "Subject_Hotness_Score":"主题热度",
116                     "Email_Source_Type":"邮件发送方性别"},inplace=True)
117 kind_dict = {
118     "1":"male",
119     "2":"female"
120 }
121 data_plot["邮件发送方性别"]=data_plot["邮件发送方性别"].map(kind_dict)
122 data_plot.head()#修改后的数据集的内容如下
123 sns.pairplot(data_plot,hue="邮件发送方性别",markers=["s","D"])
124 pd.Series(data['Email_Campaign_Type']).value_counts()
125 #value_counts 直接用来计算Series里面相同数据出现的频率
126 plt.rcParams['font.sans-serif'] = ['SimHei']
127 plt.rcParams['axes.unicode_minus'] = False
128 x1_type = ('1')
129 x2_type = ('2')
130 x3_type = ('3')
131 x1_ts = [736]
132 x2_ts = [48273]
133 x3_ts = [19344]
134 bar_width = 0.2
135 plt.bar(x=x1_type, height=x1_ts, width=bar_width, color=('#0066CC'),label=('1'),align='center')
136 plt.text('1',1200,'736',va='center',ha='center')
137 plt.bar(x=x2_type, height=x2_ts, width=bar_width, color=('#339966'),label=('2'),align='center')
138 plt.text('2',49500,'48273',va='center',ha='center')
139 plt.bar(x=x3_type, height=x3_ts, width=bar_width, color=('#ff0020'),label=('3'),align='center')
140 plt.text('3',21000,'19344',va='center',ha='center')
141 plt.legend()
142 plt.yticks(fontsize=16, color='#000000')
143 plt.title('各类活动邮件的使用情况')
144 plt.show()
145 #定义饼的标签
146 labels=['1类','2类','3类']
147 x=[736,48273,19344]
148 #饼状图分离
149 explode=(0.03,0.05,0.06)
150 plt.title("饼状图-各类活动邮件的使用情况")
151 plt.pie(x,labels=labels,autopct='%.1f%%',explode=explode)
152 
153 pd.Series(data['Total_Past_Communications']).value_counts()
154 #value_counts 直接用来计算Series里面相同数据出现的频率
155 data_etype=data[['Total_Past_Communications']]
156 plt.figure(figsize=(6,6))
157 f = data_etype.boxplot(sym = 'o',
158                       vert = True,
159                       whis = 1.5,
160                       patch_artist = True,
161                       meanline = False,showmeans = True,
162                       showbox = True,
163                       showcaps = True,
164                       showfliers = True,
165                       notch =False,
166                       return_type = 'dict')
167 plt.title('活动邮件种类的数据分布')
168 for box in f['boxes']:                                           #boxes,箱线
169     box.set(color = '#3333FF',linewidth=1)
170     box.set(facecolor = '#ff2000',alpha=0.5)
171 for whisker in f['whiskers']:                                    #whiskers, 从box到error bar之间的竖线
172     whisker.set(color = '#66FF00',linewidth=0.5,linestyle='-')
173 for cap in f['caps']:                                            # caps, error bar横线
174     cap.set(color='#FF6600',linewidth=2)
175 for median in f['medians']:                                      # medians, 中位值的横线
176     median.set(color='#000000',linewidth=2)
177 for flier in f['fliers']:                                        # fliers, 异常值
178     flier.set(marker='o',color='#FFFF00',alpha=0.5)
179 #生成测试关系数据
180 data_st=data[['Total_Past_Communications','Subject_Hotness_Score']]
181 data_st.head(10)
182 sns.jointplot(x="Total_Past_Communications",y="Subject_Hotness_Score",data=data_st,color='r')
183 pd.Series(data['Time_Email_sent_Category']).value_counts()
184 #value_counts 直接用来计算Series里面相同数据出现的频率
185 plt.rcParams['font.sans-serif'] = ['SimHei']
186 plt.rcParams['axes.unicode_minus'] = False
187 x1_sent = ('1')
188 x2_sent = ('2')
189 x3_sent = ('3')
190 x1_tc = [13636]
191 x2_tc = [41129]
192 x3_tc = [13588]
193 bar_width = 0.2
194 plt.bar(x=x1_sent, height=x1_tc, width=bar_width, color=('#0066CC'),label=('1'),align='center')
195 plt.text('1',15000,'13636',va='center',ha='center')
196 plt.bar(x=x2_sent, height=x2_tc, width=bar_width, color=('#339966'),label=('2'),align='center')
197 plt.text('2',42000,'41129',va='center',ha='center')
198 plt.bar(x=x3_sent, height=x3_tc, width=bar_width, color=('#ff0020'),label=('3'),align='center')
199 plt.text('3',15000,'13588',va='center',ha='center')
200 plt.legend()
201 plt.yticks(fontsize=16, color='#000000')
202 plt.title('发送邮件种类使用情况')
203 plt.show()
204 #定义饼的标签
205 labels=['1','2','3']
206 x=[13636,41129,13588]
207 #饼状图分离
208 explode=(0.03,0.05,0.06)
209 plt.title("饼状图-发送邮件种类使用情况")
210 plt.pie(x,labels=labels,autopct='%.1f%%',explode=explode)
211 
212 plt.figure(figsize=(20, 10))
213 sns.pointplot(x = 'Subject_Hotness_Score', y = 'Total_Past_Communications', hue = 'Time_Email_sent_Category', data=data,
214               palette = 'hls',
215               dodge = True,  #设置点是否分开
216               join = True,   #是否连线
217               markers = ['o','x','+'],linestyles = ['-','--','--'],#设置点样式、线型
218               )
219 #汇总邮件字数数据
220 word_message = data.groupby(['Word_Count'])
221 word_counts = word_message['Word_Count'].agg(['count'])
222 word_counts.reset_index(inplace=True)
223 wr = word_counts['Word_Count']
224 v1 = word_counts['count']
225 bar = Bar() 
226 # 添加x轴坐标,括号中加入数据列表
227 bar.add_xaxis(list(wr))
228 # 添加y轴坐标,括号中加入数据列表
229 bar.add_yaxis("图注:邮件字数分布",list(v1))  
230 #标题配置项
231 bar.set_global_opts(title_opts=opts.TitleOpts(
232     title='邮件字数分布'
233 ),datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")])
234 bar.render_notebook()
235 #汇总邮件含链接数数据
236 total_message = data.groupby(['Total_Links'])
237 total_links = total_message['Total_Links'].agg(['count'])
238 total_links.reset_index(inplace=True)
239 tr = total_links['Total_Links']
240 v1 = total_links['count']
241 bar = Bar() 
242 # 添加x轴坐标,括号中加入数据列表
243 bar.add_xaxis(list(tr))
244 # 添加y轴坐标,括号中加入数据列表
245 bar.add_yaxis("图注:邮件含链接数分布",list(v1))  
246 #标题配置项
247 bar.set_global_opts(title_opts=opts.TitleOpts(
248     title='邮件含链接数分布'
249 ),datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")])
250 bar.render_notebook()
251 #汇总邮件含图片数数据
252 total_message = data.groupby(['Total_Images'])
253 total_images = total_message['Total_Images'].agg(['count'])
254 total_images.reset_index(inplace=True)
255 tir = total_images['Total_Images']
256 v1 = total_images['count']
257 bar = Bar() 
258 # 添加x轴坐标,括号中加入数据列表
259 bar.add_xaxis(list(tir))
260 # 添加y轴坐标,括号中加入数据列表
261 bar.add_yaxis("图注:邮件含图片数分布",list(v1))  
262 #标题配置项
263 bar.set_global_opts(title_opts=opts.TitleOpts(
264     title='邮件含图片数分布'
265 ),datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")])
266 bar.render_notebook()
267 #绘制散点图来观察邮件含链接数跟含图片数的关系
268 x=data[['Total_Images']]
269 y=data[['Total_Links']]
270 # 确定画布
271 plt.figure(figsize=(10, 6))
272 
273 plt.scatter(x, y)# x 代表x轴 y 代表y轴数据, 数据维度必须相同
274 plt.xlabel('含图片数')
275 plt.ylabel('含链接数')
276 plt.show()
277 pd.Series(data['Email_Status']).value_counts()
278 #value_counts 直接用来计算Series里面相同数据出现的频率
279 plt.rcParams['font.sans-serif'] = ['SimHei']
280 plt.rcParams['axes.unicode_minus'] = False
281 x1_es = ('0')
282 x2_es = ('1')
283 x3_es = ('2')
284 x1_ec = [54941]
285 x2_ec = [11039]
286 x3_ec = [2373]
287 bar_width = 0.2
288 plt.bar(x=x1_es, height=x1_ec, width=bar_width, color=('#00FF00'),label=('0:成功接收'),align='center')
289 plt.text('0',56000,'54941',va='center',ha='center')
290 plt.bar(x=x2_es, height=x2_ec, width=bar_width, color=('#FF9900'),label=('1: 接收失败'),align='center')
291 plt.text('1',12000,'11039',va='center',ha='center')
292 plt.bar(x=x3_es, height=x3_ec, width=bar_width, color=('#33FFFF'),label=('2: 其他'),align='center')
293 plt.text('2',2600,'2373',va='center',ha='center')
294 plt.legend()
295 plt.yticks(fontsize=16, color='#000000')
296 plt.title('邮件状态')
297 plt.show()
298 #定义饼的标签
299 labels=['0:成功接收','1: 接收失败','2: 其他']
300 x=[54941,11039,2373]
301 #饼状图分离
302 explode=(0.03,0.05,0.06)
303 plt.title("饼状图-邮件状态")
304 plt.pie(x,labels=labels,autopct='%.1f%%',explode=explode)

五、总结

经过以上数据集的分析,可以知道电子邮件在人们的生活中使用是很便利的,不仅仅是在工作中使用电子邮件,在日常休息中也使用着电子邮件,人们越来越依赖于电子邮件,之间的交流合作也会越来越多。但人们对电子邮件的正确使用还是有待提高,减少一些错误操作可以让邮件使用的更加顺手。人们对于电子邮件主题的选择还是没有太多的要求,大多数都选择了系统默认的主题,少部分人对主题感兴趣。

在这次的课程设计中,我认识到了我对于python知识的了解还是不够多,对于数据可视化还是有一些问题,但经过上网查找资料解决了问题,让我对python产生了强烈的兴趣,在以后的日子里,我会学习更多与python相关的知识技术,让我的python技术得到提高。

 

标签:数据分析,plt,bar,center,width,电子邮件,data,邮件,Gmail
From: https://www.cnblogs.com/glhh/p/16999851.html

相关文章

  • 对美国心脏病数据集进行大数据分析
    一、选题背景    本数据来源于美国2020年40万成年人与其健康状况相关的CDC年度调查数据。心脏病是美国大多数种族(非洲裔美国人、美洲印第安人和阿拉斯加原住......
  • 数据分析-银行营销大数据分析
    银行营销大数据分析一、选题背景在互联网、云计算和物联网的高速发展下,大数据走入了人们的视野。银行业作为数据集中管理型行业,在大数据背景下如何进行数据挖掘、分析、......
  • 机械学习--大数据分析
    本次实验报告的主要任务是实现对员工的辞职进行预测,具体将从简介、数据预处理、随机森林的使用和实现以及结论等方面完成实验报告的撰写和相关工作汇报。一:简介1.1:数据......
  • 数据分析 - 酒店预订需求分析
    1.背景介绍在高节奏生活的今天,人们整天在各个城巿穿梭忙碌着,在过去跑到哪个城巿后才能进行预订客房,现在看来是否显得太麻烦,目前很多酒店都已经开始使用通过互联网进行客......
  • 网易云热门音乐评论爬取+大数据分析+数据可视化
    一、选题的背景声乐艺术的情感,是歌唱者在自己内心唤起曾经的体验的情感,是一首歌曲的灵魂,抒发情感,给人带来幸福感满足感是音乐的魅力所在。只有加入情感的表现才能使演......
  • 大数据分析-对拉勾网招聘信息的数据分析与挖掘
    一,选题背景我们学习Python到什么程度,就可以开始找工作了呢,大家都知道,实践是检验真理的唯一标准,那么学到什么程度可以找工作,当然得看市场的需求,毕竟企业招你来是工作的,而不......
  • 大数据分析——中国商品房销售额分析
    中国商品房销售额分析选题的背景介绍在现当代经济社会的发展中,房地产行业涉及多个经济领域,如生产流通,消费交易等,房地产业的发展状况与我们的生活息息相关,房地产发......
  • 大数据分析——CBA福建队比赛数据分析
    一.选题的背景随着国家对体育教育的重视,篮球运动也越来越被大家所关注。本次分析围绕CBA福建队在全国各地的比赛信息分析,利用数据可视化的技术,将近期CBA福建队比赛情况对比......
  • 大数据分析——外国人群薪资收入数据分析与挖掘
    大数据分析——外国人群薪资收入数据分析与挖掘一、  选题背景人群收入是大众关心的非常重要的经济生活话题,然而人群收入受很多方面的因素影响,有年龄因素、工作性......
  • 大数据分析--用户在银行贷款情况
    一、选题的背景银行贷款在我们生中面临巨大经济压力时,可以有效的暂时解决方案之一,主要分析用户的还款状态、应还本金、应还利息、剩余本金、还款日期等情况,此数据集......