2.下载数据 16章相关问题
1.csv相关函数
1.1 csv.reader()
在书上并没有添加b标志参数,这里先不涉及,我们先讨论返回值
import csv
filename = 'data/sitka_weather_07-2018_simple.csv'
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
print(header_row)
返回值是\(reader\)对象,这里的\(next()\)函数主要返回\(reader\)读取的下一行,返回值是一个以字符串为元素的列表(默认).如果我们用\(for\)循环遍历\(reader\)默认也是返回以字符串为元素的列表(默认)
for line in reader:
print(line)
返回值,只列部分.
['USW00025333', 'SITKA AIRPORT, AK US', '2018-07-01', '0.25', '', '62', '50']
['USW00025333', 'SITKA AIRPORT, AK US', '2018-07-02', '0.01', '', '58', '53']
['USW00025333', 'SITKA AIRPORT, AK US', '2018-07-03', '0.00', '', '70', '54']
2.matplotlib相关函数
2.1 rcparams
这是一个类字典的变量,用于存储\(matplotlib\)的一些\(rc settings\).更具体一些说,它包含\(matplotlibrc\)文件中的所列的(全部?绝大多数?)属性,用rxParams可以控制Matplotlib中的几乎所有属性,包括(但不限于):图像大小(figure size), DPI(Dots Per Inch,表示分辨率), 线宽(line width), 颜色color and 风格style等待
2.1.1 matplotlibrc文件在哪儿
我们可以用如下代码看\(matplotlibrc\)文件的路径:
print(mpl.matplotlib_fname())
\(matplotlibrc文件\)里将可以设置的属性分了类,每个类都有自己的属性,详见大佬的博客
我们设置中文时,就是修改属性值(原本配置文件中设置了缺省值)
#设置字体格式
plt.rcParams['font.sans-serif']=['SimHei']
#正常显示负号
plt.rcParams['axes.unicode_minus'] = False
2.2 autofmt_xdate函数
改变x轴坐标的显示方法可以斜着表示,不用平着挤一堆
#设置横坐标格式
fig.autofmt_xdate()
2.3 plotly和matplotlib
两个是不同的\(python\)库,但是plotly是可交互,基于浏览器的绘图库,主打功能是绘制在线可交互的图表,而Matplotlib只能生成静态的图表
3.基本类型函数
3.1 datetime
这里是涉及了一个函数\(strptime(date_string, format)\),将格式字符串转换为\(datetime\)对象,和\(java\)里的有点像
print(datetime.strptime("2017-07-16 18:06:19", "%Y-%m-%d %H:%M:%S"))
#2017-07-16 18:06:19
4.Json相关函数
4.1 load函数
\(json.load()\)用于从json文件中读取数据,将数据转化为\(python\)能处理的格式。
filename = 'data/eq_data_1_day_m1.json'
with open(filename) as f:
#将json转为Python能处理的数据格式
all_eq_data = json.load(f)
print(type(all_eq_data))
输出为\(<class 'dict'>\),说明转化为字典对象
4.2 dump函数
把python对象转换成json对象生成一个fp的文件流,和文件相关,没有返回值,\(json\)对象存储在文件.
with open(readable_file,'w') as f:
json.dump(all_eq_data,f,indent=4)
\(indent\):参数根据数据格式缩进显示,决定添加几个空格
5.plotly相关函数
虽然\(plotly\)功能强大,却一直没有得到广泛应用,大部分\(py\)开发人员,还在使用陈旧的\(matplotlib\),其中最重要的原因,就是\(plotly\)的设置过于繁琐
因此推出了\(plotly \quad express\),作为\(plot\)高级接口,这样可以简化操作.
5.1 scatter函数
因为Plotly没有自己独立的线性图形函数,所以把线性图形与散点图形全部用这一个函数实现.
下面是利用\(Ploty\)绘制散点图的一种方式.
fig = px.scatter(x=lons,y=lats,labels={'x':'经度','y':'纬度'},range_x=[-200,200],range_y=[-90,90],width=800,height=800,title='全球地震散点图')
书上还记录了一种方式是使用\(pandas\)数据分析工具,需要创建一个对象\(DataFrame\),这里构建DataFrame对象时,lons与经度对应,mags与震级对应,\(size\)设置散点尺寸.
data = pd.DataFrame(
data=zip(lons,lats,titles,mags),columns=['经度','纬度','位置','震级']
)
data.head()
fig = px.scatter(
data,
x='经度',
y='纬度',
range_x=[-200,200],
range_y=[-90,90],
width=800,
height=800,
title='全球地震散点图',
size='震级',
size_max=10,
color='震级'
)
fig.write_html('global_earthquakes2.html')
fig.show()
但是这样当鼠标指向散点时,不会显示具体位置,我们配置\(hover\_name='位置'\)即可,hover_name是悬停参数,参考大佬博客
5.2 使用其他渐变
plotly默认的渐变是下面这样的
但我们可以修改渐变色的样式,在\(scatter\)函数里添加如下即可,这里的取值可以在渐变样式里选其一
color_continuous_scale='bluyl'
使用如下代码查询所有渐变样式:
import plotly.express as px
for key in px.colors.named_colorscales():
print(key)