鱼C论坛

 找回密码
 立即注册
查看: 1322|回复: 0

[作品展示] csv格式数据清洗 根据表格得出知友全国地域分布情况,分析出TOP20

[复制链接]
发表于 2022-3-2 17:14:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 atrago 于 2022-3-2 17:37 编辑

操作环境:Jupyter Notebook
清洗知乎数据csv格式文件分析知乎Top20知友数量全国分布情况和知友密度情况
利用Numpy模块,Pandas模块进行数据清洗,Matplotlib模块将数据可视化
成功得到知友数量全国分布情况和知友密度情况图表数据

目的:

① 按照地域统计 知友数量、知友密度(知友数量/城市常住人口)
② 知友数量,知友密度,标准化处理
③ 图表可视化

标准化计算方法 = (X - Xmin) / (Xmax - Xmin)

困难及解决方案:
1、获取数据后对数据格式排列没有清洗的概念,不知道如何两个表格数据进行合并;查询利用Numpy模块中的merge函数。
2、可视化标签设置错误;查阅matplotlib.pyplot相关阅读指导进行改。


结果:


                               
登录/注册后可看大图


                               
登录/注册后可看大图



改进计划:

1、优化代码结构逻辑
2、将函数封装成模块

Code:
  1. import numpy as ny
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. import matplotlib as mpl
  5. %matplotlib inline
  6. #设置图形内嵌
  7. import matplotlib.style as stl
  8. stl.use('ggplot') #自带样式美化

  9. mpl.rcParams['font.sans-serif']=['SimHei']  # #指定默认字体 SimHei为黑体
  10. #mpl.rcParams['axes.unicode_minus']=False  # #用来正常显示负号

  11. #读取数据
  12. data1 = pd.read_csv('知乎数据_201701.csv',engine='python')
  13. data2 = pd.read_csv('六普常住人口数.csv',engine='python')

  14. def fun1(df):#清洗缺失值
  15.     cols = df.columns #获取列
  16.     for each in cols:
  17.         if df[each].dtype == 'object':
  18.             df[each].fillna('Missing',inplace = True)
  19.         else:
  20.             df[each].fillna(0,inplace = True)
  21.     return df

  22. data1_d = fun1(data1)#处理数据,清空Nan
  23. #data1_d.head(5)

  24. data_city = data1_d.groupby('居住地').count()#按居住地分组
  25. #print(data_city.head())
  26. data2['city'] = data2['地区'].str[:-1]
  27. #data2['city'].head()
  28. qldata = pd.merge(data_city,data2,left_index=True,right_on='city')[['_id','city','常住人口']]
  29. qldata['密度'] = qldata['_id'] / qldata['常住人口']
  30. #表合并
  31. def fun2(df,*cols):#求标准化函数封装
  32.     colnames = []
  33.    
  34.     for each in cols:
  35.         colname = each + 'norm'
  36.         df[colname] = ((df[each] - df[each].min()) / (df[each].max() -df[each].min())) *100 #标准化公式
  37.         colnames.append(colname)
  38.         
  39.     return df,colnames

  40. result = fun2(qldata,'_id','密度')[0] #处理后图表
  41. result_colname = fun2(qldata,'_id','密度')[1] #标签名

  42. #知友数量-城市分布数据
  43. result_num_Top20 = qldata.sort_values(result_colname[0],ascending=False)[[result_colname[0],'city']][:20]
  44. #知友密度-城市分布数据
  45. result_den_Top20 = qldata.sort_values(result_colname[1],ascending=False)[[result_colname[1],'city']][:20]

  46. #print(result_num_Top20[result_colname[0]])
  47. def fun3(dk,x,y,name,n):#生成图表函数封装
  48.     fig= plt.figure(num = n,figsize=(8,3))
  49.     plt.bar(range(20),y,tick_label = x)
  50.     plt.title(name)
  51.     for i,j in zip(range(20),y):#添加标签
  52.         plt.text(i-0.5,j-2,'%.1f'% j,fontsize=10)

  53. fun3(result_num_Top20,result_num_Top20['city'],result_num_Top20[result_colname[0]],'知友数量',1)#表1
  54. fun3(result_den_Top20,result_den_Top20['city'],result_den_Top20[result_colname[1]],'知友密度',2)#表2
复制代码

附件如下:





item2.rar

1.75 MB, 下载次数: 3

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-30 04:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表