简单的数据可视化

日常

今天还是在到处填坑,ubuntu18.04安装python2没有pip,安装pip又说没有这没有那的,安装setuptools的时候又缺少什么一大堆,果断放弃来到Windows。
结果Windows编译caffe又忙活了一天,因为我的环境是vs2017所以还是要安装点插件的。然后就是在anaconda中建立一个python2的虚拟环境,再去安装caffe和digits。不过现在digits还没有安装好,所以关于win10上搭建caffe+tensorflow-gpu+digits的问题我想等全部都弄好了再单独来说一次。在下载东西和稍微放松的时候呢,我就会去看看python相关的,然后看到两个数据可视化的小项目动手做了一下,耗时都不长,有兴趣的可以当练练手。

项目1:全球GDP数据图

准备:

win10+jupyter notebook(python3.7)
数据来源:https://datahub.io/core/gdp
在这里插入图片描述
在这里点击csv会跳转到数据界面,然后右键另存为就可以下载了。
注意:文件名后缀是.txt,需要把最后txt去掉,变成csv文件。

接下来是代码部分:

首先需要pygal和pygal_maps_world这个库,在cmd中pip install pygal
pip install pygal_maps_world,然后上代码。

from pygal.maps.world import COUNTRIES
from pygal_maps_world.maps import World
from pygal.style import RotateStyle as RS, LightColorizedStyle as LCS
import csv


def get_country_code(country_name):
    """查询国家名字对应的两位代码"""
    for code, name in COUNTRIES.items():
        if name == country_name:
            return code
        elif country_name == 'Bolivia':
            return 'bo'
        elif country_name == 'Congo, Dem. Rep.':
            return 'cd'
        elif country_name == 'Congo, Rep.':
            return 'cg'
        elif country_name == 'Dominica':
            return 'do'
        elif country_name == 'Egypt, Arab Rep.':
            return 'eg'
        elif country_name == 'Gambia, The':
            return 'gm'
        elif country_name == 'Hong Kong SAR, China':
            return 'hk'
        elif country_name == 'Iran, Islamic Rep.':
            return 'ir'
        elif country_name == 'Korea, Dem. Rep.':
            return 'kp'
        elif country_name == 'Korea, Rep.':
            return 'kr'
        elif country_name == 'Kyrgyz Republic':
            return 'kg'
        elif country_name == 'Lao PDR':
            return 'la'
        elif country_name == 'Libya':
            return 'ly'
        elif country_name == 'Macao SAR, China':
            return 'mo'
        elif country_name == 'Macedonia, FYR':
            return 'mk'
        elif country_name == 'Moldova':
            return 'md'
        elif country_name == 'Slovak Republic':
            return 'sk'
        elif country_name == 'Tanzania':
            return 'tz'
        elif country_name == 'Venezuela, RB':
            return 've'
        elif country_name == 'Vietnam':
            return 'vn'
        elif country_name == 'Yemen, Rep.':
            return 'ye'
    # 未找到则返回None
    return None
 

# 将数据加载到一个列表中
'''这里open(' ')里面填上自己下载后的路径,
如果和jupyter notebook在同一路径就直接写文件名即可'''
with open('gdp.csv') as f:
    reader = csv.reader(f)
    head_row = next(reader)
    di_gdp = {}
    for row in reader:
        try:
            country_name = row[0]
            year = row[2]
            value = int(float(row[3]))
        except ValueError:
            print('missing date')
        else:
            # 设置筛选年份为2015
            if year == '2015':
                code = get_country_code(country_name)
                if code:
                    di_gdp[code] = value

# 根据人口数量进行分类
di_gdp1, di_gdp10, di_gdp100 = {}, {}, {}
for co, gdp in di_gdp.items():
    if gdp < 1e+11:
        di_gdp1[co] = gdp
    elif gdp < 1e+12:
        di_gdp10[co] = gdp
    else:
        di_gdp100[co] = gdp

 

 

# 呈现数据
wm_style = RS('#336699', base_style=LCS)#这里是图像风格设置
wm = World(style=wm_style)
wm.title = 'World GDP in 2015, by Country'#标题
#添加标签和数据
wm.add('0-10b', di_gdp1)
wm.add('10b-1tn', di_gdp10)
wm.add('>1tn', di_gdp100)
#画出图形
wm.render_to_file('world_gdp.svg')

运行完成后在同一目录下找到world_gdp.svg,用浏览器方式打开就可以看到图形了。

结果图

在这里插入图片描述

项目二:天气数据图

准备:

win10+jupyter notebook(python3.7)
需要的库有requests,bs4,pandas,matplotlib。
这些还是老规矩,先pip install

看到requests和bs4一下就联想到什么?对,爬虫。
不过,因为目标网站没什么反爬机制而且数据量也不大,所以只用了很简单的爬虫,毕竟重点在数据可视化。爬虫相关的我以后也会慢慢说,什么scrapy爬取微博然后利用评论做感情分析,就是上个学期做的一个小作业。当然也经常用到Request、BeautifuSoap、urlib等等库啊以及portia,pyspider,restkit这些比较高级的,一般都是哪天遇到就聊聊,也当自己复习一下。

好,不多扯了回到项目

代码部分:

#1.数据爬取部分

import requests
from bs4 import BeautifulSoup
import pandas as pd

#目标网址
url1='http://www.tianqihoubao.com/lishi/wuhan/month/201901.html'
url2='http://www.tianqihoubao.com/lishi/wuhan/month/201902.html'
url3='http://www.tianqihoubao.com/lishi/wuhan/month/201903.html'
url4='http://www.tianqihoubao.com/lishi/wuhan/month/201904.html'
url5='http://www.tianqihoubao.com/lishi/wuhan/month/201905.html'
url6='http://www.tianqihoubao.com/lishi/wuhan/month/201906.html'

def get_data(url):
    resp=requests.get(url)

    #查看网页源代码
    #print(resp.text)


    #二进制网页内容
    html=resp.content.decode('gbk')
    soup=BeautifulSoup(html,'html.parser')
    #print(soup)
    tr_list=soup.find_all('tr')
    #print(tr_list)
    
    dates,conditions,temp=[],[],[]
    for data in tr_list[1:]:
        sub_data=data.text.split()
        #print(sub_data)
        dates.append(sub_data[0])
        conditions.append(''.join(sub_data[1:3]))
        temp.append(''.join(sub_data[3:6]))
    _data=pd.DataFrame()
    _data['日期']=dates
    _data['天气状况']=conditions
    _data['气温']=temp
    return _data
      
    
    
data_1_month=get_data(url1)
data_2_month=get_data(url2)
data_3_month=get_data(url3)
data_4_month=get_data(url4)
data_5_month=get_data(url5)
data_6_month=get_data(url6)

data=pd.concat([data_1_month,data_2_month,data_3_month,data_4_month,data_5_month,data_6_month]).reset_index(drop=True)
data.to_csv('wuhan.csv',index=False,encoding='utf-8')

运行好会看到同目录下新增wuhan.csv文件。
可以打开看一下内容
在这里插入图片描述
一般人都喜欢看到直观的图片,所以我们开始把数据转化为图片

#2.数据可视化部分

import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']  #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False   #用来正常显示负号
%matplotlib inline


data=pd.read_csv('wuhan.csv')
#查看前五行数据
data.head()

在这里插入图片描述
不管是数据可视化还是机器学习或者数据分析,查看数据是否有缺失都是必不可少的,如果有缺失就要想办法填补缺失数据(有的时候会用到随机森林预测填补)

#看看数据是否有缺失
data.info()

在这里插入图片描述

#增加最高气温和最低气温并且转换其类型,变成int类型
data['最高气温']=data['气温'].str.split('/',expand=True)[0].map(lambda x:int(x.replace('℃','')))
data['最低气温']=data['气温'].str.split('/',expand=True)[1].map(lambda x:int(x.replace('℃','')))
dates=data['日期']
highs=data['最高气温']
lows=data['最低气温']
#查看一下变化后的数据
data.head()

在这里插入图片描述

#绘制可视化图形
#alpha=0完全透明,=1完全不透明
fig=plt.figure(dpi=128,figsize=(10,6))

#按照日期绘制最高温和最低温的曲线
plt.plot(dates,highs,c='red',alpha=0.5)
plt.plot(dates,lows,c='green',alpha=0.5)

#图标上色
plt.fill_between(dates,highs,lows,facecolor='blue',alpha=0.2)


#设置图形格式
plt.title('2019武汉天气图',fontsize=24)#图表标题
plt.xlabel('日期',fontsize=12)#x轴标签
fig.autofmt_xdate()#防止标签重叠
plt.ylabel('气温',fontsize=12)#y轴标签
plt.tick_params(axis='both',which='major',labelsize=10)

plt.xticks(dates[::10])

#绘制图形
plt.show()

在这里插入图片描述

总结

插一些无关的话

我本身就是学大数据专业的,最近偶尔看看B站,看到好多什么机器学习呀,深度学习呀还有数据分析,金融交易分析这方面的内容,有的东西确实简单易懂容易上手,适合初学者去自己敲敲代码做着玩一下。比如项目二就是我下午无意看到的,大概一个小时的视频,不过熟悉的话可以不用一直跟着他,看了他大致的思想自己写写代码其实发现根本不难,可视化结果看着也还比较高大上。这样可以当放松同时也可以当复习,不然我怕每天学java忘了python,哈哈哈。另外,建议如果不是真心想学大数据人工智能这方面的伙伴们不要过多关注机器学习和深度学习的视频,好多人可能觉得听起来很高大上就跟着视频代码敲一遍,最后看到结果很满意。当成练手娱乐非常支持,但是耗费过多时间就不好了,耽误了自己本身要学的其他课程。因为了解到好多人看了视频,调用了sklearn里面的几个模型,自己调调参数就觉得自己会了机器学习,然后越看越多,各种模型都试一次,忘了自己本来要做的事,到最后你真的学会了机器学习吗?那些算法背后的数学原理你认真研究过吗?一个简单的梯度下降算法和逻辑回归你自己能试着写的出来吗?所以,还是先专注手头上的课程,然后把这些当休闲吧。如果有志同道合想学这方面的伙伴也欢迎,我可以为还没进入这个专业的伙伴们大概讲讲我的学习经历希望对你们有帮助,同时也想多交些朋友遇到问题可以讨论,也期待大牛们来指导一下我。

我学习机器学习的经历很简单,手上只有一本周志华老师的西瓜书。反复的看,把书上每一个公式都自己试着推导一遍,虽然我大一线代97但是一开始看那些矩阵运算还是一脸懵的(矩阵求导,偏导的公式和各种变化不懂及时百度搜),所以这本书真的很有难度,适合反复研究吃透。把各个模型用于什么问题,是回归的还是分类的,分类是二分类还是多分类要能熟练区分,各种专有名词(什么混淆矩阵,查全率,查准率,训练集,测试集以及英文表示记熟),等原理了解之后再试着自己写出模型的代码,看最后自己写的模型性能如何,平时也要多关注这方面的知识。毕竟我爱python,爱ML嘛(老司机开车,嘻嘻嘻)

真正的总结

在这个时代,信息发展快,数据的重要性不言而喻,而分析数据就更为重要。如何把一堆数据变成金钱呢,或许就是这个时代的‘点石成金’。
今天写数据可视化其实只是很基本的东西,一般整个流程是:数据收集(现有数据或者爬虫爬取一些数据)–>数据处理(数据加工,数据清洗,数据整理等一系列过程)–>数据分析(对比分析,分组分析,交叉分析,结构分析等等,会使用到机器学习算法,最后建立模型)–>数据可视化(画出柱状图,条形图,饼图,词云图等等)–>写出分析报告(依赖得到的模型和可视化图形,告诉别人你的结论)
暑假这段时间呢因为没有课,所以每天都有时间来分享一些东西。明天开始呢我可能就会连着写一些关于数据分析的内容,因为这个就比较模式化,原理也不难。好了,洗澡然后继续学下java去了,溜了溜了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shelgi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值