文章目录
1、数据集
本次实验用到的资料以及产出
ps:(木有了 o(╥﹏╥)o,又活了,这次是永久链接,不过希望先看一下README.md文档 )
链接:https://pan.baidu.com/s/1PaspMAYXs7YP2t5UTfyFUA?pwd=r78g
提取码:r78g
2、通过jupyter进行数据分析
安装jupyter
更新pip
pip install --upgrade pip
安装jupyter
pip install jupyter
启动jupyter终端服务
jupyter notebook
浏览器中打开:http://localhost:8088
新建terminal
点击new->Python 3
开始写代码
前期准备
导入必要的包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
导入数据集
df = pd.read_csv("file_name.csv")
查看数据前五行
df.head(5)
处理数据
检查行数和列数
df.shape
检查每个列的数据类型
df.dtypes
如果觉得哪个数据类型很奇怪可以进一步检测
type(df['column_name'][0])
将日期列从对象转换成日期时间(obj->datetime)
df['Date'] = pd.to_datetime(df['Date']) #Date是日期列名
检测修改结果
df.dtypes
检测是否有缺失值
df.info()
注意在Keywords,在10,000行中,只有7,528行包含Keywords列中的对象。这意味着大约有2500个缺失值。这意味着这些文章没有关键词。请记住这一点,因为在讨论数据分析时,我们需要包括这一点。
检测是否有重复数据
df.duplicated()
探索与可视化数据——Plotly
安装
pip install plotly
使用
导入必要包
from plotly.graph_objs import Scatter,Layout
import plotly
import plotly.offline as py
import numpy as np
import plotly.graph_objs as go
#setting offilne(设置为离线模式)
plotly.offline.init_notebook_mode(connected=True)
实例
饼图
导包
import plotly as py
import plotly.graph_objs as go
pyplt=py.offline.plot
获取数据
关于values的求法:
values=[0,0,0,0,0]
for i in df['最大生命']:
if i>9000:values[4]+=1
elif i>8000:values[3]+=1
elif i>7000:values[2]+=1
elif i>6000:values[1]+=1
else:values[0]+=1
绘图
labels=['5k~6k','6k~7k','7k~8k','8k~9k','9k~10k']
values=[28, 19, 12, 9, 1] #用遍历求出来,贴在下面了
trace=[go.Pie(
labels=labels,
values=values,
hole=0.7, #控制环形中心空白大小
hoverinfo='label+percent' #hoverinfo属性用于控制当用户将鼠标指针放到环形图上时,显示的内容
)]
layout=go.Layout(
title='英雄最高血量图',
)
fig=go.Figure(data=trace,layout=layout)
pyplt(fig,filename='环形饼图.html')
直方图
#绘制英雄-初始生命列
trace0 = go.Bar(
x = list(df['英雄']),
y = list(df['初始生命']),
name = 'initHP',
marker=dict(
color = 'rgb(236, 114, 89)'
)
)
#绘制英雄-初始物攻列
trace1 = go.Bar(
x = list(df['英雄']),
y = list(df['初始物攻']),
name = 'initAP',
marker=dict(
color = 'rgb(245, 245, 245)'
)
)
#整合整个数据
data = [trace0,trace1]
#不知道干什么用的,反正作为了下面的一个参数
layout=go.Layout(
title='英雄初始属性',
)
#生成了一个fig对象
fig=go.Figure(data=data,layout=layout)
#生成html文件
pyplt(fig,filename='英雄初始属性.html')
词云
#获取所有英雄名
str = ''.join(df['英雄'])
resultStr = ''
for i in str:
resultStr += i+' '
#将resultStr写入(可以不用)
'''
fo=open("heroName.txt","w")
fo.writelines(resultStr)
fo.close()
'''
#做词云操作
from wordcloud import WordCloud
from matplotlib import pyplot as plt
font = r'C:\Windows\Fonts\FZSTK.TTF'
wc = WordCloud(font_path=font, #如果是中文必须要添加这个,否则会显示成框框
background_color='white',
width=2000,
height=1000,
).generate(resultStr)
plt.imshow(wc) #用plt显示图片
plt.axis('off') #不显示坐标轴
plt.show() #显示图片
结果:
横着的直方图
maxValue = {}
#去除无法去最值的列
columns = [i for i in list(df.columns) if i not in ['英雄','攻击范围','主要定位','次要定位 ']]
#创建属性:(英雄名,最值)的字典
for i in columns:
maxValue[i] = (df['英雄'][list(df[i]).index(max(df[i]))],max(df[i]))
maxValueArr = []
for i in list(maxValue.values()):
maxValueArr.append(i[1])
#开始绘图
import plotly as py
import plotly.graph_objs as go
pyplt=py.offline.plot
data=[go.Bar(
x=maxValueArr,
y=list(maxValue.keys()),
orientation= 'h')]
layout=go.Layout(
title= '稀有金属期货持仓量对比图'
)
figure= go.Figure(data = data, layout =layout)
pyplt(figure, filename='tmp/1.html')#必须要先有tmp文件夹才可以
世界地图
参考文献
- https://www.cnblogs.com/zxfei/p/12255207.html
- https://www.freesion.com/article/9050642350/
- https://pyecharts.org/#/
- https://www.jb51.net/article/183455.htm