使用python进行CSV数据分析[关闭]
Posted
技术标签:
【中文标题】使用python进行CSV数据分析[关闭]【英文标题】:CSV data analysis with python [closed] 【发布时间】:2016-07-04 11:18:48 【问题描述】:我应该分析 csv 文件中的数据。我需要可视化和打印:
-
网站流量图(访问量最大)
访问每个网站的用户数
在网站上在线花费的时间
如何使用这些数据分别对 2014 年和 2015 年进行第一个(网站流量图):
address used_at
am.ru 2014 413071
2015 183402
auto.ru 2014 9122342
2015 6923367
avito.ru 2014 84503151
2015 87688571
avtomarket.ru 2014 106849
2015 95927
cars.mail.ru/sale 2014 211456
2015 167278
drom.ru 2014 11014955
2015 9704124
e1.ru 2014 28678357
2015 27961857
irr.ru/cars 2014 222193
2015 133678
【问题讨论】:
可以加Minimal, Complete, and Verifiable example吗? 假设你提供的数据在df
数据框:df.plot(kind='barh')
【参考方案1】:
我生成了示例输入数据(3 个网站,时间跨度:2 年,100.000 个条目),因为您没有提供它。
代码:
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv('avito_trend.csv', parse_dates=['ts'], usecols=['userid','site','ts','duration'])
print('Time spent online per web site')
print(df.groupby('site').agg('duration': 'sum'))
print('Time spent online per web site, per year')
print(df.groupby([df.ts.dt.year, 'site']).agg('duration': 'sum'))
# calculating stats
stats = df.groupby([df.ts.dt.year, 'site'], sort=True)['userid'] \
.count() \
.reset_index() \
.rename(columns='userid':'visits') \
stats = stats.set_index(stats.ts.astype(str) + ': ' + stats.site) \
.drop(['ts','site'], axis=1)
# plot part
fig = plt.figure(figsize=(16,9))
ax = fig.add_subplot(111)
title = 'site statistics (visitors)'
stats.plot(kind='barh', ax=ax, title=title, color=['grey'], legend=None)
[ax.annotate(str(visits), (stats.values.max()/2, i))
for i, visits in enumerate(stats['visits'].tolist())]
plt.show()
fig.savefig('stats.png',dpi=100,bbox='Tight')
输出:
Time spent online per web site
duration
site
aliexpress.com 16603827
avito.ru 16560223
rozetka.ua 16731197
Time spent online per web site, per year
duration
ts site
2014 aliexpress.com 8242863
avito.ru 8288967
rozetka.ua 8392353
2015 aliexpress.com 8360964
avito.ru 8271256
rozetka.ua 8338844
PS 请始终提供示例输入(5-10 行)和预期输出(基于示例数据)
【讨论】:
如果我需要分别打印2014年和2015年,我该怎么办?例如address used_at am.ru 2014 413071 2015 183402 auto.ru 2014 9122342 2015 6923367 avito.ru 2014 84503151 2015 87688571 avtomarket.ru 2014 106849 2015 95927
@ldevyataykina,您应该使用预期输出示例更新您的问题【参考方案2】:
如果您只想可视化和打印 csv 中的行,那么下面的代码应该可以工作。
table = []
with open('avito_trend.csv') as fin:
reader = csv.reader(fin)
for row in reader:
table.append(row)
print(table)
【讨论】:
【参考方案3】:您需要包含您使用的 csv 文件的外观,如果我不知道我在引用什么,将无济于事。
作为提示,您可以使用 pandas read_csv 方法,而完全不必使用 csv。
例如:infile=pd.read_csv("avito_trend.csv")
【讨论】:
我使用带有 498430 个字符串的 csv 文件。它们看起来都像 dc2829da4d79ad3f5549588471f0d534,"avito.ru",2014-11-26 22:35:08,132,7。 1 - 用户 ID; 2 - 网站; 3 - 访问数据; 4 - 网站在线时间,5 - 不重要 你在哪里卡住了?您提出一些重大问题,您应该启动一些代码,或者将项目分解为更易于管理的任务.. 我需要按访问年份分组。但我的日期格式为 2014-11-26 22:35:08,但我不知道我可以这样做以上是关于使用python进行CSV数据分析[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
在 python 中预测我的 .csv 数据的最佳方法 [关闭]
在 python 中使用 csv.DictReader 进行数据类型转换的最快方法