一.项目介绍

首先分析美国总统竞选这个项目是一个烂大街的项目,但是他的确是一个适合Python新手入门的数据处理项目。

本人在大二刚刚学习了Python数据处理,学习时间不超过5个小时,但是已经可以完成基本的数据处理了。

首先来看项目:

得到的数据就是又分csv文件(就是用逗号隔开的纯文本文件),如下:

而我们需要的是图形,可视化的数据,能够将数据直观的展现出来,结果如下:

好,废话不多说,来看看怎么处理数据。

二.项目操作

2.1数据的导入——将csv文件数据导入MySQL

由于我们的数据是放在csv文件中的,我们可以将csv文件中的数据导入MySQL中,利用MySQL的数据处理能力来简化项目复杂度。

我们首先来看看这个csv文件:一共含有十几列

但是其中只有7列使我们需要的,也就是state州名,enddate截止日期,grade评分,三位参选人的得票概率,id

那么我们将这七列全部单独拿出来如下:

那么我们现在将这7列导入MySQL中,首先建一个表存放这7列数据,SQL语句如下:

  1. use py_us_pre_ele;
  2. create table if not exists tab(#表
  3. state varchar(20),#州名
  4. enddate varchar(10), #截止时间
  5. grade varchar(5),#评分
  6. clinton varchar(15),#希拉里所占的比例
  7. trump varchar(15),#川普所占的比例
  8. johnson varchar(15),#强生所占的比例
  9. id varchar(10) primary key
  10. );

我们必须保证每一条数据的poll_id都是不重复,因为我们表的id列是主键。

下面我们要来导入数据,直接通过MySQL的load方法来导入,在MySQL中写下如下代码:

  1. load data infile 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\presidential_polls.csv' into table tab
  2. fields terminated by ','
  3. enclosed by '"'
  4. lines terminated by '\r\n';

上面的sql语句有一点需要注意那就是你必须将你的导入文件放入到放入到你的MySQL指定的Uploads文件夹下,如果你的MySQL是默认安装复制这个路径即可:

  1. C:\ProgramData\MySQL\MySQL Server 8.0\Uploads

执行语句后,我们来看看这我们的表

嗯,没问题,一万条数据已经导入。

 2.2找出投票中的所有州

为了按照州来查询数据,我们首先要得到所有的州,利用set集合来处理重复名称,并将所有的州名保存在本地文件中。

代码如下:

  1. import pymysql
  2.  
  3. #获得数据库的链接
  4. def getdb():
  5. conn_db = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="", db="py_us_pre_ele", charset="utf8")
  6. return conn_db
  7.  
  8. #得到数据库中的所有的城市
  9. def get_all_city(db):
  10. set={""}#创建一个set集合,用来放置所有的城市
  11. str_sql="select state from tab"#查找到所有的城市语句
  12. cur=db.cursor()#得到cursor对象
  13. cur.execute(str_sql)#执行sql语句
  14. rows=cur.fetchall()#得到结果集
  15. for row in rows:#将城市加入到不重复的set集合中
  16. set.add(row)
  17. set.remove("")
  18. with open("all_cities.txt", "w") as f:
  19. for ele in set:
  20. f.write(str(ele)+"\n")
  21.  
  22. def main():
  23. get_all_city(getdb())
  24.  
  25. if __name__ == '__main__':
  26. main()
  27. print("程序完成")

得到州的名称以后我们利用matplotlib库来画出饼图,利用easyui来进行简单包装。

代码如下:

  1. import easygui as g
  2. import pymysql
  3. import matplotlib.pyplot as plt
  4. from pylab import mpl
  5. mpl.rcParams['font.sans-serif'] = ['SimHei']#插入中文不会出现空格
  6. import random
  7.  
  8. #得到所有的州的名称
  9. states = {"U.S."}
  10. list=[]
  11. def get_state(): # 将所有的州写入全局变量中
  12. for line in open("all_cities.txt", "r"): # 设置文件对象并读取每一行文件
  13. line = line[:-1] # 去除换行符
  14. states.add(line.split("'")[1]) # 将每一行文件加入到state中,只有州的名称
  15.  
  16. def main():
  17. # 启动界面
  18. g.msgbox("\n\n\t\t\t\t美国大选的数据处理", ok_button='打开', title="美国大选的数据处理")
  19. #得到所有的州的名称
  20. get_state()
  21. reply = g.choicebox("选择的州", choices=states)
  22. #如果有选择则确认选择的州
  23. if reply!=None :
  24. YN=g.boolbox(msg='\n\n\n\t\t\t\t确定你的选择:'+reply, title='确认选择', choices=('Yes', 'No'), image=None)
  25. if YN==True:#完成了最终的确认
  26. sql="select clinton,trump,johnson,grade,id from tab where state='"+reply+"'"#构造sql语句查找数据
  27. db = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="", db="py_us_pre_ele",charset="utf8")#得到一个物理会话
  28. cur = db.cursor()#得到一个cursor对象
  29. cur.execute(sql)#执行sql语句
  30. for i in range(cur.rowcount - 1):#去除列名
  31. row = cur.fetchone()
  32. if 'a' not in row[0]:#防止列名
  33. clinton = float(row[0].strip())
  34. trump = float(row[1].strip())
  35. johnson = float(row[2].strip())
  36. tup = (clinton, trump, johnson)
  37. list.append(tup)
  38. paint(tup, reply, row[3], row[4])
  39. con=g.buttonbox(reply + "州的第" + row[4] + "号" + "图片" + "评论机构评分;" + row[3], image=str(row[4]) + 'pie.png',
  40. choices=("下一张", "退出"))
  41. if con=="退出":
  42. exit("退出")
  43. else:
  44. g.msgbox("程序退出")
  45.  
  46. def paint(tup,state,grade,id):#画图
  47. label_list = ["川普", "希拉里", "强生", "弃权票"] # 各部分标签
  48. size = [tup[0], tup[1], tup[2], (100-tup[0]-tup[1]-tup[2])] # 各部分大小
  49. color = ["red", "green", "blue", "yellow"] # 各部分颜色
  50. explode = [0.05, 0, 0, 0] # 各部分突出值
  51. patches, l_text, p_text = plt.pie(size, explode=explode, colors=color, labels=label_list, labeldistance=1.1,
  52. autopct="%1.1f%%", shadow=False, startangle=90, pctdistance=0.6)
  53. plt.axis("equal") # 设置横轴和纵轴大小相等,这样饼才是圆的
  54. plt.legend()
  55. ran_num = random.sample(range(10000), 1)
  56. plt.savefig(str(id)+'pie.png')
  57. plt.show()
  58.  
  59. if __name__ == '__main__':
  60. main()

运行这个脚本,就可以得到一个简单小软件了,意向的可以留下邮箱,发给你csv文件

码云地址: https://gitee.com/Sam_chengjiaming/python_Processing_election_data

  1.  

项目实战利用Python来看美国大选的更多相关文章

  1. H2O中的随机森林算法介绍及其项目实战(python实现)

    H2O中的随机森林算法介绍及其项目实战(python实现) 包的引入:from h2o.estimators.random_forest import H2ORandomForestEstimator ...

  2. python数据分析美国大选项目实战(三)

    项目介绍 项目地址:https://www.kaggle.com/fivethirtyeight/2016-election-polls 包含了2015年11月至2016年11月期间对于2016美国大 ...

  3. python工业互联网监控项目实战4—python opcua

    前面章节我们采用OPC作为设备到上位的信息交互的协议,本章我们介绍跨平台的OPC UA.OPC作为早期的工业通信规范,是基于COM/DCOM的技术实现的,用于设备和软件之间交换数据,最初,OPC标准仅 ...

  4. 给缺少Python项目实战经验的人

    我们在学习过程中最容易犯的一个错误就是:看的多动手的少,特别是对于一些项目的开发学习就更少了! 没有一个完整的项目开发过程,是不会对整个开发流程以及理论知识有牢固的认知的,对于怎样将所学的理论知识应用 ...

  5. 利用python开发app实战

    你说,我们的未来 被装进棺材,染不上尘埃 *** 我很早之前就想开发一款app玩玩,无奈对java不够熟悉,之前也没有开发app的经验,因此一直耽搁了.最近想到尝试用python开发一款app,goo ...

  6. 洗礼灵魂,修炼python(82)--全栈项目实战篇(10)—— 信用卡+商城项目(模拟京东淘宝)

    本次项目相当于对python基础做总结,常用语法,数组类型,函数,文本操作等等 本项目在博客园里其他开发者也做过,我是稍作修改来的,大体没变的 项目需求: 信用卡+商城: A.信用卡(类似白条/花呗) ...

  7. python操作三大主流数据库(10)python操作mongodb数据库④mongodb新闻项目实战

    python操作mongodb数据库④mongodb新闻项目实战 参考文档:http://flask-mongoengine.readthedocs.io/en/latest/ 目录: [root@n ...

  8. Jenkins部署Python项目实战

    一.背景 我们工作中常用Jenkins部署Java代码,因其灵活的插件特性,例如jdk,maven,ant等使得java项目编译后上线部署一气呵成,同样对于脚本语言类型如Python上线部署,利用Je ...

  9. 机器学习_线性回归和逻辑回归_案例实战:Python实现逻辑回归与梯度下降策略_项目实战:使用逻辑回归判断信用卡欺诈检测

    线性回归: 注:为偏置项,这一项的x的值假设为[1,1,1,1,1....] 注:为使似然函数越大,则需要最小二乘法函数越小越好 线性回归中为什么选用平方和作为误差函数?假设模型结果与测量值 误差满足 ...

随机推荐

  1. 接口测试--postman简介

    一.什么是接口测试 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点.测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑 ...

  2. C++ leetcode Longest Substring Without Repeating Characters

    要开学了,不开森.键盘声音有点大,担心会吵到舍友.今年要当个可爱的技术宅呀~ 题目:Given a string, find the length of the longest substring w ...

  3. Vuejs选项卡案例

    css .active { color: red; border-bottom: 1px solid red; } ul li { padding: 0 15px; float: left; list ...

  4. ActiveMQ producer 提交事务时突然宕机,会发生什么

    producer 在提交事务时,发生宕机,commit 的命令没有发送到 broker,这时会发生什么? ActiveMQ 开启事务发送消息的步骤: session.getTransactionCon ...

  5. vs2015 出现Lc.exe 已退出,代码为-1的问题,如何解决

    今天在代码运行时,出现lc.exe已退出,代码为-1 的问题

  6. 字符串和数组----vector

    vector能容纳绝大多数类型的对象作为其元素,但是因为引用不是对象,所以不存在包含引用的vector. 使用vector需要包含头文件vector. 1.初始化vector对象的方法 1)vecto ...

  7. MAVEN 创建 JAR项目

    从Maven模板创建一个项目 在终端或命令提示(windows)中,浏览到要创建JAVA项目的文件夹下 键入如下命令: mvn archetype:generate -DgroupId={projec ...

  8. django+xadmin+echarts实现数据可视化

    使用xadmin后功能比较强大,在后台展示统计图表,这个需求真的有点烫手,最终实现效果如下图: xadmin后台与echarts完全融合遇到以下问题: 1.没有现成的数据model 2.获得指定时间段 ...

  9. [Linux]Linux下rsync服务器和客户端配置

    一.rsync简介 Rsync(remote sync)是UNIX及类UNIX平台下一款神奇的数据镜像备份软件,它不像FTP或其他文件传输服务那样需要进行全备份,Rsync可以根据数据的变化进行差异( ...

  10. :复合模式:duck

    #ifndef __QUAKEABLE_H__ #define __QUAKEABLE_H__ #include <iostream> #include <vector> us ...