希望获得帮助以完成以下任务:
摘要
更多详细信息
我有一个数据集(raw_data),如下所示:
id timestamp key value
1 1576086899000 temperature 70
2 1576086899000 sleep 8
3 1576086899000 heartrate 65
4 1576086876000 temperature 72
5 1576086876000 sleep 7.5
6 1576086876000 heartrate 62
7 1576086866000 temperature 74
8 1576086866000 sleep 7.8
9 1576086866000 heartrate 64
我使用以下方法对其进行了旋转:
df = rawdata.pivot(index='timestamp', columns='key', values='value')
这使索引成为一个时间戳记值,并且每一列都是一个与之对应的键名。
因为每行并不总是包含每个键/值对的值,所以我为特定键创建了一个新的数据框,并删除了所有NaN值:
sleep_df = pd.DataFrame({'date': df.index, 'value': df.sleep}).dropna()
这仍将索引保留为列时间戳,但创建了一个重复的列,称为时间。然后,我将时间列的格式设置为年,月,日的值:
sleep_df['date]' = pd.to_datetime(sleep_df['date'], unit='ms').map(lambda x: x.strftime('%Y-%m-%d'))
因此,我为这些表中的每一个生成的数据集如下所示:
timestamp date sleep
1576086899000 2020-04-05 8
1576086876000 2020-04-04 7.5
1576086866000 2020-04-03 7.8
我的最终目标是:
timestamp
,因为它可以合并记录数据的时间戳相同的值。date
字段,并将所有值都转换为类型int
并针对日期进行了绘制。有更好的方法吗?感谢您预先提供的帮助,SO一直以来都是很好的学习工具。
答案 0 :(得分:0)
如果您的目标是绘制每个键的时间序列,则建议不要旋转,分离数据框并重新合并它们。我建议直接使用初始DataFrame,因为您可以绘制一个图,其中每条线代表一个特定的键,例如使用public class BrowsingTestFragment extends Fragment {
View rootView;
WebView myWebView;
Button start;
boolean startTesting;
String[] mStrings;
private int i = 0;
long last_page_start;
long now;
long exactTime;
TextView time1, time2, time3, time4, time5,weight1;
Handler handler;
Runnable webUpdater = null;
BrowsingTestFragment context;
public BrowsingTestFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_browsingtest, container, false);
myWebView = new WebView(getContext());
myWebView = rootView.findViewById(R.id.webview);
mStrings = new String[]{
"https://www.google.com",
"https://www.facebook.com",
"https://www.twitter.com",
"https://www.wikipedia.org",
"https://www.linkedin.com"
};
time1 = rootView.findViewById(R.id.textView);
time2 = rootView.findViewById(R.id.textView5);
time3 = rootView.findViewById(R.id.textView8);
time4 = rootView.findViewById(R.id.textView11);
time5 = rootView.findViewById(R.id.textView14);
weight1=rootView.findViewById(R.id.textView4);
start = rootView.findViewById(R.id.button);
startTesting = false;
myWebView.clearCache(true);
myWebView.clearHistory();
myWebView.setVisibility(View.INVISIBLE);
start.setVisibility(View.VISIBLE);
myWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
myWebView.getSettings().setSaveFormData(false);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
time1.setText(R.string.defaultString);
time2.setText(R.string.defaultString);
time3.setText(R.string.defaultString);
time4.setText(R.string.defaultString);
time5.setText(R.string.defaultString);
last_page_start = now = exactTime = 0;
myWebView.clearCache(true);
myWebView.clearHistory();
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.setHorizontalScrollBarEnabled(false);
myWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
myWebView.getSettings().setSaveFormData(false);
myWebView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
if (!startTesting) {
i = 0;
startTesting = true;
myWebView.setVisibility(View.VISIBLE);
start.setVisibility(View.INVISIBLE);
startLoadURLs();
} else {
startTesting = false;
myWebView.setVisibility(View.INVISIBLE);
start.setVisibility(View.VISIBLE);
}
}
});
myWebView.setWebChromeClient(new MyWebChromeClient(this));
myWebView.setWebViewClient(new WebViewClient() {
boolean redirect = false;
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Log.i("onPageStartedurl", "onPageStarted last_page_start" + last_page_start);
if (redirect == false)
last_page_start = System.nanoTime();
Log.i("onPageStartedurl", "onPageStarted last_page_start" + last_page_start);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
now = System.nanoTime();
Log.i("onPageFinishedurl", "onPageFinished now" + now);
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
Log.i("onReceivedErrorurl", "onReceivedError");
now = last_page_start;
}
});
return rootView;
}
private void startLoadURLs() {
MainActivity.mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
myWebView.loadUrl(mStrings[i]);
Log.i("mStringsurl", "mStrings" + mStrings[i]);
handler = new Handler();
webUpdater = new Runnable() {
@Override
public void run() {
exactTime = now - last_page_start;
Log.i("exactTimeurl", "exactTime" + exactTime);
double elapsedTimeInSecond = Math.round(((double) exactTime / 1000000000) * 100.0) / 100.0;
Log.i("elapsedTimeInSecondurl", "elapsedTimeInSecond" + elapsedTimeInSecond);
if (i == 0) {
time1.setText("" + elapsedTimeInSecond + " s");
} else if (i == 1) {
time2.setText("" + elapsedTimeInSecond + " s");
} else if (i == 2) {
time3.setText("" + elapsedTimeInSecond + " s");
} else if (i == 3) {
time4.setText("" + elapsedTimeInSecond + " s");
} else if (i == 4) {
time5.setText("" + elapsedTimeInSecond + " s");
}
++i;
if (i < mStrings.length) {
myWebView.clearCache(true);
myWebView.clearHistory();
myWebView.clearFormData();
myWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
myWebView.getSettings().setSaveFormData(false);
startLoadURLs();
} else {
handler.removeCallbacks(webUpdater);
startTesting = false;
myWebView.clearCache(true);
myWebView.clearHistory();
myWebView.clearFormData();
myWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
myWebView.getSettings().setSaveFormData(false);
myWebView.setVisibility(View.INVISIBLE);
start.setVisibility(View.VISIBLE);
MainActivity.mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
}
}
};
handler.postDelayed(webUpdater, 5000); // 5 seconds
}
private class MyWebChromeClient extends WebChromeClient {
public MyWebChromeClient(BrowsingTestFragment browsingTestFragment) {
super();
context = browsingTestFragment;
}
}
@Override
public void onStop() {
super.onStop();
try {
if (startTesting) {
handler.removeCallbacks(webUpdater);
startTesting = false;
myWebView.clearCache(true);
myWebView.clearHistory();
myWebView.clearFormData();
myWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
myWebView.getSettings().setSaveFormData(false);
myWebView.setVisibility(View.INVISIBLE);
start.setVisibility(View.VISIBLE);
MainActivity.mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
Toast.makeText(getContext(), "Testting is terminatted", Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
:
seaborn
不必通过import pandas as pd
import seaborn as sns
df = pd.DataFrame({"timestamp": pd.date_range("2020-04-20 00:00:00", periods=8, freq="D"),
"key": ["temperature", "sleep", "heartrate", "temperature", "sleep", "heartrate", "temperature", "sleep"],
"value": [70, 8, 65, 72, 7.5, 62, 74, 7.8]})
df["date"] = pd.to_datetime(df["timestamp"])
g = sns.relplot(x="date", y="value", hue="key", kind="line", data=df)
g.fig.autofmt_xdate()
进行索引。
希望对您有所帮助。