网易数据分析师 - 【项目03】 知乎数据清洗整理和结论研究 & 【项目04】 视频网站数据清洗整理和结论研究
2019-02-01 11:44
288 查看
版权声明:欢迎转载~ 转载请注明来源及作者,谢谢! https://blog.csdn.net/qq_42442369/article/details/86737660
''' 【项目03】 知乎数据清洗整理和结论研究 作业要求: 1、数据清洗 - 去除空值 要求:创建函数 提示:fillna方法填充缺失数据,注意inplace参数 2、问题1 知友全国地域分布情况,分析出TOP20 要求: ① 按照地域统计 知友数量、知友密度(知友数量/城市常住人口),不要求创建函数 ② 知友数量,知友密度,标准化处理,取值0-100,要求创建函数 ③ 通过多系列柱状图,做图表可视化 提示: ① 标准化计算方法 = (X - Xmin) / (Xmax - Xmin) ② 可自行设置图表风格 3、问题2 知友全国地域分布情况,分析出TOP20 要求: ① 按照学校(教育经历字段) 统计粉丝数(‘关注者’)、关注人数(‘关注’),并筛选出粉丝数TOP20的学校,不要求创建函数 ② 通过散点图 → 横坐标为关注人数,纵坐标为粉丝数,做图表可视化 ③ 散点图中,标记出平均关注人数(x参考线),平均粉丝数(y参考线) 提示: ① 可自行设置图表风格 ''' import pandas as pd import numpy as np import matplotlib.pyplot as plt % matplotlib inline # 数据读取 data1 = pd.read_csv('C:/Users/Hjx/Desktop/知乎数据_201701.csv', engine = 'python') data2 = pd.read_csv('C:/Users/Hjx/Desktop/六普常住人口数.csv', engine = 'python') print(data1.head()) print(data2.head()) # 数据清洗 - 去除空值 # 文本型字段空值改为“缺失数据”,数字型字段空值改为 0 # 要求:创建函数 # 提示:fillna方法填充缺失数据,注意inplace参数 def data_cleaning(df): cols = df.columns for col in cols: if df[col].dtype == 'object': df[col].fillna('缺失数据', inplace = True) else: df[col].fillna(0, inplace = True) return(df) # 该函数可以将任意数据内空值替换 data1_c = data_cleaning(data1) data1_c.head(10) # 问题1 知友全国地域分布情况,分析出TOP20 # 要求: # ① 按照地域统计 知友数量、知友密度(知友数量/城市常住人口),不要求创建函数 # ② 知友数量,知友密度,标准化处理,取值0-100,要求创建函数 # ③ 通过多系列柱状图,做图表可视化 # 提示: # ① 标准化计算方法 = (X - Xmin) / (Xmax - Xmin) # ② 可自行设置图表风格 df_city = data1_c.groupby('居住地').count() # 按照居住地统计知友数量 data2['city'] = data2['地区'].str[:-1] # 城市信息清洗,去掉城市等级文字 #print(df_city.head()) #print(data2.head()) q1data = pd.merge(df_city, data2, left_index = True, right_on = 'city', how = 'inner')[['_id','city','常住人口']] q1data['知友密度'] = q1data['_id']/q1data['常住人口'] #print(q1data.head()) # 统计计算知友数量,知友密度 def data_nor(df, *cols): colnames = [] for col in cols: colname = col + '_nor' df[colname] = (df[col]-df[col].min())/(df[col].max()-df[col].min()) * 100 colnames.append(colname) return(df,colnames) # 创建函数,结果返回标准化取值,新列列名 resultdata = data_nor(q1data,'_id','知友密度')[0] resultcolnames = data_nor(q1data,'_id','知友密度')[1] q1data_top20_sl = resultdata.sort_values(resultcolnames[0], ascending=False)[['city',resultcolnames[0]]].iloc[:20] q1data_top20_md = resultdata.sort_values(resultcolnames[1], ascending=False)[['city',resultcolnames[1]]].iloc[:20] #print(q1data_top20_md) # 标准化取值后得到知友数量,知友密度的TOP20数据 fig1 = plt.figure(num=1,figsize=(12,4)) y1 = q1data_top20_sl[resultcolnames[0]] plt.bar(range(20), y1, width = 0.8, facecolor = 'yellowgreen', edgecolor = 'k', tick_label = q1data_top20_sl['city']) plt.title('知友数量TOP20\n') plt.grid(True, linestyle = "--",color = "gray", linewidth = "0.5", axis = 'y') for i,j in zip(range(20),y1): plt.text(i+0.1,2,'%.1f' % j, color = 'k',fontsize = 9) fig2 = plt.figure(num=2,figsize=(12,4)) y2 = q1data_top20_md[resultcolnames[1]] plt.bar(range(20), y2, width = 0.8, facecolor = 'lightskyblue', edgecolor = 'k', tick_label = q1data_top20_md['city']) plt.grid(True, linestyle = "--",color = "gray", linewidth = "0.5", axis = 'y') plt.title('知友密度TOP20\n') for i,j in zip(range(20),y2): plt.text(i+0.1,2,'%.1f' % j, color = 'k',fontsize = 9) # 创建图表 # 问题2 不同高校知友关注和被关注情况 # 要求: # ① 按照学校(教育经历字段) 统计粉丝数(‘关注者’)、关注人数(‘关注’),并筛选出粉丝数TOP20的学校,不要求创建函数 # ② 通过散点图 → 横坐标为关注人数,纵坐标为粉丝数,做图表可视化 # ③ 散点图中,标记出平均关注人数(x参考线),平均粉丝数(y参考线) # 提示: # ① 可自行设置图表风格 q2data = data1_c.groupby('教育经历').sum()[['关注','关注者']].drop(['缺失数据','大学','本科']) q2data_c = q2data.sort_values('关注',ascending=False)[:20] #print(q2data_c) # 统计计算学校的粉丝数、被关注量 plt.figure(figsize=(10,6)) x = q2data_c['关注'] y = q2data_c['关注者'] follow_mean = q2data_c['关注'].mean() fans_mean = q2data_c['关注者'].mean() plt.scatter(x,y,marker='.', s = y/1000, cmap = 'Blues', c = y, alpha = 0.8, label = '学校') # 创建散点图 plt.axvline(follow_mean,hold=None,label="平均关注人数:%i人" % follow_mean,color='r',linestyle="--",alpha=0.8) # 添加x轴参考线 plt.axhline(fans_mean,hold=None,label="平均粉丝数:%i人" % fans_mean,color='g',linestyle="--",alpha=0.8) # 添加y轴参考线 plt.legend(loc = 'upper left') plt.grid() # 添加显示内容 for i,j,n in zip(x,y,q2data_c.index): plt.text(i+500,j,n, color = 'k') # 添加注释
''' 【项目04】 视频网站数据清洗整理和结论研究 作业要求: 1、数据清洗 - 去除空值 要求:创建函数 提示:fillna方法填充缺失数据,注意inplace参数 2、数据清洗 - 时间标签转化 要求: ① 将时间字段改为时间标签 ② 创建函数 提示: 需要将中文日期转化为非中文日期,例如 2016年5月24日 → 2016.5.24 3、问题1 分析出不同导演电影的好评率,并筛选出TOP20 要求: ① 计算统计出不同导演的好评率,不要求创建函数 ② 通过多系列柱状图,做图表可视化 提示: ① 好评率 = 好评数 / 评分人数 ② 可自己设定图表风格 4、问题2 统计分析2001-2016年每年评影人数总量 要求: ① 计算统计出2001-2016年每年评影人数总量,不要求创建函数 ② 通过面积图,做图表可视化,分析每年人数总量变化规律 ③ 验证是否有异常值(极度异常) ④ 创建函数分析出数据外限最大最小值) ⑤ 筛选查看异常值 → 是否异常值就是每年的热门电影? 提示: ① 通过箱型图验证异常值情况 ② 通过quantile(q=0.5)方法,得到四分位数 ③ IQR=Q3-Q1 ④ 外限:最大值区间Q3+3IQR,最小值区间Q1-3IQR (IQR=Q3-Q1) ⑤ 可自己设定图表风格 ''' import pandas as pd import numpy as np import matplotlib.pyplot as plt % matplotlib inline # 数据读取 data = pd.read_csv('C:/Users/Hjx/Desktop/爱奇艺视频数据.csv', engine = 'python') print(data.head()) # 数据清洗 - 去除空值 # 文本型字段空值改为“缺失数据”,数字型字段空值改为 0 # 要求:创建函数 # 提示:fillna方法填充缺失数据,注意inplace参数 def data_cleaning(df): cols = df.columns for col in cols: if df[col].dtype == 'object': df[col].fillna('缺失数据', inplace = True) else: df[col].fillna(0, inplace = True) return(df) # 该函数可以将任意数据内空值替换 data_c1 = data_cleaning(data) print(data_c1.head(10)) # 数据清洗 - 时间标签转化 # 将时间字段改为时间标签 # 要求:创建函数 # 提示:需要将中文日期转化为非中文日期,例如 2016年5月24日 → 2016.5.24 def data_time(df,*cols): for col in cols: df[col] = df[col].str.replace('年','.') df[col] = df[col].str.replace('月','.') df[col] = df[col].str.replace('日','') df[col] = pd.to_datetime(df[col]) return(df) # 该函数将输入列名的列,改为DatetimeIndex格式 data_c2 = data_time(data_c1,'数据获取日期') print(data_c2.head(10)) # 问题1 分析出不同导演电影的好评率,并筛选出TOP20 # 要求: # ① 计算统计出不同导演的好评率,不要求创建函数 # ② 通过多系列柱状图,做图表可视化 # 提示: # ① 好评率 = 好评数 / 评分人数 df_q1 = data_c2.groupby('导演')[['好评数','评分人数']].sum() df_q1['好评率'] = df_q1['好评数'] / df_q1['评分人数'] result_q1 = df_q1.sort_values(['好评率'], ascending=False)[:20] # 计算统计不同导演的好评率 result_q1['好评率'].plot(kind='bar', color = 'k', width = 0.8, alpha = 0.4, rot = 45, grid = True, ylim = [0.98,1], figsize = (12,4), title = '不同导演电影的好评率') # 问题2 统计分析2001-2016年每年评影人数总量 # 要求: # ① 计算统计出2001-2016年每年评影人数总量,不要求创建函数 # ② 通过面积图,做图表可视化,分析每年人数总量变化规律 # ③ 验证是否有异常值(极度异常) # ④ 创建函数分析出数据外限最大最小值) # ⑤ 筛选查看异常值 → 是否异常值就是每年的热门电影? # 提示: # ① 通过箱型图验证异常值情况 # ② 通过quantile(q=0.5)方法,得到四分位数 # ③ IQR=Q3-Q1 # ④ 外限:最大值区间Q3+3IQR,最小值区间Q1-3IQR (IQR=Q3-Q1) q2data1 = data_c2[['导演','上映年份','整理后剧名']].drop_duplicates() q2data1 = q2data1[q2data1['上映年份'] != 0] # 筛选出不同年份的数据,去除‘上映年份’字段缺失数据 q2data2 = data_c2.groupby('整理后剧名').sum()[['评分人数','好评数']] #print(q2data2) # 求出不同剧的评分人数、好评数总和 q2data3 = pd.merge(q2data1,q2data2,left_on='整理后剧名',right_index=True) #print(q2data3) # 合并数据,得到不同年份,不同剧的评分人数、好评数总和 q2data4 = q2data3.groupby('上映年份').sum()[['评分人数','好评数']] print(q2data4.head()) # 按照电影上映年份统计,评分人数量 fig1 = plt.figure(num=1,figsize=(12,4)) q2data4['评分人数'].loc[2000:].plot.area(figsize = (10,4), grid = True, color = 'g', alpha = 0.8) plt.xticks(range(2001,2016)) plt.title('2001-2016年每年评影人数总量统计') # 创建面积图 # 每年影评人数通过每个电影来判断是否合理? # 存在异常值,哪些是异常值? fig,axes = plt.subplots(4,4,figsize=(10,16)) start = 2001 for i in range(4): for j in range(4): data = q2data3[q2data3['上映年份'] == start] data[['评分人数','好评数']].boxplot(whis = 3, # IQR为3 return_type='dict',ax = axes[i,j]) # 创建矩阵箱型图 start += 1 # 发现基本每年的数据中都有异常值,且为极度异常 # 创建函数得到外限最大最小值 # 查看异常值 a = q2data3[q2data3['上映年份'] == 2001] def data_error(df,col): q1 = df[col].quantile(q=0.25) # 上四分位数 q3 = df[col].quantile(q=0.75) # 下四分位数 iqr = q3 - q1 # IQR tmax = q3 + 3 * iqr # 外限最大值 tmin = q1 - 3 * iqr # 外限最小值 return(tmax,tmin) # 创建函数,得到外限最大最小值 for i in range(2000,2016): datayear = q2data3[q2data3['上映年份'] == i] # 筛选该年度的数据 print('%i年有%i条数据' % (i,len(datayear))) # 查看每年的数据量 t = data_error(datayear,'评分人数') # 得到外限最大最小值 #print(t) print(datayear[datayear['评分人数'] > t[0]]) # 查看评分人数大于外限最大值的异常值 print('-------\n') # 查看异常值信息
相关文章推荐
- Python 数据分析微专业课程--项目03 视频网站数据清洗整理和结论研究
- Python 数据分析微专业课程--项目02知乎数据清洗整理和结论研究
- Hadoop学习笔记—20.网站日志分析项目案例(二)数据清洗
- Hadoop—网站日志分析项目案例(二)数据清洗
- [鸟哥linux视频教程整理]04_03_Linux 管理及IO重定向
- 网站日志分析项目案例(二)数据清洗
- Hadoop学习笔记—20.网站日志分析项目案例(二)数据清洗
- [鸟哥linux视频教程整理]03_04_Linux用户及权限详解
- Hadoop之网站日志分析项目案例(二)数据清洗(笔记22)
- Hadoop学习笔记—20.网站日志分析项目案例(二)数据清洗
- 大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程
- Hadoop学习笔记—20.网站日志分析项目案例(二)数据清洗
- Hadoop学习笔记—20.网站日志分析项目案例(二)数据清洗
- Hadoop学习笔记—20.网站日志分析项目案例(二)数据清洗
- 网易数据分析师 - 【项目09】 中国姓氏排行研究 &【项目10】 房价影响因素挖掘
- Hadoop学习笔记—20.网站日志分析项目案例(二)数据清洗
- windows下nodejs express安装及入门网站,视频资料,开源项目介绍
- 网易数据分析师 - 【项目13】社会财富分配问题模拟
- Mars Android视频学习笔记——03_03/04_用户定位
- 近期.NET学习及项目开发整理-SQLSERVER中的数据类型和C#中数据类型的对应