Python数据可视化------下载数据

简介: Python数据可视化------下载数据

CSV文件格式:

要在文本文件中存储数据,一个简单的方式是将数据作为一系列以逗号分隔的值(comma——separated)写入文件。这样的文件称为CSV文件。


举例:

USWA,weather,01,02
aaa,bbb,ccc,02,04

阅读CSV文件对于我们来说不宜阅读,但使用程序进行处理会很简单。

分析文件头:

import csv#csv模块是包含在Python标准库中 ,可用于分析CSV文件中的数据行
#使用我们之前学过的文件操作的内容打开文件
filename='sitka_weather_07-2018_simple.csv'
with open(filename) as f:
    reader=csv.reader(f)#调用csv.reader()并将存储的文件作为实参传递给它
    #为了创建一个与该文件相关联的阅读器对象
    header_row=next(reader)#next()函数,返回文件中的下一行
    #由于只调用了一次next()函数,因此得到的是文件的第一行
    print(header_row)

输出结果为该文件的文件头:

reader处理文件中以逗号分隔的第一行数据,并将每项数据都作为一个元素存储在列表中。

['STATION', 'NAME', 'DATE', 'PRCP', 'TAVG', 'TMAX', 'TMIN']

打印文件头及其位置:

为了让文件数据更加容易理解,现在我们将每个文件头及其位置打印出来:

import csv
filename='sitka_weather_07-2018_simple.csv'
with open(filename) as f:
    reader=csv.reader(f)
    header_row=next(reader)
    #调用enumerate()来获取每个元素的索引及其值
    for index,column_header in enumerate(header_row):
        print(index,column_header)

输出每个文件头的索引:

0 STATION
1 NAME
2 DATE
3 PRCP
4 TAVG
5 TMAX
6 TMIN

从输出的索引内容可得,名称在第二行,它的索引值为1,日期在第三行,它的索引值为2等等。

提取并读取文件:

假设现在我们想要读取每天的最高气温:

import csv
filename='sitka_weather_07-2018_simple.csv'
with open(filename) as f:
    reader=csv.reader(f)
    header_row=next(reader)
    highs=[]#用来存储我们读取的数据
    for row in reader:#遍历CSV文件剩下的部分
    #由于上面我们已经读取了文件的第一行,所以阅读器将从上次停留的地方继续往下读,也就是第二行开始
        high=int(row[5])#每次读取文件的索引值为5的那部分
        highs.append(high)
print(highs)

如下所示,我们输出了文件索引值为5的部分,也确实是最高温度。


[62, 58, 70, 70, 67, 59, 58, 62, 66, 59, 56, 63, 65, 58, 56, 59, 64,
 60, 60, 61, 65, 65, 63, 59, 64, 65, 68, 66, 64, 67, 65]

绘制温度图表:

前面我们学习了Matplotlib,现在我们就可以可视化这些温度数据。

举例:

import csv
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
filename = 'sitka_weather_07-2018_simple.csv'
with open(filename) as f:
   ---snip---
plt.style.use("seaborn")#根据最高温度绘制图表
fig, ax = plt.subplots()
ax.plot(highs, c="red")
#设置横纵坐标标签等
ax.set_title("2018年7月每日最高温度",fontsize=24)
ax.set_xlabel('',fontsize=16)
ax.set_ylabel('温度(F)',fontsize=16)
ax.tick_params(axis='both',which='major',labelsize=16)
plt.show()

输出效果如下图所示:

图片呈现给我们的内容并不是完美的,它只是反映出了温度的变化趋势,而并没有表明某日期对应的相关温度。

下面我们就对其进行优化,给它添加日期,在添加之前,我们先来学习模块datetime


模块datetime:

from datetime import datetime#导入日期模块中的datetime类
first_date=datetime.strptime("2018-07-01","%Y-%m-%d")#方法strptime是将包含日期的字符串作为第一个参数,而第二个参数表明日期的格式
print(first_date)

输出结果如下:

2018-07-01 00:00:00

方法strptime()可接受各种实参,并且可根据实参来解读对应的日期:

如下图所示:

在图表中添加日期:

import csv
from datetime import datetime
import matplotlib.pyplot as plt
import matplotlib
plt.style.use('seaborn')
plt.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['font.family']='sans-serif'
filename = 'sitka_weather_07-2018_simple.csv'
with open(filename) as f:
    reader = csv.reader(f)
    header_row = next(reader)
    dates,highs = [],[]  # 用来存储我们读取的数据
    for row in reader:  # 遍历CSV文件剩下的部分
        # 由于上面我们已经读取了文件的第一行,所以阅读器将从上次停留的地方继续往下读,也就是第二行开始
        current_date=datetime.strptime(row[2],"%Y-%m-%d")
        high=int(row[5])
        dates.append(current_date)
        highs.append(high)
fig,ax = plt.subplots()
ax.plot(dates,highs, c="red")
ax.set_title("2018年7月每日最高温度",fontsize=24)
ax.set_xlabel('',fontsize=16)
fig.autofmt_xdate()
ax.set_ylabel("温度(F)",fontsize=16)
ax.tick_params(axis='both',which='major',labelsize=16)
plt.show()

涵盖更长的时间:

上面我们可视化的数据为7月份一个月的天气,现在我们尝试可视化一整年的数据:

---snip---
filename = 'sitka_weather_2018_simple.csv'#打开覆盖一整年数据的文件
with open(filename) as f:
    reader = csv.reader(f)
    header_row = next(reader)
    highs = [] # 用来存储我们读取的数据
    for row in reader:  # 遍历CSV文件剩下的部分
        # 由于上面我们已经读取了文件的第一行,所以阅读器将从上次停留的地方继续往下读,也就是第二行开始
        high=int(row[5])
        highs.append(high)
fig,ax = plt.subplots()
ax.plot(highs, c="red")
ax.set_title("2018年每日最高温度",fontsize=24)
---snip---

如下图所示,输出一整年的温度数据。

数据系列结合:

上面我们对2018一整年的最高温度数据进行可视化,为了能够更加了解一整年的温度情况,我们可以尝试将最低温度和最高温度数据结合,进行可视化分析:



对上述代码增加读取最低温度部分的代码,再修改图像的标签即可。

        low=int(row[6])
        lows.append(low)
ax.plot(dates,lows, c="blue")
ax.set_title("2018年7月每日最高温度与最低温度",fontsize=24)

输出如下图所示:

给图表区域着色:

---snip---
#alpha指定颜色的透明度,等于零为完全透明,等于1为完全不透明
ax.plot(dates,highs, c="red",alpha=0.5)
ax.plot(dates,lows, c="blue",alpha=0.5)
ax.fill_between(dates,highs,lows,facecolor='blue',alpha=0.1)#调用fill__between()函数,该函数的作用是填充两条水平曲线之间的区域
#fill__betweenx()函数的作用是填充两条垂直曲线之间的区域
---snip---

错误检查:

在对天气的数据进行可视化时,我们应做到让任意地方的天气能够运行我们编写的代码,从而使任何地方的天气数据都能进行可视化,但是,在收集数据的过程中,我们很难保证数据的种类等是一致的,比如,信心的不完整或缺损都可能会引发异常。

举例:

import csv
from datetime import datetime
import matplotlib.pyplot as plt
import matplotlib
filename="death_valley_2018_simple.csv"
with open(filename) as f:
    reader=csv.reader(f)
    header_row=next(reader)
    dates,highs,lows=[],[],[]
    for row in reader:
        current_date=datetime.strptime(row[2],"%Y-%m-%d")
        high=int(row[4])
        low=int(row[5])
        dates.append(current_date)
for index,conlumn_header in enumerate(header_row):
    print(index,conlumn_header)

程序并没有正确运行,编译器报告给我们无法处理其中一天的最高温度,原因是无法将空字符串(‘ ’)转化为整数。

Traceback (most recent call last):
  File "C:/Users/Lenovo/PycharmProjects/pythonProject4/project1.py", line 42, in <module>
    high=int(row[4])
ValueError: invalid literal for int() with base 10: ''

而当我们打开这个文件就可以找到文件中确实缺失了一些数据。

既然我们发现异常,就要想办法去处理它,处理它的办法即为我们之前学过的try-except-else代码块。

处理异常:

---snip---
    for row in reader:
        current_date=datetime.strptime(row[2],"%Y-%m-%d")
        #对异常进行处理
        try:
            high=int(row[4])
            low=int(row[5])
        except ValueError:
            print(f"Missing data for{current_date}")
        else:
            dates.append(current_date)
            highs.append(high)
            lows.append(low)
 #描绘图表内容
title="2018年每日最高温度和最低温度\n美国加利福尼亚州死亡谷"
fig,ax = plt.subplots()
ax.plot(dates,highs, c="red",alpha=0.5)
ax.plot(dates,lows, c="blue",alpha=0.5)
ax.fill_between(dates,highs,lows,facecolor='blue',alpha=0.1)
ax.set_title(title,fontsize=20)
ax.set_xlabel('',fontsize=16)
plt.show()

当我们对该异常进行处理之后,输出结果如下:

此时编译器并没有直接报错,而是给我们指出缺少2018年2-18日这一天的数据。

Missing data for2018-02-18 00:00:00

使用try-except-else代码块对异常进行处理后,代码将忽略该天的异常,而生成除了该天以外的图像。

相关文章
|
2天前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
34 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
4天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
23 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
4天前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
29 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
6天前
|
数据采集 数据安全/隐私保护 Python
从零开始:用Python爬取网站的汽车品牌和价格数据
在现代化办公室中,工程师小李和产品经理小张讨论如何获取懂车帝网站的汽车品牌和价格数据。小李提出使用Python编写爬虫,并通过亿牛云爬虫代理避免被封禁。代码实现包括设置代理、请求头、解析网页内容、多线程爬取等步骤,确保高效且稳定地抓取数据。小张表示理解并准备按照指导操作。
从零开始:用Python爬取网站的汽车品牌和价格数据
|
1天前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
22 12
|
1月前
|
前端开发 搜索推荐 编译器
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
111 34
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
|
1月前
|
数据采集 Web App开发 数据可视化
Python用代理IP获取抖音电商达人主播数据
在当今数字化时代,电商直播成为重要的销售模式,抖音电商汇聚了众多达人主播。了解这些主播的数据对于品牌和商家至关重要。然而,直接从平台获取数据并非易事。本文介绍如何使用Python和代理IP高效抓取抖音电商达人主播的关键数据,包括主播昵称、ID、直播间链接、观看人数、点赞数和商品列表等。通过环境准备、代码实战及数据处理与可视化,最终实现定时任务自动化抓取,为企业决策提供有力支持。
|
2月前
|
数据可视化 数据挖掘 DataX
Python 数据可视化的完整指南
Python 数据可视化在数据分析和科学研究中至关重要,它能帮助我们理解数据、发现规律并以直观方式呈现复杂信息。Python 提供了丰富的可视化库,如 Matplotlib、Seaborn、Plotly 和 Pandas 的绘图功能,使得图表生成简单高效。本文通过具体代码示例和案例,介绍了折线图、柱状图、饼图、散点图、箱形图、热力图和小提琴图等常用图表类型,并讲解了自定义样式和高级技巧,帮助读者更好地掌握 Python 数据可视化工具的应用。
126 3
|
2月前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
2月前
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。

热门文章

最新文章

推荐镜像

更多