python做数据分析实例

Python学习 同时被 2 个专栏收录
29 篇文章 0 订阅
23 篇文章 0 订阅

本文用到的数据,可以加QQ跟群主获取:
群名称:PYTHONERS-数据
群 号:663468799
学习python和数据分析推荐地方: www.datacamp.com
获取datacamp官网会员的方式:get_datacamp()


本文用到的数据在评论区留下邮箱即可。或者点击这里可以拿到: guns.csv

第一步:

使用csv模块以列表形式读取数据集。

导入csv模块。

使用open()函数打开文件。

使用csv.reader()函数加载打开的文件。

在结果上调用list()以获取文件中所有数据的列表。

将结果分配给变量data。

显示第一5行data以验证一切。

import csv 
with open("guns.csv", "r") as file:
    data = list(csv.reader(file))
data[:5]

[['',
  'year',
  'month',
  'intent',
  'police',
  'sex',
  'age',
  'race',
  'hispanic',
  'place',
  'education'],
 ['1',
  '2012',
  '01',
  'Suicide',
  '0',
  'M',
  '34',
  'Asian/Pacific Islander',
  '100',
  'Home',
  '4'],
 ['2', '2012', '01', 'Suicide', '0', 'F', '21', 'White', '100', 'Street', '3'],
 ['3',
  '2012',
  '01',
  'Suicide',
  '0',
  'M',
  '60',
  'White',
  '100',
  'Other specified',
  '4'],
 ['4', '2012', '02', 'Suicide', '0', 'M', '64', 'White', '100', 'Home', '4']]

第二步:

提取第一行data,并将其分配给变量headers。

删除第一行data。

显示headers。

显示第一5行data以验证是否正确删除了标题行。
headers = data[0]
data = data[1:]
print(headers)
print(data[:5])
['', 'year', 'month', 'intent', 'police', 'sex', 'age', 'race', 'hispanic', 'place', 'education']
[['1', '2012', '01', 'Suicide', '0', 'M', '34', 'Asian/Pacific Islander', '100', 'Home', '4'], ['2', '2012', '01', 'Suicide', '0', 'F', '21', 'White', '100', 'Street', '3'], ['3', '2012', '01', 'Suicide', '0', 'M', '60', 'White', '100', 'Other specified', '4'], ['4', '2012', '02', 'Suicide', '0', 'M', '64', 'White', '100', 'Home', '4'], ['5', '2012', '02', 'Suicide', '0', 'M', '31', 'White', '100', 'Other specified', '2']]

第三步:

使用列表推导从中提取year列data。

因为year列是数据中的第二列,您需要1在每行的索引中获取元素。

将结果分配给变量years。

创建一个空的字典year_counts。

循环遍历每个元素years。

如果元素不是键year_counts,创建它,并将值设置为1。

如果元素是键year_counts,则将值增加1。

显示year_counts每年发生多少枪死亡事件。

years = [row[1] for row in data]
year_counts = {}
for year in years:
    if year in year_counts:
        year_counts[year] += 1
    else:
        year_counts[year] = 1
year_counts
{'2012': 33563, '2013': 33636, '2014': 33599}

第四步:

使用list comprehension datetime.datetime为每行创建一个对象。将结果分配给dates。

year在每个行中的第二元件列。

该month柱是在每行中的第三个元素。

确保使用int()转换year和month整数。

通过year,month并day=1进入datetime.datetime()功能。

显示第一5行dates以验证一切正常。

计数每个唯一日期发生的次数dates。将结果分配给date_counts。

这跟我们在最后一个屏幕中做了类似的过程year_counts。

显示date_counts。

import datetime

dates = [datetime.datetime(year=int(row[1]), month=int(row[2]), day=1)  for row in data]
date_counts = {}
dates[:5]
  
for date in dates:
    if date in date_counts:
        date_counts[date] +=1
    else:
        date_counts[date] = 1
date_counts
{datetime.datetime(2012, 1, 1, 0, 0): 2758,
 datetime.datetime(2012, 2, 1, 0, 0): 2357,
 datetime.datetime(2012, 3, 1, 0, 0): 2743,
 datetime.datetime(2012, 4, 1, 0, 0): 2795,
 datetime.datetime(2012, 5, 1, 0, 0): 2999,
 datetime.datetime(2012, 6, 1, 0, 0): 2826,
 datetime.datetime(2012, 7, 1, 0, 0): 3026,
 datetime.datetime(2012, 8, 1, 0, 0): 2954,
 datetime.datetime(2012, 9, 1, 0, 0): 2852,
 datetime.datetime(2012, 10, 1, 0, 0): 2733,
 datetime.datetime(2012, 11, 1, 0, 0): 2729,
 datetime.datetime(2012, 12, 1, 0, 0): 2791,
 datetime.datetime(2013, 1, 1, 0, 0): 2864,
 datetime.datetime(2013, 2, 1, 0, 0): 2375,
 datetime.datetime(2013, 3, 1, 0, 0): 2862,
 datetime.datetime(2013, 4, 1, 0, 0): 2798,
 datetime.datetime(2013, 5, 1, 0, 0): 2806,
 datetime.datetime(2013, 6, 1, 0, 0): 2920,
 datetime.datetime(2013, 7, 1, 0, 0): 3079,
 datetime.datetime(2013, 8, 1, 0, 0): 2859,
 datetime.datetime(2013, 9, 1, 0, 0): 2742,
 datetime.datetime(2013, 10, 1, 0, 0): 2808,
 datetime.datetime(2013, 11, 1, 0, 0): 2758,
 datetime.datetime(2013, 12, 1, 0, 0): 2765,
 datetime.datetime(2014, 1, 1, 0, 0): 2651,
 datetime.datetime(2014, 2, 1, 0, 0): 2361,
 datetime.datetime(2014, 3, 1, 0, 0): 2684,
 datetime.datetime(2014, 4, 1, 0, 0): 2862,
 datetime.datetime(2014, 5, 1, 0, 0): 2864,
 datetime.datetime(2014, 6, 1, 0, 0): 2931,
 datetime.datetime(2014, 7, 1, 0, 0): 2884,
 datetime.datetime(2014, 8, 1, 0, 0): 2970,
 datetime.datetime(2014, 9, 1, 0, 0): 2914,
 datetime.datetime(2014, 10, 1, 0, 0): 2865,
 datetime.datetime(2014, 11, 1, 0, 0): 2756,
 datetime.datetime(2014, 12, 1, 0, 0): 2857}

第五步:

计数sex列中每个项目的次数。

将结果分配给sex_counts。

计数race列中每个项目的次数。

将结果分配给race_counts。

显示race_counts和sex_counts验证您的工作,并查看是否可以发现任何模式。

写一个降价细胞,详细说明你迄今为止学到的内容,你认为可能需要进一步检查。

sex_counts = {}
race_counts = {}
sexs = [row[5] for row in data[1:]]
races = [row[7] for row in data[1:]]
def count(items):
    item_counts = {}
    for item in items:
        if item in item_counts:
            item_counts[item] += 1
        else:
            item_counts[item] = 1
    return item_counts
sex_counts = count(sexs)
race_counts = count(races)

sex_counts
race_counts
{'Asian/Pacific Islander': 1326,
 'Black': 23296,
 'Hispanic': 9022,
 'Native American/Native Alaskan': 917,
 'White': 66237}

用到的知识点:

  1. 利用CSV模块导入CSV文件,将数据转化成数据列表
  2. 利用列表切片,删除表头
  3. 利用datetime模块,列表推导式,统计年份数量
  4. 统计性别和种族数量

第六步:

读入census.csv并转换为列表列表。将结果分配给census变量。

显示census以验证您的工作。
with open("census.csv") as file:
    census = list(csv.reader(file))
    

['Id', 'Year', 'Id', 'Sex', 'Id', 'Hispanic Origin', 'Id', 'Id2', 'Geography', 'Total', 'Race Alone - White', 'Race Alone - Hispanic', 'Race Alone - Black or African American', 'Race Alone - American Indian and Alaska Native', 'Race Alone - Asian', 'Race Alone - Native Hawaiian and Other Pacific Islander', 'Two or More Races']
['cen42010', 'April 1, 2010 Census', 'totsex', 'Both Sexes', 'tothisp', 'Total', '0100000US', '', 'United States', '308745538', '197318956', '44618105', '40250635', '3739506', '15159516', '674625', '6984195']

第七步:

手动创建一个字典,mapping将每个键映射race_counts到比赛的人口数census。

在字典中的键应该是Asian/Pacific Islander,Black,Native

American/Native Alaskan,Hispanic,和White。

在这种情况下Asian/Pacific Islander,您需要添加来自censusfor Race
Alone - Asian和... 的计数Race Alone - Native Hawaiian and Other Pacific Islander。

创建一个空字典,race_per_hundredk。

循环通过每个键race_counts。

将与键相关联的值除以与键race_counts相关联的值mapping。

通过乘法100000。

将结果分配给相同的键race_per_hundredk。

当你完成后,race_per_hundredk应该包含每个100000人种族种族枪支死亡率。

打印race_per_hundredk以验证您的工作。

mapping = {
    "Asian/Pacific Islander": 15159516 + 674625,
    "Native American/Native Alaskan": 3739506,
    "Black": 40250635,
    "Hispanic": 44618105,
    "White": 197318956
}

race_per_hundredk = {}
for item in race_counts:
    race_per_hundredk[item] = race_counts[item]/mapping[item]*100000

race_per_hundredk




{'Asian/Pacific Islander': 8.374309664161762,
 'Black': 57.8773477735196,
 'Hispanic': 20.220491210910907,
 'Native American/Native Alaskan': 24.521955573811088,
 'White': 33.56849303419181}

第八步:

intent使用列表解析提取列。该intent柱是在第四列中data。

将结果分配给intents。

race使用列表解析提取列。该race柱是在第八列data。

将结果分配给races。

创建一个空的字典 homicide_race_counts

使用该enumerate()功能循环遍历每个项目races。应将该位置分配给循环变量i,并将值分配给循环变量race。

检查在位置值i在intents。

如果在位置值i的intents是Homicide:

    如果密钥race不存在homicide_race_counts,创建它。
    
    添加1到相关联的价值race在homicide_race_counts。

完成后,homicide_race_counts应该为每个种族分类中的一个键data。相关的价值应该是该次种族的凶杀枪死亡人数。

执行我们在最后一个屏幕使用也做了同样的程序mapping上homicide_race_counts得到从原始数据到每个率100000。

显示homicide_race_counts以验证您的工作。

将你的发现写在一个降价单元格中。

使用降价单元格中的数据编写您要追求的任何后续步骤。

intents = [row[3] for row in data[1:]]

races = [row[7] for row in data[1:]]

homicide_race_counts = {}

for i, race in enumerate(races):
    if intents[i] == "Homicide":
        if race in homicide_race_counts:
            homicide_race_counts[race] += 1
        else:
            homicide_race_counts[race] = 1
homicide_race_counts
{'Asian/Pacific Islander': 559,
 'Black': 19510,
 'Hispanic': 5634,
 'Native American/Native Alaskan': 326,
 'White': 9147}
hm_race_per_hundredk = {}

for item in homicide_race_counts:
    hm_race_per_hundredk[item] = homicide_race_counts[item]/mapping[item]*100000

hm_race_per_hundredk   

{'Asian/Pacific Islander': 3.530346230970155,
 'Black': 48.471284987180944,
 'Hispanic': 12.627161104219914,
 'Native American/Native Alaskan': 8.717729026240365,
 'White': 4.6356417981453335}

1

  • 6
    点赞
  • 25
    评论
  • 26
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

<p style="font-size:16px;"> <span style="font-size:18px;"><span style="background-color:#FFFFFF;">Python 数据分析+pyecharts 可视化 + Flask Web端服务 + 2大真实项目 手把手实战教程.</span></span> </p> <p style="font-size:16px;"> Python数据分析课程以Python为核心工具,结合其工具包pyecharts+开发IDEA pycharm + web 框架Flask。课程以案例为中心,结合案例讲解让同学们更清晰的掌握每一个知识点的应用与工作流程。 </p> <p style="font-size:16px;"> <strong>2大项目案例: 重点讲解 开发架构 + 部署上线流程,手把手实战教学。 </strong> </p> <p style="font-size:16px;"> 1. 开发架构 </p> <p style="font-size:16px;"> (1)基于PyCharm + Flask + Echarts + Python+Pandas 组合进行数据分析全栈开发 </p> <p style="font-size:16px;"> (2)PyCharm: 项目开发的IDEA; </p> <p style="font-size:16px;"> (3)Flask:作为WEB框架,主要连接后端服务数据。主要演示: 前后端分离架构 + 模板直接渲染架构; </p> <p style="font-size:16px;"> (4)Echarts: 这里使用pyecharts 作为可视化数据展示; </p> <p style="font-size:16px;"> (5)Python: 作为后端数据生成的语言; </p> <p style="font-size:16px;"> (6)Pandas: 主要作为数据分析库; </p> <p style="font-size:16px;"> 2 部署线上服务案例 </p> <p style="font-size:16px;"> (1)资讯类项目-基于Flask 模板渲染 词云; </p> <p style="font-size:16px;"> (2)人口统计项目-基于Flask 前后端分离 Line 和 Bar 组合 数据统计; </p> <p style="font-size:16px;"> <strong>课程特色</strong> </p> <p style="font-size:16px;"> 课程风格通俗易懂 </p> <p style="font-size:16px;"> 案例内容持续更新 </p> <p style="font-size:16px;"> 简单易懂,接地气的案例 </p> <p style="font-size:16px;"> 有效,提供所有数据和代码 </p> <p style="font-size:16px;"> <img src="https://img-bss.csdn.net/201908291440447128.png" alt="" /> </p> <p style="font-size:16px;"> <br /> </p> <p style="font-size:16px;"> <br /> </p> <p style="font-size:16px;"> <br /> </p> <p style="font-size:16px;"> <img src="https://img-bss.csdn.net/201908291440543352.png" alt="" /> </p> <p style="font-size:16px;"> <br /> </p> <p style="font-size:16px;"> <br /> </p> <p style="font-size:16px;"> <img src="https://img-bss.csdn.net/201908291441085943.png" alt="" /> </p> <p style="font-size:16px;"> <br /> </p> <p style="font-size:16px;"> <br /> </p> <p style="font-size:16px;"> <img src="https://img-bss.csdn.net/201908291441198368.png" alt="" /> </p>
©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值