总结
此次学习任务,主要包含从文件读取数据和从网页抓取数据两种数据获取方式;并使用DataFrame和正则表达式对数据进行处理,最后对数据进行可视化处理。
文件读取
-
open函数
open(name|path,mode)
name|path :为文件名或文件路径;
mode:打开文件的模式,分为只读(r、r+)、只写(w、w+)、追加(a、a+)等。 -
file对象方法
fille.read([size]) # size指定为读取文件的大小,若未指定则返回整
file.readline() # 返回一行
file.readlines([size]) # 返回size行数据,未指定则返回全部行
for line in f:print line # 通过迭代器访问
f.write(“hello\n”) # 如果要写入字符串以外的数据,先将他转换为字符串。
f.tell() # 返回一个整数,表示当前文件指针的位置(就是到文件头的字节数)。
f.seek(偏移量,[起始位置]) # 用来移动文件指针。偏移量: 单位为字节,可正可负;起始位置: 0 - 文件头, 默认值; 1 - 当前位置; 2 - 文件尾
f.close() #关闭文件 -
With语句
使用以上语句进行文件读取时,可能出现以下问题:
- 忘记关闭文件句柄;(若不及时关闭文件句柄,可能造成对文件操作的失败
- 文件读取数据发生异常时,没有进行处理;(造成程序中断,代码鲁棒性差)
with语句可以解决以上两个问题。
with open("arxiv-metadata-oai-2019.json", 'r') as f
-
json文件的读取
json包用于处理json文件
json.loads() # 将json数据处理成数组
数据预处理
- pandas.DataFrame() 将数据由List转换成DataFrame类型,方便使用pandas进行数据处理及分析;
- pandas.describe() 返回DataFrame的统计量,观察数据的大小、波动趋势等。
- split() 通过指定分隔符对字符串进行切片
- 年、月、日提取 pd.to_datetime(data[“update_date”]).dt.year ,将update_date从str变为datetime格式,并提取处year
- 根据条件提取行数据 data[data[“year”] >= 2019]
- 数据重新编号:pandas.reset_index()
- data1.merge(data2,on,how) data1和data2做数据合并,并以on指定列,how指定方式做连接;
- data.groupby(“group_name”).agg({“id”:“count”}) 分组后去计数值
- data1.sort_values() 排序
网络数据爬取
-
包:requests 此部分参考资料:
-
主要方法:
-
对象属性:
-
包BeautifulSoup 为Python解释器,为用户提供不同的解析策略或速度
BeautifulSoup(html,‘lxml’) 以lxml形式解析html
BeautifulSoup.find() 返回找到的第一个标签
BeautifulSoup.find_all() 以list形式返回找到的所有标签
正则表达式
-
正则表达式中的符号
-
example
re.sub(r"(.*)\((.*)\)",r"\2", " Astrophysics(astro-ph)") # 将字符串匹配为2部分,并取第二部分
数据可视化
import matplotlib.pyplot as plt #画图工具
fig = plt.figure(figsize=(15,12))
explode = (0, 0, 0, 0.2, 0.3, 0.3, 0.2, 0.1)
plt.pie(_df["id"], labels=_df["group_name"], autopct='%1.2f%%', startangle=160, explode=explode)
plt.tight_layout()
plt.show()