实验八-数据处理

目录

1.数据来源

2.对于All表:

3.对于sf 和sfweibo 表:

4. 对于base_info表:

5.导出最后结果到一个Excel文件中,完成数据处理。


1.数据来源

       本次所分析的数据是通过爬虫抓取的微博数据。选取新浪微博为数据平台,选取我国34个省的旅游政务官方微博为研究对象,利用爬虫软件Gooseeker爬取微博信息,包括用户名、粉丝数、开博日期、当月原创微博总数No、当月总微博数N、单条博文的转发数、单条博文的评论数、条博文的点赞数。爬取的数据存在表格 test.xlsx 中。

#百度网盘提取链接:https://pan.baidu.com/s/1BmgteLqpv2u6uQFZTauAZw?pwd=7890 
提取码:7890

2.对于All表:

(1)取出有用字段。

#-*- coding=utf-8 -*-
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from numpy.random import randn
from pandas import Series
from datetime import datetime
import xlrd,openpyxl
All=pd.read_excel("D:/test1.xlsx","All")
All.head()
# 删掉表格中的无用列,保留有用列
d1 = All.drop(All.columns[:11], axis=1, inplace = False)
All = d1.drop(d1.columns[-1], axis=1, inplace = False)
# 显示表格前五行
All.head()

# 查看去重未处理前表中记录长度
len(All)
# 获取到重复的行的行号的前20个
All[All.duplicated()==True].index[:20]
# 删除掉重复的行,在原值上直接修改
All.drop_duplicates(inplace=True)
len(All)#通过运行结果,可以发现确实删掉了,当前记录条数为6159条

(2)处理缺失值。

#(2)处理缺失值
# 处理缺失值,先获取该列,将列中的"转发”、"评论"、"赞"替换掉
# 如果一开始就设置替换,会导致整张表中的"转发”、"评论"、"赞"均会被替换掉,造成信息损失
All[u'转发数'][All[u'转发数']==u'转发'] = '0'
All[u'评论数'][All[u'评论数']==u'评论'] = '0'
All[u'点赞数'][All[u'点赞数']==u'赞'] = '0' #等价于# All[u'点赞数'].replace(u'赞','0')
All.head()

(3)数据透视

#(3)数据透视
All.describe()#数据类型非数值型

#查看表中各个列的数据类型
All.dtypes
# 为了能进行数据透视,需要将对应列的数据类型转换成数值型
# 将DataFrame表中的某列数据进行转换类型
All[u'转发数']=All[u'转发数'].astype('int64')
All[u'评论数'] = All[u'评论数'].astype('int64')
All[u'点赞数'] = All[u'点赞数'].astype('int64')All.describe()
# 查看表中各个列的数据类型
All.dtypes
#将预处理过的表保存到All.xlsx中
All.to_excel('All.xlsx',index=False)
# 数据透视表
All_pivot= All.pivot_table(values=[u'转发数',u'评论数',u'点赞数',u'微博内容'],index=[u'用户名'],\aggfunc={u'转发数':np.sum,u'评论数':np.sum,u'点赞数':np.sum,u'微博内容':np.size})# 给该列换名称
All_pivot.rename(columns={u'微博内容':u'当月总微博数'},inplace=True)
All_pivot
# 将完成的透视表保存
All_pivot.to_excel('All_pivot.xlsx')

3.对于sf 和sfweibo 表:

(1)以省份名做数据连接成sf_sfweibo。

#  step3
#(1)以省份名做数据连接成sf_sfweibo# 读取test1.xlsx 中的sf表
sf=pd.read_excel("D:/test1.xlsx","sf")
sf.head()

#读取test1.xlsx中的sfweibo表
sfweibo = pd.read_excel("D:/test1.xlsx","sfweibo")
sfweibo.head()

#名称中肯定包含省份中的前两个字,为此,需要对两个表格切割后,进行连接
sf[u'省份前两字'] = np.nan
for i in range(len(sf[u'省份名'])):sf[u'省份前两字'][i] = sf[u'省份名'][i][:2]
sfweibo[u'省份前两字'] = np.nanfor i in range(len(sfweibo[u'省份名'])):sfweibo[u'省份前两字'][i] = sfweibo[u'省份名'][i][:2]
# 显示表格的前五行
sf.head()

# 显示表格的前五行
sfweibo.head()

# 保存数据
sf.to_excel('sf.xlsx',index=False)
sfweibo.to_excel('sfweibo.xlsx',index=False)
# 连接两表
sf_sfweibo = sf.merge(sfweibo,on=u'省份前两字')
sf_sfweibo.head()

# 获取连接后表格中需要的字段名,并重新排列
sf_sfweibo1 = sf_sfweibo.iloc[:,[4,1,2]]
sf_sfweibo1.head()

# 存储连接后的表
sf_sfweibo1.to_excel('sf_sfweibo.xlsx',index=False)

(2)并与All表做数据连接sf_sfweibo_All。

 #(2)并与All表做数据连接sf_sfweibo_All
#连接sf_sfweibo和All_pivot两表
sf_sfweibo = sf_sfweibo1
sf_sfweibo_All_pivot =pd.merge(sf_sfweibo,All_pivot,left_on=u'微博用户名',right_on=u'用户名',right_index=True)#显示连接后的表格的前五行
sf_sfweibo_All_pivot.head()

# 将连接后的表进行存储
sf_sfweibo_All_pivot.to_excel('sf_sfweibo_All_pivot.xlsx',index=False)

4. 对于base_info表:

(1)与sf_sfweibo_All做数据连接 

# step4:
#(1)与sf_sfweibo_All做数据连接 
# 处理爬取的用户的基本信息表base_infobase = pd.read_excel("D:/test1.xlsx","base_info")
base.head()

 

#将base表与sf_sfweibo_All_pivot进行连接
sf_sfweibo_All_pivot_base = base.merge(sf_sfweibo_All_pivot,left_on=u'昵称',right_on=u'微博用户名')
ssapb = sf_sfweibo_All_pivot_base # 名称太长,换个名称ssapb.head()

# 替换某列的名字
ssapb.rename(columns={u'当月总微博数_x':u'当月总微博数'},inplace=True)
# 删除其中的多余列
ssapb = ssapb.drop([u'昵称',u'当月总微博数_y'],axis=1)
# 读取第一行的数
ssapb.iloc[0]
# 添加一列(当月原创数= 当月总微博数-当月转发数)
ssapb[u'当月原创数'] = ssapb[u'当月总微博数']-ssapb[u'当月转发数']
#将某列同时与某段字符串连接,通过观察网页可以发现这是网址的特点
linkfix = "?is_ori=1&is_forward=1&is_text=1&is_pic=1&is_video=1&is_music=1&is_\
article=1&key_word=&start_time=2017-05-01&end_time=2017-05-31&is_search=1&is_searchadv=1#_0"
ssapb[u'当月博文网址'] = ssapb[u'主页链接']+linkfixallfix = "?profile_ftype=1&is_all=1#_0"
ssapb[u'全部博文网址'] = ssapb[u'主页链接']+allfix
#计算出篇均转发/点赞/评论,并添加列
ssapb[u'篇均点赞'] = ssapb[u'点赞数']/ssapb[u'当月总微博数']
ssapb[u'篇均转发'] = ssapb[u'转发数']/ssapb[u'当月总微博数']
ssapb[u'篇均评论'] = ssapb[u'评论数']/ssapb[u'当月总微博数']
# 读取表中的第一行数据
ssapb.iloc[0]
# 存储表格
ssapb.to_excel('ssapb.xlsx',index=False)

(2)计算h值 

 # (2)计算h值 
# 将All表分组,获取表格的index值
gb = All.groupby(u'用户名')
gb1 = gb.size()
gbindex = gb1.index
print(gbindex,gb1)
#根据h指数的定义,分别计算转发/评论/点赞h指数
# 再记录下每个“用户名的最大互动度max(转发+评论+点赞)”
sortAllf = All.sort_values(by=[u'用户名',u'转发数'],ascending=[True,False])
sortAllc = All.sort_values(by=[u'用户名',u'评论数'],ascending=[True,False])
sortAlll = All.sort_values(by=[u'用户名',u'点赞数'],ascending=[True,False])mm = (sortAllf,sortAllc,sortAlll)
# 将计算得到的结果重新存储到一个新的DataFrame中
All_h =pd.DataFrame(np.arange(136).reshape(34,4),columns=['fh','ch','lh','max_hdd'],index=gbindex)
fh=[]
ch=[]
lh=[]
max_hdd = []
for j in range(len(mm)):for i in gbindex:tempdf =mm[j][mm[j][u'用户名']==i]tempdf['hdd'] = tempdf[u'转发数']+tempdf[u'评论数']+tempdf[u'点赞数']max_hdd.append(tempdf['hdd'].max())tempdf['numf'] = range(len(tempdf))if  j==0:a =len(tempdf[tempdf[u'转发数']>=tempdf['numf']+1])fh.append(a)elif  j==1:b =len(tempdf[tempdf[u'评论数']>=tempdf['numf']+1])ch.append(b)else:c = len(tempdf[tempdf[u'点赞数']>=tempdf['numf']+1])lh.append(c)All_h['fh']=fh
All_h['ch']=ch
All_h['lh']=lh
 #因为,前面的循环一共循环了三遍,使得All_h重复了3遍,因此只要获取前34位即可
All_h['max_hdd']=max_hdd[:34]
# 插入一个综合h指数,该指数是转发/评论/点赞h指数三个的均值
All_h.insert(3,'HS',All_h.iloc[:,:3].mean(1))
#更改列名称
All_h.rename(columns={'fh':u'转发h指数','ch':u'评论h指数','lh':u'点赞h指数','HS':u'综合h指数','max_hdd':u'单篇最大互动度'},inplace=True)All_h.head()

#连接ssapb和All_h表格
ssapb_All_h= pd.merge(ssapb, All_h, left_on=u'微博用户名',right_on=u'用户名',right_index=True)
#加一列原创率
ssapb_All_h[u'原创率'] = ssapb_All_h[u'当月原创数']/ssapb_All_h[u'当月总微博数']ssapb_All_h.iloc[0]
# 存档
ssapb_All_h.to_excel('ssapb_All_h.xlsx',index=False)

(3)处理数据

# 重新排序列
aa =ssapb_All_h.iloc[:,[8,9,10,5,15,16,0,1,2,3,4,6,14,7,11,12,13,24,20,21,22,23,17,18,19,25]]
aa.to_excel('finally.xlsx')
aa.iloc[0]
# 将原创率转成百分比形式
f1 = lambda x :'%.2f%%' %  (x*100)
aa[[u'原创率']]= aa[[u'原创率']].applymap(f1)aa.to_excel('finally1.xlsx',index=False)
aa.iloc[0]

(4)计算相关性

#(4)计算相关性
# 获取原DataFrame中的几列存储到新的DataFrame中,计算综合h指数与其他分指数之间的相关性
f1 = ssapb_All_h.loc[:,[u'综合h指数',u'转发h指数',u'评论h指数',u'点赞h指数']]# 计算f1中各列数据的相关性
corr1 = f1.corr()# 将该相关性结果存档
corr1.to_excel('corr1.xlsx')
corr1

# 获取原DataFrame中的几列存储到新的DataFrame中,计算综合h指数与其他微博信息之间的相关性
f2 = ssapb_All_h.loc[:,[u'综合h指数',u'转发数',u'评论数',u'点赞数',u'篇均转发',u'篇均评论',u'篇均点赞']]
corr2 = f2.corr()
corr2.to_excel('corr2.xlsx')corr2

5.导出最后结果到一个Excel文件中,完成数据处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/178601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32CubeIDE(ADC)

学习链接:【HAL库详解】STM32 ADC HAL库使用_哔哩哔哩_bilibili 目录 一、概念 1、ADC介绍 2、ADC主要特征 二、ADC模式 1、查询模式 1.1 单通道采集软件配置 1.2 查询模式步奏 1.3 单通道采集主要代码 2、多通道采集 2.1 软件配置 2.2 主要代码 一、概…

【Linux】Linux第一个小程序 --- 进度条

👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和Linux还有算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 …

电子学会C/C++编程等级考试2022年06月(三级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:制作蛋糕 小A擅长制作香蕉蛋糕和巧克力蛋糕。制作一个香蕉蛋糕需要2个单位的香蕉,250个单位的面粉,75个单位的糖,100个单位的黄油。制作一个巧克力蛋糕需要75个单位的可可粉,200个单位的面粉,150个单位的糖,150个单位的黄…

jenkins 代码执行 (CVE-2017-1000353)漏洞复现

jenkins 代码执行 (CVE-2017-1000353)漏洞复现 名称: jenkins 代码执行 (CVE-2017-1000353) 描述: ​Jenkins 可以通过其网页界面轻松设置和配置,其中包括即时错误检查和内置帮助。 插件 通过更新中心中的 1000 多个插件,Jenkins 集成了持续集成和持续…

【C++初阶(九)】 priority_queue的使用与模拟实现

本专栏内容为:C学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C 🚚代码仓库:小小unicorn的代码仓库&…

删除链表的倒数第N个节点,剑指offerII(21),力扣

目录 题目地址: 题目: 相似类型题: 我们直接看本题题解吧: 解题方法: 难度分析: 解题分析: 解题思路(双指针): 代码实现: 代码说明: 代…

C++基础 -8- 函数重载

函数重载格式(图片代码段呈现) #include "iostream"using namespace std;void rlxy(int a) {cout << "int a"<< endl; }void rlxy(char a) {cout << "char a"<< endl; }int main() {rlxy(99);rlxy(c); }函数重载的依据…

从Android面试题目溯源-1、创建线程有那几种方式

概念 程序执行流的最小单位&#xff0c;处理器调度调度和分派的基本单位。 如何理解这个概念 如下图&#xff0c;可以简单类比吉他&#xff0c;六根弦代表六个线程&#xff0c;每个线程独立且单独运行&#xff0c;且持有上一个音的状态&#xff0c;每根手指可类比为一个CPU的…

matlab绘图函数plot和fplot的区别

一、背景 有的函数用plot画就会报错&#xff0c;显示数据必须为可转换为双精度值的数值、日期时间、持续时间、分类或数组。 如下图所示&#xff1a; 但用fplot函数就没有问题&#xff0c;因此这里记录一下两者的区别&#xff0c;如果使用不当&#xff0c;画出的图可能就是下…

23种设计模式之C++实践

23种设计模式之C++实践 1. 简介2. 基础知识3. 设计模式(一)创建型模式1. 单例模式1.2 饿汉式单例模式1.3 懒汉式单例模式比较IoDH单例模式总结2. 简单工厂模式简单工厂模式总结3. 工厂方法模式工厂方法模式总结4. 抽象工厂模式抽象工厂模式总结5. 原型模式原型模式总结6. 建造…

Leetcode算法之哈希表

目录 1.两数之和2.判定是否互为字符重排3.存在重复元素I4.存在重复元素II5.字母异位词分组 1.两数之和 两数之和 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int,int> hash;for(int i0;i<nums.si…

2020年2月25日 Go生态洞察:Go 1.14版本发布

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

linux进入telnet和推出telnet

安装telnet centos7 yum install -y telnet ubuntu apt install -y telnet 进入telnet telnet ip port 退出telnet 1. 按下下面的组合键 ctrl] 2. 输入下面命令推出 quit

电荷泵升压/降压电路

一、升压\降压电路原理分析 1、升压电路 电荷泵升压电路 VoutVa5V 5V_PLUS0V时&#xff0c;Va给C2充电&#xff0c;C2上节点电压比C2下节点电压高Va&#xff1b; 5V_PLUS5V时&#xff0c;C2电压不能突变&#xff0c;C2上节点电压依然比C2下节点电压高Va&#xff0c;但C2下节点…

关于AM5系列微机保护装置在某产业园配电工程中的应用-安科瑞 蒋静

1 摘要 目前&#xff0c;微机保护装置广泛应用于电力系统中&#xff0c;该类装置能够合理监测电力系统的运行状况&#xff0c;并实时记录电力系统出现故障的位置及性质&#xff0c;从而为故障的快速处理提供合理的参考信息。本文介绍的AM5系列微机保护装置&#xff0c;可以针对…

东用科技智能公交识别系统无线传输方案

在科技不断进步和人工智能快速发展的当下&#xff0c;人脸识别技术已逐渐应用于各个领域。其中&#xff0c;公共交通领域便是重要的应用场景之一。人脸识别技术的引入可以提高交通的安全性、效率及便利性。 为了实现公交公司对乘客的身份识别和安全管理的需求&#xff0c;提高运…

【Linux系统编程】进程概念详解(什么是进程?如何查看进程?)

目录 一、前言 二、 什么是进程&#xff1f; &#x1f4a6;引出进程 &#x1f4a6;进程的基本概念 &#x1f4a6;理解进程 ⭐描述进程--PCB&#xff08;进程控制块&#xff09; ⭐组织进程 三、查看进程 &#x1f4a6; 通过 ps 命令查看进程 &#x1f4a6; 通过 l…

口袋参谋:如何识别买家旺旺号?这招超简单!

​想要不被骗钱、跑路&#xff01;那商家在销量递增之前&#xff0c;一定要验买家旺旺号&#xff01;那如何快速验出买家是人还是“鬼”&#xff0c;我们就需要借助验号工具了。 说到这个验号工具&#xff0c;我不得不说&#xff0c;口袋参谋照妖镜查号功能&#xff0c;一键快速…

2021年12月 Scratch图形化(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共15题,每题2分,共30分) 第1题 下图两个积木的值分别是? A:false true B:false false C:true true D:true false 答案:A 第2题 小猫和小狗是非常好的朋友,他们发明了一种加密方法:用两位数字代表字母。…

Pytest自动化测试框架完美结合Allure

简介 Allure Framework是一种灵活的、轻量级、多语言测试报告工具。 不仅可以以简洁的网络报告形式非常简洁地显示已测试的内容&#xff0c; 而且还允许参与开发过程的每个人从日常执行中提取最大程度的有用信息和测试。 从开发/测试的角度来看&#xff1a; Allure报告可以…